SystemFacilities.cs 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086
  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. /// <summary>
  234. /// 范围数据字典
  235. /// </summary>
  236. public Dictionary<string, CommonLimitData> FacilitiesDataDic { get { return _facilitiesDataDic; } }
  237. #endregion
  238. /// <summary>
  239. /// 构造函数
  240. /// </summary>
  241. public SystemFacilities() : base("System", FACILITIES, FACILITIES, FACILITIES)
  242. {
  243. }
  244. /// <summary>
  245. /// 定时器
  246. /// </summary>
  247. /// <returns></returns>
  248. private bool OnTimer()
  249. {
  250. //if (_isSammpleing)
  251. //{
  252. // int sampleAutoDisableTime = SC.GetValue<int>("Facilities.SampleAutoDisableTime");
  253. // if ((DateTime.Now - _sampleStartime).TotalSeconds >= sampleAutoDisableTime)
  254. // {
  255. // SampleDisableOperation("", null);
  256. // }
  257. //}
  258. return true;
  259. }
  260. /// <summary>
  261. /// 初始化
  262. /// </summary>
  263. /// <returns></returns>
  264. public bool Initialize()
  265. {
  266. InitialData();
  267. SubscribeValueAction();
  268. InitializeOperation();
  269. //_periodicJob = new PeriodicJob(200, OnTimer, $"{Module}.OnTimer", true);
  270. return true;
  271. }
  272. /// <summary>
  273. /// 初始化数据
  274. /// </summary>
  275. private void InitialData()
  276. {
  277. _facilitiesDataList.Add(InitialFacilitiesData(CDA_1_PRESSURE));
  278. _facilitiesDataDic[CDA_1_PRESSURE_VALUE] = _facilitiesDataList[0];
  279. _facilitiesDataList.Add(InitialFacilitiesData(CDA_2_PRESSURE));
  280. _facilitiesDataDic[CDA_2_PRESSURE_VALUE] = _facilitiesDataList[1];
  281. _facilitiesDataList.Add(InitialFacilitiesData(N2_1A_PRESSURE));
  282. _facilitiesDataDic[N2_1A_PRESSURE_VALUE] = _facilitiesDataList[2];
  283. _facilitiesDataList.Add(InitialFacilitiesData(N2_1B_PRESSURE));
  284. _facilitiesDataDic[N2_1B_PRESSURE_VALUE] = _facilitiesDataList[3];
  285. _facilitiesDataList.Add(InitialFacilitiesData(N2_2A_PRESSURE));
  286. _facilitiesDataDic[N2_2A_PRESSURE_VALUE] = _facilitiesDataList[4];
  287. _facilitiesDataList.Add(InitialFacilitiesData(N2_2B_PRESSURE));
  288. _facilitiesDataDic[N2_2B_PRESSURE_VALUE] = _facilitiesDataList[5];
  289. _facilitiesDataList.Add(InitialFacilitiesData(DI_WATER_PRESSURE));
  290. _facilitiesDataDic[DI_WATER_PRESSURE_VALUE] = _facilitiesDataList[6];
  291. _facilitiesDataList.Add(InitialFacilitiesData(HOUSE_CHILLED_WATER_FLOW));
  292. _facilitiesDataDic[HOUSE_CHILLED_WATER_FLOW] = _facilitiesDataList[7];
  293. _facilitiesDataList.Add(InitialFacilitiesData(CDA_EXTERNAL_PRESSURE));
  294. _facilitiesDataDic[CDA_EXTERNAL_PRESSURE_VALUE] = _facilitiesDataList[8];
  295. _facilitiesDataList.Add(InitialFacilitiesData(VACUUM_PRESSURE));
  296. _facilitiesDataDic[VACUUM_PRESSURE_VALUE] = _facilitiesDataList[9];
  297. _facilitiesDataList.Add(InitialFacilitiesData(EXHAUST_PRESSURE1));
  298. _facilitiesDataDic[EXHAUST1_PRESSURE_VALUE] = _facilitiesDataList[10];
  299. _facilitiesDataList.Add(InitialFacilitiesData(EXHAUST_PRESSURE2));
  300. _facilitiesDataDic[EXHAUST2_PRESSURE_VALUE] = _facilitiesDataList[11];
  301. _facilitiesDataList.Add(InitialFacilitiesData(DIW_RETRUN_FLOW));
  302. _facilitiesDataDic[DIW_RETRUN_FLOW_VALUE] = _facilitiesDataList[12];
  303. DATA.Subscribe($"{Module}.{Name}.{FACILITIES_DATA}", () => _facilitiesDataList, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  304. DATA.Subscribe($"{Module}.{Name}.{N2_ENABLE}", () => _n2Enabled, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  305. DATA.Subscribe($"{Module}.{Name}.{CDA_ENABLE}", () => _cdaEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  306. DATA.Subscribe($"{Module}.{Name}.{EXTERNAL_CDA_ENABLE}", () => _externalCDAEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  307. DATA.Subscribe($"{Module}.{Name}.{DI_WATER_ENABLE}", () => _diWaterEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  308. DATA.Subscribe($"{Module}.{Name}.{HOUSE_CHILLED_WATER_ENABLE}", () => _houseChilledWaterEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  309. DATA.Subscribe($"{Module}.{Name}.{DI_FILL_ENABLE}", () => _diFillEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  310. DATA.Subscribe($"{Module}.{Name}.{DI_REPLEN_ENABLE}", () => _diReplenEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  311. DATA.Subscribe($"{Module}.{Name}.{SRD_DI_ENABLE}", () => _srdDiEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  312. DATA.Subscribe($"{Module}.{Name}.{FILTER_PURGE_ENABLE}", () => _filterPurgeEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  313. DATA.Subscribe($"{Module}.{Name}.{N2_BLANKET_PRESSURE_VALUE}", () => _n2BlaketPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  314. DATA.Subscribe($"{Module}.{Name}.{N2_OVERFLOW_PRESSURE_VALUE}", () => _n2OverflowPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  315. DATA.Subscribe($"{Module}.{Name}.{CLAMSHELL_CYLINDER_PRESSURE_VALUE}", () => _clamshellCylinderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  316. DATA.Subscribe($"{Module}.{Name}.{TILT_CYLINDER_PRESSURE_VALUE}", () => _tiltCylinderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  317. DATA.Subscribe($"{Module}.{Name}.{SAMPLE_STATION_ENABLE}", () => _sampleEnable, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  318. DATA.Subscribe($"{Module}.{Name}.{FFU_LOADER_ERROR}", () => _ffuLoaderError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  319. DATA.Subscribe($"{Module}.{Name}.{FFU_PROCESS_ERROR}", () => _ffuProcessError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  320. DATA.Subscribe($"{Module}.{Name}.{FFU_LOADER_PRESSURE}", () => _ffuLoaderPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  321. DATA.Subscribe($"{Module}.{Name}.{FFU_PROCESS_PRESSURE}", () => _ffuProcessPressure, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  322. DATA.Subscribe($"{Module}.{Name}.{ARS_FLUID_DETECT}", () => _arsFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  323. DATA.Subscribe($"{Module}.{Name}.{PROCESS_FLUID_DETECT}", () => _processFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  324. DATA.Subscribe($"{Module}.{Name}.{SAMPLE_FLUID_DETECT}", () => _sampleFluidDetect, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  325. DATA.Subscribe($"{Module}.{Name}.{CDA_1_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_1_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  326. DATA.Subscribe($"{Module}.{Name}.{CDA_2_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_2_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  327. DATA.Subscribe($"{Module}.{Name}.{N2_1A_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_1A_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  328. DATA.Subscribe($"{Module}.{Name}.{N2_1B_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_1B_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  329. DATA.Subscribe($"{Module}.{Name}.{N2_2A_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_2A_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  330. DATA.Subscribe($"{Module}.{Name}.{N2_2B_PRESSURE_VALUE}", () => _facilitiesDataDic[N2_2B_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  331. DATA.Subscribe($"{Module}.{Name}.{DI_WATER_PRESSURE_VALUE}", () => _facilitiesDataDic[DI_WATER_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  332. DATA.Subscribe($"{Module}.{Name}.{HOUSE_CHILLED_WATER_FLOW}", () => _facilitiesDataDic[HOUSE_CHILLED_WATER_FLOW].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  333. DATA.Subscribe($"{Module}.{Name}.{CDA_EXTERNAL_PRESSURE_VALUE}", () => _facilitiesDataDic[CDA_EXTERNAL_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  334. DATA.Subscribe($"{Module}.{Name}.{VACUUM_PRESSURE_VALUE}", () => _facilitiesDataDic[VACUUM_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  335. DATA.Subscribe($"{Module}.{Name}.{EXHAUST1_PRESSURE_VALUE}", () => _facilitiesDataDic[EXHAUST1_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  336. DATA.Subscribe($"{Module}.{Name}.{EXHAUST2_PRESSURE_VALUE}", () => _facilitiesDataDic[EXHAUST2_PRESSURE_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  337. DATA.Subscribe($"{Module}.{Name}.{DIW_RETRUN_FLOW_VALUE}", () => _facilitiesDataDic[DIW_RETRUN_FLOW_VALUE].Value, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  338. }
  339. /// <summary>
  340. /// 初始化Facilities数据对象
  341. /// </summary>
  342. /// <param name="name"></param>
  343. /// <returns></returns>
  344. private CommonLimitData InitialFacilitiesData(string name)
  345. {
  346. CommonLimitData facilitiesData = new CommonLimitData();
  347. facilitiesData.MaxError = SC.GetValue<double>($"{FACILITIES}.{name}.{ERROR_MAX}");
  348. facilitiesData.MinError = SC.GetValue<double>($"{FACILITIES}.{name}.{ERROR_MIN}");
  349. facilitiesData.MaxWarning = SC.GetValue<double>($"{FACILITIES}.{name}.{WARNING_MAX}");
  350. facilitiesData.MinWarning = SC.GetValue<double>($"{FACILITIES}.{name}.{WARNING_MIN}");
  351. return facilitiesData;
  352. }
  353. /// <summary>
  354. /// 订阅变量数值发生变化
  355. /// </summary>
  356. private void SubscribeValueAction()
  357. {
  358. BeckhoffIoSubscribeUpdateVariable(N2_ENABLE);
  359. BeckhoffIoSubscribeUpdateVariable(CDA_ENABLE);
  360. BeckhoffIoSubscribeUpdateVariable(EXTERNAL_CDA_ENABLE);
  361. BeckhoffIoSubscribeUpdateVariable(DI_WATER_ENABLE);
  362. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_ENABLE);
  363. BeckhoffIoSubscribeUpdateVariable(DI_REPLEN_ENABLE);
  364. BeckhoffIoSubscribeUpdateVariable(DI_FILL_ENABLE);
  365. BeckhoffIoSubscribeUpdateVariable(N2_1A_PRESSURE_VALUE);
  366. BeckhoffIoSubscribeUpdateVariable(N2_1B_PRESSURE_VALUE);
  367. BeckhoffIoSubscribeUpdateVariable(N2_2A_PRESSURE_VALUE);
  368. BeckhoffIoSubscribeUpdateVariable(N2_2B_PRESSURE_VALUE);
  369. BeckhoffIoSubscribeUpdateVariable(CDA_1_PRESSURE_VALUE);
  370. BeckhoffIoSubscribeUpdateVariable(CDA_2_PRESSURE_VALUE);
  371. BeckhoffIoSubscribeUpdateVariable(CDA_EXTERNAL_PRESSURE_VALUE);
  372. BeckhoffIoSubscribeUpdateVariable(DI_WATER_PRESSURE_VALUE);
  373. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_FLOW);
  374. BeckhoffIoSubscribeUpdateVariable(HOUSE_CHILLED_WATER_PRESSURE_VALUE);
  375. BeckhoffIoSubscribeUpdateVariable(EXHAUST1_PRESSURE_VALUE);
  376. BeckhoffIoSubscribeUpdateVariable(EXHAUST2_PRESSURE_VALUE);
  377. BeckhoffIoSubscribeUpdateVariable(DIW_RETRUN_FLOW_VALUE);
  378. BeckhoffIoSubscribeUpdateVariable(VACUUM_PRESSURE_VALUE);
  379. BeckhoffIoSubscribeUpdateVariable(N2_BLANKET_PRESSURE_VALUE);
  380. BeckhoffIoSubscribeUpdateVariable(N2_OVERFLOW_PRESSURE_VALUE);
  381. BeckhoffIoSubscribeUpdateVariable(CLAMSHELL_CYLINDER_PRESSURE_VALUE);
  382. BeckhoffIoSubscribeUpdateVariable(TILT_CYLINDER_PRESSURE_VALUE);
  383. BeckhoffIoSubscribeUpdateVariable(SRD_DI_ENABLE);
  384. BeckhoffIoSubscribeUpdateVariable(SAMPLE_STATION_ENABLE);
  385. BeckhoffIoSubscribeUpdateVariable(FILTER_PURGE_ENABLE);
  386. BeckhoffIoSubscribeUpdateVariable(FFU_LOADER_ERROR);
  387. BeckhoffIoSubscribeUpdateVariable(FFU_PROCESS_ERROR);
  388. BeckhoffIoSubscribeUpdateVariable(FFU_LOADER_PRESSURE);
  389. BeckhoffIoSubscribeUpdateVariable(FFU_PROCESS_PRESSURE);
  390. BeckhoffIoSubscribeUpdateVariable(ARS_FLUID_DETECT);
  391. BeckhoffIoSubscribeUpdateVariable(PROCESS_FLUID_DETECT);
  392. BeckhoffIoSubscribeUpdateVariable(SAMPLE_FLUID_DETECT);
  393. }
  394. /// <summary>
  395. /// 订阅IO变量
  396. /// </summary>
  397. /// <param name="variable"></param>
  398. private void BeckhoffIoSubscribeUpdateVariable(string variable)
  399. {
  400. _variableInitializeDic[variable] = false;
  401. IOModuleManager.Instance.SubscribeModuleVariable(Name, variable, UpdateVariableValue);
  402. }
  403. /// <summary>
  404. /// 初始化操作
  405. /// </summary>
  406. private void InitializeOperation()
  407. {
  408. OP.Subscribe($"{Module}.{Name}.N2Enable", N2EnableOperation);
  409. OP.Subscribe($"{Module}.{Name}.N2Disable", N2DisableOperation);
  410. OP.Subscribe($"{Module}.{Name}.CDAEnable", CDAEnableOperation);
  411. OP.Subscribe($"{Module}.{Name}.CDADisable", CDADisableOperation);
  412. OP.Subscribe($"{Module}.{Name}.ExternalCDAEnable", ExternalCDAEnableOperation);
  413. OP.Subscribe($"{Module}.{Name}.ExternalCDADisable", ExternalCDADisableOperation);
  414. OP.Subscribe($"{Module}.{Name}.DiWaterEnable", DiWaterEnableOperation);
  415. OP.Subscribe($"{Module}.{Name}.DiWaterDisable", DiWaterDisableOperation);
  416. OP.Subscribe($"{Module}.{Name}.HouseChilledWaterEnable", HouseChilledWaterEnableOperation);
  417. OP.Subscribe($"{Module}.{Name}.HouseChilledWaterDisable", HouseChilledWaterDisableOperation);
  418. OP.Subscribe($"{Module}.{Name}.DiFillEnable", DiFillEnableOperation);
  419. OP.Subscribe($"{Module}.{Name}.DiFillDisable", DiFillDisableOperation);
  420. OP.Subscribe($"{Module}.{Name}.DiReplenEnable", DiReplenEnableOperation);
  421. OP.Subscribe($"{Module}.{Name}.DiReplenDisable", DiReplenDisableOperation);
  422. OP.Subscribe($"{Module}.{Name}.SrdDiwEnable", SrdDiEnableOperation);
  423. OP.Subscribe($"{Module}.{Name}.SrdDiwDisable", SrdDiDisableOperation);
  424. OP.Subscribe($"{Module}.{Name}.FilterPurgeEnable", FilterPurgeEnableOperation);
  425. OP.Subscribe($"{Module}.{Name}.FilterPurgeDisable", FilterPurgeDisableOperation);
  426. OP.Subscribe($"{Module}.{Name}.SampleStationEnable", SampleEnableOperation);
  427. OP.Subscribe($"{Module}.{Name}.SampleStationDisable", SampleDisableOperation);
  428. }
  429. /// 更新变量数值
  430. /// </summary>
  431. /// <param name="variable"></param>
  432. /// <param name="value"></param>
  433. private void UpdateVariableValue(string variable, object value)
  434. {
  435. if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
  436. {
  437. _variableInitializeDic[variable] = true;
  438. }
  439. switch (variable)
  440. {
  441. case N2_ENABLE:
  442. _n2Enabled = (bool)value;
  443. break;
  444. case CDA_ENABLE:
  445. _cdaEnable = (bool)value;
  446. break;
  447. case EXTERNAL_CDA_ENABLE:
  448. _externalCDAEnable = (bool)value;
  449. break;
  450. case DI_WATER_ENABLE:
  451. _diWaterEnable = (bool)value;
  452. break;
  453. case HOUSE_CHILLED_WATER_ENABLE:
  454. _houseChilledWaterEnable = (bool)value;
  455. break;
  456. case DI_FILL_ENABLE:
  457. _diFillEnable = (bool)value;
  458. break;
  459. case DI_REPLEN_ENABLE:
  460. _diReplenEnable = (bool)value;
  461. break;
  462. case N2_1A_PRESSURE_VALUE:
  463. case N2_2A_PRESSURE_VALUE:
  464. case N2_1B_PRESSURE_VALUE:
  465. case N2_2B_PRESSURE_VALUE:
  466. case CDA_1_PRESSURE_VALUE:
  467. case CDA_2_PRESSURE_VALUE:
  468. case CDA_EXTERNAL_PRESSURE_VALUE:
  469. case DI_WATER_PRESSURE_VALUE:
  470. case HOUSE_CHILLED_WATER_FLOW:
  471. case EXHAUST1_PRESSURE_VALUE:
  472. case EXHAUST2_PRESSURE_VALUE:
  473. case VACUUM_PRESSURE_VALUE:
  474. case DIW_RETRUN_FLOW_VALUE:
  475. _facilitiesDataDic[variable].Value = (double)value;
  476. break;
  477. case N2_BLANKET_PRESSURE_VALUE:
  478. _n2BlaketPressure = (double)value;
  479. break;
  480. case N2_OVERFLOW_PRESSURE_VALUE:
  481. _n2OverflowPressure = (double)value;
  482. break;
  483. case CLAMSHELL_CYLINDER_PRESSURE_VALUE:
  484. _clamshellCylinderPressure = (double)value;
  485. break;
  486. case TILT_CYLINDER_PRESSURE_VALUE:
  487. _tiltCylinderPressure = (double)value;
  488. break;
  489. case SAMPLE_STATION_ENABLE:
  490. _sampleEnable = (bool)value;
  491. break;
  492. case SRD_DI_ENABLE:
  493. _srdDiEnable = (bool)value;
  494. break;
  495. case FILTER_PURGE_ENABLE:
  496. _filterPurgeEnable = (bool)value;
  497. break;
  498. case FFU_LOADER_ERROR:
  499. _ffuLoaderError = (bool)value;
  500. break;
  501. case FFU_PROCESS_ERROR:
  502. _ffuProcessError = (bool)value;
  503. break;
  504. case FFU_LOADER_PRESSURE:
  505. _ffuLoaderPressure = (double)value;
  506. break;
  507. case FFU_PROCESS_PRESSURE:
  508. _ffuProcessPressure = (double)value;
  509. break;
  510. case ARS_FLUID_DETECT:
  511. _arsFluidDetect = (bool)value;
  512. break;
  513. case SAMPLE_FLUID_DETECT:
  514. _sampleFluidDetect = (bool)value;
  515. if (!_sampleFluidDetect)
  516. {
  517. LOG.WriteLog(eEvent.WARN_Sensor, Module, "SampleFluidDetect is Activate");
  518. if (_sampleEnable) SampleDisableOperation("", null);
  519. if (_filterPurgeEnable) FilterPurgeDisableOperation("", null);
  520. }
  521. break;
  522. case PROCESS_FLUID_DETECT:
  523. _processFluidDetect = (bool)value;
  524. if (!_processFluidDetect)
  525. {
  526. LOG.WriteLog(eEvent.WARN_Sensor, Module, "ProcessFluidDetect is Activate");
  527. AlarmListManager.Instance.AddWarn(Module, "ProcessFluidDetect", $"ProcessFluidDetect is Activate");
  528. }
  529. break;
  530. }
  531. }
  532. /// <summary>
  533. /// 是否所有IO变量初始化完成
  534. /// </summary>
  535. /// <returns></returns>
  536. private bool AllIoVariableInitialized()
  537. {
  538. foreach (string item in _variableInitializeDic.Keys)
  539. {
  540. if (!_variableInitializeDic[item])
  541. {
  542. //LOG.WriteLog(eEvent.ERR_DRYER, Module, $"{item} is not initialized");
  543. return false;
  544. }
  545. }
  546. return true;
  547. }
  548. #region 指令
  549. /// <summary>
  550. /// N2 Enable
  551. /// </summary>
  552. /// <param name="cmd"></param>
  553. /// <param name="param"></param>
  554. /// <returns></returns>
  555. public bool N2EnableOperation(string cmd, object param)
  556. {
  557. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{N2_ENABLE}");
  558. if (!string.IsNullOrEmpty(ioName))
  559. {
  560. IOModuleManager.Instance.WriteIoValue(ioName, true);
  561. }
  562. return true;
  563. }
  564. /// <summary>
  565. /// N2 Disable
  566. /// </summary>
  567. /// <param name="cmd"></param>
  568. /// <param name="param"></param>
  569. /// <returns></returns>
  570. private bool N2DisableOperation(string cmd, object param)
  571. {
  572. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{N2_ENABLE}");
  573. if (!string.IsNullOrEmpty(ioName))
  574. {
  575. IOModuleManager.Instance.WriteIoValue(ioName, false);
  576. }
  577. return true;
  578. }
  579. /// <summary>
  580. /// CDA Enable
  581. /// </summary>
  582. /// <param name="cmd"></param>
  583. /// <param name="param"></param>
  584. /// <returns></returns>
  585. public bool CDAEnableOperation(string cmd, object param)
  586. {
  587. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{CDA_ENABLE}");
  588. if (!string.IsNullOrEmpty(ioName))
  589. {
  590. IOModuleManager.Instance.WriteIoValue(ioName, true);
  591. }
  592. return true;
  593. }
  594. /// <summary>
  595. /// CDA Disable
  596. /// </summary>
  597. /// <param name="cmd"></param>
  598. /// <param name="param"></param>
  599. /// <returns></returns>
  600. private bool CDADisableOperation(string cmd, object param)
  601. {
  602. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{CDA_ENABLE}");
  603. if (!string.IsNullOrEmpty(ioName))
  604. {
  605. IOModuleManager.Instance.WriteIoValue(ioName, false);
  606. }
  607. return true;
  608. }
  609. /// <summary>
  610. /// External CDA Enable
  611. /// </summary>
  612. /// <param name="cmd"></param>
  613. /// <param name="param"></param>
  614. /// <returns></returns>
  615. private bool ExternalCDAEnableOperation(string cmd, object param)
  616. {
  617. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{EXTERNAL_CDA_ENABLE}");
  618. if (!string.IsNullOrEmpty(ioName))
  619. {
  620. IOModuleManager.Instance.WriteIoValue(ioName, true);
  621. }
  622. return true;
  623. }
  624. /// <summary>
  625. /// External CDA Disable
  626. /// </summary>
  627. /// <param name="cmd"></param>
  628. /// <param name="param"></param>
  629. /// <returns></returns>
  630. private bool ExternalCDADisableOperation(string cmd, object param)
  631. {
  632. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{EXTERNAL_CDA_ENABLE}");
  633. if (!string.IsNullOrEmpty(ioName))
  634. {
  635. IOModuleManager.Instance.WriteIoValue(ioName, false);
  636. }
  637. return true;
  638. }
  639. /// <summary>
  640. /// DI Water Enable
  641. /// </summary>
  642. /// <param name="cmd"></param>
  643. /// <param name="param"></param>
  644. /// <returns></returns>
  645. private bool DiWaterEnableOperation(string cmd, object param)
  646. {
  647. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_WATER_ENABLE}");
  648. if (!string.IsNullOrEmpty(ioName))
  649. {
  650. IOModuleManager.Instance.WriteIoValue(ioName, true);
  651. }
  652. return true;
  653. }
  654. /// <summary>
  655. /// DI Water Disable
  656. /// </summary>
  657. /// <param name="cmd"></param>
  658. /// <param name="param"></param>
  659. /// <returns></returns>
  660. private bool DiWaterDisableOperation(string cmd, object param)
  661. {
  662. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_WATER_ENABLE}");
  663. if (!string.IsNullOrEmpty(ioName))
  664. {
  665. IOModuleManager.Instance.WriteIoValue(ioName, false);
  666. }
  667. return true;
  668. }
  669. /// <summary>
  670. /// House Chilled Water Enable
  671. /// </summary>
  672. /// <param name="cmd"></param>
  673. /// <param name="param"></param>
  674. /// <returns></returns>
  675. private bool HouseChilledWaterEnableOperation(string cmd, object param)
  676. {
  677. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{HOUSE_CHILLED_WATER_ENABLE}");
  678. if (!string.IsNullOrEmpty(ioName))
  679. {
  680. IOModuleManager.Instance.WriteIoValue(ioName, true);
  681. }
  682. return true;
  683. }
  684. /// <summary>
  685. /// House Chilled Water Disable
  686. /// </summary>
  687. /// <param name="cmd"></param>
  688. /// <param name="param"></param>
  689. /// <returns></returns>
  690. private bool HouseChilledWaterDisableOperation(string cmd, object param)
  691. {
  692. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{HOUSE_CHILLED_WATER_ENABLE}");
  693. if (!string.IsNullOrEmpty(ioName))
  694. {
  695. IOModuleManager.Instance.WriteIoValue(ioName, false);
  696. }
  697. return true;
  698. }
  699. /// <summary>
  700. /// DI Fill Enable
  701. /// </summary>
  702. /// <param name="cmd"></param>
  703. /// <param name="param"></param>
  704. /// <returns></returns>
  705. private bool DiFillEnableOperation(string cmd, object param)
  706. {
  707. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_FILL_ENABLE}");
  708. if (!string.IsNullOrEmpty(ioName))
  709. {
  710. IOModuleManager.Instance.WriteIoValue(ioName, true);
  711. }
  712. return true;
  713. }
  714. /// <summary>
  715. /// Di Fill Disable
  716. /// </summary>
  717. /// <param name="cmd"></param>
  718. /// <param name="param"></param>
  719. /// <returns></returns>
  720. public bool DiFillDisableOperation(string cmd, object param)
  721. {
  722. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_FILL_ENABLE}");
  723. if (!string.IsNullOrEmpty(ioName))
  724. {
  725. IOModuleManager.Instance.WriteIoValue(ioName, false);
  726. }
  727. return true;
  728. }
  729. /// <summary>
  730. /// DI Replen Enable
  731. /// </summary>
  732. /// <param name="cmd"></param>
  733. /// <param name="param"></param>
  734. /// <returns></returns>
  735. private bool DiReplenEnableOperation(string cmd, object param)
  736. {
  737. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_REPLEN_ENABLE}");
  738. if (!string.IsNullOrEmpty(ioName))
  739. {
  740. IOModuleManager.Instance.WriteIoValue(ioName, true);
  741. }
  742. return true;
  743. }
  744. /// <summary>
  745. /// DI Replen Disable
  746. /// </summary>
  747. /// <param name="cmd"></param>
  748. /// <param name="param"></param>
  749. /// <returns></returns>
  750. public bool DiReplenDisableOperation(string cmd, object param)
  751. {
  752. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{DI_REPLEN_ENABLE}");
  753. if (!string.IsNullOrEmpty(ioName))
  754. {
  755. IOModuleManager.Instance.WriteIoValue(ioName, false);
  756. }
  757. return true;
  758. }
  759. /// <summary>
  760. /// srd DI Enable
  761. /// </summary>
  762. /// <param name="cmd"></param>
  763. /// <param name="param"></param>
  764. /// <returns></returns>
  765. private bool SrdDiEnableOperation(string cmd, object param)
  766. {
  767. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SRD_DI_ENABLE}");
  768. if (!string.IsNullOrEmpty(ioName))
  769. {
  770. IOModuleManager.Instance.WriteIoValue(ioName, true);
  771. }
  772. return true;
  773. }
  774. /// <summary>
  775. /// Loader DI Disable
  776. /// </summary>
  777. /// <param name="cmd"></param>
  778. /// <param name="param"></param>
  779. /// <returns></returns>
  780. private bool SrdDiDisableOperation(string cmd, object param)
  781. {
  782. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SRD_DI_ENABLE}");
  783. if (!string.IsNullOrEmpty(ioName))
  784. {
  785. IOModuleManager.Instance.WriteIoValue(ioName, false);
  786. }
  787. return true;
  788. }
  789. /// <summary>
  790. /// Filter Purge Enable
  791. /// </summary>
  792. /// <param name="cmd"></param>
  793. /// <param name="param"></param>
  794. /// <returns></returns>
  795. private bool FilterPurgeEnableOperation(string cmd, object param)
  796. {
  797. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{FILTER_PURGE_ENABLE}");
  798. if (!string.IsNullOrEmpty(ioName))
  799. {
  800. IOModuleManager.Instance.WriteIoValue(ioName, true);
  801. }
  802. return true;
  803. }
  804. /// <summary>
  805. /// Filter Purge Disable
  806. /// </summary>
  807. /// <param name="cmd"></param>
  808. /// <param name="param"></param>
  809. /// <returns></returns>
  810. private bool FilterPurgeDisableOperation(string cmd, object param)
  811. {
  812. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{FILTER_PURGE_ENABLE}");
  813. if (!string.IsNullOrEmpty(ioName))
  814. {
  815. IOModuleManager.Instance.WriteIoValue(ioName, false);
  816. }
  817. return true;
  818. }
  819. /// <summary>
  820. /// Sample Enable
  821. /// </summary>
  822. /// <param name="cmd"></param>
  823. /// <param name="param"></param>
  824. /// <returns></returns>
  825. private bool SampleEnableOperation(string cmd, object param)
  826. {
  827. _isSammpleing = true;
  828. _sampleStartime = DateTime.Now;
  829. SampeOperation(true);
  830. return true;
  831. }
  832. /// <summary>
  833. /// Sample Disable
  834. /// </summary>
  835. /// <param name="cmd"></param>
  836. /// <param name="param"></param>
  837. /// <returns></returns>
  838. public bool SampleDisableOperation(string cmd, object param)
  839. {
  840. _isSammpleing = false;
  841. SampeOperation(false);
  842. return true;
  843. }
  844. /// <summary>
  845. /// Sample操作
  846. /// </summary>
  847. /// <param name="enable"></param>
  848. private void SampeOperation(bool enable)
  849. {
  850. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Name}.{SAMPLE_STATION_ENABLE}");
  851. if (!string.IsNullOrEmpty(ioName))
  852. {
  853. IOModuleManager.Instance.WriteIoValue(ioName, enable);
  854. }
  855. }
  856. #endregion
  857. /// <summary>
  858. /// 检验Exhaust
  859. /// </summary>
  860. /// <returns></returns>
  861. public (bool result, string reason) CheckExhaustResult()
  862. {
  863. return CheckPressureData(EXHAUST1_PRESSURE_VALUE);
  864. }
  865. /// <summary>
  866. /// 检验冷却水
  867. /// </summary>
  868. /// <returns></returns>
  869. public (bool result, string reason) CheckHouseChilledWaterResult()
  870. {
  871. return CheckPressureData(HOUSE_CHILLED_WATER_FLOW);
  872. }
  873. /// <summary>
  874. /// 检验CDA
  875. /// </summary>
  876. /// <returns></returns>
  877. public (bool result, string reason) CheckCDA()
  878. {
  879. if (!CDAEnable)
  880. {
  881. return (false, "CDA is disable");
  882. }
  883. else
  884. {
  885. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  886. if (!cda1Result.result)
  887. {
  888. return cda1Result;
  889. }
  890. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  891. if (!cda2Result.result)
  892. {
  893. return cda2Result;
  894. }
  895. }
  896. return (true, "");
  897. }
  898. /// <summary>
  899. /// 检验CDA和N2
  900. /// </summary>
  901. /// <returns></returns>
  902. public (bool result, string reason) CheckCDAN2()
  903. {
  904. if (!CDAEnable)
  905. {
  906. return (false, "CDA is disable");
  907. }
  908. else
  909. {
  910. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  911. if (!cda1Result.result)
  912. {
  913. return cda1Result;
  914. }
  915. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  916. if (!cda2Result.result)
  917. {
  918. return cda2Result;
  919. }
  920. }
  921. if (!N2Enable)
  922. {
  923. return (false, "N2 is disable");
  924. }
  925. else
  926. {
  927. var n21AResult = CheckPressureData(N2_1A_PRESSURE_VALUE);
  928. if (!n21AResult.result)
  929. {
  930. return n21AResult;
  931. }
  932. var n21BResult = CheckPressureData(N2_1B_PRESSURE_VALUE);
  933. if (!n21BResult.result)
  934. {
  935. return n21BResult;
  936. }
  937. var n22AResult = CheckPressureData(N2_2A_PRESSURE_VALUE);
  938. if (!n22AResult.result)
  939. {
  940. return n22AResult;
  941. }
  942. var n22BResult = CheckPressureData(N2_2B_PRESSURE_VALUE);
  943. if (!n22BResult.result)
  944. {
  945. return n22BResult;
  946. }
  947. }
  948. return (true, "");
  949. }
  950. /// <summary>
  951. /// 检验CDA N2以及Vacuum状态
  952. /// </summary>
  953. /// <returns></returns>
  954. public (bool result, string reason) CheckCDAN2AndVacuum()
  955. {
  956. if (!CDAEnable)
  957. {
  958. return (false, "CDA is disable");
  959. }
  960. else
  961. {
  962. var cda1Result = CheckPressureData(CDA_1_PRESSURE_VALUE);
  963. if (!cda1Result.result)
  964. {
  965. return cda1Result;
  966. }
  967. var cda2Result = CheckPressureData(CDA_2_PRESSURE_VALUE);
  968. if (!cda2Result.result)
  969. {
  970. return cda2Result;
  971. }
  972. }
  973. if (!N2Enable)
  974. {
  975. return (false, "N2 is disable");
  976. }
  977. else
  978. {
  979. var n21AResult = CheckPressureData(N2_1A_PRESSURE_VALUE);
  980. if (!n21AResult.result)
  981. {
  982. return n21AResult;
  983. }
  984. var n21BResult = CheckPressureData(N2_1B_PRESSURE_VALUE);
  985. if (!n21BResult.result)
  986. {
  987. return n21BResult;
  988. }
  989. var n22AResult = CheckPressureData(N2_2A_PRESSURE_VALUE);
  990. if (!n22AResult.result)
  991. {
  992. return n22AResult;
  993. }
  994. var n22BResult = CheckPressureData(N2_2B_PRESSURE_VALUE);
  995. if (!n22BResult.result)
  996. {
  997. return n22BResult;
  998. }
  999. var vacuumResult = CheckPressureData(VACUUM_PRESSURE_VALUE);
  1000. if (!vacuumResult.result)
  1001. {
  1002. return vacuumResult;
  1003. }
  1004. }
  1005. return (true, "");
  1006. }
  1007. /// <summary>
  1008. /// 检验压力
  1009. /// </summary>
  1010. /// <param name="pressureName"></param>
  1011. /// <returns></returns>
  1012. private (bool result, string reason) CheckPressureData(string pressureName)
  1013. {
  1014. if (_facilitiesDataDic.ContainsKey(pressureName))
  1015. {
  1016. CommonLimitData facilitiesData = _facilitiesDataDic[(pressureName)];
  1017. if (facilitiesData.IsError)
  1018. {
  1019. return (false, $"{pressureName} data {facilitiesData.Value} is error value");
  1020. }
  1021. else if (facilitiesData.IsWarning)
  1022. {
  1023. return (true, $"{pressureName} data {facilitiesData.Value} is warning");
  1024. }
  1025. else
  1026. {
  1027. return (true, "");
  1028. }
  1029. }
  1030. else
  1031. {
  1032. return (false, $"{pressureName} not in dictionary");
  1033. }
  1034. }
  1035. /// <summary>
  1036. /// 获取Common Limit 数据
  1037. /// </summary>
  1038. /// <param name="name"></param>
  1039. /// <returns></returns>
  1040. public CommonLimitData GetCommonLimitDataByName(string name)
  1041. {
  1042. return _facilitiesDataDic.ContainsKey(name) ? _facilitiesDataDic[name] : null;
  1043. }
  1044. #region IDevice接口
  1045. public void Monitor()
  1046. {
  1047. }
  1048. public void Reset()
  1049. {
  1050. }
  1051. public void Terminate()
  1052. {
  1053. }
  1054. #endregion
  1055. }
  1056. }