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