#pragma once #include "ui_CToolDialog.h" #include "../../VisionPlusSdk/VisionPlusTool.h" #include "../../ShowUnit/HWndUnit.h" #include #include #include #include #include #include "cnap.h" class ToolDialogImpl : public DllToolDialog { //CPU数据类型定义 enum VarType { Bit = 1, Byte = 2, Word = 3, DWord = 4, Int = 5, DInt = 6, Real = 7, String = 8, StringEx = 9, S7_Timer = 10, S7_Counter = 11, }; Q_OBJECT public: ToolDialogImpl(QWidget *parent = Q_NULLPTR); ~ToolDialogImpl(); Ui::CToolDialog ui; // 从基类继承的函数 public: virtual VPEnum::RETURN_VALUE Execute(); virtual void Running(bool bRun); virtual bool updateValue(int nIndex); virtual void timerEvent(QTimerEvent* event); virtual bool Serialized(QDataStream& ar, bool bIsOut); // 导入到处需要用到的成员变量 public: // Event(For Test) ToolEvent m_eventOut; // 内部信号 signals: void sigUpdateUI(); // 内部槽函数 private slots: void on_UpdateUI(); void on_btnOK_clicked(); void on_btnCancel_clicked(); void on_btnExecute_clicked(); void on_btn_Connect_clicked(); // 本工具为实现某些功能所必须的函数 private: // 2022-3-1 向exe中的变量表界面同步数值 void syncValuesToTableUI(QList pInfs); int ConnectToPLC(); void setValueToUI(); void resizeEvent(QResizeEvent* event); // 2022-10-30 增加了一个用于获取VARIABLE类型的值字符串的函数 QString valueString(VARIABLE* var); // 工具内部需要用到的成员变量 private: int m_nTimerID; TS7Client* m_pS7Client; byte m_DB_Buffer[200]; QString m_strComName; QString m_strTP; QString m_strPort; int m_nIsCOnnect; int m_nTableRowCount; QVector m_TableWidgetItems; QVector<_INTERFACE*> m_Interfaces; QString m_strTemps[1024]; // 工具内部线程需要用到的成员变量 public: QThreadPool m_ReadThreadPool; QThreadPool m_WriteThreadPool; int m_nThreadState; QMutex mutex; bool readValueByPLC(); bool writeValueToPLC(int nIndex = -1); bool writeValue(VARIABLE* var); int PLCAddressParse(QString inputAddress, short* dbNumber, VarType* varType, short* address, short* bitNumber); int WriteBoolVal(int dbNum, int offset, bool bVal); int WriteIntVal(int dbNum, int offset, int nVal); int WriteFloatVal(int dbNum, int offset, float fVal); int WriteRealVal(int dbNum, int offset, double fVal); int ReadBoolVal(int dbNum, int offset, bool* bVal); int ReadIntVal(int dbNum, int offset, int* nVal); int ReadFloatVal(int dbNum, int offset, float* fVal); int ReadRealVal(int dbNum, int offset, double* fVal); }; // _ReadThread 的执行线程体 class _ReadThread : public QObject, public QRunnable { Q_OBJECT public: _ReadThread(ToolDialogImpl* pDialog) { this->m_pDialog = pDialog; }; ~_ReadThread() {}; protected: // 线程函数 virtual void run(); private: ToolDialogImpl* m_pDialog; }; // _WriteThread 的执行线程体 class _WriteThread : public QObject, public QRunnable { Q_OBJECT public: _WriteThread(ToolDialogImpl* pDialog) { this->m_pDialog = pDialog; }; ~_WriteThread() {}; protected: // 线程函数 virtual void run(); private: ToolDialogImpl* m_pDialog; };