From ae1f9a1dc743b4d383d61144dd772ccf186d4843 Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Sun, 19 May 2024 15:43:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8ackEndController=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E8=A7=A6=E5=8F=91=E5=99=A8=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8triggerController=20=E6=B5=8B=E8=AF=95=20modubus?= =?UTF-8?q?=E8=83=BD=E6=88=90=E5=8A=9F=E8=AF=BB=E5=8F=96=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandleAiUi-new/back/backEndController.cpp | 0 .../HandleAiUi-new/back/backEndController.h | 12 ++ .../HandleAiUi-new/back/triggerController.h | 203 ++++++++++++++++++ HanddleAI/HandleAiUi-new/main.cpp | 32 +-- include/dll1.h | 93 -------- 5 files changed, 225 insertions(+), 115 deletions(-) create mode 100644 HanddleAI/HandleAiUi-new/back/backEndController.cpp create mode 100644 HanddleAI/HandleAiUi-new/back/backEndController.h create mode 100644 HanddleAI/HandleAiUi-new/back/triggerController.h delete mode 100644 include/dll1.h diff --git a/HanddleAI/HandleAiUi-new/back/backEndController.cpp b/HanddleAI/HandleAiUi-new/back/backEndController.cpp new file mode 100644 index 00000000..e69de29b diff --git a/HanddleAI/HandleAiUi-new/back/backEndController.h b/HanddleAI/HandleAiUi-new/back/backEndController.h new file mode 100644 index 00000000..9830f6d7 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/backEndController.h @@ -0,0 +1,12 @@ +#include +class backEndController +{ +public: + triggerController _triggerController;//触发器 + + backEndController() + { + _triggerController.init(); + } +}; +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/triggerController.h b/HanddleAI/HandleAiUi-new/back/triggerController.h new file mode 100644 index 00000000..0230d986 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/triggerController.h @@ -0,0 +1,203 @@ +#include +#include +#include + +typedef Base* (*CreateFunction)(); +typedef void (*ReleaseFunction)(Base* animal); +//防止重复触发 +class triggerLockerT +{ +public: + triggerLockerT() + { + + } + ~triggerLockerT() + { + lockerList.clear(); + } + bool checkLocker(int input) + { + for (int i = 0; i < lockerList.size(); i++) + { + if (input == lockerList[i].pos) + { + return false; + } + } + return true; + } + void reFreshLocker(QByteArray byte) + { + for (int i = 0; i < lockerList.size(); i++) + { + if (byte.at(lockerList[i].pos) != lockerList[i].value) + { + lockerList.removeAt(i); + } + + } + } + void adddLocker(int inputPos, int posValue) + { + lockerList.push_back(lockerStruct({ inputPos, posValue })); + } + struct lockerStruct + { + int pos; + int value; + }; + QListlockerList; +private: + +}; +//触发器类 fins触发 tcp触发等 替代myiothread +class triggerController : public QThread +{ +public: + QString triggerFileName = QString("Hd_SocketModule_ModbusTcp"); + ~triggerController() + { + runFlag = false; + QThread::msleep(100); + } + void init() + { + QLibrary* m_lib = new QLibrary(triggerFileName); + bool flag = m_lib->load(); + if (!m_lib->isLoaded()) + { + + //qDebug() << "[Error] " << " Loaded error:" << m_lib->errorString(); + return ; + } + + if (flag) + { + CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); + ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); + if (createFun && releaseFun) + { + trigger = createFun(); + destory_finstcp = releaseFun; + QByteArray initByte = QByteArray::fromStdString("sleeptime_20_readnum_300_writetype_ushort"); + std::vector dddd; + trigger->reciveData(dddd, QByteArray::fromStdString("init_127.0.0.1_502_1")); + trigger->initParas(initByte); + } + else + { + delete m_lib; + m_lib = nullptr; + return; + } + } + this->start(); + } + void run() + { + while (runFlag) + { + reciveCommond(); + QThread::msleep(interval); + } + } + + void reciveCommond() + { + //auto start = std::chrono::high_resolution_clock::now(); + //QByteArray byte = m_readAllCmd.toUtf8(); // 设置 从起始位开始读取的指令 + QByteArray byte = QByteArray::fromStdString("read_byte_1_500"); + if (sendFinsMsg(byte)) + qCritical() << "[TCP] " << " finstcp_ptr reciveData error!"; + QByteArray readByte; + if (!reciveFinsMsg(readByte)) + qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; + tLocker.reFreshLocker(readByte);//经过检查后再触发 + //auto end = std::chrono::high_resolution_clock::now(); + //auto duration = std::chrono::duration_cast(end - start); + //std::cout << "cost: " << duration.count() << " mm" << std::endl; + //decodeCameraCMD(readByte); + //workThread->snDatas.checkSnFromWaittingVec(readByte); + } + + + + //发送数据到 + bool sendFinsMsg(QString cmdx) + { + + if (!trigger->reciveData(vec_mat, cmdx.toUtf8())) + { + qCritical() << "[TCP Error] " << QString::fromUtf8("Fins数据发送失败!") << cmdx; + return false; + } + return true; + } + bool sendFinsMsg(const char* cmdx) + { + QString str = cmdx; + if (!trigger->reciveData(vec_mat, str.toUtf8())) + { + qCritical() << "[TCP Error] " << QString::fromUtf8("Fins数据发送失败!") << cmdx; + return false; + } + return true; + } + bool sendFinsMsg(QByteArray write_byte) + { + if (!trigger->reciveData(vec_mat, write_byte)) + { + qCritical() << "[TCP Error] " << QString::fromUtf8("Fins数据发送失败!") << write_byte; + return false; + } + return true; + } +private: + triggerLockerT tLocker;//防止重复触发,每次收到数据时检查数据是否与上次相同,如果相同checkTrigger会返回false + /// + /// 检测QByteArray中某位置的值是否和输入一样,使用了绝对位置 + /// + /// 绝对位置 + /// 值 + /// QByteArray + /// + bool checkTrigger(int dmPos, int value, QByteArray byte, bool lockerDisable = false) + { + int triggerPos = (dmPos - startPos) * 2 + 1; + if (byte.size() < triggerPos) + return false; + if (byte.at(triggerPos) == value) + { + if (tLocker.checkLocker(triggerPos) == false) + return false; + if (lockerDisable == false) + tLocker.adddLocker(triggerPos, value); + return true; + } + else + return false; + } + //接受数据 + bool reciveFinsMsg(QByteArray& readByte) + { + if (!trigger->sendData(vec_mat, readByte)) + { + qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; + return false; + } + return true; + } + + //触发器的配置 + int startPos = 1;//数据读取的起始位 + int interval = 10;//间隔 + + ReleaseFunction destory_finstcp; //释放 + Base* trigger = nullptr; + bool runFlag = true; + std::vector vec_mat;//没啥用,一直保持为空就好 +}; + + +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index 6522a454..ef8ab040 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -9,40 +9,28 @@ #include #include #include -int main ( int argc, char *argv[] ) +#include +int main(int argc, char* argv[]) { QApplication a(argc, argv); - MainWindow w; -#pragma region -#if 0//鐧诲綍鐣岄潰 - QEventLoop loop; - loginDialog dialog; - QObject::connect(dialog.exitBtn, &QPushButton::clicked, [=]() - { - exit(0); - }); - QObject::connect(&dialog, &QDialog::finished, &loop, &QEventLoop::quit); - loop.exec(); -#endif -#pragma endregion 鐧诲綍鐣岄潰 + //妫�娴嬫槸鍚﹀凡杩愯 QSystemSemaphore sema("monkey", 1, QSystemSemaphore::Open); sema.acquire(); QSharedMemory mem("DetUi"); if (mem.create(1) == false) { - //logDebug(QString::fromUtf8("鏈満宸茬粡杩愯涓�涓疄渚嬶紝涓嶈兘閲嶅杩愯!").toStdString().c_str()); sema.release(); //绋嬪簭鐩存帴閫�鍑� exit(0); } - else { - sema.release(); - - //w.initWidget(); - w.show(); - return a.exec(); - } + sema.release(); + ////////// + backEndController _backEnd; + MainWindow w; + w.show(); + return a.exec(); + } diff --git a/include/dll1.h b/include/dll1.h deleted file mode 100644 index 3a2bd03d..00000000 --- a/include/dll1.h +++ /dev/null @@ -1,93 +0,0 @@ -锘�#pragma once -#include -#include -#include -//鐩稿簲鐨勫鐞嗗嚱鏁拌鏄� - -//typedef void(*FUNC)(unsigned char* showImg, int width, int height, int channel, char* outstr, char* Res); - -typedef std::functionFUNC; - -extern "C" __declspec(dllexport) void RegisterFUNC2D(FUNC func); -extern "C" __declspec(dllexport) void RegisterFUNC3D(FUNC func); - -extern "C" __declspec(dllexport) void gen_img(cv::Mat tiffMat); - - - - -//Station1 -extern "C" _declspec(dllexport) void GetStation1TBThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation1TRThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation1DE2ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation1DE3ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); - -// station2 - -extern "C" _declspec(dllexport) void GetStation2TFThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation2TLThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation2DE1ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation2DE4ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); - -// station3 - -extern "C" _declspec(dllexport) void GetStation3TDThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation3TUThreeD(cv::Mat tiffMat, cv::Mat bmpMat, cv::Mat HikMat, - const char* Dir2D, const char* Dir3D, const char* SN, const char* DateTime); - -// station4 -extern "C" _declspec(dllexport) void GetStation4ME1ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation4ME2ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation4ME3ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation4ME4ThreeD(cv::Mat tiffMat, cv::Mat bmpMat, - const char* Dir, const char* SN, const char* DateTime); - -//Station5 姝f瀬鏌�1,姝f瀬鏌�2,姝f瀬鏌�3,璐熸瀬鏌�1,璐熸瀬鏌�2,璐熸瀬鏌�3,闃茬垎闃�1,闃茬垎闃�2,闃茬垎闃�3 -extern "C" _declspec(dllexport) void GetStation5Pos1pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pos2pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pos3pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pos4pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Neg1pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Neg2pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Neg3pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Neg4pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pro1pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pro2pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pro3pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); -extern "C" _declspec(dllexport) void GetStation5Pro4pic(cv::Mat HikMat, const char* Dir2D, const char* SN, const char* DateTime); - - - -//杩涚▼鐨勫垵濮嬪寲鍜屽叧闂紝鍦ㄨ繘绋嬩腑澶勭悊寰楀埌鐨凪at绛夋暟鎹� -extern "C" __declspec(dllexport) void InitThreads(int StationNo, int img2D3D); -extern "C" __declspec(dllexport) void CloseThreads(int StationNo, int img2D3D); //鍏抽棴杩涚▼ - -//灏嗗搴旂殑Mat瀵煎叆妯″瀷涓紝寰楀埌瀵煎嚭鐨凢ail鎴栬�匬ass锛屽瓨鍏ュ搴攋son鏂囦欢 -extern "C" __declspec(dllexport) bool InitModels(int StationNo, int img2D3D); //鍒濆鍖栨ā鍨� -extern "C" __declspec(dllexport) void DestroyModels(int StationNo, int img2D3D); //鎽ф瘉妯″瀷 - - - -extern "C" __declspec(dllexport) void ChangeSaveMode(bool mode); //瀛樺偍妯″紡 -extern "C" __declspec(dllexport) void ChangeSaveMode12(bool mode); -extern "C" __declspec(dllexport) void ChangeZoom(int x, int y); //缂╂斁瀛樺偍 - - - - - -//灏嗗搴旀暟鎹啓鍏ュ搴斿伐绔欐枃浠朵腑锛屽垎涓�1锛�2锛�3 -//extern "C" __declspec(dllexport) void WriteJson(int StationNo,std::string pathfold, std::string testresult,std::string SN, std::string Datetime); -