IoHongHuControl.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.IOCore;
  4. using Aitex.Core.RT.SCCore;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Xml;
  11. namespace Venus_RT.Devices.IODevices
  12. {
  13. public class IoHongHuControl : BaseDevice, IDevice
  14. {
  15. private bool _lastValue;
  16. //WriteMode分为两种模式 一种是Flow模式 一种是控压模式
  17. private SCConfigItem _scWriteMode;
  18. private SCConfigItem _scTargetMFC;
  19. private SCConfigItem _scTargetPressure;
  20. private readonly DOAccessor _FlowMode;
  21. private readonly DOAccessor _PressureMode;
  22. private readonly AOAccessor _MFCSetPoint;
  23. private readonly AOAccessor _PressureSetPoint;
  24. public IoHongHuControl(string module, XmlElement node, string ioModule = "")
  25. {
  26. base.Module = module;
  27. base.Name = node.GetAttribute("id");
  28. base.Display = node.GetAttribute("display");
  29. base.DeviceID = node.GetAttribute("schematicId");
  30. _scWriteMode = SC.GetConfigItem($"{Module}.{Name}.ControlWriteMode");
  31. _scTargetMFC = SC.GetConfigItem($"{Module}.{Name}.TargetMFC");
  32. _scTargetPressure = SC.GetConfigItem($"{Module}.{Name}.TargetPressure");
  33. _FlowMode = ParseDoNode("doMFCFlow", node, ioModule);
  34. _PressureMode = ParseDoNode("doPressureMode", node, ioModule);
  35. _MFCSetPoint = ParseAoNode("aoMFCFlow", node, ioModule);
  36. _PressureSetPoint = ParseAoNode("aoPressure", node, ioModule);
  37. }
  38. //
  39. public bool Initialize()
  40. {
  41. return true;
  42. }
  43. public void Monitor()
  44. {
  45. //如果是true MFC模式
  46. if (_scWriteMode.BoolValue)
  47. {
  48. if(_FlowMode != null && _FlowMode.Value !=true)
  49. _FlowMode.SetValue(true,out string _);
  50. if (_PressureMode != null && _PressureMode.Value != false)
  51. _PressureMode.SetValue(false,out _);
  52. if (_MFCSetPoint != null)
  53. {
  54. byte[] flow;
  55. flow = BitConverter.GetBytes(float.Parse(_scTargetMFC.Value.ToString()));
  56. _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
  57. _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
  58. }
  59. //if (_lastValue != _scWriteMode.BoolValue)
  60. //{
  61. // if (_ventvalve != null && _ventvalve.Value != false)
  62. // _ventvalve.SetValue(false, out _);
  63. // if (_pumpvalve != null && _pumpvalve.Value != false)
  64. // _pumpvalve.SetValue(false, out _);
  65. //}
  66. }
  67. else
  68. {
  69. if (_FlowMode != null && _FlowMode.Value != false)
  70. _FlowMode.SetValue(false, out string _);
  71. if (_PressureMode != null && _PressureMode.Value != true)
  72. _PressureMode.SetValue(true, out string _);
  73. if (_PressureSetPoint != null )
  74. {
  75. byte[] pressure;
  76. pressure = BitConverter.GetBytes(float.Parse(_scTargetPressure.Value.ToString()));
  77. _PressureSetPoint.Buffer[_PressureSetPoint.Index] = BitConverter.ToInt16(pressure, 0);
  78. _PressureSetPoint.Buffer[_PressureSetPoint.Index + 1] = BitConverter.ToInt16(pressure, 2);
  79. }
  80. //if (_lastValue != _scWriteMode.BoolValue)
  81. //{
  82. // if (_ventvalve != null && _ventvalve.Value != true)
  83. // _ventvalve.SetValue(true, out _);
  84. // if (_pumpvalve != null && _pumpvalve.Value != true)
  85. // _pumpvalve.SetValue(true, out _);
  86. //}
  87. }
  88. _lastValue = _scWriteMode.BoolValue;
  89. }
  90. public void Reset()
  91. {
  92. if (_FlowMode != null && _FlowMode.Value != true)
  93. _FlowMode.SetValue(true, out string _);
  94. if (_PressureMode != null && _PressureMode.Value != false)
  95. _PressureMode.SetValue(false, out _);
  96. if (_MFCSetPoint != null)
  97. {
  98. byte[] flow;
  99. flow = BitConverter.GetBytes(float.Parse("0"));
  100. _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
  101. _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
  102. }
  103. //if (_ventvalve != null && _ventvalve.Value != false)
  104. // _ventvalve.SetValue(false, out _);
  105. //if (_pumpvalve != null && _pumpvalve.Value != false)
  106. // _pumpvalve.SetValue(false, out _);
  107. }
  108. public void Terminate()
  109. {
  110. if (_FlowMode != null && _FlowMode.Value != true)
  111. _FlowMode.SetValue(true, out string _);
  112. if (_PressureMode != null && _PressureMode.Value != false)
  113. _PressureMode.SetValue(false, out _);
  114. if (_MFCSetPoint != null)
  115. {
  116. byte[] flow;
  117. flow = BitConverter.GetBytes(float.Parse("0"));
  118. _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
  119. _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
  120. }
  121. //if (_ventvalve != null && _ventvalve.Value != false)
  122. // _ventvalve.SetValue(false, out _);
  123. //if (_pumpvalve != null && _pumpvalve.Value != false)
  124. // _pumpvalve.SetValue(false, out _);
  125. }
  126. }
  127. }