using IoTClient.Common.Enums; using IoTClient.Enums; using IoTClient.Extensions.Adapter.Communication; using System; using System.IO.Ports; namespace IoTClient.Extensions.Adapter { /// /// IoTClient简单工厂 /// public class IoTClientFactory { /// /// 创建以太网类型的设备连接 /// /// 设备类型 /// ip地址 /// 端口号 /// 超时时间 /// 大小端设置 /// public static IIoTClientCommon CreateClient2EthernetDevice(EthernetDeviceVersion deviceVersion, string ip, int port, int timeout = 1500, EndianFormat format = EndianFormat.ABCD) { IIoTClientCommon iotClientCommon; switch (deviceVersion) { case EthernetDeviceVersion.ModbusTcp: iotClientCommon = new ModbusTcpCommunication("ModbusTcp", ip, port, timeout, format); break; case EthernetDeviceVersion.ModbusRtuOverTcp: iotClientCommon = new ModbusTcpCommunication("ModbusRtuOverTcp", ip, port, timeout, format); break; case EthernetDeviceVersion.Siemens_S7_200: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_200, ip, port, timeout: timeout); break; case EthernetDeviceVersion.Siemens_S7_200Smart: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_200Smart, ip, port, timeout: timeout); break; case EthernetDeviceVersion.Siemens_S7_300: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_300, ip, port, timeout: timeout); break; case EthernetDeviceVersion.Siemens_S7_400: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_400, ip, port, timeout: timeout); break; case EthernetDeviceVersion.Siemens_S7_1200: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_1200, ip, port, timeout: timeout); break; case EthernetDeviceVersion.Siemens_S7_1500: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_1500, ip, port, timeout: timeout); break; case EthernetDeviceVersion.OmronFins: iotClientCommon = new OmronFinsClientCommunication(ip, port, timeout); break; case EthernetDeviceVersion.AllenBradley: iotClientCommon = new AllenBradleyClientCommunication(ip, port, timeout); break; case EthernetDeviceVersion.Mitsubishi_A_1E: iotClientCommon = new MitsubishiClientCommunication(MitsubishiVersion.A_1E, ip, port, timeout); break; case EthernetDeviceVersion.Mitsubishi_Qna_3E: iotClientCommon = new MitsubishiClientCommunication(MitsubishiVersion.Qna_3E, ip, port, timeout); break; default: throw new Exception($"类型[{deviceVersion}]暂未实现"); } return iotClientCommon; } /// /// 创建串口类型的设备连接 /// /// 设备类型 /// COM端口名称 /// 波特率 /// 数据位 /// 停止位 /// 奇偶校验 /// 超时时间(毫秒) /// 大小端设置 /// public static IIoTClientCommon CreateClient2SerialDevice(SerialDeviceVersion deviceVersion, string portName, int baudRate, int dataBits, StopBits stopBits, Parity parity, int timeout = 1500, EndianFormat format = EndianFormat.ABCD) { IIoTClientCommon iotClientCommon; switch (deviceVersion) { case SerialDeviceVersion.ModbusRtu: iotClientCommon = new ModbusRtuCommunication("ModbusRtu", portName, baudRate, dataBits, stopBits, parity, timeout, format); break; case SerialDeviceVersion.ModBusAscii: iotClientCommon = new ModbusRtuCommunication("ModbusAscii", portName, baudRate, dataBits, stopBits, parity, timeout, format); break; default: throw new Exception($"类型[{deviceVersion}]暂未实现"); } return iotClientCommon; } /// /// 创建西门子plc的连接 /// /// 设备类型 /// ip地址 /// 端口号 /// 插槽号 /// 机架号 /// /// public static IIoTClientCommon CreateClient2Siemens(SiemensVersion siemensVersion, string ip, int port, byte slot = 0, byte rack = 0, int timeout = 1500) { IIoTClientCommon iotClientCommon; switch (siemensVersion) { case SiemensVersion.S7_200: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_200, ip, port, slot, rack, timeout); break; case SiemensVersion.S7_200Smart: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_200Smart, ip, port, slot, rack, timeout); break; case SiemensVersion.S7_300: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_300, ip, port, slot, rack, timeout); break; case SiemensVersion.S7_400: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_400, ip, port, slot, rack, timeout); break; case SiemensVersion.S7_1200: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_1200, ip, port, slot, rack, timeout); break; case SiemensVersion.S7_1500: iotClientCommon = new SiemensClientCommunication(SiemensVersion.S7_1500, ip, port, slot, rack, timeout); break; default: throw new Exception($"类型[{siemensVersion}]暂未实现"); } return iotClientCommon; } /// /// /// /// /// /// /// public static IIoTClientCommon CreateClient2BACnetDevice(string ip, string deviceId, int port = 47808) { return new BACnetCommunication(ip, deviceId, port); } } }