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

293 lines
7.8 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.Sorter.Common;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot.NX100.AL
{
public class AlignerHandler : 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 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))
{
if (error == 0)
{
update(items);
}
return true;
}
return !background;
}
protected virtual void update(string[] data)
{
}
}
public class AlInitHandler : AlignerHandler
{
public AlInitHandler()
{
background = true;
}
public override string package(params object[] args)
{
return ",INIT,00,";
}
protected override void update(string[] data)
{
_device.Initalized = true;
}
}
public class AlHomeHandler : AlignerHandler
{
public AlHomeHandler()
{
background = true;
}
public override string package(params object[] args)
{
return ",MHOM,F,";
}
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;
}
//Command wafer hold/release signal to the solenoid of the specified unit.
//$ <UNo> (<SeqNo>) CSOL <Fork> <Sw> <Sum> <CR>
//• Fork: Fork specified(1 byte)
//• A: Extension axis 1 (Blade 1), pre-aligner
//• B: Extension axis 2 (Blade 2)
//• Sw: Chucking command(1 byte)
//• 0: Chucking OFF
//• 1: Chucking ON
public override string package(params object[] args)
{
bool bHold = (bool)args[1];
// bool bHold = (bool)args[0];
if (bHold)
return ",CSOL,A,1,";
return ",CSOL,A,0,";
}
}
public class ALMoveToReadyPositionHandler : AlignerHandler
{
public ALMoveToReadyPositionHandler()
{
background = true;
}
public override string package(params object[] args)
{
return ",MTRS,GP,00,AL,A,";
}
}
public class ALLiftHandler : AlignerHandler
{
public ALLiftHandler()
{
background = true;
}
//$ <UNo> (<SeqNo>) CLFT<Sw> <Sum> <CR>
//• UNo: Unit number(1 byte)
//• 1 to 4: Unit specified
//• SeqNo: Sequence number(Non/1/2/3 byte)
//• Sw: Lifter command(1 byte)
//• 0: Lifter down
//• 1: Lifter up
public override string package(params object[] args)
{
bool bUp = (bool)args[0];
if (bUp)
return ",CLFT,1,";
return ",CLFT,0,";
}
}
public class AlStopHandler : AlignerHandler
{
public AlStopHandler()
{
background = true;
}
public override string package(params object[] args)
{
return ",CHLT,";
}
}
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
{
private int _angle = 0;
public AlAlignHandler()
{
background = true;
}
// $ <UNo> (<SeqNo>) MALN <TUNo> <TrsSt> <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)
{
// • TUNo: Unit number to be compensated for (1 byte)
//• 1 to 4: Unit specified
//• TrsSt: Target station(2 Byte)
//• ”P1” - ”P2”: At the time of PA stage specification
//Note: P1 and P2 station are effective only when two or more PA stations exist.
//When it does not exist in addition to P1 station, specification of an target station is nothing.
//• Angle: Positioning angle(6 bytes)
//• Relative angle from the position set by alignment calibration as the reference point.
//• Specified in the range between "000000" and "035999"(0 to 359.99 degree.Resolution: 0.01[deg])
//• If a value is less than specified digits, fill the higher digit with 0 so that the field always has specfied digits
//_angle is 0.001 pecent
_angle =(int)Math.Round((double)args[0]* 100.0,2);
return string.Format(",MALN,1,{0:D6},",_angle);
//return string.Format(",MALN,2,{0:D6},", _angle);
}
//!,<UNo>(,<SeqNo>),<Sts>,<Errcd>,MALN,<ExeTime>,<PosData1>…,<PosDataN>,<Value1>…,<Value10>(,<Sum>)<CR>
protected override void update(string[] data)
{
/*
$ <UNo> (<SeqNo>) <StsN> <Ackcd> <Sum> <CR>
*/
_device.Notch = _angle;
}
}
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;
}
}
}