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 LoaderSideBernoulliBladderRoutine : RoutineBase, IRoutine { private enum BernoulliBladderStep { WriteBernoulliBladder, End } #region 常量 private const string BERNOULLI_BLADDER = "BernoulliBladder"; #endregion #region 内部变量 private int _timeout = 5000; private LoaderSideDevice _loaderSide; private bool _bernoulliBladder = false; #endregion /// <summary> /// 构造函数 /// </summary> /// <param name="module"></param> public LoaderSideBernoulliBladderRoutine(string module) : base(module) { } /// <summary> /// 中止 /// </summary> public void Abort() { Runner.Stop("Manual Abort"); } /// <summary> /// 监控 /// </summary> /// <returns></returns> public RState Monitor() { Runner.Run(BernoulliBladderStep.WriteBernoulliBladder, WriteBernoulliBladder, CheckBernoulliBladder,_timeout) .End(BernoulliBladderStep.End,NullFun,100); return Runner.Status; } /// <summary> /// 写入Bernoulli Bladder数值 /// </summary> /// <returns></returns> private bool WriteBernoulliBladder() { string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{BERNOULLI_BLADDER}"); return IOModuleManager.Instance.WriteIoValue(ioName, _bernoulliBladder); } /// <summary> /// 检验Bernoulli Bladder状态 /// </summary> /// <returns></returns> private bool CheckBernoulliBladder() { return _loaderSide.SideData.BernoulliBladder == _bernoulliBladder && _loaderSide.SideData.BernoulliExtended == !_bernoulliBladder; } /// <summary> /// 启动 /// </summary> /// <param name="objs"></param> /// <returns></returns> public RState Start(params object[] objs) { if (SC.ContainsItem($"{ModuleName.Loader1}.BernoulliBladderTimeout")) { _timeout = SC.GetValue<int>($"{ModuleName.Loader1}.BernoulliBladderTimeout"); } _loaderSide = DEVICE.GetDevice<LoaderSideDevice>(Module); _bernoulliBladder = (bool)objs[0]; return Runner.Start(Module, "Bernoulli Bladder"); } } }