Files
ds-628/BaseModules/Hd_SocketModule_PLC/Hd_SocketModule_PLC.h
T
2024-09-27 14:31:22 +08:00

101 lines
2.9 KiB
C++

#ifndef Hd_SocketModule_PLC_H
#define Hd_SocketModule_PLC_H
#include <QObject>
#include <QMap>
#include <QQueue>
#include <QMutex>
#include <QByteArray>
#include <Windows.h>
#include <msclr/marshal_cppstd.h>
#using "../../bin/HslCommunication.dll"
#pragma execution_character_set("utf-8")
/*
PLC通信模块管理类
*/
class Hd_SocketModule_PLC : public QObject
{
Q_OBJECT
union PlcImpl
{
gcroot<HslCommunication::Profinet::Omron::OmronFinsNet^>* FinsTcp;
gcroot<HslCommunication::ModBus::ModbusTcpNet^>* ModBusTcp;
gcroot<HslCommunication::Profinet::Melsec::MelsecMcAsciiNet^>* McAscii;
gcroot<HslCommunication::Profinet::Melsec::MelsecA1ENet^>* McA1E;
gcroot<HslCommunication::Profinet::Melsec::MelsecMcNet^>* McBinary;
gcroot<HslCommunication::Profinet::Panasonic::PanasonicMcNet^>* PanasonicMc;
gcroot<HslCommunication::Profinet::Inovance::InovanceH5UTcp^>* InovanceTcp;
PlcImpl()
{
FinsTcp = new gcroot<HslCommunication::Profinet::Omron::OmronFinsNet^>;
ModBusTcp = new gcroot<HslCommunication::ModBus::ModbusTcpNet^>;
McAscii = new gcroot<HslCommunication::Profinet::Melsec::MelsecMcAsciiNet^>;
McA1E = new gcroot<HslCommunication::Profinet::Melsec::MelsecA1ENet^>;
McBinary = new gcroot<HslCommunication::Profinet::Melsec::MelsecMcNet^>;
PanasonicMc = new gcroot<HslCommunication::Profinet::Panasonic::PanasonicMcNet^>;
InovanceTcp = new gcroot<HslCommunication::Profinet::Inovance::InovanceH5UTcp^>;
*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<QString, QString>& param);
//通信:获取初始化示例参数
virtual QMap<QString, QString> 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<QByteArray>& data);
bool writeFloatData(const QByteArray& addr, const QList<QByteArray>& data);
bool writeDoubleData(const QByteArray& addr, const QList<QByteArray>& data);
bool writeStringData(const QByteArray& addr, const QByteArray& data);
private:
//参数设置的数据
QMap<QString, QString> m_params{};
int m_plcType = -1;
PlcImpl m_plcImpl;
int m_sleepTime = 1;
QMutex* m_writeMutex = new QMutex();
QMutex* m_readMutex = new QMutex();
QQueue<QByteArray> m_readData;
QQueue<QByteArray> m_failedData;
};
#endif