SystemFacilities.cs 46 KB

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