PowerSupplierStartStepRoutine.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Routine;
  3. using CyberX8_Core;
  4. using MECF.Framework.Common.CommonData.PowerSupplier;
  5. using MECF.Framework.Common.Routine;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace CyberX8_RT.Devices.PowerSupplier
  12. {
  13. public class PowerSupplierStartStepRoutine : RoutineBase, IRoutine
  14. {
  15. private enum PowerSupplierStep
  16. {
  17. CloseOutPut,
  18. SwitchStepModel,
  19. WriteStepParameter,
  20. StartStepParameter,
  21. Delay,
  22. EnableOutput,
  23. End
  24. }
  25. #region 内部变量
  26. /// <summary>
  27. /// 步阶数据对象集合
  28. /// </summary>
  29. List<PowerSupplierStepPeriodData> _stepPeriodDatas;
  30. /// <summary>
  31. /// 电源设备对象
  32. /// </summary>
  33. CellPowerSupplier _powerSupplier;
  34. /// <summary>
  35. /// 等待时长
  36. /// </summary>
  37. private int _waitTime = 500;
  38. #endregion
  39. /// <summary>
  40. /// 构造函数
  41. /// </summary>
  42. /// <param name="module"></param>
  43. public PowerSupplierStartStepRoutine(string module) : base(module)
  44. {
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. public void Abort()
  50. {
  51. Runner.Stop("Manual Abort");
  52. }
  53. /// <summary>
  54. /// 监控状态
  55. /// </summary>
  56. /// <returns></returns>
  57. public RState Monitor()
  58. {
  59. Runner.Run(PowerSupplierStep.CloseOutPut, () => { return _powerSupplier.DisableOutput(); }, () => { return !_powerSupplier.PowerSupplierData.Enabled; }, _delay_2s)
  60. .Run(PowerSupplierStep.SwitchStepModel, () => { return _powerSupplier.SwitchPowerRunModel((int)PowerRunModelEnum.Step); }, () => { return _powerSupplier.PowerSupplierData.PowerRunModel == (int)PowerRunModelEnum.Step; }, _delay_2s)
  61. .Run(PowerSupplierStep.WriteStepParameter, () => { return _powerSupplier.SetStepPeriod("", new object[] { "", _stepPeriodDatas }); }, NullFun, _delay_1ms)
  62. .Run(PowerSupplierStep.StartStepParameter, () => { return _powerSupplier.StartStepPeriod((ushort)_stepPeriodDatas.Count, 1); }, NullFun, _delay_1ms)
  63. .Run(PowerSupplierStep.EnableOutput, () => { return _powerSupplier.EnableOutput(); }, () => { return _powerSupplier.PowerSupplierData.Enabled; }, _delay_3s)
  64. .End(PowerSupplierStep.End, NullFun, _delay_1ms);
  65. return Runner.Status;
  66. }
  67. /// <summary>
  68. /// 启动
  69. /// </summary>
  70. /// <param name="objs"></param>
  71. /// <returns></returns>
  72. public RState Start(params object[] objs)
  73. {
  74. _powerSupplier = DEVICE.GetDevice<CellPowerSupplier>(Module);
  75. _stepPeriodDatas = (List<PowerSupplierStepPeriodData>)objs[0];
  76. foreach (PowerSupplierStepPeriodData item in _stepPeriodDatas)
  77. {
  78. _waitTime += (item.Hour * 3600 + item.Minute * 60 + item.Second) * 1000 + item.Microsecond;
  79. }
  80. _waitTime += 1 * 1000;//多增加5秒
  81. return Runner.Start(Module, "PowerSupplier Set Step");
  82. }
  83. }
  84. }