diff --git a/doc/轮毂识别定位一体与PLC通讯协议.docx b/doc/轮毂识别定位一体与PLC通讯协议.docx index 965bffa..635f24c 100644 Binary files a/doc/轮毂识别定位一体与PLC通讯协议.docx and b/doc/轮毂识别定位一体与PLC通讯协议.docx differ diff --git a/tpvs17/tpMain/QPLCDevice.h b/tpvs17/tpMain/QPLCDevice.h index 05f06a3..21cae87 100644 --- a/tpvs17/tpMain/QPLCDevice.h +++ b/tpvs17/tpMain/QPLCDevice.h @@ -6,6 +6,7 @@ #include #include "lpThread.h" #include "Result2Ui.h" +/*PLC豸ͨѶ*/ class QPLCDevice : public QObject { Q_OBJECT @@ -36,7 +37,6 @@ signals: void sgRecvDataCallBack(QByteArray); private: lptkRawTcpServer *m_rawTcpServer{ nullptr }; -private: QMutex mMtLock; QByteArray m_recvData; lpThread *m_pTask{ nullptr }; diff --git a/tpvs17/valueMainUI/lpConfig.cpp b/tpvs17/valueMainUI/lpConfig.cpp index 44a6ca6..bdad682 100644 --- a/tpvs17/valueMainUI/lpConfig.cpp +++ b/tpvs17/valueMainUI/lpConfig.cpp @@ -1,5 +1,6 @@ #include "lpConfig.h" #include +/*ϵͳ */ lpConfig::lpConfig() { diff --git a/tpvs17/valueMainUI/lpConfig.h b/tpvs17/valueMainUI/lpConfig.h index 6dde2a5..a27f2e2 100644 --- a/tpvs17/valueMainUI/lpConfig.h +++ b/tpvs17/valueMainUI/lpConfig.h @@ -14,12 +14,12 @@ public: void loadConfig(); public: - int portA{ 10110 };//A๤λwebsocket - int portB{ 10112 }; - QString appPathA; - QString appPathB; + int portA{ 10110 };//Aϵͳ tcp˿ ڱϵͳtcpclientӺͨѶ + int portB{ 10112 };//Bϵͳ tcp˿ + QString appPathA;//Aϵͳ· · + QString appPathB;//Bϵͳ· · bool doubleStation{ true };//true ˫λ ; false λ - int plcServerPort{ 1000 }; + int plcServerPort{ 1000 };//PLCͨѶ tcp˿ }; #endif \ No newline at end of file diff --git a/tpvs17/valueMainUI/valueMainUI.cpp b/tpvs17/valueMainUI/valueMainUI.cpp index 981185e..d39c23e 100644 --- a/tpvs17/valueMainUI/valueMainUI.cpp +++ b/tpvs17/valueMainUI/valueMainUI.cpp @@ -17,12 +17,13 @@ valueMainUI::valueMainUI(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); - setupTrayIcon(); + setupTrayIcon();//后台任务栏初始化 setWindowIcon(QIcon(WINDOWICON)); setWindowTitle(tr("识别定位一体检测系统")); lpGlobalData::instance(); + lpConfig::instance()->loadConfig(); - + //状态栏信息展示初始化 两个后台检测程序的通讯状态展示 m_pLabelA = new QLabel(this); m_pLabelB = new QLabel(this); m_pLabelPLC = new QLabel(this); @@ -51,48 +52,35 @@ valueMainUI::valueMainUI(QWidget *parent) ui.statusBar->addPermanentWidget(m_pLabelSystem, 50); m_pLabelA->setText(""); m_pLabelB->setText(""); + + //检测结果图展示 UI初始化 { - QGridLayout *pLayout_A = new QGridLayout(ui.widget_A); + QGridLayout *pLayout_A = new QGridLayout(ui.widget_A);//A侧相机结果图展示UI m_ImgViewer_A = new RoiImgViewer(ui.widget_A); m_ImgViewer_A->setObjectName("m_ImgViewer_A"); connect(m_ImgViewer_A, SIGNAL(sgImageScale(qreal)), this, SLOT(onImageScale(qreal))); pLayout_A->addWidget(m_ImgViewer_A); ui.widget_A->setLayout(pLayout_A); - QGridLayout *pLayout_B = new QGridLayout(ui.widget_B); + QGridLayout *pLayout_B = new QGridLayout(ui.widget_B);//B侧相机结果图展示UI m_ImgViewer_B = new RoiImgViewer(ui.widget_A); m_ImgViewer_B->setObjectName("m_ImgViewer_B"); connect(m_ImgViewer_B, SIGNAL(sgImageScale(qreal)), this, SLOT(onImageScale(qreal))); pLayout_B->addWidget(m_ImgViewer_B); ui.widget_B->setLayout(pLayout_B); - QString strPath = QApplication::applicationDirPath() + "/showImg.ini"; + QString strPath = QApplication::applicationDirPath() + "/showImg.ini";//图像展示比例的参数 QSettings setting(strPath, QSettings::IniFormat); double nScale_A = setting.value("ShowImg/ScaleA", 0.53).toDouble(); double nScale_B = setting.value("ShowImg/ScaleB", 0.53).toDouble(); m_ImgViewer_A->setInitScale(nScale_A); m_ImgViewer_B->setInitScale(nScale_B); - -// QFont font; -// font.setBold(true); -// font.setPixelSize(25); -// m_pLabelState_A = new QLabel(m_ImgViewer_A); -// m_pLabelState_A->setFont(font); -// m_pLabelState_A->setText(tr("检测状态")); -// m_pLabelState_A->setMinimumWidth(300); -// -// m_pLabelRes_A = new QLabel(m_ImgViewer_A); -// m_pLabelRes_A->setFont(font); -// m_pLabelRes_A->setText(tr("检测结果")); -// m_pLabelRes_A->setMinimumWidth(300); -// m_pLabelRes_A->move(m_ImgViewer_A->rect().x(), 40); } - + //工具栏菜单 QMenu *pToolMenu = new QMenu(this); - - pToolMenu->addAction(ui.actionConfig); - pToolMenu->addAction(ui.actiondebug); - pToolMenu->addAction(ui.action_communicate); + pToolMenu->addAction(ui.actionConfig);//系统配置 + pToolMenu->addAction(ui.actiondebug);//测试调试 + pToolMenu->addAction(ui.action_communicate);//通讯测试页面 QToolButton* pbutton = new QToolButton(this); pbutton->setMenu(pToolMenu); @@ -111,21 +99,16 @@ valueMainUI::valueMainUI(QWidget *parent) connect(ui.actionConfig, SIGNAL(triggered()), this, SLOT(onButtonClicked())); connect(ui.actiondebug, SIGNAL(triggered()), this, SLOT(onButtonClicked())); connect(ui.action_communicate, SIGNAL(triggered()), this, SLOT(onButtonClicked())); - - m_pConfigUI = new lpConfigUI(); + + //子页面初始化 + m_pConfigUI = new lpConfigUI();//系统配置 connect(m_pConfigUI, SIGNAL(sgUpdateConfig()), this, SLOT(onUpdateConfig())); - m_pDebugUI = new lpDebugUI(); + m_pDebugUI = new lpDebugUI();//调试测试 connect(m_pDebugUI, SIGNAL(sgButtonClicked(int)), this, SLOT(onDebugClicked(int))); - m_SysTimerID = startTimer(1000); - lpConfig::instance()->loadConfig(); - - m_timerStartID = startTimer(2000); - + m_pTcpDebugUI = new QTCPDebugUI();//通讯测试页面 onShowUI(lpConfig::instance()->doubleStation); - m_pTcpDebugUI = new QTCPDebugUI(); - - {//PLC tcp 通讯 + {//PLC tcp 通讯 本检测系统作为服务端,PLC作为客户端主动连接 m_pPlcDevice = new QPLCDevice(); m_pPlcDevice->onInitDevice(); m_pPlcDevice->onStartServer(lpConfig::instance()->plcServerPort); @@ -133,11 +116,17 @@ valueMainUI::valueMainUI(QWidget *parent) connect(m_pPlcDevice, SIGNAL(sgSendDataCallBack(QByteArray)), this, SLOT(onShowSendTcpData(QByteArray))); connect(m_pPlcDevice, SIGNAL(sgRecvDataCallBack(QByteArray)), this, SLOT(onShowRecvTcpData(QByteArray))); } + + { + m_SysTimerID = startTimer(1000);//系统定时刷新定时器 + m_timerStartID = startTimer(1000);//启动从机客户端 + } } valueMainUI::~valueMainUI() { - onStopProcess(); + onStopProcess();//本系统退出时 杀死由本系统启动的A B检测程序 + //内存释放 { if (m_ImgViewer_A) { @@ -383,7 +372,7 @@ Q_SLOT void valueMainUI::onRecvDataStr_B(const QJsonObject& json) } void valueMainUI::onConnectA() -{ +{//tcpClient 连接 TP_TCP_CLIENT_PARAM init_param; init_param.host_ip_ = "127.0.0.1"; init_param.port_ = lpConfig::instance()->portA; @@ -400,9 +389,9 @@ void valueMainUI::onConnectA() tcp_client_ptr_A = new lpTcpClient(init_param, this); } - connect(tcp_client_ptr_A, SIGNAL(signal_connected()), this, SLOT(on_connected_A())); + connect(tcp_client_ptr_A, SIGNAL(signal_connected()), this, SLOT(on_connected_A()));//连接状态 connect(tcp_client_ptr_A, SIGNAL(signal_disconnected()), this, SLOT(on_disconnected_A())); - connect(tcp_client_ptr_A, &lpTcpClient::signal_message_receive, this, &valueMainUI::on_message_receive_A); + connect(tcp_client_ptr_A, &lpTcpClient::signal_message_receive, this, &valueMainUI::on_message_receive_A);//数据接收 connect(tcp_client_ptr_A, &lpTcpClient::signal_data_send_completed, this, &valueMainUI::on_data_send_completed_A); connect(tcp_client_ptr_A, &lpTcpClient::signal_data_recv_completed, this, &valueMainUI::on_data_recv_completed_A); @@ -439,7 +428,7 @@ void valueMainUI::onConnectB() Q_SLOT void valueMainUI::onButtonClicked() { QString strObj = sender()->objectName(); - if (strObj == "actionsettingA") + if (strObj == "actionsettingA")//A侧客户端展示 { if (m_bServerA == false) { @@ -457,7 +446,7 @@ Q_SLOT void valueMainUI::onButtonClicked() TP_PROTOCOL_MESSAGE msg; QJsonObject sObj; sObj.insert("cmd", "showWidget"); - msg.body = sObj; + msg.body = sObj;//发送命令 A侧检测程序显示客户端 tcp_client_ptr_A->ISendMessage(msg); } } @@ -489,6 +478,7 @@ Q_SLOT void valueMainUI::onButtonClicked() m_pDebugUI->setWindowTitle(tr("调试页面")); m_pDebugUI->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); m_pDebugUI->setWindowIcon(QIcon(WINDOWICON)); + //屏蔽 窗口不阻塞 //m_pDebugUI->setWindowModality(Qt::ApplicationModal); //m_pDebugUI->setAttribute(Qt::WA_ShowModal, true); m_pDebugUI->show(); @@ -503,7 +493,6 @@ Q_SLOT void valueMainUI::onButtonClicked() m_pConfigUI->setWindowModality(Qt::ApplicationModal); m_pConfigUI->setAttribute(Qt::WA_ShowModal, true); m_pConfigUI->show(); - //check(); } else if (strObj == "action_communicate") { @@ -529,7 +518,7 @@ QByteArray valueMainUI::Json2byte(QJsonObject obj) void valueMainUI::timerEvent(QTimerEvent *event) { - if (m_timerA == event->timerId()) + if (m_timerA == event->timerId())//调试 定时触发相机拍照 相机触发模式为软件触发 { TP_PROTOCOL_MESSAGE msg; QJsonObject sObj; @@ -548,7 +537,7 @@ void valueMainUI::timerEvent(QTimerEvent *event) tcp_client_ptr_B->ISendMessage(msg); } else if (m_SysTimerID == event->timerId()) - { + {//系统状态信息定时刷新展示 m_tickCount++; m_CoutB++; m_CoutA++; @@ -604,8 +593,9 @@ void valueMainUI::timerEvent(QTimerEvent *event) m_pLabelB->setStyleSheet("background-color: rgb(200, 10, 10);"); } } - else { + else {//不启用双工位 m_pLabelB->setText(""); + m_pLabelB->setStyleSheet(""); } if (m_pPlcDevice) @@ -635,8 +625,8 @@ void valueMainUI::timerEvent(QTimerEvent *event) killTimer(m_timerStartID); m_timerStartID = 0; - onStartProcess(); - onConnectA(); + onStartProcess();//启动应用 + onConnectA();//建立tcp通讯连接 if (lpConfig::instance()->doubleStation == true) { onConnectB(); @@ -666,8 +656,8 @@ void valueMainUI::closeEvent(QCloseEvent *event) } Q_SLOT void valueMainUI::onDebugClicked(int nID) -{ - if (nID == 1) +{//调试测试页面按钮响应事件 自定义命令 + if (nID == 1)//A侧相机单次触发 { TP_PROTOCOL_MESSAGE msg; QJsonObject sObj; @@ -676,7 +666,7 @@ Q_SLOT void valueMainUI::onDebugClicked(int nID) if (tcp_client_ptr_A) tcp_client_ptr_A->ISendMessage(msg); } - else if (nID == 2) + else if (nID == 2)//B侧相机单次触发 { TP_PROTOCOL_MESSAGE msg; QJsonObject sObj; @@ -685,7 +675,7 @@ Q_SLOT void valueMainUI::onDebugClicked(int nID) if (tcp_client_ptr_B) tcp_client_ptr_B->ISendMessage(msg); } - else if (nID == 3) + else if (nID == 3)//A侧相机定时触发 { if (m_timerA != 0) { @@ -693,10 +683,10 @@ Q_SLOT void valueMainUI::onDebugClicked(int nID) m_timerA = 0; } else { - m_timerA = startTimer(5000); + m_timerA = startTimer(5000);//时间固定5s } } - else if (nID == 4) + else if (nID == 4)//B侧相机定时触发 { if (m_timerB != 0) { @@ -718,10 +708,10 @@ Q_SLOT void valueMainUI::onConnected_A(bool bFalg) bLastState = m_bServerA; if (bLastState == false) { - ui.textEdit->append("设备断开连接"); + ui.textEdit->append(tr("检测系统已离线!!!")); } else { - ui.textEdit->append("设备已连接"); + ui.textEdit->append(tr("检测系统已在线...")); } } } @@ -735,14 +725,14 @@ Q_SLOT void valueMainUI::onConnected_B(bool bFalg) bLastState = m_bServerB; if (bLastState == false) { - ui.textEdit_2->append("设备断开连接"); + ui.textEdit_2->append(tr("检测系统已离线!!!")); } else { - ui.textEdit_2->append("设备已连接"); + ui.textEdit_2->append(tr("检测系统已在线...")); } } } - +//测试代码 备用 查找系统中相关task是否在运行 void valueMainUI::check() { QString strExeName = QString("%1.exe").arg("Enchanter"); @@ -775,6 +765,7 @@ void valueMainUI::onRunApp(QString strAppPath) } } +//启动检测程序 路径固定 Q_SLOT void valueMainUI::onStartProcess() { QString strAppPath = lpConfig::instance()->appPathA; @@ -782,7 +773,7 @@ Q_SLOT void valueMainUI::onStartProcess() return; onRunApp(lpConfig::instance()->appPathA); - if (lpConfig::instance()->doubleStation == false) + if (lpConfig::instance()->doubleStation == false)//双工位启动 return; strAppPath = lpConfig::instance()->appPathB; diff --git a/tpvs17/valueMainUI/valueMainUI.vcxproj b/tpvs17/valueMainUI/valueMainUI.vcxproj index c593f1c..2c32b30 100644 --- a/tpvs17/valueMainUI/valueMainUI.vcxproj +++ b/tpvs17/valueMainUI/valueMainUI.vcxproj @@ -62,7 +62,7 @@ Windows $(OutDir)\$(ProjectName).exe - $(QTDIR)\lib;E:\wheelValve\3part\lp_libtcp\lib;%(AdditionalLibraryDirectories) + $(QTDIR)\lib;.\..\..\3part\lp_libtcp\lib;%(AdditionalLibraryDirectories) true qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5WebSocketsd.lib;Qt5Widgetsd.lib;Qt5Locationd.lib;Qt5Networkd.lib;libTcpClientd.lib;%(AdditionalDependencies) @@ -134,7 +134,6 @@ - @@ -148,12 +147,6 @@ - - - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets - - diff --git a/tpvs17/valueMainUI/valueMainUI.vcxproj.filters b/tpvs17/valueMainUI/valueMainUI.vcxproj.filters index 670a80c..f11c293 100644 --- a/tpvs17/valueMainUI/valueMainUI.vcxproj.filters +++ b/tpvs17/valueMainUI/valueMainUI.vcxproj.filters @@ -42,9 +42,6 @@ Source Files - - Source Files - view @@ -107,9 +104,6 @@ Header Files - - Header Files - view