#ifndef Logic_processtask_H #define Logic_processtask_H #include #include //#pragma once #include #include #include #include "Logic_myiothread.h" #pragma execution_character_set("utf-8") //无法用信号槽传递图像? //返回图片的结构体 struct LsendImgStruct { cv::Mat send_Mat; //返回的图像 QString cameraKey_index; //关键字_序号 }; class Logic_processtask : public QObject { Q_OBJECT public: explicit Logic_processtask(QObject *parent = nullptr); ~Logic_processtask(); void setLoadFlag(int index); void setInitFlag(int index); void setCreateThread(int index){ modulethread_flag = index;} void setRunFlag(int index); void setJsonObject(QJsonObject obj); bool check_cmeraCfg(QJsonObject obj,QString& errMessage); void setJsonPath(QString path){ JsonPath = path;} void initClearSignal(); //加载模块、初始化、开启类线程 bool initTask(); bool startTask(); bool stopTask(); bool exitTask(); bool restartTask(); // 重新加载任务 bool clearStationData(); // 加载所有模块;初始化所有模块 bool loadAllModule(); bool initTcpModule(); // 初始化所有模块 bool initStationsModule(); // 创建线程 bool createModuleThread(); bool loadCameraAndAlgorithmModule( QJsonArray stationlist_array ); bool decodePackage(QString name,cv::Mat mtx); //加载单个模块:通信、相机、算法 bool loadModule( QString cameraName,QJsonObject module_obj,QByteArray initByte ); QByteArray encodeAlgorithmData( QJsonArray array,QString calConfig ); // 算法cal配置文件路径 QByteArray initCameraParam( QString key,QJsonArray array ); // 相机初始化参数编码 QJsonObject getFinsTcpObject(QJsonArray array); MyModule getModule(QString key); QList getModuleList(int thread_index, QString stationKey); QJsonArray getTaskAlgorithmObject(int thread_index,QJsonArray array); QJsonArray getCameraConfigArray(QString key); // 获取相机初始化配置文件 QList task_thread_list; void thread_checkAll_Status(); void thread_Logic_hdataintegration(); void thread_reciveImageData(); QMutex* LsendImgStructMutex = nullptr; QQueue< LsendImgStruct> Lqueue_sendImgStruct;//图像及数据列表 bool getImageData(QQueue< LsendImgStruct>&); bool sendPLC(QString cmd); bool reLoadJsonSetParameter(QStringList moduleKeyList); public: Q_INVOKABLE void reciveImageData(); // 接收数据 private: bool exitFlag = false; QTimer* DeleteFileTimer = nullptr; int init_flag = 0; // 0:代表未初始化 1:代表已初始化 int load_flag = 0; // 0:代表未加载 1:代表已加载 int modulethread_flag = 0; // 0:代表未创建 1:代表已创建 int run_flag = 0; // 0:代表未运行 1:代表已运行 // 设置本地保存文件夹的路径 QString saveImageDir; QString LogPath; bool deleteingImg = false; bool deleteingLog = false; cv::Mat ai_mat; QString m_AiName; QString JsonPath = nullptr; //整个配置文件 QJsonObject programObj; QJsonArray tcplist_array; QJsonArray stationlist_array; QJsonArray m_cameramodulelist; // 相机列表 ReleaseFunction destory_finstcp = nullptr; //释放 QList lib_list; QList module_list; //QList dataIntegrationThread_list; QMutex *m_io_mutex = nullptr; QMutex* write_data_mutex = nullptr; QMutex *m_showimage_mutex = nullptr; Base* finstcp_ptr; QQueue destory_Communication; //释放 //Logic_myiothread*m_IoThread = nullptr; //ReadPackThread *m_readThread = nullptr; QMap> camera_algorithm_map; // 存储相机对应的算法 QTimer *check_tcp_status = nullptr; bool isStartThread = false; //配置文件读取的,"savePath"的值,保存路径总文件夹 QString m_savePath = nullptr; //配置文件检查标志,true已检查且OK bool ifChecked = false; //项目通信流程,1简单流程,2标准流程; int CommunicationProcessLevel = 0; //发送的数据是否自动拼接PLC指令头 bool ifAddCmdHead = true; signals: //void LsendImage(QString, cv::Mat); // 传递拍到的图片 void sendTcpStatus(bool); void LwriteData(QString,QString,QString,QByteArray); // 传递结果数据 算法名称+相机名称+产品sn码+结果信息,最后一个参数是-3使用的特殊参数 void cameraDisconnect(QString msg, bool status);//0106 相机状态改变弹窗 void CommunicationDisconnect(QString msg, bool status);//通信状态改变弹窗 private slots: bool FindFileForDelete(const QString&, int); }; #endif // Logic_processtask_H