SIC-12/Framework/MECF.Framework.RT.EquipmentLibrary/HardwareUnits/Temps/Strong/StrongTempConnection.cs

73 lines
2.4 KiB
C#

using Aitex.Core.Util;
using MECF.Framework.Common.Communications;
using System;
using System.Collections.Generic;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Temps
{
public class StrongTempConnection : SerialPortConnectionBase
{
private List<byte> _lstCacheBuffer = new List<byte>();
public StrongTempConnection(string portName) : base(portName, 9600, 8, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One, "", false)
{
deviceTimer = new DeviceTimer();
}
public DeviceTimer deviceTimer;
private int ErrorCount = 0;
public override bool SendMessage(byte[] message)
{
_lstCacheBuffer.Clear();//每次发送前清除接收区缓存
return base.SendMessage(message);
}
protected override MessageBase ParseResponse(byte[] rawMessage)
{
_lstCacheBuffer.AddRange(rawMessage);//持续添加通讯缓存
//验证最后一位是不是结束符\r
if (Array.IndexOf(rawMessage, 43) == -1)//byte 43 是通讯结束字符串C
//return IsTimeOut() ? ReceiveTempMessage(true, false, _lstCacheBuffer.ToArray()) : ReceiveTempMessage(false, false, _lstCacheBuffer.ToArray());
{
var mes = IsTimeOut() ? ReceiveTempMessage(true, false, _lstCacheBuffer.ToArray()) : ReceiveTempMessage(false, false, _lstCacheBuffer.ToArray());
if (deviceTimer.IsIdle())
deviceTimer.Start(1000);
return mes;
}
Reset();//复位状态和计数
return ReceiveTempMessage(false, true, _lstCacheBuffer.ToArray());
}
public bool IsTimeOut()
{
if (deviceTimer.IsTimeout())
{
deviceTimer.Stop();
ErrorCount += 1;
if (ErrorCount >= 3)
return true;
return false;
}
return false;
}
private void Reset()
{
ErrorCount = 0;
deviceTimer.Stop();
}
private BinaryMessage ReceiveTempMessage(bool isError, bool isComplete, byte[] bytes)
{
BinaryMessage msg = new BinaryMessage();
msg.IsError = isError;
msg.IsComplete = isComplete;
msg.RawMessage = bytes;
return msg;
}
}
}