From 7319aa8468e689ae962eeed00103774ba97978e0 Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Fri, 15 Oct 2021 17:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E4=B8=B2=E5=8F=A3=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- runner17/SerialPortTool.dll | Bin 0 -> 50688 bytes runner17/SerialPortToold.dll | Bin 0 -> 164864 bytes tpvs17/lpMain/CMainWin.cpp | 214 ++++++++++++++++++------------- tpvs17/lpMain/CMainWin.h | 1 + tpvs17/lpMain/lpGlobalConfig.cpp | 21 +++ tpvs17/lpMain/lpGlobalConfig.h | 9 ++ 6 files changed, 158 insertions(+), 87 deletions(-) create mode 100644 runner17/SerialPortTool.dll create mode 100644 runner17/SerialPortToold.dll diff --git a/runner17/SerialPortTool.dll b/runner17/SerialPortTool.dll new file mode 100644 index 0000000000000000000000000000000000000000..a79bacbbfa0e507048116207f858f306faaae302 GIT binary patch literal 50688 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 H#r6LHv1IK$ literal 0 HcmV?d00001 diff --git a/runner17/SerialPortToold.dll b/runner17/SerialPortToold.dll new file mode 100644 index 0000000000000000000000000000000000000000..437c6c0e5916342a477a69f8a1b3a0bc71acfb30 GIT binary patch literal 164864 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 literal 0 HcmV?d00001 diff --git a/tpvs17/lpMain/CMainWin.cpp b/tpvs17/lpMain/CMainWin.cpp index f5af7b8..e0a9561 100644 --- a/tpvs17/lpMain/CMainWin.cpp +++ b/tpvs17/lpMain/CMainWin.cpp @@ -206,20 +206,11 @@ void CMainWin::INewCameraImage(const QString& camKey, QImage img) AlgResultCallBack func = std::bind(&CMainWin::IEngineResult, this, std::placeholders::_1); m_pDetectorEngine->detectByName(srcMat, solutionName, strMode, func); } - } //算法结果接收 void CMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap) { -// return; -// QImage srcImg = vMap.value("srcImage").value(); -// cv::Mat srcMat = QImageToMat(srcImg); -// QString strMode;// = pResult->m_strModel; -// AlgResultCallBack func = std::bind(&CMainWin::IEngineResult, this, std::placeholders::_1); -// m_pDetectorEngine->detect(srcMat, strMode, func); - - /* QVariantMap mMap = vMap.value("algoRlt").toMap(); IStation *pStation = m_pWfCtrl->IGetStationByKey(camKey); @@ -282,10 +273,6 @@ void CMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap) QVariant CMainWin::IGetVariantById(int id) { -// IStation *pStation = m_pWfCtrl->IGetStationById(id); -// if (pStation) { -// return pStation->getVariant(); -// } return QVariant(); } @@ -328,13 +315,13 @@ QString CMainWin::genSavePath(QString modelName, QImage &img) Q_SLOT void CMainWin::onAppanalysis(SComFrame frame) { //数据接收 -/* int nCmd = frame.cmd; - if (0x43 == nCmd) + int nCmd = frame.cmd; + if (0x43 == nCmd)//心跳 型号切换 { onHeartComm(frame); return; } - else if (0x50 == nCmd) { + else if (0x50 == nCmd) {//触发相机 int nCameraID = -1; if (5 == frame.data1) { nCameraID = 1; @@ -343,28 +330,20 @@ Q_SLOT void CMainWin::onAppanalysis(SComFrame frame) nCameraID = 2; } - if (!m_pWfCtrl) { - qDebug() << "CommAchieved m_pWfCtrl is null"; - return; - } - IStation *pStation = m_pWfCtrl->IGetStationById(nCameraID); - if (!pStation) { - return; - } - if (m_pWfCtrl->IOnlineMode() == true) + if (lpGlobalConfig::instance()->m_bOnlineMode == true)//是PLC控制台切换型号模式 进入型号判断 { if (nCameraID == 1) { if (m_StationInfo_1.m_bRunEnable == true) { - pStation->trigImage(); + QString strCam = lpGlobalConfig::instance()->m_StationCamKey_1; + m_pCoreCtrl->ISnapImage(QStringList() << strCam); } else { QString strMsg = QString("%1:该型号ID:%2在模型库中不存在,不能拍照!!!").arg(QTime::currentTime().toString("hh:mm:ss zzz:")).arg(m_StationInfo_1.m_PLCID); emit sgShowLog(1, strMsg); if (m_StationInfo_1.m_PLCID > 0) { - pStation->setSerialPortPtr(m_pSerialPort); - pStation->sendResult(999); + sendResult(1, 999, 0, 0); SYSLOG_STATUS << QString("●工位%1:收到触发信号,因索引不合法所以没触发相机拍照,发送了999角度数据,型号为[%2],型号索引ID为[%3],时间:%4") .arg(nCameraID) .arg(m_StationInfo_1.strModelName.isEmpty() == true ? "空" : m_StationInfo_1.strModelName) @@ -384,15 +363,15 @@ Q_SLOT void CMainWin::onAppanalysis(SComFrame frame) { if (m_StationInfo_2.m_bRunEnable == true) { - pStation->trigImage(); + QString strCam = lpGlobalConfig::instance()->m_StationCamKey_2; + m_pCoreCtrl->ISnapImage(QStringList() << strCam); } else { QString strMsg = QString("%1:该型号ID:%2在模型库中不存在,不能拍照!!!").arg(QTime::currentTime().toString("hh:mm:ss zzz:")).arg(m_StationInfo_2.m_PLCID); emit sgShowLog(2, strMsg); if (m_StationInfo_2.m_PLCID > 0) { - pStation->setSerialPortPtr(m_pSerialPort); - pStation->sendResult(999); + sendResult(2, 999, 0, 0); SYSLOG_STATUS << QString("●工位%1:收到触发信号,因索引不合法所以没触发相机拍照,发送了999角度数据,型号为[%2],型号索引ID为[%3],时间:%4") .arg(nCameraID) .arg(m_StationInfo_2.strModelName.isEmpty() == true ? "空" : m_StationInfo_2.strModelName) @@ -410,19 +389,29 @@ Q_SLOT void CMainWin::onAppanalysis(SComFrame frame) } } } - else - pStation->trigImage(); + else//不是PLC切换型号模式 可以触发拍照 + { + if (nCameraID == 1) + { + QString strCam = lpGlobalConfig::instance()->m_StationCamKey_1; + m_pCoreCtrl->ISnapImage(QStringList() << strCam); + } + else if (nCameraID == 2) + { + QString strCam = lpGlobalConfig::instance()->m_StationCamKey_2; + m_pCoreCtrl->ISnapImage(QStringList() << strCam); + } + } } else if (0xf1 == nCmd) {//接收到下位机的命令关闭所有窗口 关机 qApp->closeAllWindows(); - //shutDown(); - }*/ + } } void CMainWin::onHeartComm(SComFrame &frame) { -/* static int nS1 = -1; + static int nS1 = -1; static int nS2 = -1; if (m_pWfCtrl) @@ -430,7 +419,7 @@ void CMainWin::onHeartComm(SComFrame &frame) else return; - if (m_pWfCtrl->IOnlineMode() == true) + if (lpGlobalConfig::instance()->m_bOnlineMode == true) { int nSta1 = frame.data1; int nSta2 = frame.data2; @@ -449,76 +438,42 @@ void CMainWin::onHeartComm(SComFrame &frame) if (!pStation) { continue; } - int nId = pStation->stationId(); - if (nId <= 0 || nId > 8) { - //error - qWarning() << "error, id is beyong"; - continue; - } int mmCmd = 0; - if (nId == 1) - mmCmd = frame.data1; - if (nId == 2) - mmCmd = frame.data2; - if (nId == 3) - mmCmd = frame.data3; - if (nId == 4) - mmCmd = frame.data4; - if (nId == 5) - mmCmd = frame.data5; - if (nId == 6) - mmCmd = frame.data6; - if (nId == 7) - mmCmd = frame.data7; - if (nId == 8) - mmCmd = frame.data8; - QString strModel = pStation->modelByPlcCmd(mmCmd); - if (!strModel.isEmpty()) + if (var == lpGlobalConfig::instance()->m_StationSolution_1) { - emit(sgSelModel(nId, strModel)); - if (nId == 1) + mmCmd = frame.data1; + QString strModel = pStation->modelByPlcCmd(mmCmd); + if (!strModel.isEmpty()) { if (m_StationInfo_1.m_PLCID != mmCmd) { m_StationInfo_1.m_PLCID = mmCmd; m_StationInfo_1.strModelName = strModel; SYSLOG_STATUS << QString("★工位%1:切换型号为[%2],型号索引ID为[%3],时间:%4") - .arg(nId) + .arg(1) .arg(strModel) .arg(mmCmd) .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); + + if (m_pWfCtrl) { + m_pWfCtrl->ISelModel(var, strModel); + } } m_StationInfo_1.m_bRunEnable = true; } - else if (nId == 2) - { - if (m_StationInfo_2.m_PLCID != mmCmd) { - m_StationInfo_2.m_PLCID = mmCmd; - m_StationInfo_2.strModelName = strModel; - SYSLOG_STATUS << QString("★工位%1:切换型号为[%2],型号索引ID为[%3],时间:%4") - .arg(nId) - .arg(strModel) - .arg(mmCmd) - .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); - } - m_StationInfo_2.m_bRunEnable = true; - } - } - else { - if (nId == 1) - { + else { if (m_StationInfo_1.m_PLCID != mmCmd) { m_StationInfo_1.m_PLCID = mmCmd; m_StationInfo_1.strModelName = strModel; if (mmCmd <= 0) SYSLOG_STATUS << QString("★工位%1:型号清零,型号索引ID为[%2],时间:%3") - .arg(nId) + .arg(1) .arg(mmCmd) .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); else SYSLOG_STATUS << QString("★工位%1:型号切换失败,对应的索引不存在,型号索引ID为[%2],时间:%3") - .arg(nId) + .arg(1) .arg(mmCmd) .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); } @@ -530,19 +485,39 @@ void CMainWin::onHeartComm(SComFrame &frame) emit sgShowLog(1, strMsg); } } - else if (nId == 2) + } + else if (var == lpGlobalConfig::instance()->m_StationSolution_2) + { + mmCmd = frame.data2; + QString strModel = pStation->modelByPlcCmd(mmCmd); + if (!strModel.isEmpty()) { + if (m_StationInfo_2.m_PLCID != mmCmd) { + m_StationInfo_2.m_PLCID = mmCmd; + m_StationInfo_2.strModelName = strModel; + SYSLOG_STATUS << QString("★工位%1:切换型号为[%2],型号索引ID为[%3],时间:%4") + .arg(2) + .arg(strModel) + .arg(mmCmd) + .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); + if (m_pWfCtrl) { + m_pWfCtrl->ISelModel(var, strModel); + } + } + m_StationInfo_2.m_bRunEnable = true; + } + else { if (m_StationInfo_2.m_PLCID != mmCmd) { m_StationInfo_2.m_PLCID = mmCmd; m_StationInfo_2.strModelName = strModel; if (mmCmd <= 0) SYSLOG_STATUS << QString("★工位%1:型号清零,型号索引ID为[%2],时间:%3") - .arg(nId) + .arg(2) .arg(mmCmd) .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); else SYSLOG_STATUS << QString("★工位%1:型号切换失败,对应的索引不存在,型号索引ID为[%2],时间:%3") - .arg(nId) + .arg(2) .arg(mmCmd) .arg(QDateTime::currentDateTime().toString("hh:mm:ss zzz")); } @@ -555,7 +530,7 @@ void CMainWin::onHeartComm(SComFrame &frame) } } } - }*/ + } } Q_SLOT void CMainWin::onHeardBit() @@ -1317,6 +1292,19 @@ void CMainWin::IEngineResult(QVariantMap vMap) QPointF centerPoint = algResult.value("centerPoint").toPointF(); QString taskName = vMap.value("taskName").toString(); double taskTime = vMap.value("tasktime").toDouble(); + + if (solutionName == lpGlobalConfig::instance()->m_StationSolution_1) + { + double centerX = centerPoint.x() * lpGlobalConfig::instance()->m_StationScale_1 + lpGlobalConfig::instance()->m_StationXOffset_1; + double centerY = centerPoint.y() * lpGlobalConfig::instance()->m_StationScale_1 + lpGlobalConfig::instance()->m_StationYOffset_1; + sendResult(1,dAngle, centerX, centerY); + } + else if (solutionName == lpGlobalConfig::instance()->m_StationSolution_2) + { + double centerX = centerPoint.x() * lpGlobalConfig::instance()->m_StationScale_2 + lpGlobalConfig::instance()->m_StationXOffset_2; + double centerY = centerPoint.y() * lpGlobalConfig::instance()->m_StationScale_2 + lpGlobalConfig::instance()->m_StationYOffset_2; + sendResult(2, dAngle, centerX, centerY); + } // ui.main_label_angle->setText(QString("%1").arg(dAngle)); // // ValueResult valueRlt; @@ -1370,6 +1358,58 @@ void CMainWin::IEngineResult(QVariantMap vMap) } onShowImage(stationID, maskImg); } +} +bool CMainWin::sendResult(int nID, double angleValue, double centerX, double centerY) +{ + if (m_pSerialPort) + { + const int c_nDataNum = 8; + const double c_dMaxAngle = 360.0; + if (angleValue < 0) { + angleValue += c_dMaxAngle; + } + + unsigned short data[c_nDataNum] = { 0 }; + data[2] = int(angleValue); + double tmp = angleValue - int(angleValue); + tmp *= 1000.0; + data[3] = int(tmp); + SComFrame sendFram; + int nCmd = (nID == 1 ? 0x46 : 0x47);//stion1 0x46 /station2 0x47 + sendFram.cmd = nCmd; + sendFram.data1 = data[0]; + sendFram.data2 = data[1]; + sendFram.data3 = data[2]; + sendFram.data4 = data[3]; + sendFram.data5 = data[4]; + sendFram.data6 = data[5]; + sendFram.data7 = data[6]; + sendFram.data8 = data[7]; + m_pSerialPort->enquequeData(sendFram); + + if (angleValue >= c_dMaxAngle) { + unsigned short data2[c_nDataNum] = { 0 }; + data2[0] = 6 + nID - 1; + data2[1] = 50; + // for (int i = 0; i < c_nDataNum; i++) { + // swapBigEndian(data2[i]); + // } + SComFrame sendFram2; + sendFram2.cmd = 0x48; + sendFram2.data1 = data2[0]; + sendFram2.data2 = data2[1]; + sendFram2.data3 = data2[2]; + sendFram2.data4 = data2[3]; + sendFram2.data5 = data2[4]; + sendFram2.data6 = data2[5]; + sendFram2.data7 = data2[6]; + sendFram2.data8 = data2[7]; + m_pSerialPort->enquequeData(sendFram2); + } + } + return true; } + + diff --git a/tpvs17/lpMain/CMainWin.h b/tpvs17/lpMain/CMainWin.h index d333e80..41219b6 100644 --- a/tpvs17/lpMain/CMainWin.h +++ b/tpvs17/lpMain/CMainWin.h @@ -43,6 +43,7 @@ public: QVariant IGetVariantById(int id); //Engine㷨ص void IEngineResult(QVariantMap vMap); + bool sendResult(int nID, double angleValue, double centerX, double centerY); public: Q_SLOT void onAppanalysis(SComFrame frame); void onHeartComm(SComFrame &frame); diff --git a/tpvs17/lpMain/lpGlobalConfig.cpp b/tpvs17/lpMain/lpGlobalConfig.cpp index 72858ca..247b80b 100644 --- a/tpvs17/lpMain/lpGlobalConfig.cpp +++ b/tpvs17/lpMain/lpGlobalConfig.cpp @@ -37,6 +37,16 @@ void lpGlobalConfig::readConfig() m_StationSolution_2 = strSolution2; m_StationRunModel_1 = strRunModel1; m_StationRunModel_2 = strRunModel2; + + m_bOnlineMode = rootObj.value("onlineMode").toBool(false); + + m_StationScale_1 = rootObj.value("StationScale_1").toDouble(1.0); + m_StationXOffset_1 = rootObj.value("StationXOffset_1").toDouble(0.0); + m_StationYOffset_1 = rootObj.value("StationYOffset_1").toDouble(0.0); + + m_StationScale_2 = rootObj.value("StationScale_2").toDouble(1.0); + m_StationXOffset_2 = rootObj.value("StationXOffset_2").toDouble(0.0); + m_StationYOffset_2 = rootObj.value("StationYOffset_2").toDouble(0.0); } } file.close(); @@ -55,6 +65,17 @@ void lpGlobalConfig::writeConfig() rootObj.insert("station_solution_2", m_StationSolution_2); rootObj.insert("station_runModel_1", m_StationRunModel_1); rootObj.insert("station_runModel_2", m_StationRunModel_2); + + rootObj.insert("onlineMode", m_bOnlineMode); + + rootObj.insert("StationScale_1",m_StationScale_1); + rootObj.insert("StationXOffset_1",m_StationXOffset_1); + rootObj.insert("StationYOffset_1",m_StationYOffset_1); + + rootObj.insert("StationScale_2",m_StationScale_2); + rootObj.insert("StationXOffset_2",m_StationXOffset_2); + rootObj.insert("StationYOffset_2",m_StationYOffset_2); + QJsonDocument doc(rootObj); QByteArray writeData = doc.toJson(); file.write(writeData); diff --git a/tpvs17/lpMain/lpGlobalConfig.h b/tpvs17/lpMain/lpGlobalConfig.h index 894bdc3..0b82784 100644 --- a/tpvs17/lpMain/lpGlobalConfig.h +++ b/tpvs17/lpMain/lpGlobalConfig.h @@ -24,6 +24,15 @@ public: QString m_StationRunModel_1; QString m_StationRunModel_2; + double m_StationScale_1{ 1.0 }; + double m_StationXOffset_1{ 0.0 }; + double m_StationYOffset_1{ 0.0 }; + + double m_StationScale_2{ 1.0 }; + double m_StationXOffset_2{ 0.0 }; + double m_StationYOffset_2{ 0.0 }; + + bool m_bOnlineMode{ false };//ģʽ QString m_rootPath; };