diff --git a/3part/tadpole/include/tpBase/lpdesigner.h b/3part/tadpole/include/tpBase/lpdesigner.h index 8fee317..346e984 100644 --- a/3part/tadpole/include/tpBase/lpdesigner.h +++ b/3part/tadpole/include/tpBase/lpdesigner.h @@ -20,6 +20,8 @@ class IDetectorUI public: virtual bool Initialize(IDetectorEngine* lpDE) = 0; virtual bool ShowMainFrame(class QWidget* parent = nullptr) = 0; + virtual void HideMainFrame() = 0; + virtual bool IsMainFrameHidden() = 0; }; diff --git a/doc/轮毂识别定位一体与PLC通讯协议.docx b/doc/轮毂识别定位一体与PLC通讯协议.docx new file mode 100644 index 0000000..965bffa Binary files /dev/null and b/doc/轮毂识别定位一体与PLC通讯协议.docx differ diff --git a/src/lpCamera/lpCamVirtual/CameraVirtualFolder.cpp b/src/lpCamera/lpCamVirtual/CameraVirtualFolder.cpp index ca6ea0a..d79d263 100644 --- a/src/lpCamera/lpCamVirtual/CameraVirtualFolder.cpp +++ b/src/lpCamera/lpCamVirtual/CameraVirtualFolder.cpp @@ -181,6 +181,8 @@ void CCameraVirtualFolder::ISnapCamera() m_nImageHeight = img.height(); m_nImageSize = img.byteCount(); m_nBitsPerPixel = img.depth(); + m_pCamOpt->width = m_nImageWidth; + m_pCamOpt->height = m_nImageHeight; QImage::Format fd = img.format(); m_nColorFormat = TP_FUNCS::FromQImageFormat(img); m_pCb->IPushCameraData(this); diff --git a/src/lpbdesigner/CDetectorUI.cpp b/src/lpbdesigner/CDetectorUI.cpp index 7799439..6a8ce11 100644 --- a/src/lpbdesigner/CDetectorUI.cpp +++ b/src/lpbdesigner/CDetectorUI.cpp @@ -37,7 +37,7 @@ bool CDetectorUI::ShowMainFrame(class QWidget* parent) return false; m_pMainFrame->setParent(parent); - m_pMainFrame->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + m_pMainFrame->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint); m_pMainFrame->setWindowIcon(QIcon(":/image/leaper")); m_pMainFrame->setWindowModality(Qt::ApplicationModal); m_pMainFrame->setAttribute(Qt::WA_ShowModal, true); @@ -46,3 +46,13 @@ bool CDetectorUI::ShowMainFrame(class QWidget* parent) return true; } +void CDetectorUI::HideMainFrame() +{ + m_pMainFrame->hide(); +} + +bool CDetectorUI::IsMainFrameHidden() +{ + return m_pMainFrame->isHidden(); +} + diff --git a/src/lpbdesigner/CDetectorUI.h b/src/lpbdesigner/CDetectorUI.h index e39fcfe..e5a9f84 100644 --- a/src/lpbdesigner/CDetectorUI.h +++ b/src/lpbdesigner/CDetectorUI.h @@ -10,6 +10,8 @@ public: virtual ~CDetectorUI(); bool Initialize(IDetectorEngine* lpDE); virtual bool ShowMainFrame(class QWidget* parent = nullptr); + virtual void HideMainFrame(); + virtual bool IsMainFrameHidden(); private: CMainFrame* m_pMainFrame{ nullptr }; IDetectorEngine* m_pDE{ nullptr }; diff --git a/src/tpMain/Result2Ui.h b/src/tpMain/Result2Ui.h index affb8e5..0405651 100644 --- a/src/tpMain/Result2Ui.h +++ b/src/tpMain/Result2Ui.h @@ -32,6 +32,7 @@ public: // }; /*定位检测结果*/ struct ValueResult { + int stationID{ 1 };//工位ID 1 A侧 2 B侧 QString strModel{ "NG" };//型号名 double score{ 0.0 };//分数 double angle{ 0.0 };//定位角度 diff --git a/src/tpMain/cryptokey/lpCryptokey.cpp b/src/tpMain/cryptokey/lpCryptokey.cpp index 7ec095a..4f38d13 100644 --- a/src/tpMain/cryptokey/lpCryptokey.cpp +++ b/src/tpMain/cryptokey/lpCryptokey.cpp @@ -9,7 +9,7 @@ namespace lpCryptokey QString genSerialNumber(const QString& mac) { unsigned long long ulMacTmp = 0; - QString newMac = mac;// +ComponyKey; + QString newMac = mac + ComponyKey; std::string mStrMac = newMac.toStdString(); mStrMac.erase(std::remove(mStrMac.begin(), mStrMac.end(), ':'), mStrMac.end()); mStrMac.erase(std::remove(mStrMac.begin(), mStrMac.end(), '-'), mStrMac.end()); @@ -74,8 +74,17 @@ lpCheckKey::~lpCheckKey() //检查linese是否匹配 bool lpCheckKey::checkLinese() { - std::string biosID = lpHardwareInfo::instance()->getHardDrive(); - m_SerialNo = lpCryptokey::genSerialNumber(QString(biosID.c_str())); + std::string hardDriveID = lpHardwareInfo::instance()->getHardDrive(); + std::string cpuID = lpHardwareInfo::instance()->getCpuID(); + std::string BoardID = lpHardwareInfo::instance()->getMotherBoardID(); + std::string macID = lpHardwareInfo::instance()->getMacAddress(); + if (hardDriveID.size() > 0) + { + m_SerialNo = lpCryptokey::genSerialNumber(QString(hardDriveID.c_str()) + QString(cpuID.c_str())); + } + else { + m_SerialNo = lpCryptokey::genSerialNumber(QString(BoardID.c_str()) + QString(macID.c_str())); + } QSettings settingKey("Leaper_Register"); QString strKey = settingKey.value("key").toString(); diff --git a/tpvs17/tpMain/QPLCDevice.cpp b/tpvs17/tpMain/QPLCDevice.cpp index 21f4ff0..0644585 100644 --- a/tpvs17/tpMain/QPLCDevice.cpp +++ b/tpvs17/tpMain/QPLCDevice.cpp @@ -24,6 +24,7 @@ void QPLCDevice::onInitDevice() if (!m_rawTcpServer) { m_rawTcpServer = new lptkRawTcpServer(); connect(m_rawTcpServer, &lptkRawTcpServer::client_status_changed, this, &QPLCDevice::on_serv_status_changed); + connect(m_rawTcpServer, &lptkRawTcpServer::client_connect_status, this, &QPLCDevice::on_client_connect_status); RecvDataFunc func = std::bind(&QPLCDevice::onRecvFunc, this, std::placeholders::_1); m_rawTcpServer->setRecvCallFunc(func); } @@ -48,6 +49,7 @@ void QPLCDevice::onRecvFunc(QByteArray data) mMtLock.lock(); m_recvData.append(data); mMtLock.unlock(); + emit sgRecvDataCallBack(data); } void QPLCDevice::sendByteData(QByteArray byteData) @@ -59,6 +61,7 @@ void QPLCDevice::sendByteData(QByteArray byteData) { m_rawTcpServer->broadcast_send_data(sendData); } + emit sgSendDataCallBack(byteData); } Q_SLOT void QPLCDevice::on_serv_status_changed(int id, ServerStatus status) @@ -108,7 +111,8 @@ void QPLCDevice::onParaster(QByteArray recvData) if (cmd.toInt() == 1)// { - emit sgTrigerCam(data.toInt()); + int stationID = data.toInt(); + emit sgTrigerCam(stationID); } else if (cmd.toInt() == 2) { @@ -119,7 +123,7 @@ void QPLCDevice::onParaster(QByteArray recvData) void QPLCDevice::onSendValueRlt(const ValueResult& rlt) { - QString sdata = QString("CA;3;%1;%2;%3;%4;#").arg(rlt.strModel).arg(rlt.angle).arg(rlt.center.x()).arg(rlt.center.y()); + QString sdata = QString("CA;3;%1;%2;%3;%4;%5,#").arg(rlt.stationID).arg(rlt.strModel).arg(rlt.angle).arg(rlt.center.x()).arg(rlt.center.y()); sendByteData(sdata.toLatin1()); } @@ -129,8 +133,36 @@ void QPLCDevice::onSendHeartBit() sendByteData(sdata.toLatin1()); } -void QPLCDevice::onAckTrigerCam() +void QPLCDevice::onAckTrigerCam(int stationID) { - QString sdata = QString("CA;1;1;#"); + QString sdata = QString("CA;1;%1;#").arg(stationID); sendByteData(sdata.toLatin1()); } + +Q_SLOT void QPLCDevice::on_client_connect_status(QString ip, int port, ServerStatus status) +{ + QString clientName = QString("%1:%2").arg(ip).arg(port); + switch (status) { + case TCPSERVER_ON_CLIENT_CONNECTED: + if (!m_clientList.contains(clientName)) + { + m_clientList.append(clientName); + } + break; + case TCPSERVER_ON_CLIENT_DISCONNECTED: + if (m_clientList.contains(clientName)) + m_clientList.removeAll(clientName); + break; + default: + break; + } +} +bool QPLCDevice::getClinetInfo(QString &client) +{ + if (m_clientList.size() > 0) + { + client = m_clientList.first(); + return true; + } + return false; +} diff --git a/tpvs17/tpMain/QPLCDevice.h b/tpvs17/tpMain/QPLCDevice.h index 32a2f47..05f06a3 100644 --- a/tpvs17/tpMain/QPLCDevice.h +++ b/tpvs17/tpMain/QPLCDevice.h @@ -20,21 +20,28 @@ public: void onRecvFunc(QByteArray data); void sendByteData(QByteArray byteData); - Q_SLOT void on_serv_status_changed(int id, ServerStatus status); + bool onRunTask(); void onParaster(QByteArray recvData); void onSendValueRlt(const ValueResult& rlt);//Ͷλ - void onSendHeartBit();// - void onAckTrigerCam();//ʹӦ + void onSendHeartBit();// + void onAckTrigerCam(int stationID);//ʹӦ + Q_SLOT void on_serv_status_changed(int id, ServerStatus status); + Q_SLOT void on_client_connect_status(QString ip, int port, ServerStatus status); + bool getClinetInfo(QString &client); + signals: void sgTrigerCam(int camID); - + void sgSendDataCallBack(QByteArray); + void sgRecvDataCallBack(QByteArray); private: lptkRawTcpServer *m_rawTcpServer{ nullptr }; private: QMutex mMtLock; QByteArray m_recvData; lpThread *m_pTask{ nullptr }; + + QStringList m_clientList; }; #endif // ifndef _QPLCDEVICE_H_ \ No newline at end of file diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index ae19783..aeb8780 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -22,9 +22,9 @@ #include "databasesql.h" #include "lpCryptokey.h" -#define VERSION_HUB "3.0.1.3" +#define VERSION_HUB "3.0.1.4" #define VERSION_ALG "3.0.1.3" -#define UPDATE_TIME "2021-09-22" +#define UPDATE_TIME "2021-09-30" #pragma execution_character_set("utf-8") @@ -861,8 +861,8 @@ Q_SLOT void lpMainWin::onActionClicked() m_pDebugDlg->setWindowTitle(tr("调试工具")); m_pDebugDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); m_pDebugDlg->setWindowIcon(QIcon(":/image/leaper")); - m_pDebugDlg->setWindowModality(Qt::ApplicationModal); - m_pDebugDlg->setAttribute(Qt::WA_ShowModal, true); + //m_pDebugDlg->setWindowModality(Qt::ApplicationModal); + //m_pDebugDlg->setAttribute(Qt::WA_ShowModal, true); m_pDebugDlg->show(); } } @@ -870,7 +870,7 @@ Q_SLOT void lpMainWin::onActionClicked() if (m_pWorkUI) { m_pWorkUI->setParent(this); - m_pWorkUI->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + m_pWorkUI->setWindowFlags(Qt::Dialog |Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint ); m_pWorkUI->setWindowIcon(QIcon(":/image/leaper")); m_pWorkUI->setWindowModality(Qt::ApplicationModal); m_pWorkUI->setAttribute(Qt::WA_ShowModal, true); @@ -904,7 +904,7 @@ Q_SLOT void lpMainWin::onActionClicked() { m_pModelMgrDlg->setParent(this); m_pModelMgrDlg->setWindowTitle(tr("模板管理")); - m_pModelMgrDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + m_pModelMgrDlg->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint); m_pModelMgrDlg->setWindowIcon(QIcon(":/image/leaper")); m_pModelMgrDlg->setWindowModality(Qt::ApplicationModal); m_pModelMgrDlg->setAttribute(Qt::WA_ShowModal, true); @@ -981,8 +981,8 @@ Q_SLOT void lpMainWin::onActionClicked() m_pAlgParamDlg->setWindowTitle(tr("算法参数")); m_pAlgParamDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); m_pAlgParamDlg->setWindowIcon(QIcon(":/image/leaper")); - m_pAlgParamDlg->setWindowModality(Qt::ApplicationModal); - m_pAlgParamDlg->setAttribute(Qt::WA_ShowModal, true); + //m_pAlgParamDlg->setWindowModality(Qt::ApplicationModal); + //m_pAlgParamDlg->setAttribute(Qt::WA_ShowModal, true); m_pAlgParamDlg->show(); } } @@ -1290,6 +1290,7 @@ Q_SLOT void lpMainWin::onTriggerCam() QStringList strLst = m_pCoreCtrl->ICameraKeys(); m_pCoreCtrl->ISnapImage(strLst); } + AckTriggerCam(); } void lpMainWin::onInitAbout() @@ -1681,42 +1682,12 @@ Q_SLOT void lpMainWin::onPLCTrigerCam(int camID) onTriggerCam(); } -Q_SLOT void lpMainWin::onWebSocketRecvData(QWebSocket* p, QByteArray data) -{ - QJsonDocument doc = QJsonDocument::fromJson(data); - QJsonObject json = doc.object(); - if (!json.empty()) - { - QString strcmd = json.value("cmd").toString(); - if (strcmd == "trigerCam") - { - onTriggerCam(); - } - else if (strcmd == "heartbit") - { - - } - else if (strcmd == "showWidget") - { - this->setWindowFlags(Qt::WindowStaysOnTopHint); - this->show(); - } - else if (strcmd == "hideWidget") - { - - } - else if (strcmd == "exitApp") - { - onQuitApplication(); - } - } -} - void lpMainWin::onTcpHeartBit() { QJsonObject heartObj; heartObj.insert("deviceName", "A"); heartObj.insert("cmd", "heartbit"); + heartObj.insert("runState", lpGlobalConfig::instance()->IsDetect); heartObj.insert("time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz")); if (tcp_server_ptr_) { @@ -1778,13 +1749,10 @@ void lpMainWin::setupTrayIcon() QIcon icon(":/image/leaper"); m_trayIcon->setIcon(icon); m_trayIcon->setContextMenu(m_trayIconMenu); - //m_trayIcon->show(); connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onActivated(QSystemTrayIcon::ActivationReason))); connect(m_restoreAction, &QAction::triggered, this, [this]() { setMainWindowVisibility(isHidden()); -// || windowState() == Qt::WindowMinimized -// || (qApp->applicationState() == Qt::ApplicationInactive)); }); connect(m_quitAction, &QAction::triggered, this, &lpMainWin::onQuitApplication); } @@ -1801,14 +1769,76 @@ void lpMainWin::setMainWindowVisibility(bool state) { if (state) { onShowMainWindow(); -// qApp->processEvents(); -// qApp->setActiveWindow(this); -// qApp->processEvents(); m_restoreAction->setText(tr("后台运行")); } else { m_restoreAction->setText(tr("显示界面")); hide(); + if (m_pAlgParamDlg) + { + if (!m_pAlgParamDlg->isHidden()) + { + m_pAlgParamDlg->hide(); + } + } + if (m_pDebugDlg) + { + if (!m_pDebugDlg->isHidden()) + { + m_pDebugDlg->hide(); + } + } + if (m_pModelMgrDlg) + { + if (!m_pModelMgrDlg->isHidden()) + { + m_pModelMgrDlg->hide(); + } + } + if (m_CamSettingDlg) + { + if (!m_CamSettingDlg->isHidden()) + { + m_CamSettingDlg->hide(); + } + } + if (m_pSystemConfigUI) + { + if (!m_pSystemConfigUI->isHidden()) + { + m_pSystemConfigUI->hide(); + } + } + if (m_pWorkUI) { + if (!m_pWorkUI->isHidden()) + { + m_pWorkUI->hide(); + } + } + if (!m_aboutDlg.isHidden()) + { + m_aboutDlg.hide(); + } + if (m_pImageCaliUI) + { + if (!m_pImageCaliUI->isHidden()) + { + m_pImageCaliUI->hide(); + } + } + if (m_pDesigner) { + if (!m_pDesigner->IsMainFrameHidden()) + { + m_pDesigner->HideMainFrame(); + } + } + if (m_pCheckLineseUI) + { + if (!m_pCheckLineseUI->isHidden()) + { + m_pCheckLineseUI->hide(); + } + } } } @@ -1986,3 +2016,19 @@ void lpMainWin::onShowMainWindow() this->raise(); } } + +void lpMainWin::AckTriggerCam() +{ + if (tcp_server_ptr_) + { + QJsonObject ackObj; + ackObj.insert("deviceName", "A"); + ackObj.insert("cmd", "triggerAck"); + ackObj.insert("runState", lpGlobalConfig::instance()->IsDetect); + ackObj.insert("time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz")); + + TP_PROTOCOL_MESSAGE msg; + msg.body = ackObj; + tcp_server_ptr_->ISendMessage("*", msg); + } +} diff --git a/tpvs17/tpMain/lpMainWin.h b/tpvs17/tpMain/lpMainWin.h index 6e0cdbd..eeb7cd8 100644 --- a/tpvs17/tpMain/lpMainWin.h +++ b/tpvs17/tpMain/lpMainWin.h @@ -25,7 +25,7 @@ #include "lpImageCaliUI.h" #include "QPLCDevice.h" #include "lpSystemConfigUI.h" -#include "WebServer.h" +//#include "WebServer.h" #include #include "QCryptokeyUI.h" #include "QAlgParamDlg.h" @@ -116,7 +116,6 @@ protected: Q_SLOT void modWorkMgr(QString str); Q_SLOT void onPLCTrigerCam(int camID); - Q_SLOT void onWebSocketRecvData(QWebSocket* p, QByteArray data); void onTcpHeartBit();//websocket 通讯心跳 void sendWebAlgRlt(const ValueResult& rlt); QJsonObject byte2Json(QByteArray data); @@ -147,6 +146,7 @@ private: Q_SLOT void on_data_recv_completed(const QString &client_name, QSharedPointer msg_ptr, QSharedPointer pData); void paraJson(const QJsonObject& obj); void onShowMainWindow(); + void AckTriggerCam(); protected: virtual void timerEvent(QTimerEvent *event); virtual void closeEvent(QCloseEvent *event); @@ -226,8 +226,6 @@ private: IDetectorEngine* m_pEngineCtrl{nullptr}; CDllDesigner* m_pDllDesigner{ nullptr }; IDetectorUI* m_pDesigner{ nullptr }; -private: - WebServer *m_pWebSocket{ nullptr }; QSharedPointer tcp_server_ptr_; private: diff --git a/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.cpp b/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.cpp index 2acc2f9..37d7c96 100644 --- a/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.cpp +++ b/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.cpp @@ -1,4 +1,6 @@ #include "lpRawTcpClientSession.h" +#include + #include #pragma execution_character_set("utf-8") lpRawClientSession::lpRawClientSession(int ID, QObject *parent) @@ -56,6 +58,16 @@ void lpRawClientSession::on_data_to_send(int sess_id, QSharedPointer psocket_->write(data->constData(), data->size()); } +QString lpRawClientSession::getClientIP() +{ + return psocket_->peerAddress().toString(); +} + +int lpRawClientSession::getClientPort() +{ + return psocket_->peerPort(); +} + void lpRawClientSession::socket_close() { @@ -64,6 +76,5 @@ void lpRawClientSession::socket_close() psocket_->abort(); psocket_->close(); } - } diff --git a/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.h b/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.h index bf3ad80..3aced6d 100644 --- a/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.h +++ b/tpvs17/tpMain/lpRawTcp/lpRawTcpClientSession.h @@ -17,9 +17,9 @@ public: void setRecvCallBackFunc(RecvDataFunc func) { _func = func; }; void force_close(); - - Q_SLOT void on_data_to_send(int sess_id, QSharedPointer); + QString getClientIP(); + int getClientPort(); signals: void data_received(int, QSharedPointer); void sess_disconnected(int); diff --git a/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.cpp b/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.cpp index 1dce139..1493507 100644 --- a/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.cpp +++ b/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.cpp @@ -90,7 +90,12 @@ void lptkRawTcpServer::incomingConnection(qintptr socketDescriptor) client_sessions_[socketDescriptor] = cli_sess; pThrd->start(); + QString strIP = pclientSess->getClientIP(); + int n = strIP.lastIndexOf(":"); + strIP = strIP.mid(n).remove(":"); + int port = pclientSess->getClientPort(); emit client_status_changed(socketDescriptor, TCPSERVER_ON_CLIENT_CONNECTED); + emit client_connect_status(strIP, port, TCPSERVER_ON_CLIENT_CONNECTED); } void lptkRawTcpServer::on_data_received(int sess_id, QSharedPointer data_ptr) @@ -102,9 +107,7 @@ void lptkRawTcpServer::on_data_received(int sess_id, QSharedPointer return; } - emit data_received(sess_id, data_ptr); - } void lptkRawTcpServer::on_sess_disconnected(int sess_id) @@ -119,9 +122,15 @@ void lptkRawTcpServer::on_sess_disconnected(int sess_id) if (cli_sess.pThrd_->isRunning()) { cli_sess.pThrd_->exit(0); } - delete cli_sess.pThrd_;// ->deleteLater(); + + QString strIP = cli_sess.pSess_->getClientIP(); + int n = strIP.lastIndexOf(":"); + strIP = strIP.mid(n).remove(":"); + int port = cli_sess.pSess_->getClientPort(); + emit client_connect_status(strIP, port, TCPSERVER_ON_CLIENT_DISCONNECTED); + + delete cli_sess.pThrd_; delete cli_sess.pSess_; - //cli_sess.pThrd_->deleteLater(); client_sessions_.erase(it); } diff --git a/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.h b/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.h index efba0d9..92499bd 100644 --- a/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.h +++ b/tpvs17/tpMain/lpRawTcp/lptkRawTcpServer.h @@ -43,6 +43,7 @@ signals: void client_status_changed(int, ServerStatus); void data_received(int, QSharedPointer); void data_to_send(int, QSharedPointer); + void client_connect_status(QString ip, int port, ServerStatus); public slots: void on_sess_disconnected(int); diff --git a/tpvs17/valueMainUI/QTCPDebugUI.cpp b/tpvs17/valueMainUI/QTCPDebugUI.cpp new file mode 100644 index 0000000..87db74a --- /dev/null +++ b/tpvs17/valueMainUI/QTCPDebugUI.cpp @@ -0,0 +1,58 @@ +#include "QTCPDebugUI.h" +#include "lpGlobalData.h" +#include +QTCPDebugUI::QTCPDebugUI(QWidget *parent) + : QWidget(parent) +{ + ui.setupUi(this); + connect(ui.checkBox_Recv, SIGNAL(stateChanged(int)), this, SLOT(onStateChange(int))); + connect(ui.checkBox_Send, SIGNAL(stateChanged(int)), this, SLOT(onStateChange(int))); +} + +QTCPDebugUI::~QTCPDebugUI() +{ +} + +void QTCPDebugUI::appendRecvData(QByteArray data) +{ + QString msg = QString("recv %1->%2").arg(QDateTime::currentDateTime().toString("hh:mm:ss")).arg(QString(data)); + ui.plainTextEdit->appendPlainText(msg); +} + +void QTCPDebugUI::appendSendData(QByteArray data) +{ + QString msg = QString("send %1->%2").arg(QDateTime::currentDateTime().toString("hh:mm:ss")).arg(QString(data)); + ui.plainTextEdit->appendPlainText(msg); +} + +void QTCPDebugUI::closeEvent(QCloseEvent *event) +{ + lpGlobalData::instance()->bShowRecv = false; + lpGlobalData::instance()->bShowSend = false; +} + +void QTCPDebugUI::showEvent(QShowEvent *event) +{ + ui.plainTextEdit->clear(); + ui.checkBox_Recv->setChecked(false); + ui.checkBox_Send->setChecked(false); +} + +Q_SLOT void QTCPDebugUI::onStateChange(int state) +{ + QString strObj = sender()->objectName(); + if (strObj == "checkBox_Recv") + { + if (state > 0) + lpGlobalData::instance()->bShowRecv = true; + else + lpGlobalData::instance()->bShowRecv = false; + } + else if (strObj == "checkBox_Send") + { + if (state > 0) + lpGlobalData::instance()->bShowSend = true; + else + lpGlobalData::instance()->bShowSend = false; + } +} diff --git a/tpvs17/valueMainUI/QTCPDebugUI.h b/tpvs17/valueMainUI/QTCPDebugUI.h new file mode 100644 index 0000000..e55f2f8 --- /dev/null +++ b/tpvs17/valueMainUI/QTCPDebugUI.h @@ -0,0 +1,26 @@ +#ifndef _QTCPDEBUG_H_ +#define _QTCPDEBUG_H_ + +#include +#include "ui_QTCPDebugUI.h" + +class QTCPDebugUI : public QWidget +{ + Q_OBJECT + +public: + QTCPDebugUI(QWidget *parent = Q_NULLPTR); + ~QTCPDebugUI(); + + void appendRecvData(QByteArray data); + void appendSendData(QByteArray data); +protected: + virtual void closeEvent(QCloseEvent *event); + virtual void showEvent(QShowEvent *event); + + Q_SLOT void onStateChange(int state); +private: + Ui::QTCPDebugUI ui; +}; + +#endif diff --git a/tpvs17/valueMainUI/QTCPDebugUI.ui b/tpvs17/valueMainUI/QTCPDebugUI.ui new file mode 100644 index 0000000..65bd491 --- /dev/null +++ b/tpvs17/valueMainUI/QTCPDebugUI.ui @@ -0,0 +1,62 @@ + + + QTCPDebugUI + + + + 0 + 0 + 575 + 407 + + + + QTCPDebugUI + + + + + + + 12 + + + + 显示接收数据 + + + + + + + + 12 + + + + 显示发送数据 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + diff --git a/tpvs17/valueMainUI/config.ini b/tpvs17/valueMainUI/config.ini index 8526949..72cc841 100644 --- a/tpvs17/valueMainUI/config.ini +++ b/tpvs17/valueMainUI/config.ini @@ -2,4 +2,7 @@ urlA=ws://localhost:10110 urlB=ws://localhost:10111 appPathA=E:/wheelValve/runner17/Enchanter.exe -appPathB=E:/wheelValve/runner17/lpReportd.exe +appPathB=E:/wheelValve/Release/runner17_B/Enchanter_B.exe +doubleStation=true +portA=10110 +portB=10111 diff --git a/tpvs17/valueMainUI/lpConfig.cpp b/tpvs17/valueMainUI/lpConfig.cpp index 0318e76..44a6ca6 100644 --- a/tpvs17/valueMainUI/lpConfig.cpp +++ b/tpvs17/valueMainUI/lpConfig.cpp @@ -19,6 +19,7 @@ void lpConfig::saveConfig() setting.setValue("appPathA", appPathA); setting.setValue("appPathB", appPathB); setting.setValue("doubleStation", doubleStation); + setting.setValue("serverPort", plcServerPort); } void lpConfig::loadConfig() @@ -29,4 +30,5 @@ void lpConfig::loadConfig() appPathA = setting.value("appPathA").toString(); appPathB = setting.value("appPathB").toString(); doubleStation = setting.value("doubleStation",true).toBool(); + plcServerPort = setting.value("serverPort", 1000).toInt(); } diff --git a/tpvs17/valueMainUI/lpConfig.h b/tpvs17/valueMainUI/lpConfig.h index 0a521d8..6dde2a5 100644 --- a/tpvs17/valueMainUI/lpConfig.h +++ b/tpvs17/valueMainUI/lpConfig.h @@ -19,7 +19,7 @@ public: QString appPathA; QString appPathB; bool doubleStation{ true };//true ˫λ ; false λ - + int plcServerPort{ 1000 }; }; #endif \ No newline at end of file diff --git a/tpvs17/valueMainUI/lpConfigUI.cpp b/tpvs17/valueMainUI/lpConfigUI.cpp index b786525..1eafe63 100644 --- a/tpvs17/valueMainUI/lpConfigUI.cpp +++ b/tpvs17/valueMainUI/lpConfigUI.cpp @@ -48,6 +48,7 @@ Q_SLOT void lpConfigUI::onButtonClicked() lpConfig::instance()->portA = ui.lineEdit_APort->text().toInt(); lpConfig::instance()->portB = ui.lineEdit_BPort->text().toInt(); lpConfig::instance()->doubleStation = ui.checkBox_doubleStation->isChecked(); + lpConfig::instance()->plcServerPort = ui.lineEdit_serverPort->text().toInt(); lpConfig::instance()->saveConfig(); ui.label_5->setVisible(true); m_timerID = startTimer(1000); @@ -66,6 +67,7 @@ void lpConfigUI::showEvent(QShowEvent *event) ui.lineEdit_APort->setText(QString("%1").arg(lpConfig::instance()->portA)); ui.lineEdit_BPort->setText(QString("%1").arg(lpConfig::instance()->portB)); ui.checkBox_doubleStation->setChecked(lpConfig::instance()->doubleStation); + ui.lineEdit_serverPort->setText(QString("%1").arg(lpConfig::instance()->plcServerPort)); } void lpConfigUI::timerEvent(QTimerEvent *event) diff --git a/tpvs17/valueMainUI/lpConfigUI.ui b/tpvs17/valueMainUI/lpConfigUI.ui index 3fbae74..ae30a5e 100644 --- a/tpvs17/valueMainUI/lpConfigUI.ui +++ b/tpvs17/valueMainUI/lpConfigUI.ui @@ -6,8 +6,8 @@ 0 0 - 545 - 303 + 532 + 394 @@ -16,8 +16,13 @@ + + + 12 + + - + 工位配置: @@ -191,7 +196,7 @@ - + @@ -244,7 +249,7 @@ - + Qt::Vertical @@ -258,27 +263,124 @@ - + 12 - - 开机自启动 + + 机台PLC通讯: + + + + + TCP服务端口: + + + + + + + 1000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - + 12 - - 添加到桌面快捷方式 + + 系统相关: + + + + + + + + 12 + + + + 开机自启动 + + + + + + + + 12 + + + + 添加到桌面快捷方式 + + + + + + + + + + + 语言: + + + + + + + + 中文 + + + + + English + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + diff --git a/tpvs17/valueMainUI/lpGlobalData.cpp b/tpvs17/valueMainUI/lpGlobalData.cpp new file mode 100644 index 0000000..5501261 --- /dev/null +++ b/tpvs17/valueMainUI/lpGlobalData.cpp @@ -0,0 +1,9 @@ +#include "lpGlobalData.h" + +lpGlobalData::lpGlobalData() +{ +} + +lpGlobalData::~lpGlobalData() +{ +} diff --git a/tpvs17/valueMainUI/lpGlobalData.h b/tpvs17/valueMainUI/lpGlobalData.h new file mode 100644 index 0000000..e248f9c --- /dev/null +++ b/tpvs17/valueMainUI/lpGlobalData.h @@ -0,0 +1,16 @@ +#ifndef _LPGLOBALDATA_H_ +#define _LPGLOBALDATA_H_ + +#include +#include "lp_singleton_base.h" +class lpGlobalData : public lp_singleton_base +{ +public: + lpGlobalData(); + ~lpGlobalData(); + bool bShowRecv{ false }; + bool bShowSend{ false }; +}; + +#endif + diff --git a/tpvs17/valueMainUI/valueMainUI.aps b/tpvs17/valueMainUI/valueMainUI.aps index 28113f8..9c008c2 100644 Binary files a/tpvs17/valueMainUI/valueMainUI.aps and b/tpvs17/valueMainUI/valueMainUI.aps differ diff --git a/tpvs17/valueMainUI/valueMainUI.cpp b/tpvs17/valueMainUI/valueMainUI.cpp index 27d1250..981185e 100644 --- a/tpvs17/valueMainUI/valueMainUI.cpp +++ b/tpvs17/valueMainUI/valueMainUI.cpp @@ -6,7 +6,10 @@ #include "SystemTool.h" #include #include -#include "QSettings" +#include +#include +#include +#include "lpGlobalData.h" #pragma execution_character_set("utf-8") #define WINDOWICON ":/Resources/icon.png" @@ -17,8 +20,12 @@ valueMainUI::valueMainUI(QWidget *parent) setupTrayIcon(); setWindowIcon(QIcon(WINDOWICON)); setWindowTitle(tr("识别定位一体检测系统")); + lpGlobalData::instance(); + + m_pLabelA = new QLabel(this); m_pLabelB = new QLabel(this); + m_pLabelPLC = new QLabel(this); m_pLabelSystem = new QLabel(this); QFont font; font.setBold(true); @@ -26,17 +33,21 @@ valueMainUI::valueMainUI(QWidget *parent) m_pLabelA->setFont(font); m_pLabelB->setFont(font); + m_pLabelPLC->setFont(font); m_pLabelSystem->setFont(font); - m_pLabelA->setText("A侧连接状态"); - m_pLabelB->setText("B侧连接状态"); - m_pLabelSystem->setText("时间"); + m_pLabelA->setText(tr("A侧连接状态")); + m_pLabelB->setText(tr("B侧连接状态")); + m_pLabelPLC->setText(tr("PLC连接状态")); + m_pLabelSystem->setText(tr("时间")); m_pLabelA->setAlignment(Qt::AlignCenter); m_pLabelB->setAlignment(Qt::AlignCenter); + m_pLabelPLC->setAlignment(Qt::AlignCenter); m_pLabelSystem->setAlignment(Qt::AlignCenter); ui.statusBar->addWidget(m_pLabelA, 50); ui.statusBar->addWidget(m_pLabelB, 50); + ui.statusBar->addWidget(m_pLabelPLC, 50); ui.statusBar->addPermanentWidget(m_pLabelSystem, 50); m_pLabelA->setText(""); m_pLabelB->setText(""); @@ -61,13 +72,45 @@ valueMainUI::valueMainUI(QWidget *parent) 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); + + QToolButton* pbutton = new QToolButton(this); + pbutton->setMenu(pToolMenu); + pbutton->setIcon(QIcon(":/Resources/Setting.png")); + pbutton->setText(tr("工具")); + pbutton->setToolTip(tr("工具")); + pbutton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + pbutton->setPopupMode(QToolButton::InstantPopup); + font.setBold(false); + font.setPixelSize(18); + pbutton->setFont(font); + ui.toolBar->addWidget(pbutton); + connect(ui.actionsettingA, SIGNAL(triggered()), this, SLOT(onButtonClicked())); connect(ui.actionsettingB, SIGNAL(triggered()), this, SLOT(onButtonClicked())); 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(); connect(m_pConfigUI, SIGNAL(sgUpdateConfig()), this, SLOT(onUpdateConfig())); @@ -79,6 +122,17 @@ valueMainUI::valueMainUI(QWidget *parent) m_timerStartID = startTimer(2000); onShowUI(lpConfig::instance()->doubleStation); + + m_pTcpDebugUI = new QTCPDebugUI(); + + {//PLC tcp 通讯 + m_pPlcDevice = new QPLCDevice(); + m_pPlcDevice->onInitDevice(); + m_pPlcDevice->onStartServer(lpConfig::instance()->plcServerPort); + connect(m_pPlcDevice, SIGNAL(sgTrigerCam(int)), this, SLOT(onPLCTrigerCam(int))); + connect(m_pPlcDevice, SIGNAL(sgSendDataCallBack(QByteArray)), this, SLOT(onShowSendTcpData(QByteArray))); + connect(m_pPlcDevice, SIGNAL(sgRecvDataCallBack(QByteArray)), this, SLOT(onShowRecvTcpData(QByteArray))); + } } valueMainUI::~valueMainUI() @@ -106,6 +160,26 @@ valueMainUI::~valueMainUI() delete tcp_client_ptr_B; tcp_client_ptr_B = nullptr; } + if (m_pPlcDevice) + { + delete m_pPlcDevice; + m_pPlcDevice = nullptr; + } + if (m_pDebugUI) + { + delete m_pDebugUI; + m_pDebugUI = nullptr; + } + if (m_pConfigUI) + { + delete m_pConfigUI; + m_pConfigUI = nullptr; + } + if (m_pTcpDebugUI) + { + delete m_pTcpDebugUI; + m_pTcpDebugUI = nullptr; + } } QString valueMainUI::SecondTimeString(quint64 value) @@ -160,9 +234,8 @@ Q_SLOT void valueMainUI::onRecvDataStr_A(const QJsonObject& json) { case 0://识别OK,定位OK { - ui.label_A->setText(tr("型号 %1,定位角度 %2°").arg(strName).arg(angle)); + ui.label_A->setText(tr("型号 %1,定位角度 %2 °").arg(strName).arg(angle)); ui.label_A->setStyleSheet("font: bold 14px;background-color: rgb(0, 170, 0);"); - } break; case 1://识别OK,定位异常 @@ -193,11 +266,29 @@ Q_SLOT void valueMainUI::onRecvDataStr_A(const QJsonObject& json) default: break; } + + ValueResult rlt; + rlt.stationID = 1; + rlt.angle = angle; + rlt.center = QPointF(cnt_x, cnt_y); + rlt.strModel = strName; + if (m_pPlcDevice) + { + m_pPlcDevice->onSendValueRlt(rlt); + } } else if (strcmd == "heartbit") { m_CoutA = 0; m_bServerA = true; + m_bRunStateA = json.value("runState").toBool(false); + } + else if (strcmd == "triggerAck") + { + if (m_pPlcDevice) + { + m_pPlcDevice->onAckTrigerCam(1); + } } } } @@ -264,11 +355,29 @@ Q_SLOT void valueMainUI::onRecvDataStr_B(const QJsonObject& json) default: break; } + + ValueResult rlt; + rlt.stationID = 2; + rlt.angle = angle; + rlt.center = QPointF(cnt_x, cnt_y); + rlt.strModel = strName; + if (m_pPlcDevice) + { + m_pPlcDevice->onSendValueRlt(rlt); + } } else if (strcmd == "heartbit") { m_CoutB = 0; m_bServerB = true; + m_bRunStateB = json.value("runState").toBool(false); + } + else if (strcmd == "triggerAck") + { + if (m_pPlcDevice) + { + m_pPlcDevice->onAckTrigerCam(2); + } } } } @@ -380,8 +489,8 @@ 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->setWindowModality(Qt::ApplicationModal); + //m_pDebugUI->setAttribute(Qt::WA_ShowModal, true); m_pDebugUI->show(); } @@ -396,6 +505,14 @@ Q_SLOT void valueMainUI::onButtonClicked() m_pConfigUI->show(); //check(); } + else if (strObj == "action_communicate") + { + m_pTcpDebugUI->setParent(this); + m_pTcpDebugUI->setWindowTitle(tr("通讯调试页面")); + m_pTcpDebugUI->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + m_pTcpDebugUI->setWindowIcon(QIcon(WINDOWICON)); + m_pTcpDebugUI->show(); + } } QJsonObject valueMainUI::byte2Json(QByteArray data) @@ -454,36 +571,63 @@ void valueMainUI::timerEvent(QTimerEvent *event) { if (m_bServerA == true) { - m_pLabelA->setText("A侧设备已连接"); - m_pLabelA->setStyleSheet("background-color: rgb(63, 170, 24);"); + if (m_bRunStateA == true) + { + m_pLabelA->setText(tr("A侧设备已连接(检测中)")); + m_pLabelA->setStyleSheet("background-color: rgb(63, 170, 24);"); + } + else { + m_pLabelA->setText(tr("A侧设备已连接(暂停中)")); + m_pLabelA->setStyleSheet("background-color: rgb(200, 200, 10);"); + } } else { - m_pLabelA->setText("A侧设备未连接"); - m_pLabelA->setStyleSheet(""); + m_pLabelA->setText(tr("A侧设备未连接")); + m_pLabelA->setStyleSheet("background-color: rgb(200, 10, 10);"); } if (lpConfig::instance()->doubleStation == true) { if (m_bServerB == true) { - m_pLabelB->setText("B侧设备已连接"); - m_pLabelB->setStyleSheet("background-color: rgb(63, 170, 24);"); + if (m_bRunStateB == true) + { + m_pLabelB->setText(tr("B侧设备已连接(检测中)")); + m_pLabelB->setStyleSheet("background-color: rgb(63, 170, 24);"); + } + else { + m_pLabelB->setText(tr("B侧设备已连接(暂停中)")); + m_pLabelB->setStyleSheet("background-color: rgb(200, 200, 10);"); + } } else { - m_pLabelB->setText("B侧设备未连接"); - m_pLabelB->setStyleSheet(""); + m_pLabelB->setText(tr("B侧设备未连接")); + m_pLabelB->setStyleSheet("background-color: rgb(200, 10, 10);"); } } else { m_pLabelB->setText(""); } - - + + if (m_pPlcDevice) + { + QString clientInfo; + bool bConnect = m_pPlcDevice->getClinetInfo(clientInfo); + if (bConnect == true) + { + QString plc = QString(tr("PLC客户端 %1").arg(clientInfo)); + m_pLabelPLC->setText(plc); + m_pLabelPLC->setStyleSheet("background-color: rgb(63, 170, 24);"); + } + else { + m_pLabelPLC->setText(tr("PLC客户端未连接")); + m_pLabelPLC->setStyleSheet("background-color: rgb(200, 200, 10);"); + } + } QString m_currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); QString strlong = SecondTimeString(m_tickCount); QString strTimeTitle = tr("运行时长:"); QString strShow = QString("%1 %2 %3").arg(m_currentTime).arg(strTimeTitle).arg(strlong); m_pLabelSystem->setText(strShow); - } } else if (m_timerStartID == event->timerId()) @@ -695,6 +839,27 @@ void valueMainUI::setMainWindowVisibility(bool state) else { m_restoreAction->setText(tr("显示界面")); hide(); + if (m_pTcpDebugUI) + { + if (!m_pTcpDebugUI->isHidden()) + { + m_pTcpDebugUI->hide(); + } + } + if (m_pConfigUI) + { + if (!m_pConfigUI->isHidden()) + { + m_pConfigUI->hide(); + } + } + if (m_pDebugUI) + { + if (!m_pDebugUI->isHidden()) + { + m_pDebugUI->hide(); + } + } } } @@ -823,3 +988,42 @@ void valueMainUI::onShowMainWindow() this->raise(); } } + +Q_SLOT void valueMainUI::onPLCTrigerCam(int camID) +{ + //onTriggerCam(); + if (camID == 1)//A侧相机触发拍照 + { + TP_PROTOCOL_MESSAGE msg; + QJsonObject sObj; + sObj.insert("cmd", "trigerCam"); + msg.body = sObj; + if (tcp_client_ptr_A) + tcp_client_ptr_A->ISendMessage(msg); + } + else if (camID == 2)//B侧相机拍照 + { + TP_PROTOCOL_MESSAGE msg; + QJsonObject sObj; + sObj.insert("cmd", "trigerCam"); + msg.body = sObj; + if (tcp_client_ptr_B) + tcp_client_ptr_B->ISendMessage(msg); + } +} + +Q_SLOT void valueMainUI::onShowRecvTcpData(QByteArray data) +{ + if (lpGlobalData::instance()->bShowRecv == true) + { + m_pTcpDebugUI->appendRecvData(data); + } +} + +Q_SLOT void valueMainUI::onShowSendTcpData(QByteArray data) +{ + if (lpGlobalData::instance()->bShowSend == true) + { + m_pTcpDebugUI->appendSendData(data); + } +} diff --git a/tpvs17/valueMainUI/valueMainUI.h b/tpvs17/valueMainUI/valueMainUI.h index a9f8501..87202eb 100644 --- a/tpvs17/valueMainUI/valueMainUI.h +++ b/tpvs17/valueMainUI/valueMainUI.h @@ -11,6 +11,8 @@ #include #include #include "libTcpClient.h" +#include "../QPLCDevice.h" +#include "QTCPDebugUI.h" class valueMainUI : public QMainWindow { Q_OBJECT @@ -58,6 +60,10 @@ private://trayIcon Q_SLOT void on_connected_B(); Q_SLOT void on_disconnected_B(); void onShowMainWindow(); + Q_SLOT void onPLCTrigerCam(int camID); + + Q_SLOT void onShowRecvTcpData(QByteArray data); + Q_SLOT void onShowSendTcpData(QByteArray data); protected: virtual void timerEvent(QTimerEvent *event); virtual void closeEvent(QCloseEvent *event); @@ -69,7 +75,13 @@ private: QLabel* m_pLabelA{ nullptr }; QLabel* m_pLabelB{ nullptr }; + QLabel* m_pLabelPLC{ nullptr }; QLabel* m_pLabelSystem{ nullptr }; + +// QLabel* m_pLabelRes_A{ nullptr }; +// QLabel* m_pLabelRes_B{ nullptr }; +// QLabel* m_pLabelState_A{ nullptr }; +// QLabel* m_pLabelState_B{ nullptr }; private: int m_timerA{ 0 }; int m_timerB{ 0 }; @@ -77,11 +89,14 @@ private: lpConfigUI *m_pConfigUI{ nullptr }; lpDebugUI *m_pDebugUI{ nullptr }; + QTCPDebugUI *m_pTcpDebugUI{ nullptr }; + int m_CoutA{ 0 }; int m_CoutB{ 0 }; bool m_bServerA{ false }; bool m_bServerB{ false }; - + bool m_bRunStateA{ false }; + bool m_bRunStateB{ false }; int m_SysTimerID{ 0 }; quint64 m_tickCount{ 0 }; @@ -95,6 +110,8 @@ private: QAction* m_restoreAction{ nullptr }; QAction* m_quitAction{ nullptr }; bool m_bExit{ false }; + + QPLCDevice* m_pPlcDevice{ nullptr }; }; #endif diff --git a/tpvs17/valueMainUI/valueMainUI.ui b/tpvs17/valueMainUI/valueMainUI.ui index 4ea1e96..c742878 100644 --- a/tpvs17/valueMainUI/valueMainUI.ui +++ b/tpvs17/valueMainUI/valueMainUI.ui @@ -51,7 +51,7 @@ QFrame::Raised - + @@ -64,7 +64,7 @@ - + @@ -136,7 +136,7 @@ QFrame::Raised - + @@ -149,7 +149,7 @@ - + @@ -206,8 +206,6 @@ - - @@ -220,6 +218,8 @@ 12 + 50 + false @@ -234,6 +234,8 @@ 12 + 50 + false @@ -271,6 +273,23 @@ + + + + :/Resources/Setting.png:/Resources/Setting.png + + + 通讯调试 + + + 通讯调试 + + + + 12 + + + diff --git a/tpvs17/valueMainUI/valueMainUI.vcxproj b/tpvs17/valueMainUI/valueMainUI.vcxproj index 95336c4..c593f1c 100644 --- a/tpvs17/valueMainUI/valueMainUI.vcxproj +++ b/tpvs17/valueMainUI/valueMainUI.vcxproj @@ -53,7 +53,7 @@ true UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WEBSOCKETS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;%(AdditionalIncludeDirectories) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp;%(AdditionalIncludeDirectories) Disabled ProgramDatabase MultiThreadedDebugDLL @@ -69,7 +69,7 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp Moc'ing %(Identity)... - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;%(AdditionalIncludeDirectories) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp;%(AdditionalIncludeDirectories) UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WEBSOCKETS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) @@ -85,7 +85,7 @@ true UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WEBSOCKETS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;%(AdditionalIncludeDirectories) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp;%(AdditionalIncludeDirectories) MultiThreadedDLL true @@ -100,7 +100,7 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp Moc'ing %(Identity)... - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;%(AdditionalIncludeDirectories) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp;%(AdditionalIncludeDirectories) UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WEBSOCKETS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) @@ -121,11 +121,17 @@ + + + + + + @@ -136,6 +142,7 @@ + @@ -151,6 +158,19 @@ + + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include + + + + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;E:\wheelValve\src\tpMain + + + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;E:\wheelValve\src\tpMain + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets @@ -159,6 +179,14 @@ .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase + + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;E:\wheelValve\src\tpMain + + + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;.\..\..\src\tpMain\algela;.\..\..\3part\tadpole\include\tpBase;.\..\..\3part\lp_libtcp\include;.\..\..\src\tpMain;.\..\..\tpvs17\tpMain\lpRawTcp + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;.\..\..\src\tpMain\algela;E:\wheelValve\3part\tadpole\include\tpBase;$(QTDIR)\include\QtLocation;$(QTDIR)\include\QtNetwork;E:\wheelValve\3part\lp_libtcp\include;E:\wheelValve\src\tpMain + diff --git a/tpvs17/valueMainUI/valueMainUI.vcxproj.filters b/tpvs17/valueMainUI/valueMainUI.vcxproj.filters index a44a951..670a80c 100644 --- a/tpvs17/valueMainUI/valueMainUI.vcxproj.filters +++ b/tpvs17/valueMainUI/valueMainUI.vcxproj.filters @@ -31,6 +31,9 @@ {b528bd13-2709-4bfb-ae7d-6beffda08cc3} + + {6b2afa7b-bb76-4d9e-9870-8a19fb08089a} + @@ -81,6 +84,24 @@ Source Files + + Source Files + + + Source Files + + + lpRawTcp + + + lpRawTcp + + + Source Files + + + Source Files + @@ -110,6 +131,18 @@ Header Files + + Header Files + + + lpRawTcp + + + lpRawTcp + + + Header Files + @@ -121,6 +154,9 @@ Form Files + + Form Files + @@ -146,6 +182,12 @@ Header Files + + Header Files + + + Header Files +