Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/OcrReaders/HST/HstHandler.cs

140 lines
4.7 KiB
C#

using Aitex.Core.RT.Event;
using Aitex.Core.RT.Log;
using Aitex.Core.RT.SCCore;
using Aitex.Sorter.Common;
using MECF.Framework.Common.Communications;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.OcrReaders.HST
{
public abstract class HstHandler : HandlerBase
{
protected ModuleName _target;
protected int _slot;
public HstOcrReader OCRDevice { get; set; }
public string Command;
protected HstHandler(HstOcrReader device,string command,string para): base(BuildMessage(command,para))
{
OCRDevice = device;
Command = command;
//_isSimulator = SC.GetValue<bool>("System.IsSimulatorMode");
}
public static byte[] BuildMessage(string command, string para)
{
List<byte> ret = new List<byte>();
foreach (char c in command)
{
ret.Add((byte)c);
}
//cmd.Add((byte)(':')); //3A
if (!string.IsNullOrEmpty(para))
foreach (char c in para)
{
ret.Add((byte)c);
}
return ret.ToArray();
}
public virtual void Update()
{
}
}
public class OnlineHandler: HstHandler
{
public OnlineHandler(HstOcrReader reader,bool online):base(reader,"SO",online?"1":"0")
{
OCRDevice = reader;
Command = "SO";
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
HstMessage response = msg as HstMessage;
ResponseMessage = msg;
if(response.IsAck) SetState(EnumHandlerState.Acked);
if(response.IsNak) SetState(EnumHandlerState.Completed);
transactionComplete = true;
return true;
}
}
public class LoadJobHandler : HstHandler
{
public LoadJobHandler(HstOcrReader reader, string jobfile) : base(reader, "LF", jobfile)
{
OCRDevice = reader;
Command = string.Format("LF{0}.job", jobfile);
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
HstMessage response = msg as HstMessage;
ResponseMessage = msg;
if (response.IsAck) SetState(EnumHandlerState.Acked);
if (response.IsNak) SetState(EnumHandlerState.Completed);
transactionComplete = true;
return true;
}
}
public class ReadLMHandler : HstHandler
{
public ReadLMHandler(HstOcrReader reader) : base(reader, "SM\"READ\"0 ", null)
{
OCRDevice = reader;
Command = "SM\"READ\"0 ";
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
HstMessage response = msg as HstMessage;
ResponseMessage = msg;
if (response.IsAck)
{
SetState(EnumHandlerState.Acked);
transactionComplete = false;
return true;
}
if (response.IsNak) SetState(EnumHandlerState.Completed);
if (response.IsResponse)
{
SetState(EnumHandlerState.Completed);
string[] items = response.Data.TrimStart('[').TrimEnd(']').Split(',');
if (OCRDevice.ReadLaserMaker)
{
OCRDevice.LaserMaker = items[0];
OCRDevice.LaserMark1 = items[0];
if (items.Length > 1) OCRDevice.LaserMark1Score = items[1];
if (items.Length > 2) OCRDevice.LaserMark1ReadTime = items[2];
LOG.Write($"{OCRDevice.Name} laser mark1 updated to {OCRDevice.LaserMaker}");
}
else
{
OCRDevice.T7Code = items[0];
OCRDevice.LaserMark2 = items[0];
if (items.Length > 1) OCRDevice.LaserMark2Score = items[1];
if (items.Length > 2) OCRDevice.LaserMark2ReadTime = items[2];
LOG.Write($"{OCRDevice.Name} laser mark2 updated to {OCRDevice.T7Code}");
}
OCRDevice.ReadOK = double.Parse(items[1]) >= 0;
}
transactionComplete = true;
return true;
}
}
}