using SHJX.Service.Common.ReadXML; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using SHJX.Service.Common.Logging; using Microsoft.Extensions.Logging; namespace SHJX.Service.ServerClient.Modbus { public abstract class IModBus { private static readonly ILogger logger = LogFactory.BuildLogger(typeof(IModBus)); private static ReadConfigUtil _dataConfig; protected ModbusRTU _modbus; private static Dictionary _nodeIDs; private int _baudrate; private readonly Dictionary modbuss = new Dictionary(); public IModBus(ReadConfigUtil dataConfig) { _dataConfig = dataConfig; _modbus = new ModbusRTU(); _baudrate = _dataConfig.Baudrate; _nodeIDs = _dataConfig.ModBusNodeIDs; InitModbusConnection(); } private void InitModbusConnection() { var ports = RJCP.IO.Ports.SerialPortStream.GetPortNames(); //获取当前计算机的串行端口名的数组。 if (!(ports.FirstOrDefault() is { } port)) return; if (!byte.TryParse(port.Replace("COM", string.Empty), out var portbyte)) return; var ret = _modbus.Open(portbyte, _baudrate); if (!ret) logger.LogError("Fail to Open COM{0}", port); } } }