IModBus.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using SHJX.Service.Common.ReadXML;
  2. using System.Collections.Generic;
  3. using System.IO.Ports;
  4. using System.Linq;
  5. using SHJX.Service.Common.Logging;
  6. using Microsoft.Extensions.Logging;
  7. namespace SHJX.Service.ServerClient.Modbus
  8. {
  9. public abstract class IModBus
  10. {
  11. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(IModBus));
  12. private static ReadConfigUtil _dataConfig;
  13. protected ModbusRTU _modbus;
  14. private static Dictionary<string, byte> _nodeIDs;
  15. private int _baudrate;
  16. private readonly Dictionary<string, IModBus> modbuss = new Dictionary<string, IModBus>();
  17. public IModBus(ReadConfigUtil dataConfig)
  18. {
  19. _dataConfig = dataConfig;
  20. _modbus = new ModbusRTU();
  21. _baudrate = _dataConfig.Baudrate;
  22. _nodeIDs = _dataConfig.ModBusNodeIDs;
  23. InitModbusConnection();
  24. }
  25. private void InitModbusConnection()
  26. {
  27. var ports = RJCP.IO.Ports.SerialPortStream.GetPortNames(); //获取当前计算机的串行端口名的数组。
  28. if (!(ports.FirstOrDefault() is { } port)) return;
  29. if (!byte.TryParse(port.Replace("COM", string.Empty), out var portbyte)) return;
  30. var ret = _modbus.Open(portbyte, _baudrate);
  31. if (!ret) logger.LogError("Fail to Open COM{0}", port);
  32. }
  33. }
  34. }