Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/Robots/SR100/AlignerHandler.cs

271 lines
7.9 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
using System;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.SCCore;
using Aitex.Sorter.Common;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot.SR100.AL
{
public class AlignerHandler : ITransferMsg
{
public int LastErrorCode { get; set; }
public bool background { get; protected set; }
public bool evt { get { return false; } }
public string deviceID { private get; set; }
public string _cmd = string.Empty;
public IDevice Robot { set { _device = (Aligner)value; } }
protected Aligner _device;
public AlignerHandler()
{
background = false;
}
public virtual string package(params object[] args)
{
return "";
}
public bool unpackage(string type, string[] items)
{
int value = Convert.ToInt32(items[3], 16);
_device.Status = value;
int error = Convert.ToInt32(items[4], 16);
_device.ErrorCode = error;
if (error > 0)
_device.LastErrorCode = error;
if (type.Equals(ProtocolTag.resp_tag_excute))
{
_device.ElapseTime = int.Parse(items[6]);
if (error == 0)
{
update(items);
}
return true;
}
return !background;
}
protected virtual void update(string[] data)
{
}
}
public class AlInitHandler : AlignerHandler
{
public AlInitHandler()
{
background = true;
}
//$,<UNo>(,<SeqNo>),CCLR,<CMode>(,<Sum>)<CR>
public override string package(params object[] args)
{
return ",CCLR,E,";
}
}
public class AlHomeHandler : AlignerHandler
{
public AlHomeHandler()
{
background = true;
}
public override string package(params object[] args)
{
if(SC.ContainsItem("Aligner.AlignerType") && SC.GetValue<int>("Aligner.AlignerType") == 1 )
{
return ",INIT,1,1,N,";
}
else return ",INIT,1,1,G,";
}
protected override void update(string[] data)
{
_device.Initalized = true;
}
}
public class AlClearErrorHandler : AlignerHandler
{
public AlClearErrorHandler()
{
background = true;
}
//$,<UNo>(,<SeqNo>),CCLR,<CMode>(,<Sum>)<CR>
public override string package(params object[] args)
{
return ",CCLR,E,";
}
}
public class AlGripHandler : AlignerHandler
{
public AlGripHandler()
{
background = true;
}
//$,<UNo>(,<SeqNo>),CSOL,<Sol>,<Sw>,<Wait>(,<Sum>)<CR>
//sol Solenoid control specification (1 byte) • 1 : Blade 1. • 2 : Blade 2. • F : Blade 1 + Blade 2.
// Solenoid command (1 byte) • 0 : Wafer release. / Lifter down. • 1 : Wafer hold. / Lifter up.
public override string package(params object[] args)
{
// bool bHold = (bool)args[0];
bool bHold = (bool)args[1];
if (bHold)
return ",CSOL,1,1,0,";
return ",CSOL,1,0,0,";
}
}
public class ALLiftHandler : AlignerHandler
{
public ALLiftHandler()
{
background = true;
}
//$,<UNo>(,<SeqNo>),CSOL,<Sol>,<Sw>,<Wait>(,<Sum>)<CR>
//sol Solenoid control specification (1 byte) • 1 : Blade 1. • 2 : Blade 2. • F : Blade 1 + Blade 2.
// Solenoid command (1 byte) • 0 : Wafer release. / Lifter down. • 1 : Wafer hold. / Lifter up.
public override string package(params object[] args)
{
bool bUp = (bool)args[0];
if (bUp)
return ",CSOL,2,1,0,";
return ",CSOL,2,0,0,";
}
}
public class AlStopHandler : AlignerHandler
{
public AlStopHandler()
{
background = true;
}
//$,<UNo>(,<SeqNo>),CSTP,<Sw>(,<Sum>)<CR>
//• H : Deceleration to a stop.
//• E : Emergency stop.
public override string package(params object[] args)
{
return ",CSTP,H,";
}
}
public class ALQueryStateHandler : ITransferMsg
{
public bool background { get; protected set; }
public bool evt { get { return false; } }
public string deviceID { private get; set; }
public string _cmd = string.Empty;
public IDevice Robot { set { _device = (Aligner)value; } }
protected Aligner _device;
public ALQueryStateHandler()
{
background = false;
}
//$,<UNo>(,<SeqNo>),RSTS(,<Sum>)<CR>
public string package(params object[] args)
{
return ",RSTS,";
}
public bool unpackage(string type, string[] items)
{
return !background;
}
}
public class AlAlignHandler : AlignerHandler
{
public AlAlignHandler()
{
background = true;
}
// $,<UNo>(,<SeqNo>),MALN,<Mode>,<Angle>(,<Sum>)<CR>
//Mode : Motion mode (1 byte) If the case of edge grip type pre-Aligner, specify 0.
public override string package(params object[] args)
{
int angle = (int)Math.Round((double)args[0] * 1000.0, 2);
return string.Format(",MALN,0,{0:D8},", angle);
}
//!,<UNo>(,<SeqNo>),<Sts>,<Errcd>,MALN,<ExeTime>,<PosData1>…,<PosDataN>,<Value1>…,<Value10>(,<Sum>)<CR>
protected override void update(string[] data)
{
/*
Value1 : Wafer eccentric amount before alignment operation (8 bytes, Resolution: 0.001 [mm])
Value2 : Wafer eccentric angle direction before alignment operation (8 bytes, Resolution: 0.001 [deg])
Value3 : Notch/Orientation Flat direction before alignment operation (8 bytes, Resolution: 0.001 [deg])
Value4 : X direction offset amount before alignment operation (8 bytes, Resolution: 0.001 [mm])
Value5 : Y direction offset amount before alignment operation (8 bytes, Resolution: 0.001 [mm])
Value6 : Pre-aligner adjustment angle (8 bytes, Resolution: 0.001 [deg])
Value7 : Manipulator adjustment amount (8 bytes, Resolution: 0.001 [mm])
Value8 : Manipulator adjustment angle (8 bytes, Resolution: 0.001 [deg])
Value9 : X direction offset amount after alignment operation (8 bytes, Resolution: 0.001 [mm])
Value10 : Y direction offset amount after alignment operation (8 bytes, Resolution: 0.001 [mm])
* //value index is 9
*/
_device.Notch = int.Parse(data[11]);
}
}
public class ALEventHandler : ITransferMsg
{
public bool background { get { return false; } }
public bool evt { get { return true; } }
public string deviceID { private get; set; }
public string _cmd = string.Empty;
public IDevice Robot { set { _device = (Aligner)value; } }
protected Aligner _device;
public ALEventHandler()
{
}
//$,<UNo>(,<SeqNo>),RSTS(,<Sum>)<CR>
public string package(params object[] args)
{
return "";
}
public bool unpackage(string type, string[] items)
{
string evtType = items[3];
if (evtType.Equals(ProtocolTag.resp_evt_error))
{
int error = Convert.ToInt32(items[5], 16);
_device.ErrorCode = error;
if (error > 0)
_device.LastErrorCode = error;
return true;
}
return false;
}
}
}