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

271 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}