271 lines
7.9 KiB
C#
271 lines
7.9 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|