SmcHRZChillerConnection.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Aitex.Core.RT.Log;
  2. using MECF.Framework.Common.Communications;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO.Ports;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Aitex.Core.RT.Device;
  11. using MECF.Framework.Common.Utilities;
  12. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Chillers.SmcHRZChillers
  13. {
  14. //Modbus RTU
  15. public class SmcHRZChillerConnection : SerialPortConnectionBase
  16. {
  17. public SmcHRZChillerConnection(string portName, int baudRate = 9600, int dataBits = 7, Parity parity = Parity.Even, StopBits stopBits = StopBits.One)
  18. : base(portName, baudRate, dataBits, parity, stopBits, "\r\n", true)
  19. {
  20. }
  21. protected override MessageBase ParseResponse(string rawMessage)
  22. {
  23. AsciiMessage msg = new AsciiMessage();
  24. if (rawMessage == null || rawMessage.Length < 5)
  25. {
  26. return null;
  27. }
  28. try
  29. {
  30. //0183017B
  31. string cmd = rawMessage.Split(new char[] { '\r', '\n' })[0];
  32. if (ModbusUtility.CalculateLrc(ModbusUtility.HexToBytes(cmd.Substring(1, cmd.Length - 3))).ToString("X2") !=
  33. cmd.Substring(cmd.Length - 2)) //LRC check
  34. {
  35. LOG.Error($"smc chiller message LRC check error");
  36. return msg;
  37. }
  38. msg.IsComplete = true;
  39. msg.RawMessage = rawMessage;
  40. }
  41. catch (Exception ex)
  42. {
  43. LOG.Error($"smc chiller error: [{ex.Message}]");
  44. }
  45. return msg;
  46. }
  47. }
  48. }