GasDetailViewModel.cs 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.Util;
  3. using Caliburn.Micro;
  4. using Caliburn.Micro.Core;
  5. using MECF.Framework.Common.DataCenter;
  6. using MECF.Framework.Common.OperationCenter;
  7. using MECF.Framework.Common.RecipeCenter;
  8. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  9. using MECF.Framework.UI.Client.CenterViews.Dialogs;
  10. using MECF.Framework.UI.Core.Control;
  11. using OpenSEMI.ClientBase;
  12. using System.Collections.Generic;
  13. using System.Collections.ObjectModel;
  14. using System.Linq;
  15. using System.Windows;
  16. using System.Windows.Controls;
  17. using FurnaceUI.Models;
  18. using FurnaceUI.Views.Editors;
  19. namespace FurnaceUI.Views.Operations
  20. {
  21. public class GasDetailViewModel : FurnaceUIViewModelBase
  22. {
  23. #region MFC
  24. [Subscription("CHM.MFC1.DeviceData")]
  25. public AITMfcData MFC1Data { get; set; }
  26. [Subscription("CHM.MFC2.DeviceData")]
  27. public AITMfcData MFC2Data { get; set; }
  28. [Subscription("CHM.MFC3.DeviceData")]
  29. public AITMfcData MFC3Data { get; set; }
  30. [Subscription("CHM.MFC4.DeviceData")]
  31. public AITMfcData MFC4Data { get; set; }
  32. [Subscription("CHM.MFC5.DeviceData")]
  33. public AITMfcData MFC5Data { get; set; }
  34. [Subscription("CHM.MFC6.DeviceData")]
  35. public AITMfcData MFC6Data { get; set; }
  36. [Subscription("CHM.MFC7.DeviceData")]
  37. public AITMfcData MFC7Data { get; set; }
  38. [Subscription("CHM.MFC8.DeviceData")]
  39. public AITMfcData MFC8Data { get; set; }
  40. [Subscription("CHM.MFC9.DeviceData")]
  41. public AITMfcData MFC9Data { get; set; }
  42. [Subscription("CHM.MFC10.DeviceData")]
  43. public AITMfcData MFC10Data { get; set; }
  44. [Subscription("CHM.MFC11.DeviceData")]
  45. public AITMfcData MFC11Data { get; set; }
  46. [Subscription("CHM.MFC12.DeviceData")]
  47. public AITMfcData MFC12Data { get; set; }
  48. [Subscription("CHM.MFC51.DeviceData")]
  49. public AITMfcData MFC51Data { get; set; }
  50. #endregion
  51. #region MFM
  52. [Subscription("CHM.MFM57.DeviceData")]
  53. public AITWaterFlowMeterData MFM57FlowData { get; set; }
  54. #endregion
  55. #region Valve
  56. [Subscription("CHM.ValveAV1.DeviceData")]
  57. public AITValveData ValveAV1Data { get; set; }
  58. [Subscription("CHM.ValveAV2.DeviceData")]
  59. public AITValveData ValveAV2Data { get; set; }
  60. [Subscription("CHM.ValveAV3.DeviceData")]
  61. public AITValveData ValveAV3Data { get; set; }
  62. [Subscription("CHM.ValveAV4.DeviceData")]
  63. public AITValveData ValveAV4Data { get; set; }
  64. [Subscription("CHM.ValveAV5.DeviceData")]
  65. public AITValveData ValveAV5Data { get; set; }
  66. [Subscription("CHM.ValveAV6.DeviceData")]
  67. public AITValveData ValveAV6Data { get; set; }
  68. [Subscription("CHM.ValveAV7.DeviceData")]
  69. public AITValveData ValveAV7Data { get; set; }
  70. [Subscription("CHM.ValveAV8.DeviceData")]
  71. public AITValveData ValveAV8Data { get; set; }
  72. [Subscription("CHM.ValveAV9.DeviceData")]
  73. public AITValveData ValveAV9Data { get; set; }
  74. [Subscription("CHM.ValveAV10.DeviceData")]
  75. public AITValveData ValveAV10Data { get; set; }
  76. [Subscription("CHM.ValveAV11.DeviceData")]
  77. public AITValveData ValveAV11Data { get; set; }
  78. [Subscription("CHM.ValveAV12.DeviceData")]
  79. public AITValveData ValveAV12Data { get; set; }
  80. [Subscription("CHM.ValveAV13.DeviceData")]
  81. public AITValveData ValveAV13Data { get; set; }
  82. [Subscription("CHM.ValveAV14.DeviceData")]
  83. public AITValveData ValveAV14Data { get; set; }
  84. [Subscription("CHM.ValveAV15.DeviceData")]
  85. public AITValveData ValveAV15Data { get; set; }
  86. [Subscription("CHM.ValveAV16.DeviceData")]
  87. public AITValveData ValveAV16Data { get; set; }
  88. [Subscription("CHM.ValveAV17.DeviceData")]
  89. public AITValveData ValveAV17Data { get; set; }
  90. [Subscription("CHM.ValveAV18.DeviceData")]
  91. public AITValveData ValveAV18Data { get; set; }
  92. [Subscription("CHM.ValveAV19.DeviceData")]
  93. public AITValveData ValveAV19Data { get; set; }
  94. [Subscription("CHM.ValveAV20.DeviceData")]
  95. public AITValveData ValveAV20Data { get; set; }
  96. [Subscription("CHM.ValveAV21.DeviceData")]
  97. public AITValveData ValveAV21Data { get; set; }
  98. [Subscription("CHM.ValveAV22.DeviceData")]
  99. public AITValveData ValveAV22Data { get; set; }
  100. [Subscription("CHM.ValveAV23.DeviceData")]
  101. public AITValveData ValveAV23Data { get; set; }
  102. [Subscription("CHM.ValveAV24.DeviceData")]
  103. public AITValveData ValveAV24Data { get; set; }
  104. [Subscription("CHM.ValveAV25.DeviceData")]
  105. public AITValveData ValveAV25Data { get; set; }
  106. [Subscription("CHM.ValveAV26.DeviceData")]
  107. public AITValveData ValveAV26Data { get; set; }
  108. [Subscription("CHM.ValveAV27.DeviceData")]
  109. public AITValveData ValveAV27Data { get; set; }
  110. [Subscription("CHM.ValveAV28.DeviceData")]
  111. public AITValveData ValveAV28Data { get; set; }
  112. [Subscription("CHM.ValveAV29.DeviceData")]
  113. public AITValveData ValveAV29Data { get; set; }
  114. [Subscription("CHM.ValveAV30.DeviceData")]
  115. public AITValveData ValveAV30Data { get; set; }
  116. [Subscription("CHM.ValveAV31.DeviceData")]
  117. public AITValveData ValveAV31Data { get; set; }
  118. [Subscription("CHM.ValveAV32.DeviceData")]
  119. public AITValveData ValveAV32Data { get; set; }
  120. [Subscription("CHM.ValveAV33.DeviceData")]
  121. public AITValveData ValveAV33Data { get; set; }
  122. [Subscription("CHM.ValveAV34.DeviceData")]
  123. public AITValveData ValveAV34Data { get; set; }
  124. [Subscription("CHM.ValveAV35.DeviceData")]
  125. public AITValveData ValveAV35Data { get; set; }
  126. [Subscription("CHM.ValveAV36.DeviceData")]
  127. public AITValveData ValveAV36Data { get; set; }
  128. [Subscription("CHM.ValveAV37.DeviceData")]
  129. public AITValveData ValveAV37Data { get; set; }
  130. [Subscription("CHM.ValveAV38.DeviceData")]
  131. public AITValveData ValveAV38Data { get; set; }
  132. [Subscription("CHM.ValveAV39.DeviceData")]
  133. public AITValveData ValveAV39Data { get; set; }
  134. [Subscription("CHM.ValveAV52.DeviceData")]
  135. public AITValveData ValveAV52Data { get; set; }
  136. [Subscription("CHM.ValveAV54.DeviceData")]
  137. public AITValveData ValveAV54Data { get; set; }
  138. [Subscription("CHM.ValveAV56.DeviceData")]
  139. public AITValveData ValveAV56Data { get; set; }
  140. [Subscription("CHM.ValveAV57.DeviceData")]
  141. public AITValveData ValveAV57Data { get; set; }
  142. [Subscription("CHM.ValveAV58.DeviceData")]
  143. public AITValveData ValveAV58Data { get; set; }
  144. [Subscription("CHM.ValveAV59.DeviceData")]
  145. public AITValveData ValveAV59Data { get; set; }
  146. [Subscription("CHM.ValveAV60.DeviceData")]
  147. public AITValveData ValveAV60Data { get; set; }
  148. [Subscription("CHM.ValveAV68.DeviceData")]
  149. public AITValveData ValveAV68Data { get; set; }
  150. [Subscription("CHM.ValveAV71.DeviceData")]
  151. public AITValveData ValveAV71Data { get; set; }
  152. [Subscription("CHM.ValveAV72.DeviceData")]
  153. public AITValveData ValveAV72Data { get; set; }
  154. [Subscription("CHM.ValveAV73.DeviceData")]
  155. public AITValveData ValveAV73Data { get; set; }
  156. [Subscription("CHM.ValveAV74.DeviceData")]
  157. public AITValveData ValveAV74Data { get; set; }
  158. [Subscription("CHM.ValveAV75.DeviceData")]
  159. public AITValveData ValveAV75Data { get; set; }
  160. [Subscription("CHM.ValveAV77.DeviceData")]
  161. public AITValveData ValveAV77Data { get; set; }
  162. [Subscription("CHM.ValveAV81.DeviceData")]
  163. public AITValveData ValveAV81Data { get; set; }
  164. [Subscription("CHM.ValveAV82.DeviceData")]
  165. public AITValveData ValveAV82Data { get; set; }
  166. [Subscription("CHM.ValveAV83.DeviceData")]
  167. public AITValveData ValveAV83Data { get; set; }
  168. [Subscription("CHM.ValveAV91.DeviceData")]
  169. public AITValveData ValveAV91Data { get; set; }
  170. #endregion
  171. #region APC
  172. [Subscription("PM1.APC.DeviceData")]
  173. public AITThrottleValveData APCData { get; set; }
  174. #endregion
  175. #region Analog
  176. [Subscription("PM1.HTCurrent1.DeviceData")]
  177. public AITWaterFlowMeterData HTCurrent1 { get; set; }
  178. [Subscription("PM1.HTCurrent2.DeviceData")]
  179. public AITWaterFlowMeterData HTCurrent2 { get; set; }
  180. [Subscription("PM1.HTCurrent3.DeviceData")]
  181. public AITWaterFlowMeterData HTCurrent3 { get; set; }
  182. [Subscription("PM1.HTCurrent4.DeviceData")]
  183. public AITWaterFlowMeterData HTCurrent4 { get; set; }
  184. [Subscription("PM1.HTCurrent5.DeviceData")]
  185. public AITWaterFlowMeterData HTCurrent5 { get; set; }
  186. [Subscription("PM1.HTVoltage1.DeviceData")]
  187. public AITWaterFlowMeterData HTVoltage1 { get; set; }
  188. [Subscription("PM1.HTVoltage2.DeviceData")]
  189. public AITWaterFlowMeterData HTVoltage2 { get; set; }
  190. [Subscription("PM1.HTVoltage3.DeviceData")]
  191. public AITWaterFlowMeterData HTVoltage3 { get; set; }
  192. [Subscription("PM1.HTVoltage4.DeviceData")]
  193. public AITWaterFlowMeterData HTVoltage4 { get; set; }
  194. [Subscription("PM1.HTVoltage5.DeviceData")]
  195. public AITWaterFlowMeterData HTVoltage5 { get; set; }
  196. [Subscription("PM1.HeaterWaterFlow.DeviceData")]
  197. public AITWaterFlowMeterData HeaterWaterFlow { get; set; }
  198. [Subscription("PM1.MFWaterFlow.DeviceData")]
  199. public AITWaterFlowMeterData MFWaterFlow { get; set; }
  200. [Subscription("PM1.CAPWaterFlow.DeviceData")]
  201. public AITWaterFlowMeterData CAPWaterFlow { get; set; }
  202. [Subscription("PM1.A_SWaterFlow.DeviceData")]
  203. public AITWaterFlowMeterData A_SWaterFlow { get; set; }
  204. [Subscription("PM1.HeaterEXH.DeviceData")]
  205. public AITWaterFlowMeterData HeaterEXH { get; set; }
  206. [Subscription("PM1.SCVEXH.DeviceData")]
  207. public AITWaterFlowMeterData SCVEXH { get; set; }
  208. [Subscription("PM1.G_UEXH.DeviceData")]
  209. public AITWaterFlowMeterData G_UEXH { get; set; }
  210. [Subscription("PM1.PT1Value.DeviceData")]
  211. public AITWaterFlowMeterData PT1Value { get; set; }
  212. [Subscription("PM1.PT2Value.DeviceData")]
  213. public AITWaterFlowMeterData PT2Value { get; set; }
  214. [Subscription("PM1.PT3Value.DeviceData")]
  215. public AITWaterFlowMeterData PT3Value { get; set; }
  216. [Subscription("PM1.PT4Value.DeviceData")]
  217. public AITWaterFlowMeterData PT4Value { get; set; }
  218. [Subscription("PM1.PT5Value.DeviceData")]
  219. public AITWaterFlowMeterData PT5Value { get; set; }
  220. [Subscription("PM1.PT6Value.DeviceData")]
  221. public AITWaterFlowMeterData PT6Value { get; set; }
  222. [Subscription("PM1.P_SW1Value.DeviceData")]
  223. public AITWaterFlowMeterData P_SW1Value { get; set; }
  224. [Subscription("PM1.P_SW2Value.DeviceData")]
  225. public AITWaterFlowMeterData P_SW2Value { get; set; }
  226. [Subscription("PM1.VG2Pressure.DeviceData")]
  227. public AITWaterFlowMeterData VG2Pressure { get; set; }
  228. #endregion
  229. #region PM
  230. [Subscription("PM1.Status")]
  231. public string PM1Status { get; set; }
  232. [Subscription("PM1.RecipeHold")]
  233. public bool PM1RecipeHold { get; set; }
  234. public bool IsMannualButtonEnabled
  235. {
  236. get
  237. {
  238. return PM1Status != "Process" || (PM1Status == "Process" && PM1RecipeHold);
  239. }
  240. }
  241. #endregion
  242. private Visibility _gridMFCVisibility = Visibility.Hidden;
  243. public Visibility GridMFCVisibility
  244. {
  245. get => _gridMFCVisibility;
  246. set
  247. {
  248. _gridMFCVisibility = value;
  249. NotifyOfPropertyChange("GridMFCVisibility");
  250. }
  251. }
  252. private Visibility _gridMFMVisibility = Visibility.Hidden;
  253. public Visibility GridMFMVisibility
  254. {
  255. get => _gridMFMVisibility;
  256. set
  257. {
  258. _gridMFMVisibility = value;
  259. NotifyOfPropertyChange("GridMFMVisibility");
  260. }
  261. }
  262. private Visibility _gridValveVisibility = Visibility.Hidden;
  263. public Visibility GridValveVisibility
  264. {
  265. get => _gridValveVisibility;
  266. set
  267. {
  268. _gridValveVisibility = value;
  269. NotifyOfPropertyChange("GridValveVisibility");
  270. }
  271. }
  272. private Visibility _gridAPCVisibility = Visibility.Hidden;
  273. public Visibility GridAPCVisibility
  274. {
  275. get => _gridAPCVisibility;
  276. set
  277. {
  278. _gridAPCVisibility = value;
  279. NotifyOfPropertyChange("GridAPCVisibility");
  280. }
  281. }
  282. private Visibility _gridAnalogVisibility = Visibility.Hidden;
  283. public Visibility GridAnalogVisibility
  284. {
  285. get => _gridAnalogVisibility;
  286. set
  287. {
  288. _gridAnalogVisibility = value;
  289. NotifyOfPropertyChange("GridAnalogVisibility");
  290. }
  291. }
  292. private ObservableCollection<MFCDetailValue> _mfcDetailDatas = new ObservableCollection<MFCDetailValue>();
  293. public ObservableCollection<MFCDetailValue> MFCDetailDatas
  294. {
  295. get => _mfcDetailDatas;
  296. set
  297. {
  298. _mfcDetailDatas = value;
  299. NotifyOfPropertyChange("MFCDetailDatas");
  300. }
  301. }
  302. private ObservableCollection<MFMDetailValue> _mfmDetailDatas = new ObservableCollection<MFMDetailValue>();
  303. public ObservableCollection<MFMDetailValue> MFMDetailDatas
  304. {
  305. get => _mfmDetailDatas;
  306. set
  307. {
  308. _mfmDetailDatas = value;
  309. NotifyOfPropertyChange("MFMDetailDataLists");
  310. }
  311. }
  312. private ObservableCollection<ValveDetailValue> _valveDetailDatas = new ObservableCollection<ValveDetailValue>();
  313. public ObservableCollection<ValveDetailValue> ValveDetailDatas
  314. {
  315. get => _valveDetailDatas;
  316. set
  317. {
  318. _valveDetailDatas = value;
  319. NotifyOfPropertyChange("ValveDetailDatas");
  320. }
  321. }
  322. private ObservableCollection<MFMDetailValue> _apcDetailDatas = new ObservableCollection<MFMDetailValue>();
  323. public ObservableCollection<MFMDetailValue> APCDetailDatas
  324. {
  325. get => _apcDetailDatas;
  326. set
  327. {
  328. _apcDetailDatas = value;
  329. NotifyOfPropertyChange("APCDetailDatas");
  330. }
  331. }
  332. private ObservableCollection<AnalogDetailValue> _analogDetailDatas = new ObservableCollection<AnalogDetailValue>();
  333. public ObservableCollection<AnalogDetailValue> AnalogDetailDatas
  334. {
  335. get => _analogDetailDatas;
  336. set
  337. {
  338. AnalogDetailDatas = value;
  339. NotifyOfPropertyChange("AnalogDetailDatas");
  340. }
  341. }
  342. private bool _isEnableMannual;
  343. public bool IsEnableMannual
  344. {
  345. get => _isEnableMannual;
  346. set
  347. {
  348. _isEnableMannual = value;
  349. NotifyOfPropertyChange(nameof(IsEnableMannual));
  350. }
  351. }
  352. private int _mannualSelectCount;
  353. protected override void OnViewLoaded(object view)
  354. {
  355. base.OnViewLoaded(view);
  356. GridMFCVisibility = Visibility.Visible;
  357. }
  358. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  359. {
  360. base.InvokeAfterUpdateProperty(data);
  361. if (!IsEnableMannual)
  362. UpdateFlowValue();
  363. }
  364. private void UpdateFlowValue()
  365. {
  366. List<AITMfcData> mfcData = new List<AITMfcData>()
  367. {
  368. MFC1Data,
  369. MFC2Data,
  370. MFC3Data,
  371. MFC4Data,
  372. MFC5Data,
  373. MFC6Data,
  374. MFC7Data,
  375. MFC8Data,
  376. MFC9Data,
  377. MFC10Data,
  378. MFC11Data,
  379. MFC12Data,
  380. MFC51Data,
  381. };
  382. List<AITMfcData> tempMFC = new List<AITMfcData>();
  383. for (int i = 0; i < mfcData.Count; i++)
  384. {
  385. var IsMFCInstalled = (bool)QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{mfcData[i].DeviceName}.IsMFCInstalled");
  386. if (IsMFCInstalled)
  387. {
  388. tempMFC.Add(mfcData[i]);
  389. }
  390. }
  391. List<AITWaterFlowMeterData> mfmData = new List<AITWaterFlowMeterData>()
  392. {
  393. MFM57FlowData,
  394. };
  395. List<AITWaterFlowMeterData> tempMFM = new List<AITWaterFlowMeterData>();
  396. for (int i = 0; i < mfmData.Count; i++)
  397. {
  398. var IsMFMInstalled = (bool)QueryDataClient.Instance.Service.GetConfig($"PM1.MFM.{mfmData[i].DeviceName}.IsMFMInstalled");
  399. if (IsMFMInstalled)
  400. {
  401. tempMFM.Add(mfmData[i]);
  402. }
  403. }
  404. List<AITThrottleValveData> apcData = new List<AITThrottleValveData>()
  405. {
  406. APCData,
  407. };
  408. List<AITValveData> valveData = new List<AITValveData>()
  409. {
  410. ValveAV1Data,
  411. ValveAV2Data,
  412. ValveAV3Data,
  413. ValveAV4Data,
  414. ValveAV5Data,
  415. ValveAV6Data,
  416. ValveAV7Data,
  417. ValveAV8Data,
  418. ValveAV9Data,
  419. ValveAV10Data,
  420. ValveAV11Data,
  421. ValveAV12Data,
  422. ValveAV13Data,
  423. ValveAV14Data,
  424. ValveAV15Data,
  425. ValveAV16Data,
  426. ValveAV17Data,
  427. ValveAV18Data,
  428. ValveAV19Data,
  429. ValveAV20Data,
  430. ValveAV21Data,
  431. ValveAV22Data,
  432. ValveAV23Data,
  433. ValveAV24Data,
  434. ValveAV25Data,
  435. ValveAV26Data,
  436. ValveAV27Data,
  437. ValveAV28Data,
  438. ValveAV29Data,
  439. ValveAV30Data,
  440. ValveAV31Data,
  441. ValveAV32Data,
  442. ValveAV33Data,
  443. ValveAV34Data,
  444. ValveAV35Data,
  445. ValveAV36Data,
  446. ValveAV37Data,
  447. ValveAV38Data,
  448. ValveAV39Data,
  449. ValveAV52Data,
  450. ValveAV54Data,
  451. ValveAV56Data,
  452. ValveAV57Data,
  453. ValveAV58Data,
  454. ValveAV59Data,
  455. ValveAV60Data,
  456. ValveAV68Data,
  457. ValveAV71Data,
  458. ValveAV72Data,
  459. ValveAV73Data,
  460. ValveAV74Data,
  461. ValveAV75Data,
  462. ValveAV77Data,
  463. ValveAV81Data,
  464. ValveAV82Data,
  465. ValveAV83Data,
  466. ValveAV91Data,
  467. };
  468. //List<AITWaterFlowMeterData> analogData = new List<AITWaterFlowMeterData>()
  469. //{
  470. // HTCurrent1,
  471. // HTCurrent2,
  472. // HTCurrent3,
  473. // HTCurrent4,
  474. // HTCurrent5,
  475. // HTVoltage1,
  476. // HTVoltage2,
  477. // HTVoltage3,
  478. // HTVoltage4,
  479. // HTVoltage5,
  480. // HeaterWaterFlow,
  481. // MFWaterFlow,
  482. // CAPWaterFlow,
  483. // A_SWaterFlow,
  484. // HeaterEXH,
  485. // SCVEXH,
  486. // G_UEXH,
  487. // PT1Value,
  488. // PT2Value,
  489. // PT3Value,
  490. // PT4Value,
  491. // PT5Value,
  492. // PT6Value,
  493. // P_SW1Value,
  494. // P_SW2Value,
  495. //};
  496. if (MFCDetailDatas.Count == 0)
  497. {
  498. for (int i = 0; i < tempMFC.Count; i++)
  499. {
  500. var Unit = (string)QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{tempMFC[i].DeviceName}.FlowUnit");
  501. var setpoint = mfcData[i].SetPoint.ToString("F1");
  502. MFCDetailDatas.Add(new MFCDetailValue()
  503. {
  504. Name = tempMFC[i].DeviceName,
  505. DisplayName = tempMFC[i].DisplayName,
  506. Unit = Unit,
  507. Setpoint = setpoint,
  508. Feedback = tempMFC[i].FeedBack.ToString("F1"),
  509. Ramping = tempMFC[i].Ramping.ToString("F1"),
  510. AlarmTable = string.IsNullOrEmpty(tempMFC[i].AlarmWatchTable) ? "None" : tempMFC[i].AlarmWatchTable,
  511. MaxValue = (double)QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{tempMFC[i].DeviceName}.N2Scale")
  512. });
  513. }
  514. }
  515. else
  516. {
  517. for (int i = 0; i < tempMFC.Count; i++)
  518. {
  519. var Unit = (string)QueryDataClient.Instance.Service.GetConfig($"PM1.MFC.{mfcData[i].DeviceName}.FlowUnit");
  520. var setpoint = tempMFC[i].SetPoint.ToString("F1");
  521. MFCDetailDatas[i].Name = tempMFC[i].DeviceName;
  522. MFCDetailDatas[i].DisplayName = tempMFC[i].DisplayName;
  523. MFCDetailDatas[i].Unit = Unit;
  524. MFCDetailDatas[i].Setpoint = setpoint;
  525. MFCDetailDatas[i].Feedback = tempMFC[i].FeedBack.ToString();
  526. MFCDetailDatas[i].Ramping = tempMFC[i].Ramping.ToString();
  527. MFCDetailDatas[i].AlarmTable = string.IsNullOrEmpty(tempMFC[i].AlarmWatchTable) ? "None" : tempMFC[i].AlarmWatchTable;
  528. }
  529. }
  530. if (MFMDetailDatas.Count == 0)
  531. {
  532. for (int i = 0; i < tempMFM.Count; i++)
  533. {
  534. var Unit = (string)QueryDataClient.Instance.Service.GetConfig($"PM1.MFM.{tempMFM[i].DeviceName}.FlowUnit");
  535. MFMDetailDatas.Add(new MFMDetailValue()
  536. {
  537. Name = tempMFM[i].DeviceName,
  538. DisplayName = tempMFM[i].DisplayName,
  539. Unit = Unit,
  540. Setpoint = tempMFM[i].SetPoint.ToString("F1"),
  541. Feedback = tempMFM[i].FeedBack.ToString("F1"),
  542. AlarmTable = string.IsNullOrEmpty(tempMFM[i].AlarmWatchTable) ? "None" : tempMFM[i].AlarmWatchTable,
  543. });
  544. }
  545. }
  546. else
  547. {
  548. for (int i = 0; i < tempMFM.Count; i++)
  549. {
  550. var Unit = (string)QueryDataClient.Instance.Service.GetConfig($"PM1.MFM.{tempMFM[i].DeviceName}.FlowUnit");
  551. MFMDetailDatas[i].Name = tempMFM[i].DeviceName;
  552. MFMDetailDatas[i].DisplayName = tempMFM[i].DeviceName;
  553. MFMDetailDatas[i].Unit = Unit;
  554. MFMDetailDatas[i].Setpoint = tempMFM[i].SetPoint.ToString("F1");
  555. MFMDetailDatas[i].Feedback = tempMFM[i].FeedBack.ToString("F1");
  556. MFMDetailDatas[i].AlarmTable = string.IsNullOrEmpty(tempMFM[i].AlarmWatchTable) ? "None" : tempMFM[i].AlarmWatchTable;
  557. }
  558. }
  559. if (ValveDetailDatas.Count == 0)
  560. {
  561. for (int i = 0; i < valveData.Count; i++)
  562. {
  563. ValveDetailDatas.Add(new ValveDetailValue()
  564. {
  565. Name = valveData[i].DeviceName,
  566. DisplayName = valveData[i].DisplayName,
  567. Feedback = valveData[i].Feedback,
  568. Value = valveData[i].IsOpen ? "Open" : "Close",
  569. IsEnable = IsEnableMannual,
  570. });
  571. }
  572. }
  573. else
  574. {
  575. for (int i = 0; i < valveData.Count; i++)
  576. {
  577. ValveDetailDatas[i].Name = valveData[i].DeviceName;
  578. ValveDetailDatas[i].DisplayName = valveData[i].DisplayName;
  579. ValveDetailDatas[i].Feedback = valveData[i].Feedback;
  580. ValveDetailDatas[i].Value = valveData[i].IsOpen ? "Open" : "Close";
  581. ValveDetailDatas[i].IsEnable = IsEnableMannual;
  582. }
  583. }
  584. //if (APCDetailDatas.Count == 0)
  585. //{
  586. // for (int i = 0; i < apcData.Count; i++)
  587. // {
  588. // APCDetailDatas.Add(new MFMDetailValue()
  589. // {
  590. // Name = apcData[i].DeviceName,
  591. // DisplayName = apcData[i].DisplayName,
  592. // Unit = apcData[i].UnitPressure,
  593. // Setpoint = apcData[i].PressureSetPoint.ToString("F3"),
  594. // Feedback = apcData[i].PressureFeedback.ToString("F3"),
  595. // AlarmTable = string.IsNullOrEmpty(apcData[i].AlarmWatchTable) ? "None" : apcData[i].AlarmWatchTable,
  596. // });
  597. // }
  598. // APCDetailDatas.Add(new MFMDetailValue()
  599. // {
  600. // Name = VG2Pressure.DeviceName,
  601. // DisplayName = VG2Pressure.DisplayName,
  602. // Unit = VG2Pressure.Unit,
  603. // Setpoint = "0.000",
  604. // Feedback = VG2Pressure.FeedBack.ToString("F3"),
  605. // AlarmTable = "None",
  606. // });
  607. //}
  608. //else
  609. //{
  610. // for (int i = 0; i < apcData.Count - 1; i++)
  611. // {
  612. // APCDetailDatas[i].Name = apcData[i].DeviceName;
  613. // APCDetailDatas[i].DisplayName = apcData[i].DisplayName;
  614. // APCDetailDatas[i].Unit = apcData[i].UnitPressure;
  615. // APCDetailDatas[i].Setpoint = apcData[i].PressureSetPoint.ToString("F3");
  616. // APCDetailDatas[i].Feedback = apcData[i].PressureFeedback.ToString("F3");
  617. // APCDetailDatas[i].AlarmTable = string.IsNullOrEmpty(apcData[i].AlarmWatchTable) ? "None" : apcData[i].AlarmWatchTable;
  618. // }
  619. // APCDetailDatas[1].Name = VG2Pressure.DeviceName;
  620. // APCDetailDatas[1].DisplayName = VG2Pressure.DisplayName;
  621. // APCDetailDatas[1].Unit = VG2Pressure.Unit;
  622. // APCDetailDatas[1].Feedback = VG2Pressure.FeedBack.ToString("F3");
  623. //}
  624. //if (AnalogDetailDatas.Count == 0)
  625. //{
  626. // for (int i = 0; i < analogData.Count; i++)
  627. // {
  628. // AnalogDetailDatas.Add(new AnalogDetailValue()
  629. // {
  630. // Name = analogData[i].DeviceName,
  631. // DisplayName = analogData[i].DisplayName,
  632. // Unit = analogData[i].Unit,
  633. // Feedback = analogData[i].FeedBack.ToString("F3"),
  634. // });
  635. // }
  636. //}
  637. //else
  638. //{
  639. // for (int i = 0; i < analogData.Count; i++)
  640. // {
  641. // AnalogDetailDatas[i].Name = analogData[i].DeviceName;
  642. // AnalogDetailDatas[i].DisplayName = analogData[i].DisplayName;
  643. // AnalogDetailDatas[i].Unit = analogData[i].Unit;
  644. // AnalogDetailDatas[i].Feedback = analogData[i].FeedBack.ToString("F3");
  645. // }
  646. //}
  647. }
  648. public void MFCSetCmd(object senderName, object sender, object typeName,double maxValue)
  649. {
  650. string name = senderName.ToString();
  651. var control = (Button)sender;
  652. switch (typeName.ToString())
  653. {
  654. case "Setpoint":
  655. var windowManager = IoC.Get<IWindowManager>();
  656. RecipeFlowSettingViewModel recipeFlowSettingViewModel = new RecipeFlowSettingViewModel();
  657. recipeFlowSettingViewModel.SelectMfcFlow = name.ToUpper();
  658. recipeFlowSettingViewModel.SelectFlowValue = control.Content.ToString();
  659. recipeFlowSettingViewModel.MaxValue = maxValue;
  660. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeFlowSettingViewModel, null, "GasDetail Flow Setting"))
  661. {
  662. MFCDetailDatas.Where(x => x.Name == name).FirstOrDefault().Setpoint = recipeFlowSettingViewModel.SelectFlow;
  663. }
  664. break;
  665. case "Ramping":
  666. string strRetValue = ShowNumberKeyboard(sender as Button, "");
  667. if (strRetValue != "Cancel")
  668. {
  669. MFCDetailDatas.Where(x => x.Name == name).FirstOrDefault().Ramping = strRetValue;
  670. }
  671. break;
  672. case "AlarmTable":
  673. RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFCDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable);
  674. WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;
  675. if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;
  676. MFCDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable = view.CurrentValue;
  677. break;
  678. }
  679. }
  680. public void MFMSetCmd(object senderName, object sender, object typeName)
  681. {
  682. string name = senderName.ToString();
  683. switch (typeName.ToString())
  684. {
  685. case "Setpoint":
  686. string strRetValue = ShowNumberKeyboard(sender as Button, "");
  687. if (strRetValue != "Cancel")
  688. {
  689. MFMDetailDatas.Where(x => x.Name == name).FirstOrDefault().Setpoint = strRetValue;
  690. }
  691. break;
  692. case "AlarmTable":
  693. RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(MFMDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable);
  694. WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;
  695. if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;
  696. MFMDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable = view.CurrentValue;
  697. break;
  698. }
  699. }
  700. public void ValveSetCmd(object senderName)
  701. {
  702. string name = senderName.ToString();
  703. SwitchDialog dlg = new SwitchDialog();
  704. dlg.IsOpen = ValveDetailDatas.Where(x => x.Name == name).FirstOrDefault().Value == "Open";
  705. dlg.WindowStartupLocation = WindowStartupLocation.CenterScreen;
  706. dlg.ShowDialog();
  707. if (dlg.IsSave)
  708. {
  709. ValveDetailDatas.Where(x => x.Name == name).FirstOrDefault().Value = dlg.IsOpen ? "Open" : "Close";
  710. }
  711. }
  712. public void APCSetCmd(object senderName, object sender, object typeName)
  713. {
  714. string name = senderName.ToString();
  715. switch (typeName.ToString())
  716. {
  717. case "Setpoint":
  718. string strRetValue = ShowNumberKeyboard(sender as Button, "");
  719. if (strRetValue != "Cancel")
  720. {
  721. APCDetailDatas.Where(x => x.Name == name).FirstOrDefault().Setpoint = strRetValue;
  722. }
  723. break;
  724. case "AlarmTable":
  725. RecipeGASSettingMFCAlarmViewModel view = new RecipeGASSettingMFCAlarmViewModel(APCDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable);
  726. WindowManager wm = IoC.Get<IWindowManager>() as WindowManager;
  727. if (!(bool)wm.ShowDialogWithTitle(view, null, "Select Flow Alarm Table")) break;
  728. APCDetailDatas.Where(x => x.Name == name).FirstOrDefault().AlarmTable = view.CurrentValue;
  729. break;
  730. }
  731. }
  732. private string ShowNumberKeyboard(Control control, string defaultValue)
  733. {
  734. NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue);
  735. var point = control.PointFromScreen(new Point(0, 0));
  736. double wx = SystemParameters.WorkArea.Width;
  737. double hy = SystemParameters.WorkArea.Height;
  738. if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy)
  739. {
  740. numberKeyboard.Top = -point.Y + control.ActualHeight + 5;
  741. }
  742. else
  743. {
  744. numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;
  745. }
  746. if (-point.X + numberKeyboard.Width < wx)
  747. {
  748. numberKeyboard.Left = -point.X;
  749. }
  750. else
  751. {
  752. numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);
  753. }
  754. if ((bool)numberKeyboard.ShowDialog())
  755. return numberKeyboard.ValueString;
  756. else
  757. return "Cancel";
  758. }
  759. public void GASSettingSelectCmd(string cmd)
  760. {
  761. GridMFCVisibility = Visibility.Hidden;
  762. GridMFMVisibility = Visibility.Hidden;
  763. GridValveVisibility = Visibility.Hidden;
  764. GridAPCVisibility = Visibility.Hidden;
  765. GridAnalogVisibility = Visibility.Hidden;
  766. switch (cmd)
  767. {
  768. case "MFC":
  769. GridMFCVisibility = Visibility.Visible;
  770. break;
  771. case "MFM":
  772. GridMFMVisibility = Visibility.Visible;
  773. break;
  774. case "Valve":
  775. GridValveVisibility = Visibility.Visible;
  776. break;
  777. case "APC":
  778. GridAPCVisibility = Visibility.Visible;
  779. break;
  780. case "Analog":
  781. GridAnalogVisibility = Visibility.Visible;
  782. break;
  783. default:
  784. break;
  785. }
  786. }
  787. public void MannualSelectCmd()
  788. {
  789. _mannualSelectCount++;
  790. if (_mannualSelectCount % 2 == 0)
  791. {
  792. IsEnableMannual = false;
  793. }
  794. else
  795. {
  796. IsEnableMannual = true;
  797. }
  798. UpdateFlowValue();
  799. }
  800. public void ExecCmd()
  801. {
  802. if (!DialogBox.Confirm("Ara you sure to execute?"))
  803. return;
  804. for (int i = 0; i < MFCDetailDatas.Count; i++)
  805. {
  806. InvokeClient.Instance.Service.DoOperation($"CHM.{MFCDetailDatas[i].Name}.SetMfcValue", $"{MFCDetailDatas[i].Setpoint};{MFCDetailDatas[i].Ramping};{MFCDetailDatas[i].AlarmTable}");
  807. }
  808. for (int i = 0; i < MFMDetailDatas.Count; i++)
  809. {
  810. InvokeClient.Instance.Service.DoOperation($"CHM.{MFMDetailDatas[i].Name}.SetMfmValue", $"{MFMDetailDatas[i].Setpoint};{MFMDetailDatas[i].AlarmTable}");
  811. }
  812. for (int i = 0; i < ValveDetailDatas.Count; i++)
  813. {
  814. InvokeClient.Instance.Service.DoOperation($"CHM.{ValveDetailDatas[i].Name}.{AITValveOperation.GVTurnValve}", ValveDetailDatas[i].Value == "Open");
  815. }
  816. _mannualSelectCount = 0;
  817. IsEnableMannual = false;
  818. }
  819. public void CloseCmd()
  820. {
  821. ((Window)GetView()).DialogResult = false;
  822. }
  823. }
  824. public class AnalogDetailValue : PropertyChangedBase
  825. {
  826. private string _name;
  827. public string Name
  828. {
  829. get => _name;
  830. set
  831. {
  832. _name = value;
  833. NotifyOfPropertyChange("Name");
  834. }
  835. }
  836. private string _displayName;
  837. public string DisplayName
  838. {
  839. get => _displayName;
  840. set
  841. {
  842. _displayName = value;
  843. NotifyOfPropertyChange("DisplayName");
  844. }
  845. }
  846. public string _unit;
  847. public string Unit
  848. {
  849. get => _unit;
  850. set
  851. {
  852. _unit = value;
  853. NotifyOfPropertyChange("Unit");
  854. }
  855. }
  856. private string _feedback;
  857. public string Feedback
  858. {
  859. get => _feedback;
  860. set
  861. {
  862. _feedback = value;
  863. NotifyOfPropertyChange("Feedback");
  864. }
  865. }
  866. }
  867. public class ValveDetailValue : PropertyChangedBase
  868. {
  869. private string _name;
  870. public string Name
  871. {
  872. get => _name;
  873. set
  874. {
  875. _name = value;
  876. NotifyOfPropertyChange("Name");
  877. }
  878. }
  879. private string _displayName;
  880. public string DisplayName
  881. {
  882. get => _displayName;
  883. set
  884. {
  885. _displayName = value;
  886. NotifyOfPropertyChange("DisplayName");
  887. }
  888. }
  889. private string _value;
  890. public string Value
  891. {
  892. get => _value;
  893. set
  894. {
  895. _value = value;
  896. NotifyOfPropertyChange("Value");
  897. }
  898. }
  899. private bool _feedback;
  900. public bool Feedback
  901. {
  902. get => _feedback;
  903. set
  904. {
  905. _feedback = value;
  906. NotifyOfPropertyChange("Feedback");
  907. }
  908. }
  909. private bool _isEnable=true;
  910. public bool IsEnable
  911. {
  912. get => _isEnable;
  913. set
  914. {
  915. _isEnable = value;
  916. NotifyOfPropertyChange("IsEnable");
  917. }
  918. }
  919. }
  920. public class MFMDetailValue : PropertyChangedBase
  921. {
  922. private string _name;
  923. public string Name
  924. {
  925. get => _name;
  926. set
  927. {
  928. _name = value;
  929. NotifyOfPropertyChange("Name");
  930. }
  931. }
  932. private string _displayName;
  933. public string DisplayName
  934. {
  935. get => _displayName;
  936. set
  937. {
  938. _displayName = value;
  939. NotifyOfPropertyChange("DisplayName");
  940. }
  941. }
  942. public string _unit;
  943. public string Unit
  944. {
  945. get => _unit;
  946. set
  947. {
  948. _unit = value;
  949. NotifyOfPropertyChange("Unit");
  950. }
  951. }
  952. private string _setpoint;
  953. public string Setpoint
  954. {
  955. get => _setpoint;
  956. set
  957. {
  958. _setpoint = value;
  959. NotifyOfPropertyChange("Setpoint");
  960. }
  961. }
  962. private string _feedback;
  963. public string Feedback
  964. {
  965. get => _feedback;
  966. set
  967. {
  968. _feedback = value;
  969. NotifyOfPropertyChange("Feedback");
  970. }
  971. }
  972. private string _alarmTable;
  973. public string AlarmTable
  974. {
  975. get => _alarmTable; set
  976. {
  977. _alarmTable = value;
  978. NotifyOfPropertyChange("AlarmTable");
  979. }
  980. }
  981. }
  982. public class MFCDetailValue : PropertyChangedBase
  983. {
  984. private string _name;
  985. public string Name
  986. {
  987. get => _name;
  988. set
  989. {
  990. _name = value;
  991. NotifyOfPropertyChange("Name");
  992. }
  993. }
  994. private string _displayName;
  995. public string DisplayName
  996. {
  997. get => _displayName;
  998. set
  999. {
  1000. _displayName = value;
  1001. NotifyOfPropertyChange("DisplayName");
  1002. }
  1003. }
  1004. public string _unit;
  1005. public string Unit
  1006. {
  1007. get => _unit;
  1008. set
  1009. {
  1010. _unit = value;
  1011. NotifyOfPropertyChange("Unit");
  1012. }
  1013. }
  1014. private string _setpoint;
  1015. public string Setpoint
  1016. {
  1017. get => _setpoint;
  1018. set
  1019. {
  1020. _setpoint = value;
  1021. NotifyOfPropertyChange("Setpoint");
  1022. }
  1023. }
  1024. private string _feedback;
  1025. public string Feedback
  1026. {
  1027. get => _feedback;
  1028. set
  1029. {
  1030. _feedback = value;
  1031. NotifyOfPropertyChange("Feedback");
  1032. }
  1033. }
  1034. private string _ramping;
  1035. public string Ramping
  1036. {
  1037. get => _ramping;
  1038. set
  1039. {
  1040. _ramping = value;
  1041. NotifyOfPropertyChange("Ramping");
  1042. }
  1043. }
  1044. private string _alarmTable;
  1045. public string AlarmTable
  1046. {
  1047. get => _alarmTable; set
  1048. {
  1049. _alarmTable = value;
  1050. NotifyOfPropertyChange("AlarmTable");
  1051. }
  1052. }
  1053. private double _maxValue;
  1054. public double MaxValue
  1055. {
  1056. get { return _maxValue; }
  1057. set {
  1058. _maxValue = value;
  1059. NotifyOfPropertyChange("MaxValue");
  1060. }
  1061. }
  1062. }
  1063. }