using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.Common.DeviceData; using Aitex.Core.RT.Event; using Aitex.Core.RT.Log; using MECF.Framework.Common.Communications; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.HonghuAligners { public static class FuqiAlignerCommand { public const string Reset = "C01"; public const string RequestPlace = "C02"; public const string RequestFinishPlace = "C03"; public const string RequestVacuumOn = "C04"; public const string RequestVacuumOff = "C05"; public const string SetVacuumOffAfterAlign = "C06"; public const string SetVacuumOnAfterAlign = "C07"; public const string SetWIDReaderOn = "C08"; public const string SetWIDReaderOff = "C09"; public const string SetWIDReadComplete = "C10"; public const string SetNotchProduct = "C11"; public const string SetLineProduct = "C12"; public const string SetCenterAndNotch = "C13"; public const string SetOnlyNotch = "C14"; public const string SetWIDReadFail = "C15"; public const string SetAdjustFirstTime = "C16"; public const string SetAdjustTwice = "C17"; public const string SetUseNewCommand = "C41"; public const string SetUseOldCommand = "C40"; /// /// A /// } public class FuqiAlignerHandler : HandlerBase { public FuqiAligner Device { get; set; } public string Command; protected FuqiAlignerHandler(FuqiAligner device, string command) : base(BuildMesage(command)) { Device = device; Command = command; Name = command; } public static byte[] BuildMesage(string data) { List ret = new List(); foreach (char c in data) { ret.Add((byte)c); } return ret.ToArray(); } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { FuqiAlignerMessageBIN response = msg as FuqiAlignerMessageBIN; ResponseMessage = msg; transactionComplete = false; if (response.IsResponse) { SetState(EnumHandlerState.Completed); transactionComplete = true; } Device.OnActionDone(); return true; } } public enum FuqiMotionStatus { None, Complete, Fail, } public class FuqiResetHandler : FuqiAlignerHandler { public FuqiResetHandler(FuqiAligner device, string command) : base(device, BuildData(command)) { _xAxisStatus = MotionStatus.None; _yAxisStatus = MotionStatus.None; _zAxisStatus = MotionStatus.None; } private MotionStatus _xAxisStatus; private MotionStatus _yAxisStatus; private MotionStatus _zAxisStatus; private static string BuildData(string command) { return command; } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { HonghuAlignerMessageBIN response = msg as HonghuAlignerMessageBIN; ResponseMessage = msg; Device.TaExecuteSuccss = false; transactionComplete = false; if (response.IsAck) { if (Encoding.ASCII.GetString(response.CMD).Contains("X01")) _xAxisStatus = MotionStatus.Complete; if (Encoding.ASCII.GetString(response.CMD).Contains("X02")) _xAxisStatus = MotionStatus.Fail; if (Encoding.ASCII.GetString(response.CMD).Contains("Y01")) _yAxisStatus = MotionStatus.Complete; if (Encoding.ASCII.GetString(response.CMD).Contains("Y02")) _yAxisStatus = MotionStatus.Fail; if (Encoding.ASCII.GetString(response.CMD).Contains("Z01")) _zAxisStatus = MotionStatus.Complete; if (Encoding.ASCII.GetString(response.CMD).Contains("Z02")) _zAxisStatus = MotionStatus.Fail; SetState(EnumHandlerState.Completed); if (_xAxisStatus == MotionStatus.Complete && _yAxisStatus == MotionStatus.Complete && _zAxisStatus == MotionStatus.Complete) Device.TaExecuteSuccss = true; if (_xAxisStatus != MotionStatus.None && _yAxisStatus != MotionStatus.None && _zAxisStatus != MotionStatus.None) transactionComplete = true; } return true; } } public class FuqiRequestHandler : FuqiAlignerHandler { private string cmd; public FuqiRequestHandler(FuqiAligner device, string command) : base(device, BuildData(command)) { cmd = command; } private static string BuildData(string command) { return command; } public override bool HandleMessage(MessageBase msg, out bool transactionComplete) { FuqiAlignerMessageBIN response = msg as FuqiAlignerMessageBIN; ResponseMessage = msg; Device.TaExecuteSuccss = false; transactionComplete = false; string commandstr = Encoding.ASCII.GetString(response.CMD); if (response.IsResponse) { switch (cmd) { case FuqiAlignerCommand.RequestPlace: if (Encoding.ASCII.GetString(response.CMD).Contains("M01")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnWaferPresent(false); Device.OnActionDone(); } if (Encoding.ASCII.GetString(response.CMD).Contains("M02")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnWaferPresent(true); Device.OnActionDone(); } break; case FuqiAlignerCommand.RequestFinishPlace: if (Encoding.ASCII.GetString(response.CMD).Contains("M03")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } if (Encoding.ASCII.GetString(response.CMD).Contains("M04")) { Device.TaExecuteSuccss = false; transactionComplete = true; } if (Encoding.ASCII.GetString(response.CMD).Contains("M17")) { Device.TaExecuteSuccss = false; transactionComplete = true; } if (Encoding.ASCII.GetString(response.CMD).Contains("M18")) { Device.TaExecuteSuccss = false; transactionComplete = true; } break; case FuqiAlignerCommand.RequestVacuumOn: if (Encoding.ASCII.GetString(response.CMD).Contains("M05")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } if (Encoding.ASCII.GetString(response.CMD).Contains("M06")) { Device.TaExecuteSuccss = false; transactionComplete = true; Device.OnError(Encoding.ASCII.GetString(response.CMD)); } break; case FuqiAlignerCommand.RequestVacuumOff: if (Encoding.ASCII.GetString(response.CMD).Contains("M07")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } if (Encoding.ASCII.GetString(response.CMD).Contains("M08")) { Device.TaExecuteSuccss = false; transactionComplete = true; Device.OnError(Encoding.ASCII.GetString(response.CMD)); } break; case FuqiAlignerCommand.Reset: if (Encoding.ASCII.GetString(response.CMD).Contains("M00")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.Initalized = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetVacuumOffAfterAlign: case FuqiAlignerCommand.SetVacuumOnAfterAlign: if (Encoding.ASCII.GetString(response.CMD).Contains("M09")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetWIDReaderOn: case FuqiAlignerCommand.SetWIDReaderOff: if (Encoding.ASCII.GetString(response.CMD).Contains("M10")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetWIDReadComplete: case FuqiAlignerCommand.SetWIDReadFail: if (Encoding.ASCII.GetString(response.CMD).Contains("M11")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetLineProduct: case FuqiAlignerCommand.SetNotchProduct: if (Encoding.ASCII.GetString(response.CMD).Contains("M12")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetCenterAndNotch: case FuqiAlignerCommand.SetOnlyNotch: if (Encoding.ASCII.GetString(response.CMD).Contains("M13")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetAdjustFirstTime: if (Encoding.ASCII.GetString(response.CMD).Contains("M31")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetAdjustTwice: if (Encoding.ASCII.GetString(response.CMD).Contains("M32")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetUseOldCommand: if (Encoding.ASCII.GetString(response.CMD).Contains("M40")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; case FuqiAlignerCommand.SetUseNewCommand: if (Encoding.ASCII.GetString(response.CMD).Contains("M41")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } break; default: break; } if (cmd.Contains("A")) { if (Encoding.ASCII.GetString(response.CMD).Contains("M14")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } } if (cmd.Contains("B")) { if (Encoding.ASCII.GetString(response.CMD).Contains("M15")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } } if (cmd.Contains("T")) { if (Encoding.ASCII.GetString(response.CMD).Contains("M16")) { Device.TaExecuteSuccss = true; transactionComplete = true; Device.OnActionDone(); } } } return true; } } }