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.Equipment; using MECF.Framework.Common.Routine; using MECF.Framework.Common.TwinCat; using CyberX8_Core; using CyberX8_RT.Devices.Loader; 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 LoaderSideVacuumAndLevelCheckRoutineRoutine : RoutineBase, IRoutine { private enum VacuumStep { WriteVacuum, CheckVacuum, End } #region 常量 private const string CRS_VACUUM = "CRSVacuum"; #endregion #region 内部变量 private int _timeout = 5000; private LoaderSideDevice _loaderSide; private bool _vacuum = false; private double _crsVacuumHighLimit = -550; private double _crsVacuumLowLimit = -480; #endregion /// /// 构造函数 /// /// public LoaderSideVacuumAndLevelCheckRoutineRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(VacuumStep.WriteVacuum, WriteVacuum, CheckVacuum,_timeout) .Run(VacuumStep.CheckVacuum,NullFun,CheckVacuumValue,_timeout) .End(VacuumStep.End,NullFun,100); return Runner.Status; } /// /// 写入Vacuum数值 /// /// private bool WriteVacuum() { string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{CRS_VACUUM}"); return IOModuleManager.Instance.WriteIoValue(ioName, _vacuum); } /// /// 检验Door Lock状态 /// /// private bool CheckVacuum() { return _loaderSide.SideData.CRSVacuum == _vacuum; } /// /// 检验Door Lock状态 /// /// private bool CheckVacuumValue() { if (_vacuum) { return _loaderSide.SideData.CRSVacuumValue < 0 && _loaderSide.SideData.CRSVacuumValue < _crsVacuumHighLimit; } else { return _loaderSide.SideData.CRSVacuumValue > _crsVacuumLowLimit; } } /// /// 启动 /// /// /// public RState Start(params object[] objs) { if (SC.ContainsItem($"{ModuleName.Loader1}.LSVacuumTimeout")) { _timeout = SC.GetValue($"{ModuleName.Loader1}.LSVacuumTimeout"); } if (SC.ContainsItem($"{ModuleName.Loader1}.LSVacuumHighLimit")) { _crsVacuumHighLimit = SC.GetValue($"{ModuleName.Loader1}.LSVacuumHighLimit"); } if (SC.ContainsItem($"{ModuleName.Loader1}.LSVacuumHighLimit")) { _crsVacuumHighLimit = SC.GetValue($"{ModuleName.Loader1}.LSVacuumHighLimit"); } _loaderSide = DEVICE.GetDevice(Module); _vacuum = (bool)objs[0]; return Runner.Start(Module, "Vacuum And Check Value"); } } }