PowerSupplierStepRoutine.cs 3.8 KB

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