123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.Routine;
- using MECF.Framework.Common.Routine;
- using CyberX8_Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using MECF.Framework.Common.Beckhoff.ModuleIO;
- using MECF.Framework.Common.TwinCat;
- using MECF.Framework.Common.IOCore;
- namespace CyberX8_RT.Devices.Safety
- {
- public class SafetyResetRoutine : RoutineBase, IRoutine
- {
- private enum SafetyResetStep
- {
- SrdArm,
- RunStop,
- ErrAck,
- LockProcessDoors,
- LockBufferDoors,
- LockLoaderDoors,
- TxSto1EstopRestart,
- TxEstopDelay,
- TxStoMonRestart,
- TxMonDelay,
- TxSto2EstopRestart,
- LdrPufSto1EstopRestart,
- LdrPufEstopDelay,
- LdrPufStoMonRestart,
- LdrPufMonDelay,
- LdrPufSto2EstopRestart,
- SrdStoEstopRestart,
- PumpStoEstopRestart,
- PumpEstopDelay,
- FluidEstopRestart,
- FluidEstopDelay,
- SlsRestart,
- End
- }
- #region 常量
- private const string RUNSTOP = "RunStop";
- #endregion
- #region 内部变量
- private SafetyArmResetRoutine _srdArmResetRoutine;
- private SafetyToggleRoutine _errAckToggleRoutine;
- private SafetyToggleRoutine _txSto1EstopRestartRoutine;
- private SafetyToggleRoutine _txStoMonRestartRoutine;
- private SafetyToggleRoutine _txSto2EstopRestartRoutine;
- private SafetyToggleRoutine _ldrPufSto1EstopRestart;
- private SafetyToggleRoutine _ldrPufStoMonRestart;
- private SafetyToggleRoutine _ldrPufSto2EstopRestart;
- private SafetyToggleRoutine _srdStoEstopRestart;
- private SafetyToggleRoutine _pumpStoEstopRestart;
- private SafetyToggleRoutine _fluidEstopRestart;
- private SafetyToggleRoutine _slsRestart;
- private SafetyDevice _device;
- #endregion
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="module"></param>
- public SafetyResetRoutine(string module) : base(module)
- {
- _errAckToggleRoutine = new SafetyToggleRoutine(module);
- _txSto1EstopRestartRoutine = new SafetyToggleRoutine(module);
- _txStoMonRestartRoutine=new SafetyToggleRoutine(module);
- _txSto2EstopRestartRoutine=new SafetyToggleRoutine(module);
- _ldrPufSto1EstopRestart=new SafetyToggleRoutine(module);
- _ldrPufStoMonRestart=new SafetyToggleRoutine(module);
- _ldrPufSto2EstopRestart=new SafetyToggleRoutine(module);
- _srdStoEstopRestart=new SafetyToggleRoutine(module);
- _pumpStoEstopRestart = new SafetyToggleRoutine(module);
- _fluidEstopRestart=new SafetyToggleRoutine(module);
- _slsRestart=new SafetyToggleRoutine(module);
- _srdArmResetRoutine=new SafetyArmResetRoutine(module);
- }
- /// <summary>
- /// 中止
- /// </summary>
- public void Abort()
- {
- Runner.Stop("Manaul abort safety reset");
- }
- /// <summary>
- /// 监控
- /// </summary>
- /// <returns></returns>
- public RState Monitor()
- {
- Runner.Run(SafetyResetStep.SrdArm, () => { return _srdArmResetRoutine.Start("SRDArmReset") == RState.Running; },
- () => { return CheckRoutineStatus(_srdArmResetRoutine); }, _delay_1s)
- .Run(SafetyResetStep.RunStop, RunStop, _delay_1ms)
- .Run(SafetyResetStep.ErrAck, () => { return _errAckToggleRoutine.Start("ErrAck") == RState.Running; },
- () => { return CheckRoutineStatus(_errAckToggleRoutine); }, _delay_1s)
- .Run(SafetyResetStep.LockProcessDoors, () => { return _device.LockProcessDoor(); }, _delay_1ms)
- .Run(SafetyResetStep.LockBufferDoors, () => { return _device.LockBufferDoor(); }, _delay_1ms)
- .Run(SafetyResetStep.LockLoaderDoors, () => { return _device.LockLoaderDoor(); }, _delay_1ms)
- .Run(SafetyResetStep.TxSto1EstopRestart, () => { return _txSto1EstopRestartRoutine.Start("TxSto1EstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_txSto1EstopRestartRoutine); }, _delay_1s)
- .Delay(SafetyResetStep.TxEstopDelay,100)//100 delay
- .Run(SafetyResetStep.TxStoMonRestart, () => { return _txStoMonRestartRoutine.Start("TxStoMonRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_txStoMonRestartRoutine); }, _delay_1s)
- .Delay(SafetyResetStep.TxMonDelay, 100)//100 delay
- .Run(SafetyResetStep.TxSto2EstopRestart, () => { return _txSto2EstopRestartRoutine.Start("TxSto2EstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_txSto2EstopRestartRoutine); }, _delay_1s)
- .Run(SafetyResetStep.LdrPufSto1EstopRestart, () => { return _ldrPufSto1EstopRestart.Start("LdrPufSto1EstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_ldrPufSto1EstopRestart); }, _delay_1s)
- .Delay(SafetyResetStep.LdrPufEstopDelay,_delay_1s)//1000 delay
- .Run(SafetyResetStep.LdrPufStoMonRestart, () => { return _ldrPufStoMonRestart.Start("LdrPufStoMonRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_ldrPufStoMonRestart); }, _delay_1s)
- .Delay(SafetyResetStep.LdrPufMonDelay, 100)//100 delay
- .Run(SafetyResetStep.LdrPufSto2EstopRestart, () => { return _ldrPufSto2EstopRestart.Start("LdrPufSto2EstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_ldrPufSto2EstopRestart); }, _delay_1s)
- .Run(SafetyResetStep.SrdStoEstopRestart, () => { return _srdStoEstopRestart.Start("SrdStoEstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_srdStoEstopRestart); }, _delay_1s)
- .Run(SafetyResetStep.PumpStoEstopRestart, () => { return _pumpStoEstopRestart.Start("PumpStoEstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_pumpStoEstopRestart); }, _delay_1s)
- .Delay(SafetyResetStep.PumpEstopDelay,100)//100 delay
- .Run(SafetyResetStep.FluidEstopRestart, () => { return _fluidEstopRestart.Start("FluidEstopRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_fluidEstopRestart); }, _delay_1s)
- .Delay(SafetyResetStep.FluidEstopDelay,_delay_1s)
- .Run(SafetyResetStep.SlsRestart, () => { return _slsRestart.Start("SlsRestart") == RState.Running; },
- () => { return CheckRoutineStatus(_slsRestart); }, _delay_1s)
- .End(SafetyResetStep.End, NullFun, _delay_1ms);
- return Runner.Status;
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- private bool RunStop()
- {
- string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{RUNSTOP}");
- return IOModuleManager.Instance.WriteIoValue(ioName, true);
- }
- /// <summary>
- /// 检验是否完成
- /// </summary>
- /// <param name="routine"></param>
- /// <returns></returns>
- private bool CheckRoutineStatus (IRoutine routine)
- {
- RState rsState = routine.Monitor();
- return rsState == RState.End;
- }
- /// <summary>
- /// 检验Process door locked状态
- /// </summary>
- /// <returns></returns>
- private bool CheckProcessDoorLocked()
- {
- return _device.SafetyData.ProcessDoor1Locked && _device.SafetyData.ProcessDoor2Locked && _device.SafetyData.ProcessDoor3Locked &&
- _device.SafetyData.ProcessDoor4Locked;
- }
- /// <summary>
- /// 启动
- /// </summary>
- /// <param name="objs"></param>
- /// <returns></returns>
- public RState Start(params object[] objs)
- {
- _device = DEVICE.GetDevice<SafetyDevice>("Safety");
- return Runner.Start(Module, "Start Reset safety");
- }
- }
- }
|