IoHongHuControl.cs 6.7 KB

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