using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using MECF.Framework.Common.CommonData.PowerSupplier; using MECF.Framework.Common.Routine; using CyberX8_Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.PowerSupplier { public class PowerSupplierStepRoutine : RoutineBase, IRoutine { private enum PowerSupplierStep { CloseOutPut, SwitchStepModel, WriteStepParameter, WriteStepDelay, StartStepParameter, StartStepDelay, EnableOutput, Delay, WaitStep, LastCloseOutPut, SwitchNormal, End } #region 内部变量 /// /// 步阶数据对象集合 /// List _stepPeriodDatas; /// /// 电源设备对象 /// CellPowerSupplier _powerSupplier; /// /// 等待时长 /// private int _waitTime = 500; #endregion /// /// 构造函数 /// /// public PowerSupplierStepRoutine(string module) : base(module) { } public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(PowerSupplierStep.CloseOutPut, () => { return _powerSupplier.DisableOutput(); }, () => { return !_powerSupplier.PowerSupplierData.Enabled; }, _delay_2s) .Run(PowerSupplierStep.SwitchStepModel, () => { return _powerSupplier.SwitchPowerRunModel((int)PowerRunModelEnum.Step); }, () => { return _powerSupplier.PowerSupplierData.PowerRunModel == (int)PowerRunModelEnum.Step; }, _delay_2s) .Run(PowerSupplierStep.WriteStepParameter, () => { return _powerSupplier.SetStepPeriod("", new object[] { "", _stepPeriodDatas }); }, NullFun, _delay_1ms) .Run(PowerSupplierStep.StartStepParameter, () => { return _powerSupplier.StartStepPeriod((ushort)_stepPeriodDatas.Count, 1); }, NullFun, _delay_1ms) .Run(PowerSupplierStep.EnableOutput, () => { return _powerSupplier.EnableOutput(); }, () => { return _powerSupplier.PowerSupplierData.Enabled; }, _delay_3s) .Delay(PowerSupplierStep.Delay, 1000) .Wait(PowerSupplierStep.WaitStep, () => { return _powerSupplier.PowerSupplierData.Current == 0; }, _waitTime) .Run(PowerSupplierStep.LastCloseOutPut, () => { return _powerSupplier.DisableOutput(); }, () => { return !_powerSupplier.PowerSupplierData.Enabled; }, _delay_2s) .Run(PowerSupplierStep.SwitchNormal, () => { return _powerSupplier.SwitchPowerRunModel((int)PowerRunModelEnum.Normal); }, () => { return _powerSupplier.PowerSupplierData.PowerRunModel == (int)PowerRunModelEnum.Normal; }, _delay_2s) .End(PowerSupplierStep.End, NullFun, _delay_1ms); return Runner.Status; } public RState Start(params object[] objs) { _powerSupplier = DEVICE.GetDevice(Module); _stepPeriodDatas = (List)objs[1]; foreach(PowerSupplierStepPeriodData item in _stepPeriodDatas) { _waitTime += (item.Hour * 3600 + item.Minute * 60 + item.Second) * 1000 + item.Microsecond; } _waitTime += 1 * 1000;//多增加1秒 return Runner.Start(Module, "PowerSupplier Step"); } } }