#ifndef Hd_SocketModule_PLC_H #define Hd_SocketModule_PLC_H #include #include #include #include #include #include #include #using "../../bin/HslCommunication.dll" #pragma execution_character_set("utf-8") /* PLC通信模块管理类 */ class Hd_SocketModule_PLC : public QObject { Q_OBJECT union PlcImpl { gcroot* FinsTcp; gcroot* ModBusTcp; gcroot* McAscii; gcroot* McA1E; gcroot* McBinary; gcroot* PanasonicMc; gcroot* InovanceTcp; PlcImpl() { FinsTcp = new gcroot; ModBusTcp = new gcroot; McAscii = new gcroot; McA1E = new gcroot; McBinary = new gcroot; PanasonicMc = new gcroot; InovanceTcp = new gcroot; *FinsTcp = nullptr; *ModBusTcp = nullptr; *McAscii = nullptr; *McA1E = nullptr; *McBinary = nullptr; *PanasonicMc = nullptr; *InovanceTcp = nullptr; } }; public: explicit Hd_SocketModule_PLC(int type = -1, QObject* parent = nullptr); ~Hd_SocketModule_PLC(); //通信的初始化参数 virtual bool setParameter(const QMap& param); //通信:获取初始化示例参数 virtual QMap parameters(); //初始化(创建对象并连接到PLC服务器) virtual bool init(); //写入数据 virtual bool setData(const QByteArray& data); //获取数据 virtual bool data(QByteArray& data); protected: void initUnionGcMembers(); bool initFinsTcp(); bool initModbusTcp(); bool initMcAscii(); bool initMcA1E(); bool initMcBinary(); bool initPanasonicMc(); bool initInovanceTcp(); bool closeSocket(); bool writeShortData(const QByteArray& addr, const QList& data); bool writeFloatData(const QByteArray& addr, const QList& data); bool writeDoubleData(const QByteArray& addr, const QList& data); bool writeStringData(const QByteArray& addr, const QByteArray& data); private: //参数设置的数据 QMap m_params{}; int m_plcType = -1; PlcImpl m_plcImpl; int m_sleepTime = 1; QMutex* m_writeMutex = new QMutex(); QMutex* m_readMutex = new QMutex(); QQueue m_readData; QQueue m_failedData; }; #endif