Sic03/FrameworkLocal/RTEquipmentLibrary/HardwareUnits/OcrReaders/Handler.cs

280 lines
7.8 KiB
C#

using System;
using System.Text.RegularExpressions;
using Aitex.Core.RT.Log;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.OcrReaders
{
public interface IReaderMsg
{
string package(params object[] args);
/// </summary>
/// return value, completed
/// <param name="type"></param>
/// <param name="cmd"></param>
/// <returns></returns>
bool unpackage(string type, string[] items);
bool background { get; }
void SetExeError();
}
public class handler : IHandler
{
public int ID { get; set; }
public int Unit { get; set; }
public bool IsBackground { get { return _imp.background; } }
private static int retry_time = 1;
private int retry_count = retry_time;
private IReaderMsg _imp ;
private object[] _objs = null;
public handler(IReaderMsg imp, params object[] objs)
{
_imp = imp;
this._objs = objs;
}
public bool Execute<TPort>(ref TPort port) where TPort : ICommunication
{
retry_count = retry_time;
//return port.Write(string.Format("{0}\r", _imp.package(this._objs)));
return port.Write(string.Format("{0}\r\n", _imp.package(this._objs)));
}
/// <summary>
/// return value: bhandle
/// </summary>
/// <typeparam name="TPort"></typeparam>
/// <param name="port"></param>
/// <param name="msg"></param>
/// <param name="completed"></param>
/// <returns></returns>
public bool OnMessage<TPort>(ref TPort port, string message, out bool completed) where TPort : ICommunication
{
completed = false;
try
{
string msg = message.Trim();
//if (msg.IndexOf("WELCOME") >= 0)
//{
// completed = true;
// return true;
//}
//msg = msg.Replace("USER:","");
//if (string.IsNullOrWhiteSpace(msg))
//{
// completed = true;
// return true;
//}
msg = message.TrimStart('[');
msg = msg.TrimEnd(']');
string[] data = Regex.Split(msg, ",");
completed = _imp.unpackage("", data);
//if (msg.Length == 1)
//{
// if (!msg.Equals("1")) //0: command failed
// {
// _imp.SetExeError();
// completed = true;
// }
// if (!IsBackground)
// {
// _imp.unpackage("", null);
// completed = true;
// }
// return true;
//}
//if (IsBackground)
//{
// msg = message.TrimStart('[');
// msg = msg.TrimEnd(']');
// string[] data = Regex.Split(msg, ",");
// completed = _imp.unpackage("", data);
//}
return true;
}
catch (ExcuteFailedException e)
{
throw (e);
}
catch (Exception ex)
{
LOG.Write(ex);
throw (new InvalidPackageException(message));
}
}
}
public class ReadHandler : IReaderMsg //common move
{
public bool background { get; private set; }
private OcrReader _device ;
public ReadHandler(OcrReader device)
{
_device = device;
background = false;
}
public string package(params object[] args)
{
return string.Format("SM\"READ\"0 ");
}
public void SetExeError()
{
_device.ExeError = true;
}
public bool unpackage(string type, string[] items)
{
if(items.Length == 1)
{
if (items[0] != "1" && !items[0].Contains("WELCOME"))
{
SetExeError();
return true;
}
else return false;
}
if (_device.ReadLaserMaker)
{
_device.LaserMaker = items[0];
_device.LaserMark1 = items[0];
if (items.Length > 1) _device.LaserMark1Score = items[1];
if (items.Length > 2) _device.LaserMark1ReadTime = items[2];
LOG.Write($"{_device.Name} laser marker updated to {_device.LaserMaker}");
}
else
{
_device.T7Code = items[0];
_device.LaserMark2 = items[0];
if (items.Length > 1) _device.LaserMark2Score = items[1];
if (items.Length > 2) _device.LaserMark2ReadTime = items[2];
LOG.Write($"{_device.Name} T7 code updated to {_device.T7Code}");
}
_device.ReadOK = double.Parse(items[1]) > 0;
return true;
}
}
public class OnlineHandler : IReaderMsg //common move
{
public bool background { get; private set; }
private OcrReader _device ;
private bool _online = false;
public OnlineHandler(OcrReader device)
{
_device = device;
background = false;
}
public string package(params object[] args)
{
_online = (bool)args[0];
if(_online)
return string.Format("SO1");
return string.Format("SO0");
}
public void SetExeError()
{
_device.ExeError = true;
}
public bool unpackage(string type, string[] items)
{
if (items[0] != "1" && !items[0].Contains("WELCOME"))
SetExeError();
return true;
}
}
public class GetJobHandler : IReaderMsg
{
public bool background { get; private set; }
private OcrReader _device ;
public GetJobHandler(OcrReader device)
{
_device = device;
background = false;
}
public string package(params object[] args)
{
return string.Format("GF");
}
public void SetExeError()
{
_device.ExeError = true;
}
public bool unpackage(string type, string[] items)
{
//if (items[0] != "1")
//{
// SetExeError();
// return true;
//}
//else return false;
_device.JobName = (string)items[0];
return true;
}
}
public class LoadJobHandler : IReaderMsg //common move
{
public bool background { get; private set; }
private OcrReader _device ;
private string _job;
public LoadJobHandler(OcrReader device)
{
_device = device;
background = false;
}
public string package(params object[] args)
{
_job = (string)args[0]; //full path
// _job = _job.Substring(_job.LastIndexOf("\\") + 1); //remove dir
// _job = _job.Substring(0, _job.LastIndexOf(".")); //remove expand
return string.Format("LF{0}.job",_job);
}
public void SetExeError()
{
_device.ExeError = true;
}
public bool unpackage(string type, string[] items)
{
if (items[0] != "1" && !items[0].Contains("WELCOME"))
SetExeError();
else _device.JobName = _job;
return true;
}
}
}