You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
whellvalue/src/tpMain/WheelCtrl.cpp

321 lines
7.5 KiB
C++

5 years ago
#include "WheelCtrl.h"
#include "ChannelInfo.h"
#include "ModelManager.h"
#include "DetectState.h"
#include "Result2Ui.h"
#include "InfoFile.h"
#include <QFile>
#include "WheelNet.h"
#include "timemgrctrl.h"
#include "QDebug"
#include "CamConfig.h"
#include "QThread"
#include "qsaveresult.h"
#include "QLibrary"
#include "databasesql.h"
#include "DetectDataDB.h"
#include "ComConfig.h"
#include "HubBase.h"
#pragma execution_character_set("utf-8")
#define _QSQLITE_WHEELHUBWF_NAME "wheelhubwf.db"
WheelCtrl::WheelCtrl(QString strPath, QMySplashScreen* pScreen)
: m_strPath(strPath)
{
qRegisterMetaType<Result2Ui*>("Result2Ui*");
QString strChannelPath = strPath + "\\user\\channels.json.dat";
hubBase::mkdir(strPath + "\\user\\");
ShowInitMsg(pScreen, tr("加载通道模块 ...."));
m_pChannel = new CChannelInfo(strChannelPath, pScreen);
ShowInitMsg(pScreen, tr("加载模板库 ...."));
m_pModelMgr = new ModelManager(strPath);
m_pModelMgr->init();
ShowInitMsg(pScreen, tr("加载检测设置模块 ...."));
DetectState::instance()->init(strPath);
QString strDbPath = strPath + "\\" + _QSQLITE_WHEELHUBWF_NAME;
ShowInitMsg(pScreen, tr("加载数据库 ...."));
m_db = new DetectDataDB(strDbPath);
((DetectDataDB*)m_db)->InitDatabase();
ShowInitMsg(pScreen, tr("加载班次管理模块 ...."));
m_pTimeMgr = new TimeMgrCtrl((DetectDataDB*)m_db);
m_pNet = new CWheelNet(strPath);
ShowInitMsg(pScreen, tr("加载其他模块 ...."));
m_pCamConfig = new CamConfig(strPath);
m_pComConfig = new ComConfig(m_strPath);
ShowInitMsg(pScreen, tr("创建子线程 ...."));
saveResultThread = new QThread(this);
QSaveResult *pSaveResult = new QSaveResult;
pSaveResult->setDBPtr((DetectDataDB*)m_db, m_pChannel);
pSaveResult->moveToThread(saveResultThread);
pSaveResult->setAppRootPath(strPath);
ShowInitMsg(pScreen, tr("加载光栅通讯模块 ...."));
qDebug() << "loadLibRasterSDG20";
loadLibRasterSDG20(strPath);
qDebug() << "loadLibRasterSDG20 end";
connect(saveResultThread, &QThread::finished, pSaveResult, &QObject::deleteLater);
connect(this, SIGNAL(operate(Result2Ui*)), pSaveResult, SLOT(doWork(Result2Ui*)),Qt::QueuedConnection);
connect(pSaveResult, SIGNAL(resultReady(Result2Ui *)), this, SLOT(handleResult(Result2Ui *)));
//connect(saveResultThread, SIGNAL(started()), pSaveResult, SLOT(doTest()));
saveResultThread->start();
qDebug() << "start thread saveResultThread";
ShowInitMsg(pScreen, tr("模块加载完成,启动线程 ...."));
}
WheelCtrl::~WheelCtrl()
{
delete m_pChannel;
delete m_pModelMgr;
delete m_db;
delete m_pComConfig;
delete m_pCamConfig;
m_db = NULL;
delete m_pTimeMgr;
delete m_pNet;
m_pNet = NULL;
m_pTimeMgr = NULL;
m_pChannel = NULL;
m_pModelMgr = NULL;
m_pComConfig = NULL;
m_pCamConfig = NULL;
if (saveResultThread){
qDebug() << "delete saveResultThread";
if (saveResultThread->isRunning())
{
saveResultThread->quit();
}
saveResultThread->wait(50);
delete saveResultThread;
saveResultThread = NULL;
qDebug() << "delete saveResultThread end";
}
if (m_pRasterSDG20){
delete m_pRasterSDG20;
m_pRasterSDG20 = NULL;
}
}
void WheelCtrl::loadLibRasterSDG20(QString strPath)
{
#ifdef _DEBUG
QLibrary lib("RasterSDG20d");
#else
QLibrary lib("RasterSDG20");
#endif
if (lib.load()){
_RasterSDG20Create func = (_RasterSDG20Create)lib.resolve("RasterSDG20Create");
m_pRasterSDG20 = func(strPath + "\\raster.json");
GetDiaParaFunc getfunc = std::bind(&WheelCtrl::getDiaParam, this);
m_pRasterSDG20->setGetDiaParaFunc(getfunc);
SetDiaParaFunc setfunc = std::bind(&WheelCtrl::setDiaParam, this, std::placeholders::_1);
m_pRasterSDG20->setSetDiaParaFunc(setfunc);
m_pRasterSDG20->onStartSampling();
}
}
ModelManager * WheelCtrl::getModelMgr() const
{
return m_pModelMgr;
}
CChannelInfo * WheelCtrl::getChannelInfo() const
{
return m_pChannel;
}
QString WheelCtrl::getThicknessStr() const
{
if (m_pRasterSDG20)
return m_pRasterSDG20->getThicknessValueStr();
else
return QString();
}
double WheelCtrl::getThickness() const
{
if (m_pRasterSDG20)
return m_pRasterSDG20->getThicknessValue();
else
return 0;
}
void WheelCtrl::appendThicknessValue(double nValue)
{
if (m_pRasterSDG20)
m_pRasterSDG20->addThicknessValue(nValue);
}
QString WheelCtrl::appRoot() const
{
return m_strPath;
}
void WheelCtrl::addLog(QString msg, int nType)
{
WarnMessage m_warning;
m_warning.m_Date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
m_warning.m_Message = msg;
m_warning.m_class = QString::number(nType);
if (m_db)
m_db->AddOneWarningMessage(m_warning);
}
void WheelCtrl::saveResult(Result2Ui *m_Res)
{
Result2Ui* pRes = new Result2Ui();
*pRes = *m_Res;
emit(operate(pRes));//启动线程保存检测结果
}
DataBaseSql *WheelCtrl::getDB() const
{
return m_db;
}
TimeMgrCtrl * WheelCtrl::getTimeMgr() const
{
return m_pTimeMgr;
}
bool WheelCtrl::onStart()
{
/*把检测的库信息按照对应的序号插入map中并发送至PLC*/
m_pNet->sendLight(1, 3, 1000, 500);//黄灯
m_pNet->sendLight(0, 3, 1000, 500);//红灯
m_pNet->sendLight(2, 3, 1000, 500);//绿灯
//m_pNet->sendLight(3, 3, 1000, 500);//蜂鸣
return true;
}
bool WheelCtrl::onFinish()
{
m_pNet->sendLight(2, 2, 1000, 400);
m_pNet->sendLight(0, 2, 1000, 400);
m_pNet->sendLight(1, 2, 1000, 400);
//m_pNet->sendLight(3, 3, 1000, 400);//蜂鸣
return true;
}
/*统计清零*/
bool WheelCtrl::onClear()
{
DetectState::instance()->totalDetectNum = 0;
DetectState::instance()->totalUnDetectNum = 0;
getModelMgr()->ClearAllCount();
return true;
}
IWheelModel * WheelCtrl::getModel(QString str)
{
return m_pModelMgr->getModel(str);
}
QMap<QString, IWheelModel*>* WheelCtrl::getAllModelMapPtr()
{
return m_pModelMgr->getAllModelMapPtr();
}
QString WheelCtrl::getUserName() const
{
// QString name, lev;
// m_pCallBack->IGetUserInfo(name, lev);
// if (name.isEmpty()) {
// return "无用户";
// }
if (m_currentUserName.isEmpty())
return tr("未登录");
return m_currentUserName;
}
int WheelCtrl::getUserLevel() const
{
// QString name, lev;
// m_pCallBack->IGetUserInfo(name, lev);
// int nLevel = lev.toInt();
// if (nLevel < 0 || name.isEmpty() || nLevel > 9) {
// nLevel = 9;
// }
return m_level;
}
void WheelCtrl::setUser(QString strName, int nlevel)
{
m_currentUserName = strName;
m_level = nlevel;
}
QString WheelCtrl::getCurrentBan() const
{
if (m_pTimeMgr)
return m_pTimeMgr->GetCurrentBan();
else
return QString();
}
bool WheelCtrl::sendModelLib()
{
if (m_pNet)
m_pNet->sendClearLib();
return true;
}
CamConfig * WheelCtrl::getCamConfig() const
{
return m_pCamConfig;
}
Q_SLOT void WheelCtrl::handleResult(Result2Ui *pResult)
{
delete pResult;
pResult = NULL;
qDebug() << "end thread save Result to DataBase";
}
bool WheelCtrl::onShowRaster(QWidget* parent)
{
if (m_pRasterSDG20){
m_pRasterSDG20->onShowWidget(parent);
return true;
}
return false;
}
QStringList WheelCtrl::getAllModelName()
{
return m_pModelMgr->getAllModelName();
}
QStringList WheelCtrl::getAllTrainModelName()
{
return m_pModelMgr->getAllTrainModelName();
}
QMap<QString, TimeStruct>* WheelCtrl::getAllTimePtr() const
{
return m_pTimeMgr->getAllTimePtr();
}
ComConfig * WheelCtrl::getComConfig() const
{
return m_pComConfig;
}
void WheelCtrl::ShowInitMsg(QMySplashScreen* p, QString str){
if (p){
p->ShowMsg(str);
}
}
void WheelCtrl::setDiaParam(Dia2ThPara st)
{
DetectState::instance()->setDia2ThPara(st.mk_, st.mb_);
DetectState::instance()->save();
}
Dia2ThPara WheelCtrl::getDiaParam()
{
Dia2ThPara st;
DetectState::instance()->getDia2ThPara(st.mk_, st.mb_);
return st;
}