VpwCellDevice.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.OperationCenter;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Beckhoff.ModuleIO;
  6. using MECF.Framework.Common.CommonData.Prewet;
  7. using MECF.Framework.Common.CommonData.Vpw;
  8. using MECF.Framework.Common.IOCore;
  9. using MECF.Framework.Common.Persistent.SRD;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Reflection;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. namespace PunkHPX8_RT.Devices.VpwCell
  17. {
  18. public class VpwCellDevice : BaseDevice, IDevice
  19. {
  20. #region 常量
  21. private const string COMMON_DATA = "CommonData";
  22. private const string DIW_FLOW = "DiwFlow";
  23. private const string VACUUM_PRESSURE = "VacuumPressure";
  24. private const string FLOW_DRIP = "FlowDrip";
  25. private const string FLOW_SMALL = "FlowSmall";
  26. private const string FLOW_LARGE = "FlowLarge";
  27. private const string VACUUM_VALVE = "VacuumValve";
  28. private const string VENT_VALVE = "VentValve";
  29. private const string DIW_DRAIN = "DiwDrain";
  30. #endregion
  31. #region 内部变量
  32. /// <summary>
  33. /// 变量是否初始化字典
  34. /// </summary>
  35. private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
  36. /// <summary>
  37. /// 数据
  38. /// </summary>
  39. private VpwCellCommonData _commonData;
  40. #endregion
  41. #region 属性
  42. /// <summary>
  43. /// 数据
  44. /// </summary>
  45. public VpwCellCommonData CommonData { get { return _commonData; } }
  46. #endregion
  47. /// <summary>
  48. /// 构造函数
  49. /// </summary>
  50. /// <param name="moduleName"></param>
  51. public VpwCellDevice(string moduleName) : base(moduleName, moduleName, moduleName, moduleName)
  52. {
  53. }
  54. #region 初始化
  55. /// <summary>
  56. /// 初始化
  57. /// </summary>
  58. /// <returns></returns>
  59. public bool Initialize()
  60. {
  61. InitializeParameter();
  62. InitializeRoutine();
  63. SubscribeData();
  64. SubscribeValueAction();
  65. InitializeOperation();
  66. return true;
  67. }
  68. /// <summary>
  69. /// 初始化参数
  70. /// </summary>
  71. private void InitializeParameter()
  72. {
  73. }
  74. /// <summary>
  75. /// 初始化Routine
  76. /// </summary>
  77. private void InitializeRoutine()
  78. {
  79. }
  80. /// <summary>
  81. /// 订阅
  82. /// </summary>
  83. private void SubscribeData()
  84. {
  85. DATA.Subscribe($"{Module}.{COMMON_DATA}", () => COMMON_DATA, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  86. }
  87. /// <summary>
  88. /// 订阅数据
  89. /// </summary>
  90. private void SubscribeValueAction()
  91. {
  92. IoSubscribeUpdateVariable(DIW_FLOW);
  93. IoSubscribeUpdateVariable(DIW_DRAIN);
  94. IoSubscribeUpdateVariable(VACUUM_PRESSURE);
  95. IoSubscribeUpdateVariable(VACUUM_VALVE);
  96. IoSubscribeUpdateVariable(VENT_VALVE);
  97. IoSubscribeUpdateVariable(FLOW_DRIP);
  98. IoSubscribeUpdateVariable(FLOW_LARGE);
  99. IoSubscribeUpdateVariable(FLOW_SMALL);
  100. }
  101. /// <summary>
  102. /// 初始化变量
  103. /// </summary>
  104. /// <param name="variable"></param>
  105. private void IoSubscribeUpdateVariable(string variable)
  106. {
  107. _variableInitializeDic[variable] = false;
  108. IOModuleManager.Instance.SubscribeModuleVariable(Module, variable, UpdateVariableValue);
  109. }
  110. /// <summary>
  111. /// 更新变量数值
  112. /// </summary>
  113. /// <param name="variable"></param>
  114. /// <param name="value"></param>
  115. private void UpdateVariableValue(string variable, object value)
  116. {
  117. PropertyInfo property = _commonData.GetType().GetProperty(variable);
  118. if (property != null)
  119. {
  120. property.SetValue(_commonData, value);
  121. }
  122. if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
  123. {
  124. _variableInitializeDic[variable] = true;
  125. }
  126. }
  127. /// <summary>
  128. /// 初始化OP
  129. /// </summary>
  130. private void InitializeOperation()
  131. {
  132. OP.Subscribe($"{Module}.FlowDripOn", (cmd,para)=> { return FlowDripOn(); });
  133. OP.Subscribe($"{Module}.FlowDripOff", (cmd, para) => { return FlowDripOff(); });
  134. OP.Subscribe($"{Module}.FlowSmallOn", (cmd, para) => { return FlowSmallOn(); });
  135. OP.Subscribe($"{Module}.FlowSmallOff", (cmd, para) => { return FlowSmallOff(); });
  136. OP.Subscribe($"{Module}.FlowLargeOn", (cmd, para) => { return FlowLargeOn(); });
  137. OP.Subscribe($"{Module}.FlowLargeOff", (cmd, para) => { return FlowLargeOff(); });
  138. OP.Subscribe($"{Module}.VentValveOn", (cmd, para) => { return VentValveOn(); });
  139. OP.Subscribe($"{Module}.VentValveOff", (cmd, para) => { return VentValveOff(); });
  140. OP.Subscribe($"{Module}.DrainValveOn", (cmd, para) => { return DrainValveOn(); });
  141. OP.Subscribe($"{Module}.DrainValveOff", (cmd, para) => { return DrainValveOff(); });
  142. OP.Subscribe($"{Module}.VacuumValveOn", (cmd, para) => { return VacuumValveOn(); });
  143. OP.Subscribe($"{Module}.VacuumValveOff", (cmd, para) => { return VacuumValveOff(); });
  144. }
  145. #endregion
  146. #region Action
  147. #region Flow
  148. /// <summary>
  149. /// Flow Drip on
  150. /// </summary>
  151. /// <returns></returns>
  152. public bool FlowDripOn()
  153. {
  154. return WriteVariableValue(FLOW_DRIP, true);
  155. }
  156. /// <summary>
  157. /// Flow Drip Off
  158. /// </summary>
  159. /// <returns></returns>
  160. public bool FlowDripOff()
  161. {
  162. return WriteVariableValue(FLOW_DRIP, false);
  163. }
  164. /// <summary>
  165. /// Flow Small On
  166. /// </summary>
  167. /// <returns></returns>
  168. public bool FlowSmallOn()
  169. {
  170. return WriteVariableValue(FLOW_SMALL, true);
  171. }
  172. /// <summary>
  173. /// Flow Small Off
  174. /// </summary>
  175. /// <returns></returns>
  176. public bool FlowSmallOff()
  177. {
  178. return WriteVariableValue(FLOW_SMALL, false);
  179. }
  180. /// <summary>
  181. /// Flow Large On
  182. /// </summary>
  183. /// <returns></returns>
  184. public bool FlowLargeOn()
  185. {
  186. return WriteVariableValue(FLOW_LARGE, true);
  187. }
  188. /// <summary>
  189. /// Flow Large Off
  190. /// </summary>
  191. /// <returns></returns>
  192. public bool FlowLargeOff()
  193. {
  194. return WriteVariableValue(FLOW_LARGE, false);
  195. }
  196. #endregion
  197. /// <summary>
  198. /// Vent Valve On
  199. /// </summary>
  200. /// <returns></returns>
  201. private bool VentValveOn()
  202. {
  203. return WriteVariableValue(VENT_VALVE, true);
  204. }
  205. /// <summary>
  206. /// Vent Valve Off
  207. /// </summary>
  208. /// <returns></returns>
  209. private bool VentValveOff()
  210. {
  211. return WriteVariableValue(VENT_VALVE, false);
  212. }
  213. /// <summary>
  214. /// Vent Valve On
  215. /// </summary>
  216. /// <returns></returns>
  217. private bool DrainValveOn()
  218. {
  219. return WriteVariableValue(DIW_DRAIN, true);
  220. }
  221. /// <summary>
  222. /// Vent Valve Off
  223. /// </summary>
  224. /// <returns></returns>
  225. private bool DrainValveOff()
  226. {
  227. return WriteVariableValue(DIW_DRAIN, false);
  228. }
  229. /// <summary>
  230. /// Vacuum valve on
  231. /// </summary>
  232. /// <returns></returns>
  233. private bool VacuumValveOn()
  234. {
  235. return WriteVariableValue(VACUUM_VALVE, true);
  236. }
  237. /// <summary>
  238. /// Vacuum valve off
  239. /// </summary>
  240. /// <returns></returns>
  241. private bool VacuumValveOff()
  242. {
  243. return WriteVariableValue(VACUUM_VALVE, false);
  244. }
  245. /// <summary>
  246. /// 写变量
  247. /// </summary>
  248. /// <param name="variable"></param>
  249. /// <param name="value"></param>
  250. /// <returns></returns>
  251. private bool WriteVariableValue(string variable, object value)
  252. {
  253. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{variable}");
  254. return IOModuleManager.Instance.WriteIoValue(ioName, value);
  255. }
  256. #endregion
  257. /// <summary>
  258. /// 监控
  259. /// </summary>
  260. public void Monitor()
  261. {
  262. }
  263. public void Reset()
  264. {
  265. }
  266. public void Terminate()
  267. {
  268. }
  269. }
  270. }