using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Routine; using CyberX8_Core; using CyberX8_RT.Devices.Facilities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.Dryer { public class DryerBlowerHighRoutine : RoutineBase, IRoutine { /// /// step /// private enum DryerBlowerHighStep { HighOn, Delay, CheckExhaustPressure, ReturnLow, End } #region 内部变量 private bool _bypass = false; private double _minimumPressure = 0; private int _delayTime = 1000; private DryerDevice _device; private SystemFacilities _facilities; private bool _backLow = false; #endregion /// /// 构造函数 /// /// public DryerBlowerHighRoutine(string module,DryerDevice device) : base(module) { _device = device; } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(DryerBlowerHighStep.HighOn, _device.BlowerHighOn, () => { return _device.CommonData.BlowerHigh; }, _delay_1s) .Delay(DryerBlowerHighStep.Delay, _delayTime) .Run(DryerBlowerHighStep.CheckExhaustPressure, CheckExhaustPressure, _delay_1ms) .Run(DryerBlowerHighStep.ReturnLow, ReturnLow, _delay_1ms) .End(DryerBlowerHighStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// 检验Pressure /// /// private bool CheckExhaustPressure() { if (_bypass) { return true; } else { if(_device.CommonData.ExhaustPressure>_minimumPressure) { _backLow = true; LOG.WriteLog(eEvent.ERR_DRYER, Module, $"Current ExhaustPressure{_device.CommonData.ExhaustPressure} is large than {_minimumPressure}"); } else { _backLow = false; } return true; } } /// /// Return Low /// /// private bool ReturnLow() { if (_bypass) { return true; } else { if(_backLow) { _device.BlowerLowOn(); } return true; } } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _bypass=(bool)objs[0]; if(_bypass) { _delayTime = 1; } _facilities = DEVICE.GetDevice("System.Facilities"); if(!CheckPreCondition()) { return RState.End; } _backLow = false; _minimumPressure = SC.GetValue("Dryer.MinimumPressure"); return Runner.Start(Module, "Start Dryer Blower Hight"); } /// /// 检验前置条件 /// /// private bool CheckPreCondition() { if(!_device.CommonData.PowerControl) { LOG.WriteLog(eEvent.ERR_DRYER, Module, "Power Control is off"); return false; } var result = _facilities.CheckExhaustResult(); if(!result.result) { LOG.WriteLog(eEvent.ERR_DRYER, Module, result.reason); return false; } if(_device.FacilityCommonLimitData.IsWarning || _device.FacilityCommonLimitData.IsError) { LOG.WriteLog(eEvent.ERR_DRYER, Module, "Exhuast Pressure is Abnormal"); return false; } return true; } } }