using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using CyberX8_Core; using MECF.Framework.Common.CommonData.PowerSupplier; using MECF.Framework.Common.Routine; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.PowerSupplier { public class PowerSupplierStartStepRoutine : RoutineBase, IRoutine { private enum PowerSupplierStep { CloseOutPut, SwitchStepModel, WriteStepParameter, StartStepParameter, Delay, EnableOutput, End } #region 内部变量 /// /// 步阶数据对象集合 /// List _stepPeriodDatas; /// /// 电源设备对象 /// CellPowerSupplier _powerSupplier; /// /// 等待时长 /// private int _waitTime = 500; #endregion /// /// 构造函数 /// /// public PowerSupplierStartStepRoutine(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) .End(PowerSupplierStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _powerSupplier = DEVICE.GetDevice(Module); _stepPeriodDatas = (List)objs[0]; foreach (PowerSupplierStepPeriodData item in _stepPeriodDatas) { _waitTime += (item.Hour * 3600 + item.Minute * 60 + item.Second) * 1000 + item.Microsecond; } _waitTime += 1 * 1000;//多增加5秒 return Runner.Start(Module, "PowerSupplier Set Step"); } } }