123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System.Collections.Generic;
- using System.IO.Ports;
- using Aitex.Core.RT.Log;
- using MECF.Framework.Common.Communications;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.RFMatchs.AE
- {
- public class AeRfMatchMessage : BinaryMessage
- {
- public byte Header { get; set; }
- public byte CommandNumber { get; set; }
- public byte OptionLength { get; set; }
- public byte[] Data { get; set; }
- public byte CheckSum { get; set; }
- public int Address { get; set; }
- public int DataLength { get; set; }
- public int MessageLength { get; set; }
- }
- public class AeRfMatchConnection : SerialPortConnectionBase
- {
- private List<byte> _lstCacheBuffer = new List<byte>();
- public AeRfMatchConnection(string portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
- : base(portName, baudRate, dataBits, parity, stopBits, "\r", false)
- {
- }
- public override bool SendMessage(byte[] message)
- {
- _lstCacheBuffer.Clear();
- return base.SendMessage(message);
- }
- protected override MessageBase ParseResponse(byte[] rawBuffer)
- {
- _lstCacheBuffer.AddRange(rawBuffer);
- AeRfMatchMessage msg = new AeRfMatchMessage();
- msg.RawMessage = rawBuffer;
- if (_lstCacheBuffer.Count >= 1 && _lstCacheBuffer[0] == 0x06)
- {
- msg.IsAck = true;
- _lstCacheBuffer.RemoveAt(0);
- }
- if (_lstCacheBuffer.Count < 4)
- {
- return msg;
- }
- msg.Header = _lstCacheBuffer[0];
- msg.CommandNumber = _lstCacheBuffer[1];
- msg.OptionLength = _lstCacheBuffer[2];
- msg.Address = _lstCacheBuffer[0] >> 3;
- msg.DataLength = (byte)(0x07 & _lstCacheBuffer[0]);
- msg.MessageLength = 3 + msg.DataLength ;//3=包头+Cmd+校验
- if (msg.DataLength >= 7)
- {
- msg.DataLength = _lstCacheBuffer[2];
- msg.MessageLength = 4 + msg.DataLength ;//4=包头+Cmd+length+校验
- }
- if (_lstCacheBuffer.Count < msg.MessageLength)
- return msg;
- msg.Data = _lstCacheBuffer.GetRange(msg.DataLength >= 7 ? 3 : 2, msg.DataLength).ToArray();
- byte sum = 0x00;
- for (var i = 0; i < msg.MessageLength - 1; i++)
- {
- sum ^= _lstCacheBuffer[i];
- }
-
- if (_lstCacheBuffer[msg.MessageLength - 1] != sum)
- {
- LOG.Error($"check sum failed, ");
- msg.IsFormatError = true;
- _lstCacheBuffer.Clear();
- return msg;
- }
- msg.IsResponse = true;
-
- _lstCacheBuffer.RemoveRange(0, msg.MessageLength);
- return msg;
- }
- }
- }
|