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 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 LoaderSideWhBladderRoutine : RoutineBase, IRoutine { private enum WhBladderStep { WriteWhBladder, WriteWSClamp, End } #region 常量 private const string WH_BLADDER = "WHBladder"; private const string WS_CLAMP = "WaferHolderClamp"; #endregion #region 内部变量 private int _enableTimeout = 5000; private int _disableTimeout = 5000; private int _timeout = 5000; private LoaderSideDevice _loaderSide; private LoaderCommonDevice _loaderCommon; private bool _whBladder = false; private bool _writeWSClamp = false; #endregion /// /// 构造函数 /// /// public LoaderSideWhBladderRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(WhBladderStep.WriteWhBladder, WriteWhBladder, CheckWhBladder,_timeout) .Run(WhBladderStep.WriteWSClamp,WriteWSClamp,CheckWsClamp,_timeout) .End(WhBladderStep.End,NullFun,100); return Runner.Status; } /// /// 写入WH Bladder数值 /// /// private bool WriteWhBladder() { string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{WH_BLADDER}"); return IOModuleManager.Instance.WriteIoValue(ioName, _whBladder); } /// /// 写入WS Clamp /// /// private bool WriteWSClamp() { string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{ModuleName.Loader1}.{WS_CLAMP}"); if(_whBladder)//点击ON,WS Clamp状态为off时,写入WS Clamp { if (_loaderCommon != null) { if (!_loaderCommon.CommonData.WaferHolderClamp) { _writeWSClamp = true; return IOModuleManager.Instance.WriteIoValue(ioName, true); } else { return true; } } else { return false; } } else { return true; } } /// /// 检验Ws Clamp /// /// private bool CheckWsClamp() { if(_writeWSClamp) { if (_loaderCommon == null) { return false; } else { return _loaderCommon.CommonData.WaferHolderClamp; } } else { return true; } } /// /// 检验WH Bladder状态 /// /// private bool CheckWhBladder() { return _loaderSide.SideData.WHBladder == _whBladder; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _loaderCommon = DEVICE.GetDevice($"{ModuleName.Loader1}.Common"); _whBladder = (bool)objs[0]; if(_whBladder) { _timeout = _enableTimeout; } else { _timeout = _disableTimeout; } if (SC.ContainsItem($"{ModuleName.Loader1}.WSBladderEnableTimeout")) { _enableTimeout = SC.GetValue($"{ModuleName.Loader1}.WSBladderEnableTimeout"); } if (SC.ContainsItem($"{ModuleName.Loader1}.WSBladderDisableTimeout")) { _disableTimeout = SC.GetValue($"{ModuleName.Loader1}.WSBladderDisableTimeout"); } _loaderSide = DEVICE.GetDevice(Module); return Runner.Start(Module, "WS Bladder"); } } }