VpwMainDevice.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.Log;
  4. using Aitex.Core.RT.OperationCenter;
  5. using Aitex.Core.RT.SCCore;
  6. using Aitex.Core.Util;
  7. using MECF.Framework.Common.Beckhoff.ModuleIO;
  8. using MECF.Framework.Common.CommonData.Prewet;
  9. using MECF.Framework.Common.CommonData.Vpw;
  10. using MECF.Framework.Common.IOCore;
  11. using MECF.Framework.Common.Persistent.Prewet;
  12. using MECF.Framework.Common.Persistent.VpwMain;
  13. using PunkHPX8_RT.Modules;
  14. using PunkHPX8_RT.Modules.VpwMain;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Reflection;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. namespace PunkHPX8_RT.Devices.VpwMain
  22. {
  23. public class VpwMainDevice : BaseDevice, IDevice
  24. {
  25. #region 常量
  26. private const string COMMON_DATA = "CommonData";
  27. private const string PERSISTENT_VALUE = "PersistentValue";
  28. private const string CHAMBER_CLOSED = "ChamberClosed";
  29. private const string CHAMBER_OPENED = "ChamberOpened";
  30. private const string CHAMBER_CLOSE = "ChamberClose";
  31. private const string LEAK_DETECTED = "LeakDetected";
  32. private const string VACUUM_PUMP_PRESSURE = "VacuumPumpPressure";
  33. private const string VACUUM_PUMP_POWER = "VacuumPumpPower";
  34. private const string VACUUM_PUMP_ENABLE = "VacuumPumpEnable";
  35. private const string VACUUM_PUMP_SPEED_ENABLE = "VacuumPumpSpeedEnable";
  36. private const string VACUUM_PUMP_SPEED = "VacuumPumpSpeed";
  37. private const string BOOSTER_PUMP_SPEED = "BoosterPumpSpeed";
  38. private const string BOOSTER_PUMP_CURRENT = "BoosterPumpCurrent";
  39. private const string BOOSTER_PUMP_ENABLE = "BoosterPumpEnable";
  40. private const string BOOSTER_PUMP_STATUS = "BoosterPumpStatus";
  41. private const string DIW_ENABLE = "DiwEnable";
  42. private const string DIW_PROCESS = "DiwProcess";
  43. private const string DIW_DEGAS = "DiwDegas";
  44. private const string DIW_TOTAL_FLOW = "DiwTotalFlow";
  45. private const string DIW_PRESSURE = "DiwPressure";
  46. private const string DEGAS_ADJUST = "DegasAdjust";
  47. private const string DEGAS_PURGE = "DegasPurge";
  48. private const string DEGAS_PUMP_ENABLE = "DegasPumpEnable";
  49. private const string DEGAS_PUMP_PRESSURE = "DegasPumpPressure";
  50. #endregion
  51. #region 内部变量
  52. /// <summary>
  53. /// 变量是否初始化字典
  54. /// </summary>
  55. private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
  56. /// <summary>
  57. /// 数据
  58. /// </summary>
  59. private VpwMainCommonData _commonData=new VpwMainCommonData();
  60. /// <summary>
  61. /// 持久性数值
  62. /// </summary>
  63. private VpwMainPersistentValue _vpwMainPersistentValue;
  64. /// <summary>
  65. /// 上一次Booster泵速
  66. /// </summary>
  67. private short _lastBoosterPumpSpeed = 0;
  68. /// <summary>
  69. /// 定时器任务
  70. /// </summary>
  71. private PeriodicJob _periodicJob;
  72. private bool _isDataInitialized;
  73. #endregion
  74. #region 属性
  75. /// <summary>
  76. /// 数据
  77. /// </summary>
  78. public VpwMainCommonData CommonData { get { return _commonData; } }
  79. #endregion
  80. /// <summary>
  81. /// 构造函数
  82. /// </summary>
  83. /// <param name="moduleName"></param>
  84. public VpwMainDevice(string moduleName) : base(moduleName, moduleName, moduleName, moduleName)
  85. {
  86. }
  87. #region 初始化
  88. /// <summary>
  89. /// 初始化
  90. /// </summary>
  91. /// <returns></returns>
  92. public bool Initialize()
  93. {
  94. InitializeParameter();
  95. InitializeRoutine();
  96. SubscribeData();
  97. SubscribeValueAction();
  98. InitializeOperation();
  99. return true;
  100. }
  101. /// <summary>
  102. /// 初始化参数
  103. /// </summary>
  104. private void InitializeParameter()
  105. {
  106. _vpwMainPersistentValue = VpwMainPersistentManager.Instance.GetPersistentValue(Module);
  107. if (_vpwMainPersistentValue != null)
  108. {
  109. _lastBoosterPumpSpeed = _vpwMainPersistentValue.Speed;
  110. }
  111. else
  112. {
  113. LOG.WriteLog(eEvent.ERR_PREWET, Module, "Persistent Value Object is not exist");
  114. }
  115. _commonData.BoosterPumpPressureData = new MECF.Framework.Common.CommonData.CommonLimitData();
  116. }
  117. /// <summary>
  118. /// 初始化Routine
  119. /// </summary>
  120. private void InitializeRoutine()
  121. {
  122. }
  123. /// <summary>
  124. /// 订阅
  125. /// </summary>
  126. private void SubscribeData()
  127. {
  128. DATA.Subscribe($"{Module}.{PERSISTENT_VALUE}", () => _vpwMainPersistentValue, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  129. DATA.Subscribe($"{Module}.{COMMON_DATA}", () => CommonData, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  130. }
  131. /// <summary>
  132. /// 订阅数据
  133. /// </summary>
  134. private void SubscribeValueAction()
  135. {
  136. IoSubscribeUpdateVariable(CHAMBER_CLOSED);
  137. IoSubscribeUpdateVariable(CHAMBER_OPENED);
  138. IoSubscribeUpdateVariable(BOOSTER_PUMP_STATUS);
  139. IoSubscribeUpdateVariable(BOOSTER_PUMP_SPEED);
  140. IoSubscribeUpdateVariable(BOOSTER_PUMP_ENABLE);
  141. IoSubscribeUpdateVariable(BOOSTER_PUMP_CURRENT);
  142. IoSubscribeUpdateVariable(DEGAS_PURGE);
  143. IoSubscribeUpdateVariable(DEGAS_ADJUST);
  144. IoSubscribeUpdateVariable(DEGAS_PUMP_PRESSURE);
  145. IoSubscribeUpdateVariable(DEGAS_PUMP_ENABLE);
  146. IoSubscribeUpdateVariable(DIW_ENABLE);
  147. IoSubscribeUpdateVariable(DIW_PROCESS);
  148. IoSubscribeUpdateVariable(DIW_PRESSURE);
  149. IoSubscribeUpdateVariable(DIW_DEGAS);
  150. IoSubscribeUpdateVariable(DIW_TOTAL_FLOW);
  151. IoSubscribeUpdateVariable(VACUUM_PUMP_ENABLE);
  152. IoSubscribeUpdateVariable(VACUUM_PUMP_POWER);
  153. IoSubscribeUpdateVariable(VACUUM_PUMP_PRESSURE);
  154. IoSubscribeUpdateVariable(VACUUM_PUMP_SPEED);
  155. IoSubscribeUpdateVariable(VACUUM_PUMP_SPEED_ENABLE);
  156. IoSubscribeUpdateVariable(LEAK_DETECTED);
  157. }
  158. /// <summary>
  159. /// 初始化变量
  160. /// </summary>
  161. /// <param name="variable"></param>
  162. private void IoSubscribeUpdateVariable(string variable)
  163. {
  164. _variableInitializeDic[variable] = false;
  165. IOModuleManager.Instance.SubscribeModuleVariable(Module, variable, UpdateVariableValue);
  166. }
  167. /// <summary>
  168. /// 更新变量数值
  169. /// </summary>
  170. /// <param name="variable"></param>
  171. /// <param name="value"></param>
  172. private void UpdateVariableValue(string variable, object value)
  173. {
  174. if (!_commonData.IsDataInitialized)
  175. {
  176. _commonData.IsDataInitialized = true;
  177. _commonData.BoosterPumpModel = "Manual";
  178. }
  179. PropertyInfo property = _commonData.GetType().GetProperty(variable);
  180. if (property != null)
  181. {
  182. property.SetValue(_commonData, value);
  183. }
  184. if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
  185. {
  186. _variableInitializeDic[variable] = true;
  187. }
  188. switch (variable)
  189. {
  190. case BOOSTER_PUMP_STATUS:
  191. string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
  192. _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
  193. break;
  194. case DIW_PRESSURE:
  195. if (double.TryParse(value.ToString(), out var pressure))
  196. {
  197. _commonData.BoosterPumpPressureData.Value = pressure;
  198. }
  199. break;
  200. }
  201. }
  202. /// <summary>
  203. /// 初始化OP
  204. /// </summary>
  205. private void InitializeOperation()
  206. {
  207. OP.Subscribe($"{Module}.VacuumPumpPowerOn", (cmd,para)=> { return VacuumPumpPowerOn(); });
  208. OP.Subscribe($"{Module}.VacuumPumpPowerOff", (cmd, para) => { return VacuumPumpPowerOff(); });
  209. OP.Subscribe($"{Module}.VacuumPumpEnable", (cmd, para) => { return VacuumPumpEnable(); });
  210. OP.Subscribe($"{Module}.VacuumPumpDisable", (cmd, para) => { return VacuumPumpDisable(); });
  211. OP.Subscribe($"{Module}.VacuumPumpSpeedEnable", (cmd, para) => { return VacuumSpeedEnable(); });
  212. OP.Subscribe($"{Module}.VacuumPumpSpeedDisable", (cmd, para) => { return VacuumSpeedDisable(); });
  213. OP.Subscribe($"{Module}.VacuumPumpSpeed", (cmd, para) => { return BoosterPumpSpeedKeyDownOperation(cmd, para); });
  214. OP.Subscribe($"{Module}.DegasPumpEnable", (cmd, para) => { return DegasPumpEnable(); });
  215. OP.Subscribe($"{Module}.DegasPumpDisable", (cmd, para) => { return DegasPumpDisable(); });
  216. OP.Subscribe($"{Module}.DegasAdjustOn", (cmd, para) => { return DegasAdjustOn(); });
  217. OP.Subscribe($"{Module}.DegasAdjustOff", (cmd, para) => { return DegasAdjustOff(); });
  218. OP.Subscribe($"{Module}.DiwDegasValveOn", (cmd, para) => { return DiwDegasValveOn(); });
  219. OP.Subscribe($"{Module}.DiwDegasValveOff", (cmd, para) => { return DiwDegasValveOff(); });
  220. OP.Subscribe($"{Module}.BoosterPumpEnable", (cmd, para) => { return BoosterPumpEnable(); });
  221. OP.Subscribe($"{Module}.BoosterPumpDisable", (cmd, para) => { return BoosterPumpDisable(); });
  222. OP.Subscribe($"{Module}.BoosterPumpSpeed", (cmd, para) => {
  223. short speed = short.Parse(para[0].ToString());
  224. return BoosterPumpSpeed(speed);
  225. });
  226. OP.Subscribe($"{Module}.ChamberUp", (cmd, para) => { return ChamberUp(); });
  227. OP.Subscribe($"{Module}.ChamberDown", (cmd, para) => { return ChamberDown(); });
  228. OP.Subscribe($"{Module}.BoosterPumpSpeedAuto", (cmd, para) => { return BoosterPumpSpeedAutoOperation(); });
  229. OP.Subscribe($"{Module}.BoosterPumpSpeedManual", (cmd, para) => { return BoosterPumpSpeedManualOperation(); });
  230. OP.Subscribe($"{Module}.DisabledAction", DisabledOperation);
  231. OP.Subscribe($"{Module}.ManualAction", ManualOperation);
  232. OP.Subscribe($"{Module}.AutoAction", AutoOperation);
  233. OP.Subscribe($"{Module}.EngineeringModeAction", EngineeringModeOperation);
  234. OP.Subscribe($"{Module}.ProductionModeAction", ProductionModeOperation);
  235. }
  236. #endregion
  237. #region Action
  238. #region Vacum Pump
  239. /// <summary>
  240. /// Pump Power On
  241. /// </summary>
  242. /// <returns></returns>
  243. public bool VacuumPumpPowerOn()
  244. {
  245. return WriteVariableValue(VACUUM_PUMP_POWER, true);
  246. }
  247. /// <summary>
  248. /// Pump Power Off
  249. /// </summary>
  250. /// <returns></returns>
  251. public bool VacuumPumpPowerOff()
  252. {
  253. return WriteVariableValue(VACUUM_PUMP_POWER, false);
  254. }
  255. /// <summary>
  256. /// Pump Enable
  257. /// </summary>
  258. /// <returns></returns>
  259. public bool VacuumPumpEnable()
  260. {
  261. return WriteVariableValue(VACUUM_PUMP_ENABLE, true);
  262. }
  263. /// <summary>
  264. /// Pump Disable
  265. /// </summary>
  266. /// <returns></returns>
  267. public bool VacuumPumpDisable()
  268. {
  269. return WriteVariableValue(VACUUM_PUMP_ENABLE, false);
  270. }
  271. /// <summary>
  272. /// Speed Enable
  273. /// </summary>
  274. /// <returns></returns>
  275. public bool VacuumSpeedEnable()
  276. {
  277. return WriteVariableValue(VACUUM_PUMP_SPEED_ENABLE, true);
  278. }
  279. /// <summary>
  280. /// Speed disable
  281. /// </summary>
  282. /// <returns></returns>
  283. public bool VacuumSpeedDisable()
  284. {
  285. return WriteVariableValue(VACUUM_PUMP_SPEED_ENABLE, false);
  286. }
  287. /// <summary>
  288. /// 写入速度
  289. /// </summary>
  290. /// <param name="speed"></param>
  291. /// <returns></returns>
  292. public bool WriteVacuumSpeed(short speed)
  293. {
  294. return WriteVariableValue(VACUUM_PUMP_SPEED, speed);
  295. }
  296. #endregion
  297. #region Degas Pump
  298. /// <summary>
  299. /// Degas Pump Enable
  300. /// </summary>
  301. /// <returns></returns>
  302. public bool DegasPumpEnable()
  303. {
  304. return WriteVariableValue(DEGAS_PUMP_ENABLE, true);
  305. }
  306. /// <summary>
  307. /// Degas Pump disable
  308. /// </summary>
  309. /// <returns></returns>
  310. public bool DegasPumpDisable()
  311. {
  312. return WriteVariableValue(DEGAS_PUMP_ENABLE, false);
  313. }
  314. /// <summary>
  315. /// Degas Adjust On
  316. /// </summary>
  317. /// <returns></returns>
  318. private bool DegasAdjustOn()
  319. {
  320. return WriteVariableValue(DEGAS_ADJUST, true);
  321. }
  322. /// <summary>
  323. /// Degas Adjust Off
  324. /// </summary>
  325. /// <returns></returns>
  326. private bool DegasAdjustOff()
  327. {
  328. return WriteVariableValue(DEGAS_ADJUST, false);
  329. }
  330. /// <summary>
  331. /// DIW Degas Valve On
  332. /// </summary>
  333. /// <returns></returns>
  334. private bool DiwDegasValveOn()
  335. {
  336. return WriteVariableValue(DIW_DEGAS, true);
  337. }
  338. /// <summary>
  339. /// DIW Degas Valve Off
  340. /// </summary>
  341. /// <returns></returns>
  342. private bool DiwDegasValveOff()
  343. {
  344. return WriteVariableValue(DIW_DEGAS, false);
  345. }
  346. #endregion
  347. #region Booster Pump
  348. /// <summary>
  349. /// Booster Pump enable
  350. /// </summary>
  351. /// <returns></returns>
  352. public bool BoosterPumpEnable()
  353. {
  354. return WriteVariableValue(BOOSTER_PUMP_ENABLE, true);
  355. }
  356. /// <summary>
  357. /// Booster Pump Disable
  358. /// </summary>
  359. /// <returns></returns>
  360. public bool BoosterPumpDisable()
  361. {
  362. return WriteVariableValue(BOOSTER_PUMP_ENABLE, false);
  363. }
  364. /// <summary>
  365. /// 写入Booster泵速
  366. /// </summary>
  367. /// <param name="speed"></param>
  368. /// <returns></returns>
  369. public bool BoosterPumpSpeed(short speed)
  370. {
  371. return WriteVariableValue(BOOSTER_PUMP_SPEED, speed);
  372. }
  373. /// Booster Pump Speed回车操作
  374. /// </summary>
  375. /// <param name="cmd"></param>
  376. /// <param name="param"></param>
  377. /// <returns></returns>
  378. private bool BoosterPumpSpeedKeyDownOperation(string cmd, object[] param)
  379. {
  380. if (_commonData.BoosterPumpSpeedAuto)
  381. {
  382. LOG.WriteLog(eEvent.ERR_PREWET, Module, "Pump speed is auto,cannot change speed");
  383. return false;
  384. }
  385. short speed = (short)param[0];
  386. bool result = BoosterPumpSpeed(speed);
  387. if (result)
  388. {
  389. _vpwMainPersistentValue.Speed = speed;
  390. _lastBoosterPumpSpeed = speed;
  391. PrewetPersistentManager.Instance.UpdatePersistentValue(Module);
  392. }
  393. return true;
  394. }
  395. #endregion
  396. #region Chamber
  397. /// <summary>
  398. /// 上升
  399. /// </summary>
  400. /// <returns></returns>
  401. public bool ChamberUp()
  402. {
  403. return WriteVariableValue(CHAMBER_CLOSE, false);
  404. }
  405. /// <summary>
  406. /// 下降
  407. /// </summary>
  408. /// <returns></returns>
  409. public bool ChamberDown()
  410. {
  411. return WriteVariableValue(CHAMBER_CLOSE, true);
  412. }
  413. /// <summary>
  414. /// Pump Speed手动模式
  415. /// </summary>
  416. /// <param name="cmd"></param>
  417. /// <param name="param"></param>
  418. /// <returns></returns>
  419. private bool BoosterPumpSpeedManualOperation()
  420. {
  421. _commonData.BoosterPumpSpeedAuto = true;
  422. _commonData.BoosterPumpModel = "Manual";
  423. string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
  424. _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
  425. return true;
  426. }
  427. /// <summary>
  428. /// Pump Speed自动模式
  429. /// </summary>
  430. /// <param name="cmd"></param>
  431. /// <param name="param"></param>
  432. /// <returns></returns>
  433. private bool BoosterPumpSpeedAutoOperation()
  434. {
  435. _commonData.BoosterPumpSpeedAuto = true;
  436. _commonData.BoosterPumpModel = "Auto";
  437. string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
  438. _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
  439. return true;
  440. }
  441. /// <summary>
  442. /// DisabledAction
  443. /// </summary>
  444. /// <param name="cmd"></param>
  445. /// <param name="param"></param>
  446. /// <returns></returns>
  447. private bool DisabledOperation(string cmd, object[] args)
  448. {
  449. string currentOperation = "Disabled";
  450. VpwMainEntity vpwMainEntity = Singleton<RouteManager>.Instance.GetModule<VpwMainEntity>(Module);
  451. if (vpwMainEntity != null && _vpwMainPersistentValue != null && _vpwMainPersistentValue.OperatingMode != currentOperation)
  452. {
  453. string preOperation = _vpwMainPersistentValue.OperatingMode;
  454. if (vpwMainEntity.IsBusy)
  455. {
  456. LOG.WriteLog(eEvent.ERR_VPWMAIN, Module, $"{Module} is Busy, can't switch to Disabled mode");
  457. return false;
  458. }
  459. vpwMainEntity.EnterInit();
  460. _vpwMainPersistentValue.OperatingMode = currentOperation;
  461. LOG.WriteLog(eEvent.INFO_VPWMAIN, Module, $"Operating mode is switched from {preOperation} to {currentOperation}");
  462. }
  463. VpwMainPersistentManager.Instance.UpdatePersistentValue(Module);
  464. return true;
  465. }
  466. /// <summary>
  467. /// ManualAction
  468. /// </summary>
  469. /// <param name="cmd"></param>
  470. /// <param name="param"></param>
  471. /// <returns></returns>
  472. private bool ManualOperation(string cmd, object[] args)
  473. {
  474. string currentOperation = "Manual";
  475. VpwMainEntity vpwMainEntity = Singleton<RouteManager>.Instance.GetModule<VpwMainEntity>(Module);
  476. if (vpwMainEntity != null && _vpwMainPersistentValue != null && _vpwMainPersistentValue.OperatingMode != currentOperation)
  477. {
  478. string preOperation = _vpwMainPersistentValue.OperatingMode;
  479. if (vpwMainEntity.IsBusy)
  480. {
  481. LOG.WriteLog(eEvent.ERR_VPWMAIN, Module, $"{Module} is Busy, can't switch to Manual mode");
  482. return false;
  483. }
  484. vpwMainEntity.EnterInit();
  485. _vpwMainPersistentValue.OperatingMode = currentOperation;
  486. LOG.WriteLog(eEvent.INFO_VPWMAIN, Module, $"Operating mode is switched from {preOperation} to {currentOperation}");
  487. }
  488. VpwMainPersistentManager.Instance.UpdatePersistentValue(Module);
  489. return true;
  490. }
  491. /// <summary>
  492. /// AutoAction
  493. /// </summary>
  494. /// <param name="cmd"></param>
  495. /// <param name="param"></param>
  496. /// <returns></returns>
  497. private bool AutoOperation(string cmd, object[] args)
  498. {
  499. string currentOperation = "Auto";
  500. VpwMainEntity vpwMainEntity = Singleton<RouteManager>.Instance.GetModule<VpwMainEntity>(Module);
  501. if (vpwMainEntity != null && _vpwMainPersistentValue != null && _vpwMainPersistentValue.OperatingMode != currentOperation)
  502. {
  503. string preOperation = _vpwMainPersistentValue.OperatingMode;
  504. if (vpwMainEntity.IsBusy)
  505. {
  506. LOG.WriteLog(eEvent.ERR_VPWMAIN, Module, $"{Module} is Busy, can't switch to Auto mode");
  507. return false;
  508. }
  509. vpwMainEntity.EnterInit();
  510. _vpwMainPersistentValue.OperatingMode = currentOperation;
  511. LOG.WriteLog(eEvent.INFO_VPWMAIN, Module, $"Operating mode is switched from {preOperation} to {currentOperation}");
  512. }
  513. VpwMainPersistentManager.Instance.UpdatePersistentValue(Module);
  514. return true;
  515. }
  516. /// <summary>
  517. /// EngineeringModeAction
  518. /// </summary>
  519. /// <param name="cmd"></param>
  520. /// <param name="param"></param>
  521. /// <returns></returns>
  522. private bool EngineeringModeOperation(string cmd, object[] args)
  523. {
  524. string currentRecipeOperation = "Engineering";
  525. if (_vpwMainPersistentValue != null)
  526. {
  527. _vpwMainPersistentValue.RecipeOperatingMode = currentRecipeOperation;
  528. }
  529. VpwMainPersistentManager.Instance.UpdatePersistentValue(Module);
  530. return true;
  531. }
  532. /// <summary>
  533. /// ProductionAction
  534. /// </summary>
  535. /// <param name="cmd"></param>
  536. /// <param name="param"></param>
  537. /// <returns></returns>
  538. private bool ProductionModeOperation(string cmd, object[] args)
  539. {
  540. string currentRecipeOperation = "Production";
  541. if (_vpwMainPersistentValue != null)
  542. {
  543. _vpwMainPersistentValue.RecipeOperatingMode = currentRecipeOperation;
  544. }
  545. VpwMainPersistentManager.Instance.UpdatePersistentValue(Module);
  546. return true;
  547. }
  548. #endregion
  549. /// <summary>
  550. /// 写变量
  551. /// </summary>
  552. /// <param name="variable"></param>
  553. /// <param name="value"></param>
  554. /// <returns></returns>
  555. private bool WriteVariableValue(string variable, object value)
  556. {
  557. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{variable}");
  558. return IOModuleManager.Instance.WriteIoValue(ioName, value);
  559. }
  560. #endregion
  561. /// <summary>
  562. /// 定时器
  563. /// </summary>
  564. /// <returns></returns>
  565. public bool OnTimer()
  566. {
  567. _commonData.BoosterPumpPressureData.MinError = SC.GetValue<double>($"VPWMain.PumpPressure.Error_Min");
  568. _commonData.BoosterPumpPressureData.MinWarning = SC.GetValue<double>($"VPWMain.PumpPressure.Warning_Min");
  569. _commonData.BoosterPumpPressureData.MaxError = SC.GetValue<double>($"VPWMain.PumpPressure.Error_Max");
  570. _commonData.BoosterPumpPressureData.MaxWarning = SC.GetValue<double>($"VPWMain.PumpPressure.Warning_Max");
  571. _commonData.PressureTarget = SC.GetValue<double>($"VPWMain.PressureTarget");
  572. return true;
  573. }
  574. /// <summary>
  575. /// 监控
  576. /// </summary>
  577. public void Monitor()
  578. {
  579. }
  580. public void Reset()
  581. {
  582. }
  583. public void Terminate()
  584. {
  585. }
  586. }
  587. }