using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Beckhoff.ModuleIO; using MECF.Framework.Common.Routine; using MECF.Framework.Common.ToolLayout; using MECF.Framework.Common.TwinCat; using PunkHPX8_Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PunkHPX8_RT.Devices.Reservoir { public class ANPumpOnRoutine : RoutineBase, IRoutine { private enum ANPumpStep { PumpSpeed, PumpEnable, Delay, CheckFlow, End } #region 内部变量 /// /// 默认泵速 /// private double _anPumpSpeed = 5000; /// /// flow fault hold off时长 /// private int _flowFaultHoldOffTime = 10000; /// /// 阳极最小流量 /// private double _anMinFlow = 0.2; /// /// Reservoir设备 /// private DMReservoirDevice _device; #endregion /// /// 构造函数 /// /// public ANPumpOnRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(ANPumpStep.PumpEnable, () => { return ANPumpEnable(); }, _delay_1ms) .Delay(ANPumpStep.Delay, _flowFaultHoldOffTime) .Run(ANPumpStep.CheckFlow,CheckAllFlow,_delay_1ms) .End(ANPumpStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// Pump Speed /// /// /// private bool ANPumpSpeed(double speed) { return _device.AnPumpSpeed(speed); } /// /// Pump enable /// /// /// private bool ANPumpEnable() { return _device.AnPumpOnOperation("",null); } /// /// 检验所有流量 /// /// private bool CheckAllFlow() { double anTotalFlow = _device.ReservoirData.AnFlow; if(anTotalFlow<=_anMinFlow) { _device.AnPumpOff(); LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"total flow {anTotalFlow} is not over {_anMinFlow}"); return false; } else { LOG.WriteLog(eEvent.INFO_RESERVOIR, Module, $"total flow {anTotalFlow} is over {_anMinFlow}"); return true; } } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _device = DEVICE.GetDevice(Module); _flowFaultHoldOffTime = SC.GetValue($"Reservoir.{Module}.FlowFaultHoldOffTime"); return Runner.Start(Module, "AN Pump On"); } } }