Files
ds-628/BaseModules/Hd_LogicDll_module/Logic_taskthread.h
T
2025-07-27 16:12:08 +08:00

120 lines
5.9 KiB
C++

#ifndef Logic_taskthread_H
#define Logic_taskthread_H
#include <QObject>
#include <QThread>
#include <QJsonArray>
#include <QJsonObject>
#include <QQueue>
#include <QDebug>
#include <Windows.h>
#include <rlib/detData.h>
#include "struct.h"
#define YH_LOGIC_SWITCH 0// 三协-0//赢合同时扫两个料-2//赢合同时扫四个料-4//
#define JSONRPC_SWTICH 1 // JSONRPC协议开关
#pragma execution_character_set("utf-8") //能够正常显示中文字符串
class Logic_taskthread : public QThread
{
Q_OBJECT
public:
explicit Logic_taskthread(detDataManager* _detDataManager,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<QString> camera_name_index);
bool sendDataCommond( QString m_type, QVector<QString> camera_name_index, const QString& uuid,QByteArray byteArray );
bool saveAlgorithmData ( testData m_testdata,int index,QByteArray byteArray);
bool writeAiCommond(QString cameraName,QString camera_name_index,QByteArray byteArray);
bool writeTcpData(std::vector<std::pair<QString, QByteArray>>);
bool decodeAiValue(QByteArray byteArray, QByteArrayList&vec_ret);
bool AlgorithmModuleProcessData(QString key, QVector<QString> camera_name_index, const QString& uuid,QByteArray byteArray); // 处理数据
bool deleteSnData( QByteArray byteArray,QVector<QString> &sndata,QString &send_ng_info); // 获取sn码,然后删除容器中的SN码,第三个参数是表示是否发送界面显示NG信息
bool sendDataToModule(QVector<QString> name, const QString& uuid,QByteArray byteArray);
bool encodeAppendData(QVector<QString> append_value,QByteArray& byteArray);
bool decodereciveValue(QByteArray byteArray, QVector<QByteArray>& vec_ret);
QVector<QString> getWriteVector(QString& startPos, QMap<QString, QString>& map);
QByteArray writeFormat(QString startPos, QVector<QString> 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<cv::Mat>* 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<QString> summary_stationKeyS;
//项目通信流程,1简单流程,2标准流程;
int CommunicationProcessLevel = 0;
//发送的数据是否自动拼接PLC指令头
//不拼接,以支持多种数据格式
bool ifAddCmdHead = false;
QString CmdHeadShort = "write_short_";
QString CmdHeadString = "write_string_";
private:
detDataManager* dManager; // 检测数据管理器
QQueue<dataPack> 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<QJsonObject> module_jsonobject_list; // 存储所有算法模块的模块列表
// QMap<QString,QVector<QString>> plc_commond_vector_map; // 算法模块使用的变量
// QMap<QString,QString> algorithm_unusual_feedback_plcpos_map; // 异常反馈信息
QQueue<testData> queue_exec_cameraName; // 执行当前算法的相机名称队列
QMap<QString,QVector<send_algorithm_result>> send_algorithm_result_to_plc_map;
QString save_sn_info = nullptr; // 存储sn数据 -3 使用
QMutex *msaveImage_mutex = nullptr;
QQueue<cv::Mat>* my_queue_mySend_imagetype = nullptr;
QMutex* m_image_lock = nullptr;
QMutex* write_data_mutex = nullptr;//通信队列锁
//无SN信息的,相机线程返回的图片数据;有相机关键字(SN或userName);传入Logic_processtask里面,解析并传递
QQueue<dataPack> Task_ImageDataPack;
int allRunNum=0;
QByteArrayList PLCvec_ret;
QString snInfo = nullptr;
QVector<QString> sndata;
QString send_ng_info = nullptr;
signals:
void LwriteData(QString, QString, QString, QByteArray); // 传递结果数据 算法名称+相机名称+产品sn码+结果信息,最后一个参数是-3使用的特殊参数
};
#endif // Logic_taskthread_H