using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.Util; using PunkHPX8_Core; using PunkHPX8_RT.Modules; using PunkHPX8_RT.Modules.SRD; using PunkHPX8_RT.Modules.Transporter; using MECF.Framework.Common.Beckhoff.ModuleIO; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Routine; using MECF.Framework.Common.Utilities; using System.Runtime.InteropServices; using PunkHPX8_RT.Devices.AXIS; namespace PunkHPX8_RT.Devices.Safety { internal class SafetyAllOnRoutine : RoutineBase, IRoutine { private enum SafetyAllOnStep { VpwCell1SwitchOn, WaitSwitchOnVpwCell1, VpwCell2SwitchOn, WaitSwitchOnVpwCell2, PlatingCell1RotationSwitchOn, WaitSwitchOnPlatingCell1Rotation, PlatingCell2RotationSwitchOn, WaitSwitchOnPlatingCell2Rotation, PlatingCell3RotationSwitchOn, WaitSwitchOnPlatingCell3Rotation, PlatingCell4RotationSwitchOn, WaitSwitchOnPlatingCell4Rotation, PlatingCell12LiftSwitchOn, WaitSwitchOnPlatingCell12Lift, PlatingCell34LiftSwitchOn, WaitSwitchOnPlatingCell34Lift, SwitchOnSRD1, WaitSwitchOnSRD1, SwitchOnSRD2, WaitSwitchOnSRD2, End } #region 内部变量 private SafetyDevice _device; private JetAxisBase _vpwCell1Rotation; private JetAxisBase _vpwCell2Rotation; private JetAxisBase _platingCell1Rotation; private JetAxisBase _platingCell2Rotation; private JetAxisBase _platingCell3Rotation; private JetAxisBase _platingCell4Rotation; private JetAxisBase _platingCell12Lift; private JetAxisBase _platingCell34Lift; private JetAxisBase _srd1Rotation; private JetAxisBase _srd2Rotation; #endregion /// /// 构造函数 /// /// public SafetyAllOnRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop($"Safety All On Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.RunIf(SafetyAllOnStep.VpwCell1SwitchOn,ModuleHelper.IsInstalled(ModuleName.VPW1),()=>SwitchOnAxis(_vpwCell1Rotation),_delay_1ms) .WaitWithStopConditionIf(SafetyAllOnStep.WaitSwitchOnVpwCell1, ModuleHelper.IsInstalled(ModuleName.VPW1), ()=>CheckSwitchOn(_vpwCell1Rotation),()=>CheckSwitchOnStopStatus(_vpwCell1Rotation)) .RunIf(SafetyAllOnStep.VpwCell2SwitchOn, ModuleHelper.IsInstalled(ModuleName.VPW2), () => SwitchOnAxis(_vpwCell2Rotation), _delay_1ms) .WaitWithStopConditionIf(SafetyAllOnStep.WaitSwitchOnVpwCell2, ModuleHelper.IsInstalled(ModuleName.VPW2), () => CheckSwitchOn(_vpwCell2Rotation), () => CheckSwitchOnStopStatus(_vpwCell2Rotation)) .End(SafetyAllOnStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// 电机SwitchOn /// /// /// private bool SwitchOnAxis(JetAxisBase axis) { return axis.SwitchOn(); } /// /// 检验电机是否上电 /// /// /// private bool CheckSwitchOn(JetAxisBase axis) { return axis.IsSwitchOn && axis.Status == RState.End; } /// /// 检验电机上电是否异常 /// /// /// private bool CheckSwitchOnStopStatus(JetAxisBase axis) { return axis.Status == RState.Failed; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _device = DEVICE.GetDevice(Module); _vpwCell1Rotation = DEVICE.GetDevice($"{ModuleName.VPW1}.Rotation"); _vpwCell2Rotation = DEVICE.GetDevice($"{ModuleName.VPW2}.Rotation"); return Runner.Start(Module, $"Safety All On"); } } }