From cecda7ccd72fc8453f0eec1ed86becc872905b34 Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Fri, 17 Oct 2025 17:55:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/qtBridge.h | 14 ++++++++++++- include/yhGlobal.h | 4 ++-- src/Core/back/triggerManager.h | 20 ++++++------------- .../GUI/uiModule/uiModule_runCommand.h | 10 +++++----- src/launcher/main.cpp | 2 +- .../581_YiCiZhuYe_canye.cpp | 15 ++++++++++---- .../581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.h | 8 ++++---- 7 files changed, 42 insertions(+), 31 deletions(-) diff --git a/include/qtBridge.h b/include/qtBridge.h index 2a2a177..57c9d2e 100644 --- a/include/qtBridge.h +++ b/include/qtBridge.h @@ -20,6 +20,18 @@ struct showImgPack{ showImgPack() {}; showImgPack(QString name,QString type) : type(type), name(name) {} }; + +enum valueType { + finsInt, + finsFloat +}; + +struct PlcValueViewerStruct { + QString valueName; + int valueAddr; + valueType type; +}; + class qtFuncBridge : public QObject { Q_OBJECT signals: @@ -66,7 +78,7 @@ signals: //排障 void runCommand_addBtn(const QString& btnName, const QString& tip, const QString& uuid); - void runCommand_addPlcValueViewer(const QString& groupName,std::vector> viewerNameAndAddress); + void runCommand_addPlcValueViewer(const QString& groupName,std::vector viewerNameAndAddress); void runCommand_refeshPlcValueViewer(int address,int value); //性能监测 diff --git a/include/yhGlobal.h b/include/yhGlobal.h index f84e450..f4b6e3b 100644 --- a/include/yhGlobal.h +++ b/include/yhGlobal.h @@ -231,7 +231,7 @@ public: evaluate(i, byteArray);}, ""); //注册清除完成信号触发器 任意触发地址归零时触发一次 _serviceManager->_triggerManager->registerCallback(address[i].triggerAddr, 0, [this, i](int triggerPos, int triggerValue, QByteArray& byteArray) { - _serviceManager->_triggerManager->writeShort("D" + address[0].completeAddr + "_0"); }, "D" + address[0].completeAddr.toStdString() + "清零"); + _serviceManager->_triggerManager->writeShort("D" + address[i].completeAddr + "_0"); }, "D" + address[0].completeAddr.toStdString() + "清零"); } for (int i = 0; i < address.size(); i++) { _serviceManager->_triggerManager->registerPlcValueViewer(viewerNameIN + "_" + QString::number(i), @@ -246,7 +246,7 @@ public: } //获取图片并进行检测 void evaluate(int batteryOffset, QByteArray& byteArray) { - _serviceManager->_triggerManager->writeShort("D" + address[0].completeAddr + "_1");//完成信号 固定只发在第0位 + _serviceManager->_triggerManager->writeShort("D" + address[batteryOffset].completeAddr + "_1");//完成信号 根据偏移发送 std::string sn = _serviceManager->_triggerManager->readSnFromQByteArray(byteArray, address[batteryOffset].snAddr, false, false, -1); auto camera = _serviceManager->_cameraManager->getCamera(cameraName); camera->clearCache(); diff --git a/src/Core/back/triggerManager.h b/src/Core/back/triggerManager.h index 0ee9189..0a2d664 100644 --- a/src/Core/back/triggerManager.h +++ b/src/Core/back/triggerManager.h @@ -181,15 +181,7 @@ public: #pragma endregion #pragma region 接收数据 void reciveCommond(); - //int read(int dmPos, QByteArray byte) - //{ - // int triggerPos = (dmPos - startPos) * 2; - // if (byte.size() < triggerPos) - // return false; - // int val1 = byte.at(triggerPos) * 256; - // int val2 = static_cast(byte.at(triggerPos + 1)); - // return val1 + val2; - //} + QVariant read(int dmPos) { QByteArray readByte; mutex.lock(); @@ -393,12 +385,12 @@ public: } //SUB - void registerPlcValueViewer(const QString& groupName, const std::vector>& viewerNameAndAddress) { - for (auto& data : viewerNameAndAddress) { - if (data.second < 0)continue; - plcValueViewerDatas.push_back({ data.second, -1 }); + void registerPlcValueViewer(const QString& groupName, const std::vector& plcViewerDatas) { + for (auto& data : plcViewerDatas) { + if (data.valueAddr < 0)continue; + plcValueViewerDatas.push_back({ data.valueAddr, -1 }); } - emit bridge->runCommand_addPlcValueViewer(groupName, viewerNameAndAddress); + emit bridge->runCommand_addPlcValueViewer(groupName, plcViewerDatas); } void checkPlcValueViewer(readAllStruct& _struct, QByteArray& byteArray) { QMutexLocker locer(&mutex); diff --git a/src/launcher/GUI/uiModule/uiModule_runCommand.h b/src/launcher/GUI/uiModule/uiModule_runCommand.h index 41c0ea8..dac54f9 100644 --- a/src/launcher/GUI/uiModule/uiModule_runCommand.h +++ b/src/launcher/GUI/uiModule/uiModule_runCommand.h @@ -9,7 +9,7 @@ public: QFont font2 = QFont("微软雅黑", 10, QFont::Bold); QFont font3 = QFont("微软雅黑", 6, QFont::Bold); plcValueViewer(const QString& groupNameIN, - const std::vector>& viewerNameAndAddress, + const std::vector& viewerNameAndAddress, QMap>& plcViwerLineedits) :groupName(groupNameIN){ @@ -20,7 +20,7 @@ public: layout->addWidget(groupNameLabel); for (auto& data : viewerNameAndAddress) { - plcViwerLineedits[data.second].push_back(addViewer(data.first)); + plcViwerLineedits[data.valueAddr].push_back(addViewer(data.valueName)); } widget->setMaximumHeight(100); } @@ -91,13 +91,13 @@ public slots: } }); } - void addPlcValueViewer(const QString& groupName,std::vector> viewerNameAndAddress) { + void addPlcValueViewer(const QString& groupName,std::vector viewerNameAndAddress) { auto widget = new plcValueViewer(groupName, viewerNameAndAddress, plcViwerLineedits); plcValueViewerLayout->addWidget(widget->widget,Qt::AlignTop); } - void refreshPlcValueViewer(int address, int value) { + void refreshPlcValueViewer(int address, QVariant value) { for (auto& lineedit : plcViwerLineedits[address]) { - lineedit->setText(QString::number(value)); + lineedit->setText(value.toString()); } } private: diff --git a/src/launcher/main.cpp b/src/launcher/main.cpp index 39d2b65..39b7632 100644 --- a/src/launcher/main.cpp +++ b/src/launcher/main.cpp @@ -215,7 +215,7 @@ int main(int argc, char* argv[]) qRegisterMetaType("mat"); qRegisterMetaType>("vectorstring"); qRegisterMetaType>>("constvpqi"); - + qRegisterMetaType("PlcValueViewerStruct"); #pragma endregion QApplication a(argc, argv); _core.initDatabase(); // 初始化数据库 diff --git a/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.cpp b/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.cpp index e0da6a5..0d966f3 100644 --- a/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.cpp +++ b/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.cpp @@ -6,8 +6,9 @@ void exceptionResume(std::shared_ptr data, canyeParams* _detParams, sx_ data->oriImgs[0].copyTo(Paint); if (Paint.channels() == 1) cvtColor(Paint, Paint, cv::COLOR_GRAY2BGR); - TextRendererZH textPainter(Paint.cols, Paint.rows, 15); - textPainter.putText(Paint, "NG", cv::Point(1000, 50), cv::Scalar(0, 255, 0)); + + TextRendererZH textPainter(Paint.cols, Paint.rows, 300); + textPainter.putText(Paint, why.toStdString(), cv::Point(500, 50), cv::Scalar(0, 255, 0)); cv::resize(Paint, Paint, cv::Size(), 0.5, 0.5); data->resultImgs.push_back(Paint); data->service->_triggerManager->writeShort("D" + address.resultAddr + "_1");//结果反馈 @@ -26,6 +27,7 @@ bool yizhuCanYe(std::shared_ptr data, canyeParams* _detParams, sx_581_a QByteArray plcResult = "1"; QString detResult = "OK"; cv::Mat sourceImg = data->oriImgs[0]; + //sourceImg = cv::imread("D://readSnEmpty13-12-30-14Camera1_13-12-32-38_Count0.bmp"); cv::Mat Paint; sourceImg.copyTo(Paint); @@ -40,6 +42,10 @@ bool yizhuCanYe(std::shared_ptr data, canyeParams* _detParams, sx_581_a //cv::resize(workImg, workImg, cv::Size(), 0.25, 0.25); cv::Mat dingWeiResultImg = ~_detParams->segDingWei->Evaluate(workImg); cv::Rect dingWeiRect = findMaxAreaContour(dingWeiResultImg); + if (dingWeiRect.x == 0 && dingWeiRect.y == 0 || dingWeiRect.width < 10 || dingWeiRect.height < 10) { + exceptionResume(data, _detParams, address, "定位注液孔失败"); + return true; + } cv::Point2f center(dingWeiRect.x + dingWeiRect.width / 2, dingWeiRect.y + dingWeiRect.height / 2); cv::Mat centerImg; cv::Rect cutArea = cv::Rect(center.x - 64, center.y - 64, 128, 128); @@ -47,14 +53,15 @@ bool yizhuCanYe(std::shared_ptr data, canyeParams* _detParams, sx_581_a //////////////////////////////////// int res = 0; res = _detParams->clsCanYe->Evaluate(centerImg); + data->segOriginImgs.push_back(centerImg); if (res == 0){ - cv::putText(Paint, "OK", cv::Point(Paint.cols - 500, 0), 10,10,cv::Scalar(0, 255, 0)); + cv::putText(Paint, "OK", cv::Point(100, 500), 1,20,cv::Scalar(0, 255, 0), 10); cv::rectangle(Paint, cv::Rect(cutArea.x * 4, cutArea.y * 4, cutArea.width * 4, cutArea.height * 4), cv::Scalar(0, 255, 0), 3); } else{ - cv::putText(Paint, "NG", cv::Point(Paint.cols - 500, 0), 10, 10, cv::Scalar(0, 255, 0)); + cv::putText(Paint, "NG", cv::Point(100, 500), 1, 20, cv::Scalar(0, 255, 0), 10); cv::rectangle(Paint, cv::Rect(cutArea.x * 4, cutArea.y * 4, cutArea.width * 4, cutArea.height * 4), cv::Scalar(0, 0, 255), 3); plcResult = "2"; data->aiDetOK = false; diff --git a/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.h b/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.h index 8dc5953..24e91d3 100644 --- a/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.h +++ b/src/mission/581_YiCiZhuYe_canye/581_YiCiZhuYe_canye.h @@ -12,7 +12,7 @@ public: handdleAI::pSegmentation* segDanYe = nullptr; handdleAI::pClassification* clsCanYe = nullptr; bool YiZhu = true; - bool DOGLIVE = false; + bool DOGLIVE = true; }; bool yizhuCanYe(std::shared_ptr data, canyeParams* _detParams, sx_581_address address); @@ -32,9 +32,9 @@ public: for (auto¶m : canyeDetParams) { if (param.DOGLIVE == false) continue; - param.segDingWei = handdleAI::CreateSegObjS("./handleaiModels/canye/pSeg_DingWei.BHD", 16, 0); - param.segDanYe = handdleAI::CreateSegObjS("./handleaiModels/canye/pSeg_CanYe.BHD", 16, 0); - param.clsCanYe = handdleAI::CreateClsObjV3("./handleaiModels/canye/pCls_CanYe.BHD", 0, 1); + param.segDingWei = handdleAI::CreateSegObjS("./handleaiModels/yiCiZhuYe/pSeg_DingWei.BHD", 16, 0); + param.segDanYe = handdleAI::CreateSegObjS("./handleaiModels/yiCiZhuYe/pSeg_CanYe.BHD", 16, 0); + param.clsCanYe = handdleAI::CreateClsObjV3("./handleaiModels/yiCiZhuYe/pCls_CanYe.BHD", 0, 1); } initOnce = true; }