#pragma once #include #include #include enum initStatus { NotInit, InitFailure, InitOK }; struct showImgPack { cv::Mat img; QString name = ""; QString type; showImgPack() {}; showImgPack(QString name, QString type) : type(type), name(name) {} }; enum valueType { finsShort, finsFloat }; // PLC 值查看器的配置结构体 struct PlcValueViewerStruct { QString valueName; int valueAddr; valueType type = finsShort; QVariant value = -999; }; //后端信号集成 class bSignalHub :public QObject { Q_OBJECT public: explicit bSignalHub(QObject* parent = nullptr) : QObject(parent) {} // 禁止拷贝 Q_DISABLE_COPY(bSignalHub) signals: // 汇总数据 void summaryData_addData(QString window, double data); // 日志相关 void loadingWindow_appendInitLog(const QString& text, const QColor& color); void loadingWindow_modifyLog(int col, const QString& text, const QColor& color); void loadingWindow_clearLog(); // 登录结果 void initResult(initStatus result); // 图像显示 void displayWidget_sendImg(showImgPack pack); //数据到界面 //饼图 void pieWidgetModifyData(int modifyOkData, int modiftNgData); //柱状图 void histogramWidgetAddData(int modifyOkData, int modiftNgData, std::vector); //设置PLC连接失败(闪红灯) void setPlcConnectionError(); //设置PLC连接成功(绿灯常亮) void setPlcConnectionOk(); //设置相机连接失败(闪红灯) void setCamConnectionError(); //设置相机连接成功(绿灯常亮) void setCamConnectionOk(); //数据到折线图 void waveFormAddData(QString windowName, double value); //排障 //在排障界面添加功能按钮 void runCommand_addBtn(runCommandWidgetType,const QString& btnName, const QString& tip, const QString& uuid); //在排障界面添加PLC地址值监控控件 void runCommand_addPlcValueViewer(const QString& , const std::vector>&); //刷新排障界面PLC监控的值 void runCommand_refeshPlcValueViewer(const int& address, const QString& value); //算法耗时监测 void halconManager_addTimeCostViewer(const QString& groupName, const std::vector& viewerNames); void halconManager_refreshTimeCostViewer(const QString& address, const QString& avgTime, const QString& maxTime, const QString& minTime); //模型耗时监测 void handleAiManager_addTimeCostViewer(const QString& groupName, const std::vector& viewerNames); void handleAiManager_refreshTimeCostViewer(const QString& address, const QString& avgTime, const QString& maxTime, const QString& minTime); //存储任务json void saveMissionJson(); //性能监测-将每秒与PLC交互的次数等信息发送到主页面 void sendTriggerManagerLoopData(int loopCounterPerMin, int maxInterval); //添加命令预设 void Cli_addPreset(QString btnName, QString tips, QStringList commands); //在模型界面添加功能按钮 void modelInit_addBtn(const QString& btnName, const QString& tip, const QString& command); //在通过界面将模型初始化的结果 void modelInit_modelInitResult(const bool& initSuccess, const QString& Reason); //后端任务等待前端初始化任务确认 void waitForFrontendInitComfirm(const QString& message, const std::vector& options,std::shared_ptr> recivedResult,std::shared_ptr> Result); //弹窗 void showMessageBox(const QString& message); //备份及替换halcon算法文件 void backupAndReplaceAlgoFile(const std::string& path); void reloadAllCameraAsVirtual(); }; //后端对象 class IBackend :public QThread { Q_OBJECT public: bSignalHub _signalHub; //后端信号集成 virtual ~IBackend() = default; virtual void init(SQLiteDB* ,nlohmann::ordered_json& json) = 0; virtual nlohmann::ordered_json getBackendJson() = 0;//获取后端配置文件 public slots: virtual bool ansyncExcuteCliCommand(const QString& command) = 0;//执行指令 virtual bool ansyncExcuteCliCommandPreset(const QString& uuid) = 0;//执行预先注册的指令 virtual void triggerAndCaptureImage(std::string cameraName, std::vector* mats) = 0;//触发并获取返回图片 virtual void getCameraNames(std::vector* cameraNames) = 0;//获取所有相机的名称 virtual void getAllParams(std::vector>* params) = 0;//获取所有参数及值 virtual void editParam(QString group, QString name, QVariant value) = 0;//修改指定参数的值 }; extern "C" { __declspec(dllexport) IBackend* CreateBackend(); __declspec(dllexport) void ReleaseBackend(IBackend* backend); } typedef IBackend* (*CreateBackendFunc)(); typedef void (*ReleaseBackendFunc)(IBackend*);