#ifndef Logic_taskthread_H #define Logic_taskthread_H #include #include #include #include #include #include #include #include "struct.h" #include #pragma execution_character_set("utf-8") //能够正常显示中文字符串 class Logic_taskthread : public QThread { Q_OBJECT public: explicit Logic_taskthread(QObject *parent = nullptr); ~Logic_taskthread(); void run(); //图像锁、通信指令锁 void setMutex(QMutex* image_lock, QMutex* write_mutex);// /*{ m_image_lock = image_lock; write_data_mutex = write_mutex; }*/ void setRunFlag(bool flag){ m_stoprun = flag; } bool initLogic_taskThread(QString task_name,QString stationName, QJsonObject array_obj,MyModule list); bool processTask();//循环取检测数据,传到检测模块运行 bool appendPlcCmd(QJsonObject); bool sendCatchCommond(QVector camera_name_index); bool sendDataCommond( QString m_type, QVector camera_name_index, std::vector mat,QByteArray byteArray ); bool saveAlgorithmData ( testData m_testdata,int index,QByteArray byteArray); bool writeAiCommond(QString cameraName,QString camera_name_index,QByteArray byteArray); bool writeTcpData(QMap map); bool decodeAiValue(QByteArray byteArray, QByteArrayList&vec_ret); bool AlgorithmModuleProcessData(QString key, QVector camera_name_index,std::vector camera_mat,QByteArray byteArray); // 处理数据 bool deleteSnData( QByteArray byteArray,QVector &sndata,QString &send_ng_info); // 获取sn码,然后删除容器中的SN码,第三个参数是表示是否发送界面显示NG信息 bool sendDataToModule(QVector name, std::vector vector_mat,QByteArray byteArray); bool encodeAppendData(QVector append_value,QByteArray& byteArray); bool decodereciveValue(QByteArray byteArray, QVector& vec_ret); QVector getWriteVector(QString& startPos, QMap& map); QByteArray writeFormat(QString startPos, QVector vector_value); // 写入的起始位置,写入的内容+长度 QString getSnDataInfo(QByteArray byteArray); bool setmySaveImagethreadIndex(int i) { mysaveimagethreadindex = i; return true; } void setmysaveimageMutex(QMutex* mysaveimageMutex) { msaveImage_mutex = mysaveimageMutex; } void setmy_queue_mySend_imagetypePtr(QQueue* my_queue_mySend_imagetype) { this->my_queue_mySend_imagetype = my_queue_mySend_imagetype; } bool getdataPack(dataPack& myDataPack); //检测超时或返回false,补NG结果 void addNGdata(QByteArray& ai_byte); int m_stoprun = 0; void set_m_stoprun(bool myrun); QString m_name; // 算法名称 MyModule m_module; // 存储算法模块的模块列表 int taskTimeout = -1; //检查配置文件“结果内容”列表,结果数据类型是否相同、寄存器是否连续; bool checkResultObj(); int dataPack_size();//获取一个数据包,并删除列表的头一个 dataPack getdataPack(); QQueue summary_stationKeyS; //项目通信流程,1简单流程,2标准流程; int CommunicationProcessLevel = 0; //发送的数据是否自动拼接PLC指令头 //不拼接,以支持多种数据格式 bool ifAddCmdHead = false; QString CmdHeadShort = "write_short_"; QString CmdHeadString = "write_string_"; private: CsvWriter _CsvWriter; QQueue taskImageDataPack; QMutex* task_image_lock = nullptr; int mysaveimagethreadindex = -1; int m_thread_index = -1; // 当前线程的下标 QObject *m_obj; QString m_type; // 类型 QString m_stationName = nullptr; // 当前站名 QString save_data_flag = "false"; // 是否保存数据 QString send_data_flag = "false"; //是否发送数据 //MyModule m_exec_module; // 当前执行的模块 QJsonObject m_exec_object; // 当前执行的模块配置文件 QJsonObject m_sn_set_object; // 算法中sn码的设置信息 QList module_jsonobject_list; // 存储所有算法模块的模块列表 // QMap> plc_commond_vector_map; // 算法模块使用的变量 // QMap algorithm_unusual_feedback_plcpos_map; // 异常反馈信息 QQueue queue_exec_cameraName; // 执行当前算法的相机名称队列 QMap> send_algorithm_result_to_plc_map; QString save_sn_info = nullptr; // 存储sn数据 -3 使用 QMutex *msaveImage_mutex = nullptr; QQueue* my_queue_mySend_imagetype = nullptr; QMutex* m_image_lock = nullptr; QMutex* write_data_mutex = nullptr;//通信队列锁 //无SN信息的,相机线程返回的图片数据;有相机关键字(SN或userName);传入Logic_processtask里面,解析并传递 QQueue Task_ImageDataPack; int allRunNum=0; QByteArrayList PLCvec_ret; QString snInfo = nullptr; QVector sndata; QString send_ng_info = nullptr; signals: }; #endif // Logic_taskthread_H