101 lines
2.9 KiB
C++
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 |