#include"Hd_SocketModule_PLC.h" #include #include #include "pbglobalobject.h" Hd_SocketModule_PLC::Hd_SocketModule_PLC(int type, QObject* parent) : QObject(parent), m_plcType(type) { initUnionGcMembers(); } void Hd_SocketModule_PLC::initUnionGcMembers() { if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) { delete (*m_plcImpl.FinsTcp);//托管对象无法判空 *m_plcImpl.FinsTcp = gcnew HslCommunication::Profinet::Omron::OmronFinsNet(); //也可用指针保存,但是使用时要转回原来的类型,略麻烦 //gcroot* FinsTcp = new gcroot; //void* plc = static_cast(FinsTcp); //gcroot* FinsTcp = static_cast*>(plc); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) { delete (*m_plcImpl.ModBusTcp); *m_plcImpl.ModBusTcp = gcnew HslCommunication::ModBus::ModbusTcpNet(); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) { delete (*m_plcImpl.McAscii); *m_plcImpl.McAscii = gcnew HslCommunication::Profinet::Melsec::MelsecMcAsciiNet(); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) { delete (*m_plcImpl.McA1E); *m_plcImpl.McA1E = gcnew HslCommunication::Profinet::Melsec::MelsecA1ENet(); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) { delete (*m_plcImpl.McBinary); *m_plcImpl.McBinary = gcnew HslCommunication::Profinet::Melsec::MelsecMcNet(); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) { delete (*m_plcImpl.PanasonicMc); *m_plcImpl.PanasonicMc = gcnew HslCommunication::Profinet::Panasonic::PanasonicMcNet(); } else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) { delete (*m_plcImpl.InovanceTcp); *m_plcImpl.InovanceTcp = gcnew HslCommunication::Profinet::Inovance::InovanceH5UTcp(); } } Hd_SocketModule_PLC::~Hd_SocketModule_PLC() { if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) { delete (*m_plcImpl.FinsTcp); *m_plcImpl.FinsTcp = nullptr; delete m_plcImpl.FinsTcp; m_plcImpl.FinsTcp = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) { delete (*m_plcImpl.ModBusTcp); *m_plcImpl.ModBusTcp = nullptr; delete m_plcImpl.ModBusTcp; m_plcImpl.ModBusTcp = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) { delete (*m_plcImpl.McAscii); *m_plcImpl.McAscii = nullptr; delete m_plcImpl.McAscii; m_plcImpl.McAscii = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) { delete (*m_plcImpl.McA1E); *m_plcImpl.McA1E = nullptr; delete m_plcImpl.McA1E; m_plcImpl.McA1E = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) { delete (*m_plcImpl.McBinary); *m_plcImpl.McBinary = nullptr; delete m_plcImpl.McBinary; m_plcImpl.McBinary = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) { delete (*m_plcImpl.PanasonicMc); *m_plcImpl.PanasonicMc = nullptr; delete m_plcImpl.PanasonicMc; m_plcImpl.PanasonicMc = nullptr; } else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) { delete (*m_plcImpl.InovanceTcp); *m_plcImpl.InovanceTcp = nullptr; delete m_plcImpl.InovanceTcp; m_plcImpl.InovanceTcp = nullptr; } qDebug() << " ~Hd_SocketModule_PLC success!"; } bool Hd_SocketModule_PLC::setParameter(const QMap& param) { m_params = param; return true; } QMap Hd_SocketModule_PLC::parameters() { return m_params; } //加载模块dll导出函数,构造类 bool Hd_SocketModule_PLC::init() { System::String^ Code = gcnew System::String("b5f8f9f7-c075-4913-ae6e-d7d2cc6f2de1"); if (HslCommunication::Authorization::SetAuthorizationCode(Code)) qDebug() << "Register HSLCode Success" << endl; else qDebug() << "Register HSLCode Fail" << endl; if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) return initFinsTcp(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) return initModbusTcp(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) return initMcAscii(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) return initMcA1E(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) return initMcBinary(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) return initPanasonicMc(); else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) return initInovanceTcp(); return true; } bool Hd_SocketModule_PLC::setData(const QByteArray& data) { if (data.isEmpty()) { qCritical() << " data is null"; return false; } QMutexLocker locker(m_writeMutex); Sleep(m_sleepTime); QList byteList = data.split('_'); if (byteList.size() != 4) { qCritical() << data + " size() != 4, command error." << endl; return false; } if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) byteList[2] = byteList[2].mid(1, byteList[2].length() - 1); if (byteList[0] == "read")//"read_byte_D3000_300" { auto readFunc = [=]() { System::String^ address = gcnew System::String(byteList[2].toStdString().c_str()); HslCommunication::OperateResult^>^ result; if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) result = (*m_plcImpl.FinsTcp)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) result = (*m_plcImpl.ModBusTcp)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) result = (*m_plcImpl.McAscii)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) result = (*m_plcImpl.McA1E)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) result = (*m_plcImpl.McBinary)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) result = (*m_plcImpl.PanasonicMc)->Read(address, byteList[3].toInt()); else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) result = (*m_plcImpl.InovanceTcp)->Read(address, byteList[3].toInt()); return result; }; auto readSucFunc = [&](HslCommunication::OperateResult^>^& result) { QByteArray byte; for (int i = 0; i < byteList[3].toInt() * 2; i++) byte.append(result->Content[i]); //qDebug() << "read bytes:" << byte; m_readData.append(byte); }; auto result = readFunc(); if (result->IsSuccess) { readSucFunc(result); return true; } qDebug() << data + "read failed" << endl; int retryCount = 3; while (retryCount-- > 0) { closeSocket(); initUnionGcMembers(); if (!init())//成功 { Sleep(m_sleepTime); continue; } auto res = readFunc(); if (!res->IsSuccess) { Sleep(m_sleepTime); continue; } readSucFunc(res); return true; } return false; } else if (byteList[0] == "write")//例"write_short_D1003_1", "write_short_D1003_1,1,1,1" { if (byteList[1] != "short" && byteList[1] != "float" && byteList[1] != "double" && byteList[1] != "string") return false; QList valueList = byteList[3].split(','); for (auto val = 0; val < 5; val++) { bool res = false; if (byteList[1] == "short") res = writeShortData(byteList[2], valueList); else if (byteList[1] == "float") res = writeFloatData(byteList[2], valueList); else if (byteList[1] == "double") res = writeDoubleData(byteList[2], valueList); else res = writeStringData(byteList[2], byteList[3]); if (res) break; qCritical() << "val: " << val << " write failed! byteList: " << byteList; m_failedData.enqueue(data); Sleep(m_sleepTime); } } return true; } bool Hd_SocketModule_PLC::data(QByteArray& data) { QMutexLocker locker(m_readMutex); if (m_readData.isEmpty()) data = {}; else data.append(m_readData.dequeue()); return true; } bool Hd_SocketModule_PLC::initFinsTcp() { //"init_ip_port_sA1_dA1_dA2" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 6) { qDebug() << "init FinsTcp param error" << endl; return false; } (*m_plcImpl.FinsTcp)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.FinsTcp)->Port = init[2].toUInt(); (*m_plcImpl.FinsTcp)->DA1 = (unsigned char)(init[4].toUInt()); (*m_plcImpl.FinsTcp)->DA2 = (unsigned char)(init[5].toUInt()); (*m_plcImpl.FinsTcp)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.FinsTcp)->ReceiveTimeOut = 500;//收发超时0.5秒 int sa1 = (unsigned char)(init[3].toUInt()); int loopCount = 20; while (loopCount > 0) { (*m_plcImpl.FinsTcp)->SA1 = (unsigned char)sa1; if ((*m_plcImpl.FinsTcp)->ConnectServer()->IsSuccess) { qDebug() << "FinsTcp Connect Success! SA1: " << sa1 << endl; return true; } --loopCount; ++sa1; qCritical() << "FinsTcp Connect failed! SA1: " << sa1 << endl; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initModbusTcp() { //"init_ip_port_station" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 4) { qDebug() << "init Modbus param error" << endl; return false; } (*m_plcImpl.ModBusTcp)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.ModBusTcp)->Port = init[2].toUInt(); (*m_plcImpl.ModBusTcp)->Station = (unsigned char)init[3].toUInt(); //(*m_plcImpl.ModBusTcp)->ConnectTimeOut = 500;//连接超时0.5秒 //(*m_plcImpl.ModBusTcp)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.ModBusTcp)->ConnectServer()->IsSuccess) { qDebug() << "ModBusTcp Connect Success!" << endl; return true; } qCritical() << "ModBusTcp Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initMcAscii() { //"init_ip_port" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 3) { qDebug() << "init McAscii param error" << endl; return false; } (*m_plcImpl.McAscii)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.McAscii)->Port = init[2].toUInt(); (*m_plcImpl.McAscii)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.McAscii)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.McAscii)->ConnectServer()->IsSuccess) { qDebug() << "McAscii Connect Success!" << endl; return true; } qCritical() << "McAscii Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initMcA1E() { //"init_ip_port" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 3) { qDebug() << "init McA1E param error" << endl; return false; } (*m_plcImpl.McA1E)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.McA1E)->Port = init[2].toUInt(); (*m_plcImpl.McA1E)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.McA1E)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.McA1E)->ConnectServer()->IsSuccess) { qDebug() << "McA1E Connect Success!" << endl; return true; } qCritical() << "McA1E Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initMcBinary() { //"init_ip_port" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 3) { qDebug() << "init McBinary param error" << endl; return false; } (*m_plcImpl.McBinary)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.McBinary)->Port = init[2].toUInt(); (*m_plcImpl.McBinary)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.McBinary)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.McBinary)->ConnectServer()->IsSuccess) { qDebug() << "McBinary Connect Success!" << endl; return true; } qCritical() << "McBinary Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initPanasonicMc() { //"init_ip_port" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 3) { qDebug() << "init PanasonicMc param error" << endl; return false; } (*m_plcImpl.PanasonicMc)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.PanasonicMc)->Port = init[2].toUInt(); (*m_plcImpl.PanasonicMc)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.PanasonicMc)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.PanasonicMc)->ConnectServer()->IsSuccess) { qDebug() << "PanasonicMc Connect Success!" << endl; return true; } qCritical() << "PanasonicMc Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::initInovanceTcp() { //"init_ip_port" QStringList init = m_params["init"].split("_"); m_sleepTime = m_params["initParams"].split("_")[1].toUInt(); if (init[0] != "init" && init.size() != 3) { qDebug() << "init InovanceTcp param error" << endl; return false; } (*m_plcImpl.InovanceTcp)->IpAddress = gcnew System::String(init[1].toStdString().c_str()); (*m_plcImpl.InovanceTcp)->Port = init[2].toUInt(); (*m_plcImpl.InovanceTcp)->ConnectTimeOut = 500;//连接超时0.5秒 (*m_plcImpl.InovanceTcp)->ReceiveTimeOut = 500;//收发超时0.5秒 int loopCount = 20; while (loopCount > 0) { if ((*m_plcImpl.InovanceTcp)->ConnectServer()->IsSuccess) { qDebug() << "InovanceTcp Connect Success!" << endl; return true; } qCritical() << "InovanceTcp Connect failed!" << endl; --loopCount; Sleep(m_sleepTime); } return false; } bool Hd_SocketModule_PLC::closeSocket() { bool res = false; if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) res = (*m_plcImpl.FinsTcp)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) res = (*m_plcImpl.ModBusTcp)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) res = (*m_plcImpl.McAscii)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) res = (*m_plcImpl.McA1E)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) res = (*m_plcImpl.McBinary)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) res = (*m_plcImpl.PanasonicMc)->ConnectClose()->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) res = (*m_plcImpl.InovanceTcp)->ConnectClose()->IsSuccess; if (!res) qCritical() << "ConnectClose() failed!"; return res; } bool Hd_SocketModule_PLC::writeShortData(const QByteArray& addr, const QList& data) { cli::array^ writeList = gcnew cli::array(data.length()); for (int i = 0; i < data.length(); i++) writeList[i] = data[i].toShort(); System::String^ address = gcnew System::String(addr.toStdString().c_str()); if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) return (*m_plcImpl.FinsTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) return (*m_plcImpl.ModBusTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) return (*m_plcImpl.McAscii)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) return (*m_plcImpl.McA1E)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) return (*m_plcImpl.McBinary)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) return (*m_plcImpl.PanasonicMc)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) return (*m_plcImpl.InovanceTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; return false; } bool Hd_SocketModule_PLC::writeFloatData(const QByteArray& addr, const QList& data) { cli::array^ writeList = gcnew cli::array(data.length()); for (int i = 0; i < data.length(); i++) writeList[i] = data[i].toFloat(); System::String^ address = gcnew System::String(addr.toStdString().c_str()); if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) return (*m_plcImpl.FinsTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) return (*m_plcImpl.ModBusTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) return (*m_plcImpl.McAscii)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) return (*m_plcImpl.McA1E)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) return (*m_plcImpl.McBinary)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) return (*m_plcImpl.PanasonicMc)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) return (*m_plcImpl.InovanceTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; return false; } bool Hd_SocketModule_PLC::writeDoubleData(const QByteArray& addr, const QList& data) { cli::array^ writeList = gcnew cli::array(data.length()); for (int i = 0; i < data.length(); i++) writeList[i] = data[i].toDouble(); System::String^ address = gcnew System::String(addr.toStdString().c_str()); if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) return (*m_plcImpl.FinsTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) return (*m_plcImpl.ModBusTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) return (*m_plcImpl.McAscii)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) return (*m_plcImpl.McA1E)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) return (*m_plcImpl.McBinary)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) return (*m_plcImpl.PanasonicMc)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) return (*m_plcImpl.InovanceTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeList)->IsSuccess; return false; } bool Hd_SocketModule_PLC::writeStringData(const QByteArray& addr, const QByteArray& data) { System::String^ address = gcnew System::String(addr.toStdString().c_str()); System::String^ writeValue = gcnew System::String(data.toStdString().c_str()); if (m_plcType == static_cast(PLC_MODULE_TYPE::FinsTcp)) return (*m_plcImpl.FinsTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::ModbusTcp)) return (*m_plcImpl.ModBusTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McAsciiTcp)) return (*m_plcImpl.McAscii)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McA1ETcp)) return (*m_plcImpl.McA1E)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::McBinaryTcp)) return (*m_plcImpl.McBinary)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::PanasonicMC)) return (*m_plcImpl.PanasonicMc)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; else if (m_plcType == static_cast(PLC_MODULE_TYPE::InovanceH5UTcp)) return (*m_plcImpl.InovanceTcp)->HslCommunication::Core::Net::NetworkDeviceBase::Write(address, writeValue)->IsSuccess; return false; }