1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using Aitex.Core.RT.Log;
- using MECF.Framework.Common.Communications;
- using System;
- using System.Collections.Generic;
- using System.IO.Ports;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Chillers.BaecChiller
- {
- public class RisshiChillerMessage : BinaryMessage
- {
- public string Command { get; set; }
- public string ErrorCode { get; set; }
- public byte[] Data { get; set; }
- }
- //Modbus RTU
- public class BaecChillerConnection : SerialPortConnectionBase
- {
- private List<byte> _msgBuffer = new List<byte>();
- public BaecChillerConnection(string portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
- : base(portName, baudRate, dataBits, parity, stopBits, "", false)
- {
- }
- public override bool SendMessage(byte[] message)
- {
- return base.SendMessage(message);
- }
- protected override MessageBase ParseResponse(byte[] rawMessage)
- {
- RisshiChillerMessage msg = new RisshiChillerMessage();
- if (rawMessage == null || rawMessage.Length < 1)
- {
- return null;
- }
- _msgBuffer.AddRange(rawMessage);
- if (_msgBuffer.Count < 5)
- {
- return msg;
- }
- if (_msgBuffer[1] == 0x03)
- {
- var dataLength = _msgBuffer[2];
- if (_msgBuffer.Count < 3 + dataLength + 2)
- {
- return msg;
- }
- else
- {
- msg.RawMessage = _msgBuffer.Take(3 + dataLength + 2).ToArray();
- msg.Data = _msgBuffer.Skip(3).Take(dataLength).ToArray();
- _msgBuffer.RemoveRange(0, msg.RawMessage.Length);
- msg.IsResponse = true;
- msg.IsAck = true;
- msg.IsComplete = true;
- return msg;
- }
- }
- else if (_msgBuffer[1] == 0x10 || _msgBuffer[1] == 0x06)
- {
- //SlaveAddress,FunctionCode,StartingAddressHigh,StartingAddressLow,NumberAddressHigh,NumberAddressLow,CRC,CRC
- if (_msgBuffer.Count < 8)
- {
- return msg;
- }
- else
- {
- msg.RawMessage = _msgBuffer.Take(8).ToArray();
- _msgBuffer.RemoveRange(0, msg.RawMessage.Length);
- msg.IsResponse = true;
- msg.IsAck = true;
- msg.IsComplete = true;
- return msg;
- }
- }
- else
- {
- msg.IsFormatError = true;
- LOG.Error($"invalid response");
- return msg;
- }
- }
- }
- }
|