VpwCellDevice.cs 9.0 KB

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