SystemFacilities.cs 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  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.Alarm;
  8. using MECF.Framework.Common.Beckhoff.ModuleIO;
  9. using MECF.Framework.Common.CommonData;
  10. using MECF.Framework.Common.IOCore;
  11. using MECF.Framework.Common.TwinCat;
  12. using System;
  13. using System.Collections.Generic;
  14. namespace PunkHPX8_RT.Devices.Facilities
  15. {
  16. public class SystemFacilities : BaseDevice, IDevice
  17. {
  18. #region 常量
  19. private const string CDA_1_PRESSURE = "CDA_1_Pressure";
  20. private const string CDA_2_PRESSURE = "CDA_2_Pressure";
  21. private const string N2_1A_PRESSURE = "N2_1A_Pressure";
  22. private const string N2_1B_PRESSURE = "N2_1B_Pressure";
  23. private const string N2_2A_PRESSURE = "N2_2A_Pressure";
  24. private const string N2_2B_PRESSURE = "N2_2B_Pressure";
  25. private const string DI_WATER_PRESSURE = "DIWater_Pressure";
  26. private const string HOUSE_CHILLED_WATER_FLOW = "HouseChilledWaterFlow";
  27. private const string CDA_EXTERNAL_PRESSURE = "CDA_External_Pressure";
  28. private const string VACUUM_PRESSURE = "Vacuum_Pressure";
  29. private const string EXHAUST_PRESSURE1 = "Exhaust_Pressure1";
  30. private const string EXHAUST_PRESSURE2 = "Exhaust_Pressure2";
  31. private const string DIW_RETRUN_FLOW = "DIW_Return_Flow";
  32. private const string ERROR_MAX = "Error_Max";
  33. private const string ERROR_MIN = "Error_Min";
  34. private const string WARNING_MAX = "Warning_Max";
  35. private const string WARNING_MIN = "Warning_Min";
  36. private const string N2_1A_PRESSURE_VALUE = "Nitrogen1APressure";
  37. private const string N2_1B_PRESSURE_VALUE = "Nitrogen1BPressure";
  38. private const string N2_2A_PRESSURE_VALUE = "Nitrogen2APressure";
  39. private const string N2_2B_PRESSURE_VALUE = "Nitrogen2BPressure";
  40. private const string CDA_1_PRESSURE_VALUE = "CDA1Pressure";
  41. private const string CDA_2_PRESSURE_VALUE = "CDA2Pressure";
  42. private const string CDA_EXTERNAL_PRESSURE_VALUE = "ExternalCDAPressure";
  43. private const string DI_WATER_PRESSURE_VALUE = "DiWaterPressure";
  44. private const string HOUSE_CHILLED_WATER_PRESSURE_VALUE = "HouseChilledWaterPressure";
  45. private const string EXHAUST1_PRESSURE_VALUE = "Exhaust1Pressure";
  46. private const string EXHAUST2_PRESSURE_VALUE = "Exhaust2Pressure";
  47. private const string DIW_RETRUN_FLOW_VALUE = "DiwReturnFlow";
  48. private const string VACUUM_PRESSURE_VALUE = "VacuumPressure";
  49. private const string FFU_LOADER_ERROR = "FFULoaderError";
  50. private const string FFU_PROCESS_ERROR = "FFUProcessError";
  51. private const string FFU_LOADER_PRESSURE = "FFULoaderPressure";
  52. private const string FFU_PROCESS_PRESSURE = "FFUProcessPressure";
  53. private const string ARS_FLUID_DETECT = "ArsFluidDetect";
  54. private const string PROCESS_FLUID_DETECT = "ProcessFluidDetect";
  55. private const string SAMPLE_FLUID_DETECT = "SampleFluidDetect";
  56. private const string FACILITIES = "Facilities";
  57. private const string FACILITIES_DATA = "Facilities_Data";
  58. private const string N2_ENABLE = "N2Enable";
  59. private const string CDA_ENABLE = "CDAEnable";
  60. private const string EXTERNAL_CDA_ENABLE = "ExternalCDAEnable";
  61. private const string DI_WATER_ENABLE = "DiWaterEnable";
  62. private const string HOUSE_CHILLED_WATER_ENABLE = "HouseChilledWaterEnable";
  63. private const string VPW_DI_ENABLE = "VpwDiEnable";
  64. private const string DI_REPLEN_ENABLE = "DiReplenEnable";
  65. private const string DI_FILL_ENABLE = "DiFillEnable";
  66. private const string SRD_DI_ENABLE = "SrdDiwEnable";
  67. private const string SAMPLE_STATION_ENABLE = "SampleStationEnable";
  68. private const string FILTER_PURGE_ENABLE = "FilterPurgeEnable";
  69. private const string N2_BLANKET_PRESSURE_VALUE = "N2BlanketPressure";
  70. private const string N2_OVERFLOW_PRESSURE_VALUE = "N2OverflowPressure";
  71. private const string CLAMSHELL_CYLINDER_PRESSURE_VALUE = "ClamshellCylinderPressure";
  72. private const string TILT_CYLINDER_PRESSURE_VALUE = "TiltCylinderPressure";
  73. private const string FFU_PLATECELL_PRESSURE_ERROR = "FFUPlateCellPressureError";
  74. private const string FFU_CORRIDOR_PRESSURE_ERROR = "FFUCorridorPressureError";
  75. private const string FFU_PLATECELL_PRESSURE_PRESSURE = "FFUPlateCellPressure";
  76. private const string FFU_CORRIDOR_PRESSURE = "FFUCorridorPressure";
  77. #endregion
  78. #region 内部常量
  79. /// </summary>
  80. /// 定时器Job
  81. /// </summary>
  82. PeriodicJob _periodicJob = null;
  83. /// <summary>
  84. /// 数据集合
  85. /// </summary>
  86. private List<CommonLimitData> _facilitiesDataList = new List<CommonLimitData>();
  87. /// <summary>
  88. /// 数据字典
  89. /// </summary>
  90. private Dictionary<string, CommonLimitData> _facilitiesDataDic = new Dictionary<string, CommonLimitData>();
  91. /// <summary>
  92. /// N2可用性
  93. /// </summary>
  94. private bool _n2Enabled = false;
  95. /// <summary>
  96. /// CDA可用性
  97. /// </summary>
  98. private bool _cdaEnable = false;
  99. /// <summary>
  100. /// External CDA可用性
  101. /// </summary>
  102. private bool _externalCDAEnable = false;
  103. /// <summary>
  104. /// DI Water 可用性
  105. /// </summary>
  106. private bool _diWaterEnable = false;
  107. /// <summary>
  108. /// House Chilled Water可用性
  109. /// </summary>
  110. private bool _houseChilledWaterEnable = false;
  111. /// <summary>
  112. /// DI Replen可用性
  113. /// </summary>
  114. private bool _diReplenEnable = false;
  115. /// <summary>
  116. /// DI Fill可用性
  117. /// </summary>
  118. private bool _diFillEnable = false;
  119. /// <summary>
  120. /// Srd Di可用性
  121. /// </summary>
  122. private bool _srdDiEnable = false;
  123. /// <summary>
  124. /// Filter Purge可用性
  125. /// </summary>
  126. private bool _filterPurgeEnable = false;
  127. /// <summary>
  128. /// N2 Blanket 压力
  129. /// </summary>
  130. private double _n2BlaketPressure = 0;
  131. /// <summary>
  132. /// N2 Overflow 压力
  133. /// </summary>
  134. private double _n2OverflowPressure = 0;
  135. /// <summary>
  136. /// clamshellCylinder 压力
  137. /// </summary>
  138. private double _clamshellCylinderPressure = 0;
  139. /// <summary>
  140. /// tiltCylinder 压力
  141. /// </summary>
  142. private double _tiltCylinderPressure = 0;
  143. /// <summary>
  144. /// 变量是否初始化字典
  145. /// </summary>
  146. private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
  147. #region Sample
  148. /// <summary>
  149. /// Sample Enable
  150. /// </summary>
  151. private bool _sampleEnable = false;
  152. /// <summary>
  153. /// 开始采样时间
  154. /// </summary>
  155. private DateTime _sampleStartime;
  156. /// <summary>
  157. /// 是否正在采样
  158. /// </summary>
  159. private bool _isSammpleing = false;
  160. #endregion
  161. #region FFU
  162. /// <summary>
  163. /// Loader FFU Error
  164. /// </summary>
  165. private bool _ffuLoaderError = false;
  166. /// <summary>
  167. /// Process FFU Error
  168. /// </summary>
  169. private bool _ffuProcessError = false;
  170. /// <summary>
  171. /// Loader FFU Pressure
  172. /// </summary>
  173. private double _ffuLoaderPressure;
  174. /// <summary>
  175. /// Process FFU Pressure
  176. /// </summary>
  177. private double _ffuProcessPressure;
  178. #endregion
  179. #region Fluid
  180. /// <summary>
  181. /// ARS Fluid Detect
  182. /// </summary>
  183. private bool _arsFluidDetect;
  184. /// <summary>
  185. /// Process Fluid Detect
  186. /// </summary>
  187. private bool _processFluidDetect;
  188. /// <summary>
  189. /// Sample Fluid Detect
  190. /// </summary>
  191. private bool _sampleFluidDetect;
  192. #endregion
  193. #region Counter
  194. /// <summary>
  195. ///
  196. /// </summary>
  197. private CounterFlowData _diReplenFlowCounterData = new CounterFlowData();
  198. #endregion
  199. #endregion
  200. #region 属性
  201. /// <summary>
  202. /// 冰却水可用性
  203. /// </summary>
  204. public bool HouseChilledWaterEnable { get { return _houseChilledWaterEnable; } }
  205. /// <summary>
  206. /// N2可用性
  207. /// </summary>
  208. public bool N2Enable { get { return _n2Enabled; } }
  209. /// <summary>
  210. /// CDA可用性
  211. /// </summary>
  212. public bool CDAEnable { get { return _cdaEnable; } }
  213. /// <summary>
  214. /// SRD DI 可用性
  215. /// </summary>
  216. public bool SrdDiEnable { get { return _srdDiEnable; } }
  217. /// <summary>
  218. /// DI Replen Enable
  219. /// </summary>
  220. public bool DIReplenEnable { get { return _diReplenEnable; } }
  221. /// <summary>
  222. /// 所有io变量是否初始化
  223. /// </summary>
  224. public bool IOInitialized { get { return AllIoVariableInitialized(); } }
  225. /// <summary>
  226. /// SampleFluidDetect
  227. /// </summary>
  228. public bool SampleFluidDetect { get { return _sampleFluidDetect; } }
  229. /// <summary>
  230. /// Di Fill Enable
  231. /// </summary>
  232. public bool DIFillEnable { get { return _diFillEnable; } }
  233. #endregion
  234. /// <summary>
  235. /// 构造函数
  236. /// </summary>
  237. public SystemFacilities() : base("System", FACILITIES, FACILITIES, FACILITIES)
  238. {
  239. }
  240. /// <summary>
  241. /// 定时器
  242. /// </summary>
  243. /// <returns></returns>
  244. private bool OnTimer()
  245. {
  246. //if (_isSammpleing)
  247. //{
  248. // int sampleAutoDisableTime = SC.GetValue<int>("Facilities.SampleAutoDisableTime");
  249. // if ((DateTime.Now - _sampleStartime).TotalSeconds >= sampleAutoDisableTime)
  250. // {
  251. // SampleDisableOperation("", null);
  252. // }
  253. //}
  254. return true;
  255. }
  256. /// <summary>
  257. /// 初始化
  258. /// </summary>
  259. /// <returns></returns>
  260. public bool Initialize()
  261. {
  262. InitialData();
  263. SubscribeValueAction();
  264. InitializeOperation();
  265. //_periodicJob = new PeriodicJob(200, OnTimer, $"{Module}.OnTimer", true);
  266. return true;
  267. }
  268. /// <summary>
  269. /// 初始化数据
  270. /// </summary>
  271. private void InitialData()
  272. {
  273. _facilitiesDataList.Add(InitialFacilitiesData(CDA_1_PRESSURE));
  274. _facilitiesDataDic[CDA_1_PRESSURE_VALUE] = _facilitiesDataList[0];
  275. _facilitiesDataList.Add(InitialFacilitiesData(CDA_2_PRESSURE));
  276. _facilitiesDataDic[CDA_2_PRESSURE_VALUE] = _facilitiesDataList[1];
  277. _facilitiesDataList.Add(InitialFacilitiesData(N2_1A_PRESSURE));
  278. _facilitiesDataDic[N2_1A_PRESSURE_VALUE] = _facilitiesDataList[2];
  279. _facilitiesDataList.Add(InitialFacilitiesData(N2_1B_PRESSURE));
  280. _facilitiesDataDic[N2_1B_PRESSURE_VALUE] = _facilitiesDataList[3];
  281. _facilitiesDataList.Add(InitialFacilitiesData(N2_2A_PRESSURE));
  282. _facilitiesDataDic[N2_2A_PRESSURE_VALUE] = _facilitiesDataList[4];
  283. _facilitiesDataList.Add(InitialFacilitiesData(N2_2B_PRESSURE));
  284. _facilitiesDataDic[N2_2B_PRESSURE_VALUE] = _facilitiesDataList[5];
  285. _facilitiesDataList.Add(InitialFacilitiesData(DI_WATER_PRESSURE));
  286. _facilitiesDataDic[DI_WATER_PRESSURE_VALUE] = _facilitiesDataList[6];
  287. _facilitiesDataList.Add(InitialFacilitiesData(HOUSE_CHILLED_WATER_FLOW));
  288. _facilitiesDataDic[HOUSE_CHILLED_WATER_FLOW] = _facilitiesDataList[7];
  289. _facilitiesDataList.Add(InitialFacilitiesData(CDA_EXTERNAL_PRESSURE));
  290. _facilitiesDataDic[CDA_EXTERNAL_PRESSURE_VALUE] = _facilitiesDataList[8];
  291. _facilitiesDataList.Add(InitialFacilitiesData(VACUUM_PRESSURE));
  292. _facilitiesDataDic[VACUUM_PRESSURE_VALUE] = _facilitiesDataList[9];
  293. _facilitiesDataList.Add(InitialFacilitiesData(EXHAUST_PRESSURE1));
  294. _facilitiesDataDic[EXHAUST1_PRESSURE_VALUE] = _facilitiesDataList[10];
  295. _facilitiesDataList.Add(InitialFacilitiesData(EXHAUST_PRESSURE2));
  296. _facilitiesDataDic[EXHAUST2_PRESSURE_VALUE] = _facilitiesDataList[11];
  297. _facilitiesDataList.Add(InitialFacilitiesData(DIW_RETRUN_FLOW));
  298. _facilitiesDataDic[DIW_RETRUN_FLOW_VALUE] = _facilitiesDataList[12];
  299. DATA.Subscribe($"{Module}.{Name}.{FACILITIES_DATA}", () => _facilitiesDataList, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  300. DATA.Subscribe($"{Module}.{Name}.{N2_ENABLE}", () => _n2Enabled, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  301. DATA.Subscribe($"{Module}.{Name}.{CDA_ENABLE}", () => _cdaEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  302. DATA.Subscribe($"{Module}.{Name}.{EXTERNAL_CDA_ENABLE}", () => _externalCDAEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  303. DATA.Subscribe($"{Module}.{Name}.{DI_WATER_ENABLE}", () => _diWaterEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  304. DATA.Subscribe($"{Module}.{Name}.{HOUSE_CHILLED_WATER_ENABLE}", () => _houseChilledWaterEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  305. DATA.Subscribe($"{Module}.{Name}.{DI_FILL_ENABLE}", () => _diFillEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  306. DATA.Subscribe($"{Module}.{Name}.{DI_REPLEN_ENABLE}", () => _diReplenEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  307. DATA.Subscribe($"{Module}.{Name}.{SRD_DI_ENABLE}", () => _srdDiEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  308. DATA.Subscribe($"{Module}.{Name}.{FILTER_PURGE_ENABLE}", () => _filterPurgeEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  309. DATA.Subscribe($"{Module}.{Name}.{N2_BLANKET_PRESSURE_VALUE}", () => _n2BlaketPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  310. DATA.Subscribe($"{Module}.{Name}.{N2_OVERFLOW_PRESSURE_VALUE}", () => _n2OverflowPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  311. DATA.Subscribe($"{Module}.{Name}.{CLAMSHELL_CYLINDER_PRESSURE_VALUE}", () => _clamshellCylinderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  312. DATA.Subscribe($"{Module}.{Name}.{TILT_CYLINDER_PRESSURE_VALUE}", () => _tiltCylinderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  313. DATA.Subscribe($"{Module}.{Name}.{SAMPLE_STATION_ENABLE}", () => _sampleEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  314. DATA.Subscribe($"{Module}.{Name}.{FFU_LOADER_ERROR}", () => _ffuLoaderError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  315. DATA.Subscribe($"{Module}.{Name}.{FFU_PROCESS_ERROR}", () => _ffuProcessError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  316. DATA.Subscribe($"{Module}.{Name}.{FFU_LOADER_PRESSURE}", () => _ffuLoaderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  317. DATA.Subscribe($"{Module}.{Name}.{FFU_PROCESS_PRESSURE}", () => _ffuProcessPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  318. DATA.Subscribe($"{Module}.{Name}.{ARS_FLUID_DETECT}", () => _arsFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  319. DATA.Subscribe($"{Module}.{Name}.{PROCESS_FLUID_DETECT}", () => _processFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  320. DATA.Subscribe($"{Module}.{Name}.{SAMPLE_FLUID_DETECT}", () => _sampleFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  321. DATA.Subscribe($"{Module}.{Name}.{CDA_1_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_1_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  322. DATA.Subscribe($"{Module}.{Name}.{CDA_2_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_2_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  323. DATA.Subscribe($"{Module}.{Name}.{N2_1A_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_1A_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  324. DATA.Subscribe($"{Module}.{Name}.{N2_1B_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_1B_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  325. DATA.Subscribe($"{Module}.{Name}.{N2_2A_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_2A_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  326. DATA.Subscribe($"{Module}.{Name}.{N2_2B_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_2B_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  327. DATA.Subscribe($"{Module}.{Name}.{DI_WATER_PRESSURE_VALUE}", () => _facilitiesDataDic[DI_WATER_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  328. DATA.Subscribe($"{Module}.{Name}.{HOUSE_CHILLED_WATER_FLOW}", () => _facilitiesDataDic[HOUSE_CHILLED_WATER_FLOW].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  329. DATA.Subscribe($"{Module}.{Name}.{CDA_EXTERNAL_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_EXTERNAL_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  330. DATA.Subscribe($"{Module}.{Name}.{VACUUM_PRESSURE_VALUE}", () => _facilitiesDataDic[VACUUM_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  331. DATA.Subscribe($"{Module}.{Name}.{EXHAUST1_PRESSURE_VALUE}", () => _facilitiesDataDic[EXHAUST1_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  332. DATA.Subscribe($"{Module}.{Name}.{EXHAUST2_PRESSURE_VALUE}", () => _facilitiesDataDic[EXHAUST2_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  333. DATA.Subscribe($"{Module}.{Name}.{DIW_RETRUN_FLOW_VALUE}", () => _facilitiesDataDic[DIW_RETRUN_FLOW_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  334. }
  335. /// <summary>
  336. /// 初始化Facilities数据对象
  337. /// </summary>
  338. /// <param name="name"></param>
  339. /// <returns></returns>
  340. private CommonLimitData InitialFacilitiesData(string name)
  341. {
  342. CommonLimitData facilitiesData = new CommonLimitData();
  343. facilitiesData.MaxError = SC.GetValue<double>($"{FACILITIES}.{name}.{ERROR_MAX}");
  344. facilitiesData.MinError = SC.GetValue<double>($"{FACILITIES}.{name}.{ERROR_MIN}");
  345. facilitiesData.MaxWarning = SC.GetValue<double>($"{FACILITIES}.{name}.{WARNING_MAX}");
  346. facilitiesData.MinWarning = SC.GetValue<double>($"{FACILITIES}.{name}.{WARNING_MIN}");
  347. return facilitiesData;
  348. }
  349. /// <summary>
  350. /// 订阅变量数值发生变化
  351. /// </summary>
  352. private void SubscribeValueAction()
  353. {
  354. BeckhoffIoSubscribeUpdateVariable(N2_ENABLE);
  355. BeckhoffIoSubscribeUpdateVariable(CDA_ENABLE);
  356. BeckhoffIoSubscribeUpdateVariable(EXTERNAL_CDA_ENABLE);
  357. BeckhoffIoSubscribeUpdateVariable(DI_WATER_ENABLE);
  358. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_ENABLE);
  359. BeckhoffIoSubscribeUpdateVariable(DI_REPLEN_ENABLE);
  360. BeckhoffIoSubscribeUpdateVariable(DI_FILL_ENABLE);
  361. BeckhoffIoSubscribeUpdateVariable(N2_1A_PRESSURE_VALUE);
  362. BeckhoffIoSubscribeUpdateVariable(N2_1B_PRESSURE_VALUE);
  363. BeckhoffIoSubscribeUpdateVariable(N2_2A_PRESSURE_VALUE);
  364. BeckhoffIoSubscribeUpdateVariable(N2_2B_PRESSURE_VALUE);
  365. BeckhoffIoSubscribeUpdateVariable(CDA_1_PRESSURE_VALUE);
  366. BeckhoffIoSubscribeUpdateVariable(CDA_2_PRESSURE_VALUE);
  367. BeckhoffIoSubscribeUpdateVariable(CDA_EXTERNAL_PRESSURE_VALUE);
  368. BeckhoffIoSubscribeUpdateVariable(DI_WATER_PRESSURE_VALUE);
  369. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_FLOW);
  370. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_PRESSURE_VALUE);
  371. BeckhoffIoSubscribeUpdateVariable(EXHAUST1_PRESSURE_VALUE);
  372. BeckhoffIoSubscribeUpdateVariable(EXHAUST2_PRESSURE_VALUE);
  373. BeckhoffIoSubscribeUpdateVariable(DIW_RETRUN_FLOW_VALUE);
  374. BeckhoffIoSubscribeUpdateVariable(VACUUM_PRESSURE_VALUE);
  375. BeckhoffIoSubscribeUpdateVariable(N2_BLANKET_PRESSURE_VALUE);
  376. BeckhoffIoSubscribeUpdateVariable(N2_OVERFLOW_PRESSURE_VALUE);
  377. BeckhoffIoSubscribeUpdateVariable(CLAMSHELL_CYLINDER_PRESSURE_VALUE);
  378. BeckhoffIoSubscribeUpdateVariable(TILT_CYLINDER_PRESSURE_VALUE);
  379. BeckhoffIoSubscribeUpdateVariable(SRD_DI_ENABLE);
  380. BeckhoffIoSubscribeUpdateVariable(SAMPLE_STATION_ENABLE);
  381. BeckhoffIoSubscribeUpdateVariable(FILTER_PURGE_ENABLE);
  382. BeckhoffIoSubscribeUpdateVariable(FFU_LOADER_ERROR);
  383. BeckhoffIoSubscribeUpdateVariable(FFU_PROCESS_ERROR);
  384. BeckhoffIoSubscribeUpdateVariable(FFU_LOADER_PRESSURE);
  385. BeckhoffIoSubscribeUpdateVariable(FFU_PROCESS_PRESSURE);
  386. BeckhoffIoSubscribeUpdateVariable(ARS_FLUID_DETECT);
  387. BeckhoffIoSubscribeUpdateVariable(PROCESS_FLUID_DETECT);
  388. BeckhoffIoSubscribeUpdateVariable(SAMPLE_FLUID_DETECT);
  389. }
  390. /// <summary>
  391. /// 订阅IO变量
  392. /// </summary>
  393. /// <param name="variable"></param>
  394. private void BeckhoffIoSubscribeUpdateVariable(string variable)
  395. {
  396. _variableInitializeDic[variable] = false;
  397. IOModuleManager.Instance.SubscribeModuleVariable(Name, variable, UpdateVariableValue);
  398. }
  399. /// <summary>
  400. /// 初始化操作
  401. /// </summary>
  402. private void InitializeOperation()
  403. {
  404. OP.Subscribe($"{Module}.{Name}.N2Enable", N2EnableOperation);
  405. OP.Subscribe($"{Module}.{Name}.N2Disable", N2DisableOperation);
  406. OP.Subscribe($"{Module}.{Name}.CDAEnable", CDAEnableOperation);
  407. OP.Subscribe($"{Module}.{Name}.CDADisable", CDADisableOperation);
  408. OP.Subscribe($"{Module}.{Name}.ExternalCDAEnable", ExternalCDAEnableOperation);
  409. OP.Subscribe($"{Module}.{Name}.ExternalCDADisable", ExternalCDADisableOperation);
  410. OP.Subscribe($"{Module}.{Name}.DiWaterEnable", DiWaterEnableOperation);
  411. OP.Subscribe($"{Module}.{Name}.DiWaterDisable", DiWaterDisableOperation);
  412. OP.Subscribe($"{Module}.{Name}.HouseChilledWaterEnable", HouseChilledWaterEnableOperation);
  413. OP.Subscribe($"{Module}.{Name}.HouseChilledWaterDisable", HouseChilledWaterDisableOperation);
  414. OP.Subscribe($"{Module}.{Name}.DiFillEnable", DiFillEnableOperation);
  415. OP.Subscribe($"{Module}.{Name}.DiFillDisable", DiFillDisableOperation);
  416. OP.Subscribe($"{Module}.{Name}.DiReplenEnable", DiReplenEnableOperation);
  417. OP.Subscribe($"{Module}.{Name}.DiReplenDisable", DiReplenDisableOperation);
  418. OP.Subscribe($"{Module}.{Name}.SrdDiwEnable", SrdDiEnableOperation);
  419. OP.Subscribe($"{Module}.{Name}.SrdDiwDisable", SrdDiDisableOperation);
  420. OP.Subscribe($"{Module}.{Name}.FilterPurgeEnable", FilterPurgeEnableOperation);
  421. OP.Subscribe($"{Module}.{Name}.FilterPurgeDisable", FilterPurgeDisableOperation);
  422. OP.Subscribe($"{Module}.{Name}.SampleStationEnable", SampleEnableOperation);
  423. OP.Subscribe($"{Module}.{Name}.SampleStationDisable", SampleDisableOperation);
  424. }
  425. /// 更新变量数值
  426. /// </summary>
  427. /// <param name="variable"></param>
  428. /// <param name="value"></param>
  429. private void UpdateVariableValue(string variable, object value)
  430. {
  431. if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
  432. {
  433. _variableInitializeDic[variable] = true;
  434. }
  435. switch (variable)
  436. {
  437. case N2_ENABLE:
  438. _n2Enabled = (bool)value;
  439. break;
  440. case CDA_ENABLE:
  441. _cdaEnable = (bool)value;
  442. break;
  443. case EXTERNAL_CDA_ENABLE:
  444. _externalCDAEnable = (bool)value;
  445. break;
  446. case DI_WATER_ENABLE:
  447. _diWaterEnable = (bool)value;
  448. break;
  449. case HOUSE_CHILLED_WATER_ENABLE:
  450. _houseChilledWaterEnable = (bool)value;
  451. break;
  452. case DI_FILL_ENABLE:
  453. _diFillEnable = (bool)value;
  454. break;
  455. case DI_REPLEN_ENABLE:
  456. _diReplenEnable = (bool)value;
  457. break;
  458. case N2_1A_PRESSURE_VALUE:
  459. case N2_2A_PRESSURE_VALUE:
  460. case N2_1B_PRESSURE_VALUE:
  461. case N2_2B_PRESSURE_VALUE:
  462. case CDA_1_PRESSURE_VALUE:
  463. case CDA_2_PRESSURE_VALUE:
  464. case CDA_EXTERNAL_PRESSURE_VALUE:
  465. case DI_WATER_PRESSURE_VALUE:
  466. case HOUSE_CHILLED_WATER_FLOW:
  467. case EXHAUST1_PRESSURE_VALUE:
  468. case EXHAUST2_PRESSURE_VALUE:
  469. case VACUUM_PRESSURE_VALUE:
  470. case DIW_RETRUN_FLOW_VALUE:
  471. _facilitiesDataDic[variable].Value = (double)value;
  472. break;
  473. case N2_BLANKET_PRESSURE_VALUE:
  474. _n2BlaketPressure = (double)value;
  475. break;
  476. case N2_OVERFLOW_PRESSURE_VALUE:
  477. _n2OverflowPressure = (double)value;
  478. break;
  479. case CLAMSHELL_CYLINDER_PRESSURE_VALUE:
  480. _clamshellCylinderPressure = (double)value;
  481. break;
  482. case TILT_CYLINDER_PRESSURE_VALUE:
  483. _tiltCylinderPressure = (double)value;
  484. break;
  485. case SAMPLE_STATION_ENABLE:
  486. _sampleEnable = (bool)value;
  487. break;
  488. case SRD_DI_ENABLE:
  489. _srdDiEnable = (bool)value;
  490. break;
  491. case FILTER_PURGE_ENABLE:
  492. _filterPurgeEnable = (bool)value;
  493. break;
  494. case FFU_LOADER_ERROR:
  495. _ffuLoaderError = (bool)value;
  496. break;
  497. case FFU_PROCESS_ERROR:
  498. _ffuProcessError = (bool)value;
  499. break;
  500. case FFU_LOADER_PRESSURE:
  501. _ffuLoaderPressure = (double)value;
  502. break;
  503. case FFU_PROCESS_PRESSURE:
  504. _ffuProcessPressure = (double)value;
  505. break;
  506. case ARS_FLUID_DETECT:
  507. _arsFluidDetect = (bool)value;
  508. break;
  509. case SAMPLE_FLUID_DETECT:
  510. _sampleFluidDetect = (bool)value;
  511. if (!_sampleFluidDetect)
  512. {
  513. LOG.WriteLog(eEvent.WARN_Sensor, Module, "SampleFluidDetect is Activate");
  514. if (_sampleEnable) SampleDisableOperation("", null);
  515. if (_filterPurgeEnable) FilterPurgeDisableOperation("", null);
  516. }
  517. break;
  518. case PROCESS_FLUID_DETECT:
  519. _processFluidDetect = (bool)value;
  520. if (!_processFluidDetect)
  521. {
  522. LOG.WriteLog(eEvent.WARN_Sensor, Module, "ProcessFluidDetect is Activate");
  523. AlarmListManager.Instance.AddWarn(Module, "ProcessFluidDetect", $"ProcessFluidDetect is Activate");
  524. }
  525. break;
  526. }
  527. }
  528. /// <summary>
  529. /// 是否所有IO变量初始化完成
  530. /// </summary>
  531. /// <returns></returns>
  532. private bool AllIoVariableInitialized()
  533. {
  534. foreach (string item in _variableInitializeDic.Keys)
  535. {
  536. if (!_variableInitializeDic[item])
  537. {
  538. //LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{item} is not initialized");
  539. return false;
  540. }
  541. }
  542. return true;
  543. }
  544. #region 指令
  545. /// <summary>
  546. /// N2 Enable
  547. /// </summary>
  548. /// <param name="cmd"></param>
  549. /// <param name="param"></param>
  550. /// <returns></returns>
  551. public bool N2EnableOperation(string cmd, object param)
  552. {
  553. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{N2_ENABLE}");
  554. if (!string.IsNullOrEmpty(ioName))
  555. {
  556. IOModuleManager.Instance.WriteIoValue(ioName, true);
  557. }
  558. return true;
  559. }
  560. /// <summary>
  561. /// N2 Disable
  562. /// </summary>
  563. /// <param name="cmd"></param>
  564. /// <param name="param"></param>
  565. /// <returns></returns>
  566. private bool N2DisableOperation(string cmd, object param)
  567. {
  568. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{N2_ENABLE}");
  569. if (!string.IsNullOrEmpty(ioName))
  570. {
  571. IOModuleManager.Instance.WriteIoValue(ioName, false);
  572. }
  573. return true;
  574. }
  575. /// <summary>
  576. /// CDA Enable
  577. /// </summary>
  578. /// <param name="cmd"></param>
  579. /// <param name="param"></param>
  580. /// <returns></returns>
  581. public bool CDAEnableOperation(string cmd, object param)
  582. {
  583. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{CDA_ENABLE}");
  584. if (!string.IsNullOrEmpty(ioName))
  585. {
  586. IOModuleManager.Instance.WriteIoValue(ioName, true);
  587. }
  588. return true;
  589. }
  590. /// <summary>
  591. /// CDA Disable
  592. /// </summary>
  593. /// <param name="cmd"></param>
  594. /// <param name="param"></param>
  595. /// <returns></returns>
  596. private bool CDADisableOperation(string cmd, object param)
  597. {
  598. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{CDA_ENABLE}");
  599. if (!string.IsNullOrEmpty(ioName))
  600. {
  601. IOModuleManager.Instance.WriteIoValue(ioName, false);
  602. }
  603. return true;
  604. }
  605. /// <summary>
  606. /// External CDA Enable
  607. /// </summary>
  608. /// <param name="cmd"></param>
  609. /// <param name="param"></param>
  610. /// <returns></returns>
  611. private bool ExternalCDAEnableOperation(string cmd, object param)
  612. {
  613. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{EXTERNAL_CDA_ENABLE}");
  614. if (!string.IsNullOrEmpty(ioName))
  615. {
  616. IOModuleManager.Instance.WriteIoValue(ioName, true);
  617. }
  618. return true;
  619. }
  620. /// <summary>
  621. /// External CDA Disable
  622. /// </summary>
  623. /// <param name="cmd"></param>
  624. /// <param name="param"></param>
  625. /// <returns></returns>
  626. private bool ExternalCDADisableOperation(string cmd, object param)
  627. {
  628. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{EXTERNAL_CDA_ENABLE}");
  629. if (!string.IsNullOrEmpty(ioName))
  630. {
  631. IOModuleManager.Instance.WriteIoValue(ioName, false);
  632. }
  633. return true;
  634. }
  635. /// <summary>
  636. /// DI Water Enable
  637. /// </summary>
  638. /// <param name="cmd"></param>
  639. /// <param name="param"></param>
  640. /// <returns></returns>
  641. private bool DiWaterEnableOperation(string cmd, object param)
  642. {
  643. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_WATER_ENABLE}");
  644. if (!string.IsNullOrEmpty(ioName))
  645. {
  646. IOModuleManager.Instance.WriteIoValue(ioName, true);
  647. }
  648. return true;
  649. }
  650. /// <summary>
  651. /// DI Water Disable
  652. /// </summary>
  653. /// <param name="cmd"></param>
  654. /// <param name="param"></param>
  655. /// <returns></returns>
  656. private bool DiWaterDisableOperation(string cmd, object param)
  657. {
  658. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_WATER_ENABLE}");
  659. if (!string.IsNullOrEmpty(ioName))
  660. {
  661. IOModuleManager.Instance.WriteIoValue(ioName, false);
  662. }
  663. return true;
  664. }
  665. /// <summary>
  666. /// House Chilled Water Enable
  667. /// </summary>
  668. /// <param name="cmd"></param>
  669. /// <param name="param"></param>
  670. /// <returns></returns>
  671. private bool HouseChilledWaterEnableOperation(string cmd, object param)
  672. {
  673. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{HOUSE_CHILLED_WATER_ENABLE}");
  674. if (!string.IsNullOrEmpty(ioName))
  675. {
  676. IOModuleManager.Instance.WriteIoValue(ioName, true);
  677. }
  678. return true;
  679. }
  680. /// <summary>
  681. /// House Chilled Water Disable
  682. /// </summary>
  683. /// <param name="cmd"></param>
  684. /// <param name="param"></param>
  685. /// <returns></returns>
  686. private bool HouseChilledWaterDisableOperation(string cmd, object param)
  687. {
  688. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{HOUSE_CHILLED_WATER_ENABLE}");
  689. if (!string.IsNullOrEmpty(ioName))
  690. {
  691. IOModuleManager.Instance.WriteIoValue(ioName, false);
  692. }
  693. return true;
  694. }
  695. /// <summary>
  696. /// DI Fill Enable
  697. /// </summary>
  698. /// <param name="cmd"></param>
  699. /// <param name="param"></param>
  700. /// <returns></returns>
  701. private bool DiFillEnableOperation(string cmd, object param)
  702. {
  703. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_FILL_ENABLE}");
  704. if (!string.IsNullOrEmpty(ioName))
  705. {
  706. IOModuleManager.Instance.WriteIoValue(ioName, true);
  707. }
  708. return true;
  709. }
  710. /// <summary>
  711. /// Di Fill Disable
  712. /// </summary>
  713. /// <param name="cmd"></param>
  714. /// <param name="param"></param>
  715. /// <returns></returns>
  716. public bool DiFillDisableOperation(string cmd, object param)
  717. {
  718. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_FILL_ENABLE}");
  719. if (!string.IsNullOrEmpty(ioName))
  720. {
  721. IOModuleManager.Instance.WriteIoValue(ioName, false);
  722. }
  723. return true;
  724. }
  725. /// <summary>
  726. /// DI Replen Enable
  727. /// </summary>
  728. /// <param name="cmd"></param>
  729. /// <param name="param"></param>
  730. /// <returns></returns>
  731. private bool DiReplenEnableOperation(string cmd, object param)
  732. {
  733. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_REPLEN_ENABLE}");
  734. if (!string.IsNullOrEmpty(ioName))
  735. {
  736. IOModuleManager.Instance.WriteIoValue(ioName, true);
  737. }
  738. return true;
  739. }
  740. /// <summary>
  741. /// DI Replen Disable
  742. /// </summary>
  743. /// <param name="cmd"></param>
  744. /// <param name="param"></param>
  745. /// <returns></returns>
  746. public bool DiReplenDisableOperation(string cmd, object param)
  747. {
  748. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_REPLEN_ENABLE}");
  749. if (!string.IsNullOrEmpty(ioName))
  750. {
  751. IOModuleManager.Instance.WriteIoValue(ioName, false);
  752. }
  753. return true;
  754. }
  755. /// <summary>
  756. /// srd DI Enable
  757. /// </summary>
  758. /// <param name="cmd"></param>
  759. /// <param name="param"></param>
  760. /// <returns></returns>
  761. private bool SrdDiEnableOperation(string cmd, object param)
  762. {
  763. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SRD_DI_ENABLE}");
  764. if (!string.IsNullOrEmpty(ioName))
  765. {
  766. IOModuleManager.Instance.WriteIoValue(ioName, true);
  767. }
  768. return true;
  769. }
  770. /// <summary>
  771. /// Loader DI Disable
  772. /// </summary>
  773. /// <param name="cmd"></param>
  774. /// <param name="param"></param>
  775. /// <returns></returns>
  776. private bool SrdDiDisableOperation(string cmd, object param)
  777. {
  778. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SRD_DI_ENABLE}");
  779. if (!string.IsNullOrEmpty(ioName))
  780. {
  781. IOModuleManager.Instance.WriteIoValue(ioName, false);
  782. }
  783. return true;
  784. }
  785. /// <summary>
  786. /// Filter Purge Enable
  787. /// </summary>
  788. /// <param name="cmd"></param>
  789. /// <param name="param"></param>
  790. /// <returns></returns>
  791. private bool FilterPurgeEnableOperation(string cmd, object param)
  792. {
  793. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{FILTER_PURGE_ENABLE}");
  794. if (!string.IsNullOrEmpty(ioName))
  795. {
  796. IOModuleManager.Instance.WriteIoValue(ioName, true);
  797. }
  798. return true;
  799. }
  800. /// <summary>
  801. /// Filter Purge Disable
  802. /// </summary>
  803. /// <param name="cmd"></param>
  804. /// <param name="param"></param>
  805. /// <returns></returns>
  806. private bool FilterPurgeDisableOperation(string cmd, object param)
  807. {
  808. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{FILTER_PURGE_ENABLE}");
  809. if (!string.IsNullOrEmpty(ioName))
  810. {
  811. IOModuleManager.Instance.WriteIoValue(ioName, false);
  812. }
  813. return true;
  814. }
  815. /// <summary>
  816. /// Sample Enable
  817. /// </summary>
  818. /// <param name="cmd"></param>
  819. /// <param name="param"></param>
  820. /// <returns></returns>
  821. private bool SampleEnableOperation(string cmd, object param)
  822. {
  823. _isSammpleing = true;
  824. _sampleStartime = DateTime.Now;
  825. SampeOperation(true);
  826. return true;
  827. }
  828. /// <summary>
  829. /// Sample Disable
  830. /// </summary>
  831. /// <param name="cmd"></param>
  832. /// <param name="param"></param>
  833. /// <returns></returns>
  834. public bool SampleDisableOperation(string cmd, object param)
  835. {
  836. _isSammpleing = false;
  837. SampeOperation(false);
  838. return true;
  839. }
  840. /// <summary>
  841. /// Sample操作
  842. /// </summary>
  843. /// <param name="enable"></param>
  844. private void SampeOperation(bool enable)
  845. {
  846. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SAMPLE_STATION_ENABLE}");
  847. if (!string.IsNullOrEmpty(ioName))
  848. {
  849. IOModuleManager.Instance.WriteIoValue(ioName, enable);
  850. }
  851. }
  852. #endregion
  853. /// <summary>
  854. /// 检验Exhaust
  855. /// </summary>
  856. /// <returns></returns>
  857. public (bool result, string reason) CheckExhaustResult()
  858. {
  859. return CheckPressureData(EXHAUST1_PRESSURE_VALUE);
  860. }
  861. /// <summary>
  862. /// 检验冷却水
  863. /// </summary>
  864. /// <returns></returns>
  865. public (bool result, string reason) CheckHouseChilledWaterResult()
  866. {
  867. return CheckPressureData(HOUSE_CHILLED_WATER_FLOW);
  868. }
  869. /// <summary>
  870. /// 检验CDA
  871. /// </summary>
  872. /// <returns></returns>
  873. public (bool result, string reason) CheckCDA()
  874. {
  875. if (!CDAEnable)
  876. {
  877. return (false, "CDA is disable");
  878. }
  879. else
  880. {
  881. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  882. if (!cda1Result.result)
  883. {
  884. return cda1Result;
  885. }
  886. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  887. if (!cda2Result.result)
  888. {
  889. return cda2Result;
  890. }
  891. }
  892. return (true, "");
  893. }
  894. /// <summary>
  895. /// 检验CDA和N2
  896. /// </summary>
  897. /// <returns></returns>
  898. public (bool result, string reason) CheckCDAN2()
  899. {
  900. if (!CDAEnable)
  901. {
  902. return (false, "CDA is disable");
  903. }
  904. else
  905. {
  906. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  907. if (!cda1Result.result)
  908. {
  909. return cda1Result;
  910. }
  911. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  912. if (!cda2Result.result)
  913. {
  914. return cda2Result;
  915. }
  916. }
  917. if (!N2Enable)
  918. {
  919. return (false, "N2 is disable");
  920. }
  921. else
  922. {
  923. var n21AResult = CheckPressureData(N2_1A_PRESSURE_VALUE);
  924. if (!n21AResult.result)
  925. {
  926. return n21AResult;
  927. }
  928. var n21BResult = CheckPressureData(N2_1B_PRESSURE_VALUE);
  929. if (!n21BResult.result)
  930. {
  931. return n21BResult;
  932. }
  933. var n22AResult = CheckPressureData(N2_2A_PRESSURE_VALUE);
  934. if (!n22AResult.result)
  935. {
  936. return n22AResult;
  937. }
  938. var n22BResult = CheckPressureData(N2_2B_PRESSURE_VALUE);
  939. if (!n22BResult.result)
  940. {
  941. return n22BResult;
  942. }
  943. }
  944. return (true, "");
  945. }
  946. /// <summary>
  947. /// 检验CDA N2以及Vacuum状态
  948. /// </summary>
  949. /// <returns></returns>
  950. public (bool result, string reason) CheckCDAN2AndVacuum()
  951. {
  952. if (!CDAEnable)
  953. {
  954. return (false, "CDA is disable");
  955. }
  956. else
  957. {
  958. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  959. if (!cda1Result.result)
  960. {
  961. return cda1Result;
  962. }
  963. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  964. if (!cda2Result.result)
  965. {
  966. return cda2Result;
  967. }
  968. }
  969. if (!N2Enable)
  970. {
  971. return (false, "N2 is disable");
  972. }
  973. else
  974. {
  975. var n21AResult = CheckPressureData(N2_1A_PRESSURE_VALUE);
  976. if (!n21AResult.result)
  977. {
  978. return n21AResult;
  979. }
  980. var n21BResult = CheckPressureData(N2_1B_PRESSURE_VALUE);
  981. if (!n21BResult.result)
  982. {
  983. return n21BResult;
  984. }
  985. var n22AResult = CheckPressureData(N2_2A_PRESSURE_VALUE);
  986. if (!n22AResult.result)
  987. {
  988. return n22AResult;
  989. }
  990. var n22BResult = CheckPressureData(N2_2B_PRESSURE_VALUE);
  991. if (!n22BResult.result)
  992. {
  993. return n22BResult;
  994. }
  995. var vacuumResult = CheckPressureData(VACUUM_PRESSURE_VALUE);
  996. if (!vacuumResult.result)
  997. {
  998. return vacuumResult;
  999. }
  1000. }
  1001. return (true, "");
  1002. }
  1003. /// <summary>
  1004. /// 检验压力
  1005. /// </summary>
  1006. /// <param name="pressureName"></param>
  1007. /// <returns></returns>
  1008. private (bool result, string reason) CheckPressureData(string pressureName)
  1009. {
  1010. if (_facilitiesDataDic.ContainsKey(pressureName))
  1011. {
  1012. CommonLimitData facilitiesData = _facilitiesDataDic[(pressureName)];
  1013. if (facilitiesData.IsError)
  1014. {
  1015. return (false, $"{pressureName} data {facilitiesData.Value} is error value");
  1016. }
  1017. else if (facilitiesData.IsWarning)
  1018. {
  1019. return (true, $"{pressureName} data {facilitiesData.Value} is warning");
  1020. }
  1021. else
  1022. {
  1023. return (true, "");
  1024. }
  1025. }
  1026. else
  1027. {
  1028. return (false, $"{pressureName} not in dictionary");
  1029. }
  1030. }
  1031. /// <summary>
  1032. /// 获取Common Limit 数据
  1033. /// </summary>
  1034. /// <param name="name"></param>
  1035. /// <returns></returns>
  1036. public CommonLimitData GetCommonLimitDataByName(string name)
  1037. {
  1038. return _facilitiesDataDic.ContainsKey(name) ? _facilitiesDataDic[name] : null;
  1039. }
  1040. #region IDevice接口
  1041. public void Monitor()
  1042. {
  1043. }
  1044. public void Reset()
  1045. {
  1046. }
  1047. public void Terminate()
  1048. {
  1049. }
  1050. #endregion
  1051. }
  1052. }