using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Beckhoff.ModuleIO; using MECF.Framework.Common.CommonData.PUF; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Routine; using MECF.Framework.Common.TwinCat; using CyberX8_Core; using CyberX8_RT.Devices.Loader; using CyberX8_RT.Devices.TransPorter; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MECF.Framework.Common.IOCore; namespace CyberX8_RT.Devices.AXIS.CANOpen { public class TransporterLockRoutine : RoutineBase, IRoutine { private enum LockStep { WriteLock, End } #region 常量 private const string UNLOCK = "Unlock"; #endregion #region 内部变量 private int _timeout = 5000; private TransporterCommon _transporterCommon; #endregion /// <summary> /// 构造函数 /// </summary> /// <param name="module"></param> public TransporterLockRoutine(string module) : base(module) { if (SC.ContainsItem($"Transporter.{module}.LockCheckTime")) { _timeout = SC.GetValue<int>($"Transporter.{module}.LockCheckTime")*1000; } } /// <summary> /// 中止 /// </summary> public void Abort() { Runner.Stop("Manual Abort"); } /// <summary> /// 监控 /// </summary> /// <returns></returns> public RState Monitor() { Runner.Run(LockStep.WriteLock, WriteLock, CheckLock,_timeout) .End(LockStep.End,NullFun,100); return Runner.Status; } /// <summary> /// 写入Lock数值 /// </summary> /// <returns></returns> private bool WriteLock() { string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{UNLOCK}"); if(!string.IsNullOrEmpty(ioName)) { return IOModuleManager.Instance.WriteIoValue(ioName, false); } else { return false; } } /// <summary> /// 检验 Lock状态 /// </summary> /// <returns></returns> private bool CheckLock() { return _transporterCommon.TransporterData.Locked1 && _transporterCommon.TransporterData.Locked2; } /// <summary> /// 启动 /// </summary> /// <param name="objs"></param> /// <returns></returns> public RState Start(params object[] objs) { _transporterCommon = DEVICE.GetDevice<TransporterCommon>($"{Module}.Common"); return Runner.Start(Module, "Lock"); } } }