From 991c9c9a78b299c696fccbda991bcb5aef4f9642 Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Fri, 9 Aug 2024 17:38:23 +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 --- Doc/交互逻辑.xls | Bin 69632 -> 69632 bytes .../HandleAiUi-new/algo/ALGO_Inspection.h | 2 +- HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h | 1 + .../HandleAiUi-new/algo/CISCO_APEXSMALL.hpp | 2 +- HanddleAI/HandleAiUi-new/algo/simpleAlgo.h | 4 ++ HanddleAI/HandleAiUi-new/back/detData.h | 2 +- HanddleAI/HandleAiUi-new/detProcess.hpp | 24 +++++-- HanddleAI/HandleAiUi-new/main.cpp | 4 ++ .../uiModule_imageDoubleCheckQdialog.h | 62 +++++++++++++++--- lib/Hd_3DCameraLMI_module_PointLazer.exp | Bin 772 -> 798 bytes lib/Hd_3DCameraLMI_module_PointLazer.lib | Bin 2276 -> 2276 bytes lib/Hd_DalsaCamera_module.exp | Bin 751 -> 777 bytes lib/Hd_DalsaCamera_module.lib | Bin 2120 -> 2120 bytes lib/Hd_FinsTcp_module.exp | Bin 743 -> 769 bytes lib/Hd_FinsTcp_module.lib | Bin 2064 -> 2064 bytes lib/Hd_MvCamera_module_GENTL.exp | Bin 756 -> 782 bytes lib/Hd_MvCamera_module_GENTL.lib | Bin 2164 -> 2164 bytes lib/Hd_MvCamera_module_GIGE.exp | Bin 755 -> 781 bytes lib/Hd_MvCamera_module_GIGE.lib | Bin 2148 -> 2148 bytes lib/Hd_ResultsSummary_module.exp | Bin 756 -> 782 bytes lib/Hd_ResultsSummary_module.lib | Bin 2164 -> 2164 bytes lib/Hd_SocketModule_ModbusTcp.exp | Bin 1501 -> 1527 bytes lib/Hd_SocketModule_ModbusTcp.lib | Bin 3446 -> 3446 bytes 23 files changed, 83 insertions(+), 18 deletions(-) diff --git a/Doc/交互逻辑.xls b/Doc/交互逻辑.xls index d6fb30bf2fe86770bd70822a7c45553eef1ea88c..0dfe195a5fa13d538f237c8d5207e5a76eb89af1 100644 GIT binary patch delta 543 zcmX|0Kf z2u8?BB6?X5Z4W(cbg27nE>{-Bh48^6hIb<=~})aW17G#~J=Zsg4AEI=m>_&v(F^6;Y#V{+L)?XdNN z)A>1na_(q2@Lq;59(1a`u#B`ao|Vm8=TXer;#}*O!8=}?CIC-eDore8er7B8R{~o> zBJ#BPAy13sveq8~*q_L~4{F+>->?U|!3z7}G?&jR=4uys0ZLcBwE6TN`sjLou&eLi zp&Jw!2G~e>%|bV{K?wT!YzcbcJJs`DI6zwA2#(Q-!Vm^!rtn-~kd7C149R%$mB0`k zDC-!eOd%k%<%D2af1~3F#ft%X;qA0w`RSdGqbZVpVSbp3 z)pK(H(v-j`-K^@|t!LE*fiaq@=@#R^W34tR(4cTb$2iS2lFapn3lpt7Q|n2=a`l(a zxy@Y0)@8x6(sXh5ou-3B+y6K?shc@M26L3IF(dSt8Ku|E7=2+Hw8Koy+tGnz^KSID eoBaep?rZmpyV!>>6`a{^`P#uBp?sqqXVt$l^uXi* delta 502 zcmW-dO-LJ26oubS$GilyFav@hH3M3uT@;D9Cq}?k~XaikT z!!@McXjX{}HPY9bwvYzgh}fdG3%d#tVV2QFAruPs&b-C<&K%Bp!@cQ(lrBhzOOp9w zzhk3%gD<7ma3KCle_YVOrY~T(dKew^-8=mXGA84g-({LGE zd;@O$SPXy%{}sEfUaDL%C;N^{=@C4^u~IK2aj_JJ0J>YMXxp9RB$Zkxu9js8ifs7{ zhoE81R%8enspHBtC#lp1U>vh$Rpe_aPExNuJdq(xspledGRsNosfdx9Ij2;_Frs*- zB}C|InM2g5{iw?j6OH;YhnQh})?`q{nf8r?Y8X3B8RGb%`GVMYI|K>+O`JKmi1O_M zr%(OwPg^qW&)xdUX)N8a-}lfwgZB;^B2Elpia3ssKbBX~iK;vF%T>i`F+xj|wg q7bhljDe$yAnS~Yyv^eLdDtG}4{^27NtXSK+*4|ccD(mgAD*Xq92D!%o diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 822fd6e3..3ad7276b 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -16,7 +16,7 @@ bool pinHalconEvaluate(std::shared_ptr data, cv::Rect& Result, cv::Mat std::vector pinDetEvaluate(std::shared_ptr data, cv::Mat& src, handleAiModelManager* _handleAiModelManager) { std::vector result; - handleAiModelDet* detPtr = _handleAiModelManager->getDetModel(data->_productDataStruct.handleAiData.detModelName); + handleAiModelDet* detPtr = _handleAiModelManager->getDetModel("connectorDet.BHD"); if (detPtr == nullptr) return std::vector(); detPtr->Evaluate(src, result); diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h index 437b60f0..29287504 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h @@ -23,6 +23,7 @@ bool processAlgo(std::shared_ptr data, handleAiModelManager* _handleAi catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; + std::cout << "Caught exception: " << e.what() << std::endl; return false; } return false; diff --git a/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp b/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp index 148f9a01..b465082c 100644 --- a/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp +++ b/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp @@ -62,7 +62,7 @@ static void apexSmallHalconPaint(cv::Mat& out, std::vectorxLi static cv::Mat apexSmallHalconAlgo(std::shared_ptrdata, cv::Mat& src) { cv::Mat halconImg; - src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + src.copyTo(halconImg); HTuple hv_out_OK_Pings; HTuple hv_out_NG_Pings; HTuple hv_out_Flag_INS; diff --git a/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h index 778229e7..50b77585 100644 --- a/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h +++ b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h @@ -706,6 +706,10 @@ struct rectAndData //ƽÆÌͼÏñ static cv::Mat tiledImages(std::vector& imgs) { + if (imgs.size() == 0) + return cv::imread("./noimg.png",-1); + if (imgs.size() == 1) + return imgs[0]; //×ÜͼÏñ´óС ƽÆÌÏÔʾ int matWidth = 0, matHeight = 0; for (auto& mat : imgs) diff --git a/HanddleAI/HandleAiUi-new/back/detData.h b/HanddleAI/HandleAiUi-new/back/detData.h index 23577b81..6f010672 100644 --- a/HanddleAI/HandleAiUi-new/back/detData.h +++ b/HanddleAI/HandleAiUi-new/back/detData.h @@ -84,7 +84,7 @@ public: std::vectorimgSaveFileParameter;//ÃüÃû¹æÔò str1_str2... µÚÒ»¸ö²ÎÊýÒÑĬÈÏΪÏà»úÃû£¬ÔÚ¹¹Ô캯Êý //ÐèÒª´æÈëµÄSQLÊý¾Ý - std::vector> sqlVec; + std::vector> sqlVec; detData(std::string IN_cameraKeyName) { cameraKeyName = IN_cameraKeyName; diff --git a/HanddleAI/HandleAiUi-new/detProcess.hpp b/HanddleAI/HandleAiUi-new/detProcess.hpp index afeec8aa..8314b959 100644 --- a/HanddleAI/HandleAiUi-new/detProcess.hpp +++ b/HanddleAI/HandleAiUi-new/detProcess.hpp @@ -259,6 +259,8 @@ public: //¼ì²â½á¹û´¦Àí void detectionResultHandle(std::shared_ptrdata) { + data->sqlVec.push_back({ "SN",data->SNcode }); + data->sqlVec.push_back({ "ARMPOS",std::to_string(data->armPos)}); //·¢ËÍͼƬ if (data->resultImgs.size() > 0) { @@ -292,25 +294,26 @@ public: emit _core._qtFunc.addDashBoardData(1, data->aiDetOK); emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(data->armPos, (data->halconOK==true&& data->aiDetOK==true)?2:3); - bool finalOk = (data->halconOK == true || data->aiDetOK == true)? true :false; - if(finalOk=false) + bool finalOk = (data->halconOK == true && data->aiDetOK == true); + if(finalOk == false) { - for (auto showMat : data->resultImgs) + for (auto& showMat : data->resultImgs) { QPixmap pixmap; cvMatToQPixMap(showMat, pixmap); - showImgPack* pack = new showImgPack(); + //showImgPack* pack = new showImgPack(); emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pixmap); } } auto productData = _core._productDataCache.get(currentSn); - if (finalOk = false) + if (finalOk == false) productData->ngCount++; perConnector _perConnectorData; _perConnectorData.aiOk = data->aiDetOK; _perConnectorData.halconOk = data->halconOK; _perConnectorData.maxPinDetValue = data->maxPinDetValue; productData->connectorResults.push_back(_perConnectorData); + data->sqlVec.push_back({ "Result",std::to_string(finalOk)}); } //ct¼ÆËãÒÔ¼°·¢Ë͵½½çÃæ auto totalCt = std::chrono::duration_cast(data->halconEndTime - data->algoStartTime); @@ -322,11 +325,13 @@ public: emit _core._qtFunc.addCtData(1, aiCt.count()); if (halconCt.count() > 0) emit _core._qtFunc.addCtData(2, halconCt.count()); - + data->sqlVec.push_back({ "totalCt",std::to_string(totalCt.count()) }); + data->sqlVec.push_back({ "aiCt",std::to_string(aiCt.count()) }); + data->sqlVec.push_back({ "halconCt",std::to_string(halconCt.count()) }); //SQL std::vector sqlDatas; for (auto sqlData : data->sqlVec) - sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) }); + sqlDatas.push_back({ sqlData.first, sqlData.second }); _core._appConfig._sqlManager.addData(data->SNcode, sqlDatas); //дÈëplc @@ -364,5 +369,10 @@ public slots: _triggerManager.sendFinsMsg("write_short_350_" + QString::number(_core._appConfig.productDatas[productTypeIn].indexOfArm)); _triggerManager.sendFinsMsg("write_short_351_1"); } + //È˹¤¸´Å̰´ÏÂNG + void uiModuleImageDoubleCheckQdialog_pressNG() + { + _triggerManager.sendFinsMsg("write_short_363_1"); + } }; #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index a80d82d5..659ab3c9 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -107,8 +107,12 @@ void connectSignalAndSlots(MainWindow* front, appCore* _core, detProcess* _detPr front->_displayWidget->_uiModuleLocationMap, &uiModuleLocationMap::resetToDefault); QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleLocationMap_SetProductSignStatus, front, &MainWindow::uiModuleLocationMapSetProductSignStatus); + //uiModuleImageDoubleCheckQdialog QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleImageDoubleCheckQdialog_ShowWindows, front, [=](QPixmap map) {front->_imageDoubleCheckQdialog->showAndSetImg(map); }); + QObject::connect(front->_imageDoubleCheckQdialog,&imageDoubleCheckQdialog::ngSignal, + _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressNG); + //uiModuleSummaryDataManager QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_SetSummaryResultText, front, [=](QString text, Qt::GlobalColor color) {front->_displayWidget->_summaryDataManager->setSummaryResult(text, color); }); diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h index 9025dd05..3d966ba1 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h @@ -17,6 +17,8 @@ public: QPushButton* closeBtn = new QPushButton(this); fancyButtonText* okBtn = new fancyButtonText(120, 40, "OK", "¼ÌÐø"); fancyButtonText* ngBtn = new fancyButtonText(120, 40, "NG", "¼ÌÐø"); + QMutex mutex; + QQueue< QPixmap>imgqueue; imageDoubleCheckQdialog() { QPalette paletteWhite, paletteRed, paletteGreen; @@ -81,21 +83,21 @@ public: menuBarLayoutRight->addWidget(closeBtn); QObject::connect(closeBtn, &QPushButton::clicked, this, &QDialog::close); - + QHBoxLayout* imageViewLayout = new QHBoxLayout(); imageViewLayout->addWidget(_ImageWidgetManager); _ImageWidgetManager->createViewer(""); _ImageWidgetManager->disableAllSwitchBtn(); - + QHBoxLayout* okngBtnLayout = new QHBoxLayout(); okngBtnLayout->addWidget(okBtn); okngBtnLayout->addWidget(ngBtn); - QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {emit okSignal(); }); - QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {emit ngSignal(); }); + //QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); + //QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); + QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {pressOK(); }); + QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {pressNG(); }); layout->addWidget(menuBarWidget, 0, 0); layout->addLayout(imageViewLayout, 1, 0); @@ -105,13 +107,57 @@ public: } void showAndSetImg(QPixmap img) { - _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); - this->show(); + mutex.lock(); + std::cout << isShowing<<"-" << imgqueue.size()<< std::endl; + if (isShowing == false && imgqueue.size() == 0) + { + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + this->show(); + isShowing = true; + } + else + { + imgqueue.enqueue(img); + } + mutex.unlock(); } signals: void okSignal(); void ngSignal(); private: + void pressOK() + { + mutex.lock(); + emit okSignal(); + if (imgqueue.size() > 0) + { + QPixmap img = imgqueue.dequeue(); + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + void pressNG() + { + mutex.lock(); + emit ngSignal(); + if (imgqueue.size() > 0) + { + QPixmap img = imgqueue.dequeue(); + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + bool isShowing = false; bool isMoving = false; bool isResizing = false; int minWidth = 720, minHeight = 480; diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index d8e955a08830ce97f26c66b802d0659eea1b677e..97d8b87b5a54ed11f0f0bf06624e98e39c3ad3b0 100644 GIT binary patch delta 186 zcmZo+o5#kP(#FK_9|)W#aym20P4vCbE5yjaV9UTL$N&V+lPwv&>NOYyS{N97Gn0$* zi}TY;6f}Y~6?{DXyct>-3=gpAKU@ORwT%N+N1 zlA2VS&X8J>%HU!Z6BcY_U}O{%<{T4}pPy44;~NZQ8k*=CTk07bn;KfiBxUBsc;pwC Y0Cj?N$K+(@O_pKOWBS}Q*@x*809VmC6aWAK diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.lib b/lib/Hd_3DCameraLMI_module_PointLazer.lib index b04150d66d0bd6f8780c0ea27f1bb8d8c729edd8..36c75b149f315b6d9f39a25471404d60a91a35ae 100644 GIT binary patch delta 118 zcmaDN_(X8S0VbAS@rnN@A7MJqqQM~0GP$3*m6ylW|Qx-^}tjrLsf2`#qPxj05HBKZU6uP delta 118 zcmaDN_(X8S0VbAz%oEN}KEiaIMV;Yu)8u~UVkRIpi(P879E$-XXW8l7S1&OzFfdI% w$s|3wh_xQ3OnveMb`Gf0$qsCBoC?-nr@ui}noYjT)&osvd^3}a z@{9A+N)$ALG!=Y2{k$1k8Egd^lFL(o>LxNuy9cG_q$U=pGNe|dGB{hs1O)lJ2RYUm z#`tQ*oMS@r^K*)0e1m~ZLlYB&Izv5UV~fc*8J(B} KS|-afT>=2WYcBEt delta 138 zcmeBVd(X<5(#FK_9|(jeaym2pWSHo8h4(E31A`F*qacuC@SLpAXs@i!@VSYB!8bFx zD8D#Atwcd1NK?Vb)6bhBo55C)A-OySsBR*ow605PQfWFvYDFr8i&acmu#th0QB0U~ lOh|ryPH~KHFpz0zqGxQWXKZY0XgT>aqZ8BTrpe|^mjGNtDWm`Z diff --git a/lib/Hd_DalsaCamera_module.lib b/lib/Hd_DalsaCamera_module.lib index 9c451b2ec75fbfd47c5b293388f4274cb1b1aa9e..cc2d36e5dd6097c8d1dffea4f0e34dc019fb0ad6 100644 GIT binary patch delta 109 zcmX>ha6({12NTODh23{1_b}~Y(O?j0ne4-y&IF|7*`+q0XO?DUVSi@ub@DrwDKJ^} s$!l3TpeiO`WQ}DF@!xsr_2l;~@{`vvNl(sYYlNv(hN|2w&#uV`01D?LO#lD@ delta 109 zcmX>ha6({12NTP2)AOe%_b}~YQD^wvG}(taoe4&fp~02Rk5eEsvd^3}a z@{9A+N)$ALG!=Y2{k$1k8Egd^lFL(o>N**v-GfqdQWJ|)8B!}!8Jw+R0)qVAgBouQtwvBl(zj804f KEt5r=E&%|cvo5Lt delta 138 zcmZo;m diff --git a/lib/Hd_FinsTcp_module.lib b/lib/Hd_FinsTcp_module.lib index f679fdae9df129fa1e4d394f63100284f9d61348..a50e177e10f90e3993f56c5a13e462416b8c93d4 100644 GIT binary patch delta 113 zcmbOrFhO8L2@@y(r?ji`j0_AMllj@qCU0h{Wzk>|Xqg}QqQyqQ^; wk>!eB#hJ;cSSG+!=tE@7S(vllUz^OuwgV=i%;k`rpIe}pnF7_$%g)RQ0BqkOCjbBd delta 113 zcmbOrFhO8L2@~f(^@6+dj0_AMllj@qCU0h{Wl?AN+%!3kRef?avkeoF+0QDqc{8&x wBa6wYtap=7u}pxe(1*yDvp75wyE2)JZ3j$3nad$LKes?HGX<)hmz|jr0D+b!iU0rr diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index ebd6dce5c4074d58a4d8a8aeb34c9ed2980064e3..cd7a09856f41e935ba31f1206b025b5c61669f5f 100644 GIT binary patch delta 187 zcmeyu+Q-J3(#FK_9|(*laym1KF;4Wm#>>UXz+lS2D98W=&XWxpo$56h1X>svd^3}a z@{9A+N)$ALG!=Y2{k$1k8Egd^lFL&VoULM#GmDe+9rH6oGh^~gOJb5rGjmd6D$GoD zgHm%+6N^(BQY%tH>H>oN-GdzK3}bvforC;?>x^QI42+Cooc(=$L;ZllVa_oj`T04; gF}}e-rlE<60b8A+p0TmT-xOad*Fm6$F805$nH{{R30 delta 180 zcmeBU`@+hZ(#FK_9|$BSaym2pVVLN5jrRis1A{38qacuC@SJSO=v1%H@VSYB!8bFx zD8D#Atwcd1NK?Vb)6bhBo55C)A-Oz-!P6=xIkPx9-!VTkG&3f@v?L~}G&3h9rozlb z*CjQnG@T)}B9+0#Dkd!0$iT=bCd@e|BtJi=IL0>^$TT$3Gq%(-Ha0c1j7iGOi}A=W ZE&=KU>5j?C%$v-^q{sBRX|fH|B>)@kITQc@ diff --git a/lib/Hd_MvCamera_module_GENTL.lib b/lib/Hd_MvCamera_module_GENTL.lib index 578b535ee41c6c12f7e6ab81feeae0134eac1aaf..a65c613a9788aa36e3530d6a5ccb1cad49b8c1da 100644 GIT binary patch delta 118 zcmew&@I_$53?`PsF#ive=P>PO(O?j0nH>gbz+l3_D98W=&XWxp9qTn11X>svd^3}a z@{9A+N)$ALG!=Y2{k$1k8Egd^lFL&VoULM#GmDe+9rH6oGh^~gOJb5rGjmd6D$GoD zgHm%+6N^(BQY%tH>H>oN-GdzK3}bvforC;?>x^QI42+Cooc(=$L;ZllVa_oj`T04; gF}}e-rlE<60b8A+p0TmT^$TT$3Gq%(-Ha0c1j7iGOi}A=W ZE&=KU>5j?C%$v;3q{sBRX|grbB>)$3IST*) diff --git a/lib/Hd_MvCamera_module_GIGE.lib b/lib/Hd_MvCamera_module_GIGE.lib index f5ba12df64b2f2e149f3a1b7a1622e6c2dd11692..b1396b9be8cfc2bad5039077ec72d4077da69fd6 100644 GIT binary patch delta 108 zcmaDN@I+w4Bqo*{N6bD?p2oC~MT0@0W%4Xm^~v?jPE0`NX;!JtcbVlGS(crsyEln- s8ccycM6#TfyL!>nx04xJXYl4otS{k)2vdP?=s6XvY5Ryxjl(> s8ccycM6#SUOQrAa+sTZq@{`lp=D}o@xg3)7a|`q`Q=mrpvx_nU04H}TWB>pF diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 98647907b2b4e1df2047e01da5a2bdbd7906bfd5..1880b09b51e497f37aa5ae54de155d56902c2475 100644 GIT binary patch delta 187 zcmeyu+Q-J3(#FK_9|(*laym1KF;4Wm#>>UXz+lS2D98W=&XWxpo$56h1X>svd^3}a z@{9A+N)$ALG!=Y2{k$1k8Egd^lFL&VoULM#GmDe+9rH6oGh^~gOJb5rGjmd6D$GoD zgHm%+6N^(BQY%tH>H>oN-GdzK3}bvforC;?>x^QI42+Cooc(=$L;ZllVa_oj`T04; gF}}e-rlE<60b8A+p0TmT-xOad*Fm6$F805$nH{{R30 delta 180 zcmeBU`@+hZ(#FK_9|$BSaym2pVVLN5jrRis1A{38qacuC@SJSO=v1%H@VSYB!8bFx zD8D#Atwcd1NK?Vb)6bhBo55C)A-Oz-!P6=xIkPx9-!VTkG&3f@v?L~}G&3h9rozlb z*CjQnG@T)}B9+0#Dkd!0$iT=bCd@e|BtJi=IL0>^$TT$3Gq%(-Ha0c1j7iGOi}A=W ZE&=KU>5j?C%$v-^q{sBRX|fH|B>)@kITQc@ diff --git a/lib/Hd_ResultsSummary_module.lib b/lib/Hd_ResultsSummary_module.lib index ff33633f3db52aec9c9ccb88fc9c624c2109a9d1..a61fbd40216d4091ba157f7b97afab308e79a4fe 100644 GIT binary patch delta 118 zcmew&@I_$53?`PJ|NEa$p2M`CMT0@0WpX@oHj_Zh<}=JzjGU7uUOIM)fq{W(@N^g#37iR$WFG delta 118 zcmew&@I_$53?`Pswa5QWp2M`CMV;Yu)8u&OY^Kjmo6j&?F>?O9FyY}T1_lPE$qSjJ zCu^~m!<48`KEuiZR5tkxv()4dtZ|%fSC*cB2UTe{xtFa4rcxQ9QhIYNyEr2N6TK|m diff --git a/lib/Hd_SocketModule_ModbusTcp.exp b/lib/Hd_SocketModule_ModbusTcp.exp index 30c37bd291ea123424cd8e8b26775ebc78ae748e..f97806414b3a4e971708daad71c818bffbb5409f 100644 GIT binary patch delta 165 zcmcc1{hgaLrHzT59#y1$qG&C_Ws58_vHny1jndupm LK+ERa%uGxGpbavn delta 139 zcmey)eV3avrHzTQM&7B63=C!rjDie6;5pfq$yr&Q;d2uMgKuVX zQGRiLT8V;2kfwr_^E0N;O`E?mGcf@G_CqRL diff --git a/lib/Hd_SocketModule_ModbusTcp.lib b/lib/Hd_SocketModule_ModbusTcp.lib index 7d987e797c1925944487933e8b6ed09e14a3773c..5ec47732196dc7452962b23c04a9ae6b8cb23ce6 100644 GIT binary patch delta 108 zcmew+^-XHSI~LBiA5)I%Gcqu6Oy0<0Hd&Xol|_R=pk)$=`sBN;E=&R~lMOkfHrui( wGqS!kFaLLX@>&l0$t~;^P*wU673D03ub!ToyoTcdSbTB;r#4LMcFz6G0MnZzxBvhE delta 108 zcmew+^-XHSI~GpM+Y9dLGcqu6Oy0<0Hd&Xol|`N5bJHXa^~rZxU6?*MO*Z6^+HA|F w%*Z-jM&-ik$!j^}C%3RyKvn5ORFt#4P6>N7c@4(_u=wNxPHmXh?VS6W0bcJXg#Z8m