修改Aligner响应方式,处理响应内容

This commit is contained in:
SIC1016\caipeilun 2024-01-23 13:28:48 +08:00
parent c2fa939ebf
commit f8e84c7e8c
3 changed files with 77 additions and 24 deletions

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.Event;
@ -87,6 +88,12 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
public string Address { get; set; }
public string Vacuum { get; set; } ="-Kpa" ;
public string PError { get; set; } = "-";
public string Response { get; set; } = "-";
public bool IsConnected => _connection is { IsConnected: true };
public bool AlarmStatus { get; set; }
@ -114,7 +121,9 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
private void InitData()
{
DATA.Subscribe($"{Module}.{Name}.HaveWafer", () => HaveWafer);
DATA.Subscribe($"{Module}.{Name}.Result", () => _connection.Result,SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.{Name}.Response", () => Response, SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.{Name}.Vacuum", () => Vacuum, SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.{Name}.PError", () => PError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
}
private void InitOp()
@ -577,28 +586,48 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
internal bool ParseData(string name, byte[] buffer, out bool bResult)
{
bResult = true;
var sAnswer = Encoding.ASCII.GetString(buffer);
if (sAnswer.Contains("END"))
{
_iCurrentOper = CommandEnum.NULL;
return true;
}
var sAnswer = Encoding.ASCII.GetString(buffer).TrimEnd('\r', '\n');
Response = sAnswer;
string[] units = Regex.Split(sAnswer,"\r\n");
if (sAnswer.Contains("ERR"))
foreach (string unit in units)
{
lock (_locker)
if (unit.Contains("END"))
{
_lstHandler.Clear();
_iCurrentOper = CommandEnum.NULL;
return true;
}
else if (unit.Contains("ERR") && _lastHandlerName != "PER")
{
lock (_locker)
{
_lstHandler.Clear();
}
_iCurrentOper = CommandEnum.NULL;
bResult = false;
_iCurrentOper = CommandEnum.NULL;
bResult = false;
EV.PostAlarmLog(Module, $"Aligner, Execute {_lastHandlerName} error, {sAnswer.TrimEnd('\r', '\n')}");
EV.PostAlarmLog(Module, $"Aligner, Execute {_lastHandlerName} error, {unit.TrimEnd('\r', '\n')}");
return true; //Handled
return true; //Handled
}
else if (_lastHandlerName == "CVD")
{
try
{
double x = Convert.ToInt32(unit);
Vacuum = unit + "Kpa";
}
catch
{
Vacuum = "Convert(" + unit + ") Failed.";
}
}
else if (_lastHandlerName == "PER")
{
PError = unit;
}
}
return false;
}
@ -606,6 +635,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
{
bResult = true;
var sAnswer = Encoding.ASCII.GetString(buffer.ToArray());
Response = sAnswer;
if (sAnswer.Contains("END"))
{
HaveWafer = sAnswer.Contains("1\r\nEND");

View File

@ -8,11 +8,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
{
private readonly List<byte> _lstCacheBuffer = new();
private object _lockerActiveHandler = new object();
private string _result = "";
public string Result
{
get { return _result; }
}
public HwAlignerGuideConnection(string portName)
: base(portName, 115200, 8, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One, "\r", false)
{
@ -20,7 +16,6 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
public override bool SendMessage(byte[] message)
{
_lstCacheBuffer.Clear();
_result = "";
return base.SendMessage(message);
}
protected override MessageBase ParseResponse(byte[] rawMessage)
@ -29,8 +24,6 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner
_lstCacheBuffer.AddRange(rawMessage);
var temps = _lstCacheBuffer.ToArray();
_result += System.Text.Encoding.ASCII.GetString(temps);
HwAlignerGuideMessage msg = new HwAlignerGuideMessage();
msg.IsResponse = false;
msg.IsAck = false;

View File

@ -50,12 +50,16 @@ namespace MECF.Framework.Simulator.Core.Aligners.HPA48
CVN(message);
else if (message.StartsWith("CVF"))
CVF(message);
else if (message.StartsWith("CVD"))
CVD(message);
else if (message.StartsWith("MTM"))
MTM(message);
else if (message.StartsWith("DOC"))
DOC(message);
else if (message.StartsWith("STP"))
STP(message);
else if (message.StartsWith("PER"))
PER(message);
}
@ -136,6 +140,19 @@ namespace MECF.Framework.Simulator.Core.Aligners.HPA48
});
}
/// <summary>
/// 读取真空值
/// </summary>
/// <param name="cmd"></param>
private void CVD(string cmd)
{
SendResponse(cmd, s =>
{
Thread.Sleep(500);
OnWriteMessage("-65");
});
}
/// <summary>
/// 打开真空。
/// </summary>
@ -175,6 +192,19 @@ namespace MECF.Framework.Simulator.Core.Aligners.HPA48
});
}
/// <summary>
/// 读取上一次报警
/// </summary>
/// <param name="cmd"></param>
private void PER(string cmd)
{
SendResponse(cmd, s =>
{
Thread.Sleep(500);
OnWriteMessage("ERR 444");
});
}
/// <summary>
/// 移动至测量中心点。
/// </summary>