| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644 | 
							- using Aitex.Core.RT.DataCenter;
 
- using Aitex.Core.RT.Device;
 
- using Aitex.Core.RT.Device.Unit;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.RT.IOCore;
 
- using Aitex.Core.RT.OperationCenter;
 
- using Aitex.Core.RT.SCCore;
 
- using Aitex.Core.Util;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.Common.Event;
 
- using MECF.Framework.Common.SubstrateTrackings;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using System.Xml;
 
- namespace Aitex.Core.RT.Device.Unit
 
- {
 
-     public class IoBoat : BaseDevice, IDevice
 
-     {
 
-         public enum BoatPosition
 
-         {
 
-             Unknown,
 
-             HomePosition,
 
-             Position1,
 
-             Position2,
 
-             Position3,
 
-             ProcessPosition,
 
-             CapPosition,
 
-             None,
 
-         }
 
-         public enum BoatRotationMode
 
-         {
 
-             None,
 
-             Home,
 
-             Continuously,
 
-             Interval,
 
-             Stop,
 
-         }
 
-         public enum BoatRotationDirection
 
-         {
 
-             Unknown,
 
-             CW,
 
-             CCW,
 
-         }
 
-         public IoBoat(string module, XmlElement node, string ioModule = "")
 
-         {
 
-             base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
 
-             base.Name = node.GetAttribute("id");
 
-             base.Display = node.GetAttribute("display");
 
-             base.DeviceID = node.GetAttribute("schematicId");
 
-             _diZAxisAtHome = ParseDiNode("diZAxisAtHome", node, ioModule);
 
-             _diZAxisAtProcessPosition = ParseDiNode("diZAxisAtProcessPosition", node, ioModule);
 
-             _diZAxisAtPosition2 = ParseDiNode("diZAxisAtPosition2", node, ioModule);
 
-             _diZAxisAtPosition1 = ParseDiNode("diZAxisAtPosition1", node, ioModule);
 
-             _diHumanInterlockSensor = ParseDiNode("diHumanInterlockSensor", node, ioModule);
 
-             _diZAxisMoving = ParseDiNode("diZAxisMoving", node, ioModule);
 
-             _diRAxisMoving = ParseDiNode("diRAxisMoving", node, ioModule);
 
-             _diRAxisHomed = ParseDiNode("diRAxisHomed", node, ioModule);
 
-             _diError = ParseDiNode("diError", node, ioModule);
 
-             _diServoOn = ParseDiNode("diServoOn", node, ioModule);
 
-             _doZAxisBreak = ParseDoNode("doZAxisBreak", node, ioModule);
 
-             _doZAxisMoveToPosition1 = ParseDoNode("doZAxisMoveToPosition1", node, ioModule);
 
-             _doZAxisMoveToPosition2 = ParseDoNode("doZAxisMoveToPosition2", node, ioModule);
 
-             _doZAxisMoveToProcessPosition = ParseDoNode("doZAxisMoveToProcessPosition", node, ioModule);
 
-             _doZAxisMoveHomePosition = ParseDoNode("doZAxisMoveHomePosition", node, ioModule);
 
-             _doRAxisRotateContinuous = ParseDoNode("doRAxisRotateContinuous", node, ioModule);
 
-             _doRAxisRotateInterval = ParseDoNode("doRAxisRotateInterval", node, ioModule);
 
-             _doRAxisRotateHome = ParseDoNode("doRAxisRotateHome", node, ioModule);
 
-             _doRAxisRotateStop = ParseDoNode("doRAxisRotateStop", node, ioModule);
 
-             _doZAxisStop = ParseDoNode("doZAxisStop", node, ioModule);
 
-             _doRAxisCW = ParseDoNode("doRAxisCW", node, ioModule);
 
-             _doRAxisCCW = ParseDoNode("doRAxisCCW", node, ioModule);
 
-             _doELVPause = ParseDoNode("doELVPause", node, ioModule);
 
-             _doResetError = ParseDoNode("doResetError", node, ioModule);
 
-             _doServoOn = ParseDoNode("doServoOn", node, ioModule);
 
-             _doPowerOn = ParseDoNode("doPowerOn", node, ioModule);
 
-             _aiZAxisSpeed = ParseAiNode("aiZAxisSpeed", node, ioModule);
 
-             _aiRAxisSpeed = ParseAiNode("aiRAxisSpeed", node, ioModule);
 
-             _aiRAxisCurrentPos = ParseAiNode("aiRAxisCurrentPos", node, ioModule);
 
-             _aiZAxisCurrentPos = ParseAiNode("aiZAxisCurrentPos", node, ioModule);
 
-             _aiRAxisCurrentAngle = ParseAiNode("aiRAxisCurrentAngle", node, ioModule);
 
-             _aoZAxisSpeed = ParseAoNode("aoZAxisSpeed", node, ioModule);
 
-             _aoRAxisSpeed = ParseAoNode("aoRAxisSpeed", node, ioModule);
 
-             _aoRAxisIntervalAngle = ParseAoNode("aoRAxisIntervalAngle", node, ioModule);
 
-         }
 
-         #region fields
 
-         private DIAccessor _diHumanInterlockSensor;//1正常
 
-         private DIAccessor _diZAxisAtPosition1;
 
-         private DIAccessor _diZAxisAtPosition2;
 
-         private DIAccessor _diZAxisAtProcessPosition;
 
-         private DIAccessor _diZAxisAtHome;
 
-         private DIAccessor _diZAxisMoving;
 
-         private DIAccessor _diRAxisMoving;
 
-         private DIAccessor _diRAxisHomed;
 
-         private DIAccessor _diError;
 
-         private DIAccessor _diServoOn;
 
-         private DOAccessor _doZAxisBreak;
 
-         private DOAccessor _doZAxisMoveToPosition1;
 
-         private DOAccessor _doZAxisMoveToPosition2;
 
-         private DOAccessor _doZAxisMoveToProcessPosition;
 
-         private DOAccessor _doZAxisMoveHomePosition;
 
-         private DOAccessor _doRAxisRotateContinuous;
 
-         private DOAccessor _doRAxisRotateInterval;
 
-         private DOAccessor _doRAxisRotateHome;
 
-         private DOAccessor _doRAxisRotateStop;
 
-         private DOAccessor _doZAxisStop;
 
-         private DOAccessor _doRAxisCW;
 
-         private DOAccessor _doRAxisCCW;
 
-         private DOAccessor _doELVPause;
 
-         private DOAccessor _doResetError;
 
-         private DOAccessor _doServoOn;
 
-         private DOAccessor _doPowerOn;
 
-         private AIAccessor _aiZAxisSpeed;
 
-         private AIAccessor _aiRAxisSpeed;
 
-         private AIAccessor _aiRAxisCurrentPos;
 
-         private AIAccessor _aiZAxisCurrentPos;
 
-         private AIAccessor _aiRAxisCurrentAngle;
 
-         private AOAccessor _aoZAxisSpeed;
 
-         private AOAccessor _aoRAxisSpeed;
 
-         private AOAccessor _aoRAxisIntervalAngle;
 
-         private RD_TRIG _upLimitTrig = new RD_TRIG();
 
-         private RD_TRIG _downLimitTrig = new RD_TRIG();
 
-         private RD_TRIG _humanInterlockTrig = new RD_TRIG();
 
-         #endregion
 
-         public AlarmEventItem BoatZAxisMoveFailedForInterlock { get; set; }
 
-         public AlarmEventItem BoatZAxisUpLimit { get; set; }
 
-         public AlarmEventItem BoatZAxisDownLimit { get; set; }
 
-         public AlarmEventItem BoatHumanInterlock { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveFailedForAutoShutterNotOpen { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveFailedForAutoShutterNotDown { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveFailedForTiltStatus { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveFailedForHumanInterlock { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveFailedForWaferRobotArmExtend { get; set; }
 
-         public AlarmEventItem BoatZAxisMoveTimeOut { get; set; }
 
-         public AlarmEventItem BoatRAxisMoveTimeOut { get; set; }
 
-         public AlarmEventItem BoatRAxisMoveFailedForInterlock { get; set; }
 
-         public AlarmEventItem BoatZAxisHomeFailed { get; set; }
 
-         public AlarmEventItem BoatZAxisHomeTimeout { get; set; }
 
-         public AlarmEventItem BoatRAxisHomeFailed { get; set; }
 
-         public AlarmEventItem BoatRAxisHomeTimeout { get; set; }
 
-         public bool IsZAxisMoving => _diZAxisMoving.Value;
 
-         public bool IsRAxisRotating => _diRAxisMoving.Value;
 
-         public bool IsRAxisAtHome => _diRAxisHomed.Value;
 
-         public bool IsError => _diError.Value;
 
-         public bool IsServoOn => _diServoOn.Value;
 
-         public bool IsPause => _doELVPause.Value;
 
-         #region properties
 
-         public BoatPosition BoatCurrentPosition
 
-         {
 
-             get
 
-             {
 
-                 if(_diZAxisAtHome != null && _diZAxisAtPosition1 != null && _diZAxisAtPosition2 != null && _diZAxisAtProcessPosition != null)
 
-                 {
 
-                     if (_diZAxisAtHome.Value && !_diZAxisAtPosition1.Value && !_diZAxisAtPosition2.Value && !_diZAxisAtProcessPosition.Value)
 
-                         return BoatPosition.HomePosition;
 
-                     if (!_diZAxisAtHome.Value && _diZAxisAtPosition1.Value && !_diZAxisAtPosition2.Value && !_diZAxisAtProcessPosition.Value)
 
-                         return BoatPosition.Position1;
 
-                     if (!_diZAxisAtHome.Value && !_diZAxisAtPosition1.Value && _diZAxisAtPosition2.Value && !_diZAxisAtProcessPosition.Value)
 
-                         return BoatPosition.Position2;
 
-                     if (!_diZAxisAtHome.Value && !_diZAxisAtPosition1.Value && !_diZAxisAtPosition2.Value && _diZAxisAtProcessPosition.Value)
 
-                         return BoatPosition.ProcessPosition;
 
-                 }
 
-                 
 
-                 return BoatPosition.Unknown;
 
-             }
 
-         }
 
-         public BoatRotationMode BoatCurrentRotationMode
 
-         {
 
-             get
 
-             {
 
-                 if (_diRAxisHomed != null && _diRAxisHomed.Value)
 
-                     return BoatRotationMode.Home;
 
-                 if (_doRAxisRotateContinuous != null && _doRAxisRotateContinuous.Value)
 
-                     return BoatRotationMode.Continuously;
 
-                 if (_doRAxisRotateInterval != null && _doRAxisRotateInterval.Value)
 
-                     return BoatRotationMode.Interval;
 
-                 return BoatRotationMode.Stop;
 
-             }
 
-         }
 
-         #endregion
 
-         public bool Initialize()
 
-         {
 
-             DATA.Subscribe(Name, "BoatPosition", () => BoatCurrentPosition.ToString());
 
-             DATA.Subscribe(Name, "BoatCurrentRotationMode", () => BoatCurrentRotationMode.ToString());
 
-             DATA.Subscribe(Name, "IsBoatRotating", () => _diRAxisMoving != null ?_diRAxisMoving.Value : false);
 
-             DATA.Subscribe(Name, "BoatZAxisSpeed", () => _aiZAxisSpeed != null ? _aiZAxisSpeed.Value : 0);
 
-             DATA.Subscribe(Name, "BoatRAxisSpeed", () => _aiRAxisSpeed != null ? _aiRAxisSpeed.Value : 0);
 
-             DATA.Subscribe(Name, "BoatRAxisAngle", () => _aiRAxisCurrentAngle != null ? _aiRAxisCurrentAngle.Value : 0);
 
-             DATA.Subscribe(Name, "BoatZCurrentPosition", () => _aiZAxisCurrentPos != null ? _aiZAxisCurrentPos.Value : 0);
 
-             BoatZAxisMoveFailedForInterlock = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForInterlock",
 
-                 Description = $"{Name} boat z axis move failed for interlock ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisUpLimit = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisUpLimit",
 
-                 Description = $"{Name} boat z axis up limit ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisDownLimit = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisDownLimit",
 
-                 Description = $"{Name} boat z axis down limit ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatHumanInterlock = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatHumanInterlock",
 
-                 Description = $"{Name} boat human interlock ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveFailedForAutoShutterNotOpen = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForAutoShutterNotOpen",
 
-                 Description = $"{Name} boat z axis move failed for auto shutter not open ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveFailedForAutoShutterNotDown = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForAutoShutterNotDown",
 
-                 Description = $"{Name} boat z axis move failed for auto shutter not down ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveFailedForTiltStatus = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForTiltStatus",
 
-                 Description = $"{Name} boat z axis move failed for tilt status ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveFailedForHumanInterlock = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForHumanInterlock",
 
-                 Description = $"{Name} boat z axis move failed for human interlock ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveFailedForWaferRobotArmExtend = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveFailedForWaferRobotArmExtend",
 
-                 Description = $"{Name} boat z axis move failed for wafer robot arm extend ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisMoveTimeOut = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisMoveTimeOut",
 
-                 Description = $"{Name} boat z axis move timeout ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatRAxisMoveTimeOut = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatRAxisMoveTimeOut",
 
-                 Description = $"{Name} boat r axis move timeout ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatRAxisMoveFailedForInterlock = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatRAxisMoveFailedForInterlock",
 
-                 Description = $"{Name} boat r axis move failed for interlock ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.Clear,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisHomeFailed = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisHomeFailed",
 
-                 Description = $"{Name} boat Z Axis home failed ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.ClearAndRetry,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatZAxisHomeTimeout = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatZAxisHomeTimeout",
 
-                 Description = $"{Name} boat Z Axis home timeout ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.ClearAndRetry,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatRAxisHomeFailed = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatRAxisHomeFailed",
 
-                 Description = $"{Name} boat R Axis home failed ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.ClearAndRetry,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             BoatRAxisHomeTimeout = SubscribeAlarm(new AlarmEventItem()
 
-             {
 
-                 EventEnum = $"{Name}.BoatRAxisHomeTimeout",
 
-                 Description = $"{Name} boat R Axis home timeout ",
 
-                 Solution = "No information available. Press[Clear] to delete alarm message.",
 
-                 Explaination = "No information available.",
 
-                 AutoRecovery = false,
 
-                 Level = EventLevel.Alarm,
 
-                 Action = EventAction.ClearAndRetry,
 
-                 Category = "BoatAlarm",
 
-             }, () => { return true; });
 
-             return true;
 
-         }
 
-         public void Monitor()
 
-         {
 
-             //if (_doZAxisBreak.Value != _diHumanInterlockSensor.Value)
 
-             //    _doZAxisBreak.SetValue(_diHumanInterlockSensor.Value, out _);
 
-             //_upLimitTrig.CLK = !_diZAxisUpLimit.Value;
 
-             //_downLimitTrig.CLK = !_diZAxisDownLimit.Value;
 
-             //_humanInterlockTrig.CLK = !_diHumanInterlockSensor.Value;
 
-             //if(_upLimitTrig.R)
 
-             //{
 
-             //    SetZAxisStop();
 
-             //    _doZAxisMoveHomePosition.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition1.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition2.SetValue(false, out _);
 
-             //    _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-             //    BoatZAxisUpLimit.Set();
 
-             //}
 
-             //if (_downLimitTrig.R)
 
-             //{
 
-             //    SetZAxisStop();
 
-             //    _doZAxisMoveHomePosition.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition1.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition2.SetValue(false, out _);
 
-             //    _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-             //    BoatZAxisDownLimit.Set();
 
-             //}
 
-             //if (_humanInterlockTrig.R)
 
-             //{
 
-             //    SetZAxisStop();
 
-             //    _doZAxisMoveHomePosition.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition1.SetValue(false, out _);
 
-             //    _doZAxisMoveToPosition2.SetValue(false, out _);
 
-             //    _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-             //    BoatHumanInterlock.Set();
 
-             //}
 
-         }
 
-         public void Reset()
 
-         {
 
-         }
 
-         public void Terminate()
 
-         {
 
-         }
 
-         public bool RAxisRotate(string mode, out string reason)
 
-         {
 
-             return RAxisRotate((BoatRotationMode)Enum.Parse(typeof(BoatRotationMode), mode), out reason);
 
-         }
 
-         public bool RAxisRotate(BoatRotationMode mode, out string reason)
 
-         {
 
-             reason = string.Empty;
 
-             switch (mode)
 
-             {
 
-                 case BoatRotationMode.None:
 
-                     return true;
 
-                 case BoatRotationMode.Home:
 
-                     _doRAxisRotateStop.SetValue(false, out _);
 
-                     _doRAxisRotateInterval.SetValue(false, out _);
 
-                     _doRAxisRotateContinuous.SetValue(false, out _);
 
-                     _doRAxisRotateHome.SetPulseValue(true, 1000);
 
-                     break;
 
-                 case BoatRotationMode.Continuously:
 
-                     _doRAxisRotateStop.SetValue(false, out _);
 
-                     _doRAxisRotateHome.SetValue(false, out _);
 
-                     _doRAxisRotateInterval.SetValue(false, out _);
 
-                     _doRAxisRotateContinuous.SetValue(true, out _);
 
-                     break;
 
-                 case BoatRotationMode.Interval:
 
-                     _doRAxisRotateStop.SetValue(false, out _);
 
-                     _doRAxisRotateHome.SetValue(false, out _);
 
-                     _doRAxisRotateContinuous.SetValue(false, out _);
 
-                     _doRAxisRotateInterval.SetValue(true, out _);
 
-                     break;
 
-                 case BoatRotationMode.Stop:
 
-                     _doRAxisRotateHome.SetValue(false, out _);
 
-                     _doRAxisRotateInterval.SetValue(false, out _);
 
-                     _doRAxisRotateContinuous.SetValue(false, out _);
 
-                     _doRAxisRotateStop.SetPulseValue(true, 1000);
 
-                     break;
 
-             }
 
-             return true;
 
-         }
 
-         public bool ZAxisMoveTo(string position, out string reason)
 
-         {
 
-             return ZAxisMoveTo((BoatPosition)Enum.Parse(typeof(BoatPosition), position), out reason);
 
-         }
 
-         public bool ZAxisMoveTo(BoatPosition position, out string reason)
 
-         {
 
-             reason = string.Empty;
 
-             switch (position)
 
-             {
 
-                 case BoatPosition.Unknown:
 
-                     reason = "invalid position";
 
-                     return false;
 
-                 case BoatPosition.HomePosition:
 
-                     _doZAxisStop.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition1.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition2.SetValue(false, out _);
 
-                     _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-                     _doZAxisMoveHomePosition.SetPulseValue(true, 1000);
 
-                     break;
 
-                 case BoatPosition.Position1:
 
-                     _doZAxisStop.SetValue(false, out _);
 
-                     _doZAxisMoveHomePosition.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition2.SetValue(false, out _);
 
-                     _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition1.SetPulseValue(true, 1000);
 
-                     break;
 
-                 case BoatPosition.Position2:
 
-                     _doZAxisStop.SetValue(false, out _);
 
-                     _doZAxisMoveHomePosition.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition1.SetValue(false, out _);
 
-                     _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition2.SetPulseValue(true, 1000);
 
-                     break;
 
-                 case BoatPosition.ProcessPosition:
 
-                     _doZAxisStop.SetValue(false, out _);
 
-                     _doZAxisMoveHomePosition.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition1.SetValue(false, out _);
 
-                     _doZAxisMoveToPosition2.SetValue(false, out _);
 
-                     _doZAxisMoveToProcessPosition.SetPulseValue(true, 1000);
 
-                     break;
 
-             }
 
-             return true;
 
-         }
 
-         public void ZAxisMoveReset()
 
-         {
 
-             _doZAxisMoveHomePosition.SetValue(false, out _);
 
-             _doZAxisMoveToPosition1.SetValue(false, out _);
 
-             _doZAxisMoveToPosition2.SetValue(false, out _);
 
-             _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-         }
 
-         public bool SetRAxisHome(out string reason)
 
-         {
 
-             reason = string.Empty;
 
-             _doRAxisRotateStop.SetValue(false, out _);
 
-             _doRAxisRotateInterval.SetValue(false, out _);
 
-             _doRAxisRotateContinuous.SetValue(false, out _);
 
-             _doRAxisRotateHome.SetPulseValue(true, 1000);
 
-             return true;
 
-         }
 
-         public void SetZAxisSpeed(float speed)
 
-         {
 
-             _aoZAxisSpeed.Value = (short)speed;
 
-         }
 
-         public void SetRAxisSpeed(float speed)
 
-         {
 
-             _aoRAxisSpeed.Value = (short)speed;
 
-         }
 
-         public void SetRAxisIntervalPosition(float position)
 
-         {
 
-             _aoRAxisIntervalAngle.Value = (short)position;
 
-         }
 
-         public bool SetRAxisDirection(string direction, out string reason)
 
-         {
 
-             return SetRAxisDirection((BoatRotationDirection)Enum.Parse(typeof(BoatRotationDirection), direction), out reason);
 
-         }
 
-         public bool SetRAxisDirection(BoatRotationDirection direction, out string reason)
 
-         {
 
-             reason = string.Empty;
 
-             switch (direction)
 
-             {
 
-                 case BoatRotationDirection.Unknown:
 
-                     return true;
 
-                 case BoatRotationDirection.CW:
 
-                     _doRAxisCCW.SetValue(false, out reason);
 
-                     _doRAxisCW.SetValue(true, out reason);
 
-                     break;
 
-                 case BoatRotationDirection.CCW:
 
-                     _doRAxisCW.SetValue(false, out reason);
 
-                     _doRAxisCCW.SetValue(true, out reason);
 
-                     break;
 
-             }
 
-             return true;
 
-         }
 
-         public bool SetRAxisParam(float speed, string mode, string direction, out string reason)
 
-         {
 
-             reason = string.Empty;
 
-             var md = (BoatRotationMode)Enum.Parse(typeof(BoatRotationMode), mode);
 
-             if (md == BoatRotationMode.None)
 
-                 return true;
 
-             _aoRAxisSpeed.Value = (short)speed;
 
-             SetRAxisDirection(direction, out reason);
 
-             RAxisRotate(md, out reason);
 
-             return true;
 
-         }
 
-         public void SetZAxisStop()
 
-         {
 
-             _doZAxisMoveToPosition1.SetValue(false, out _);
 
-             _doZAxisMoveToPosition2.SetValue(false, out _);
 
-             _doZAxisMoveToProcessPosition.SetValue(false, out _);
 
-             _doZAxisMoveHomePosition.SetValue(false, out _);
 
-             _doZAxisStop.SetPulseValue(true, 1000);
 
-         }
 
-         public void SetRAxisStop()
 
-         {
 
-             _doRAxisRotateHome.SetValue(false, out _);
 
-             _doRAxisRotateInterval.SetValue(false, out _);
 
-             _doRAxisRotateContinuous.SetValue(false, out _);
 
-             _doRAxisRotateStop.SetPulseValue(true, 1000);
 
-         }
 
-         public void SetReset()
 
-         {
 
-             _doResetError.SetPulseValue(true, 1000);
 
-         }
 
-         public void SetServoOn()
 
-         {
 
-             _doServoOn.SetValue(true, out _);
 
-             _doPowerOn.SetValue(true, out _);
 
-         }
 
-         public void SetPauseResume(bool isPause)
 
-         {
 
-             _doELVPause.SetValue(isPause, out _);
 
-         }
 
-     }
 
- }
 
 
  |