TemperatureDetailViewModel.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Aitex.Core.Util;
  5. using Aitex.Core.Common.DeviceData;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using FurnaceUI.Models;
  10. using Caliburn.Micro;
  11. using Caliburn.Micro.Core;
  12. using System.Windows.Controls;
  13. using MECF.Framework.UI.Client.CenterViews.Dialogs;
  14. using FurnaceUI.Views.Editors;
  15. using OpenSEMI.ClientBase;
  16. using MECF.Framework.Common.OperationCenter;
  17. using FurnaceUI.Client;
  18. using MECF.Framework.Common.DataCenter;
  19. namespace FurnaceUI.Views.Operations
  20. {
  21. public class TemperatureDetailViewModel : FurnaceUIViewModelBase
  22. {
  23. public bool IsManagerPermission { get; set; } = false;
  24. public bool IsLspMode { get; set; } = false;
  25. [Subscription("System.Heater1.DeviceData")]
  26. public AITHeaterData Heater1Data { get; set; }
  27. [Subscription("System.Heater2.DeviceData")]
  28. public AITHeaterData Heater2Data { get; set; }
  29. [Subscription("System.Heater3.DeviceData")]
  30. public AITHeaterData Heater3Data { get; set; }
  31. [Subscription("System.Heater4.DeviceData")]
  32. public AITHeaterData Heater4Data { get; set; }
  33. [Subscription("System.Heater5.DeviceData")]
  34. public AITHeaterData Heater5Data { get; set; }
  35. [Subscription("PM1.BottomHeaterData")]
  36. public AITHeaterData BottomHeaterData { get; set; }
  37. [Subscription("PM1.CenterBottomHeaterData")]
  38. public AITHeaterData CenterBottomHeaterData { get; set; }
  39. [Subscription("PM1.CenterHeaterData")]
  40. public AITHeaterData CenterHeaterData { get; set; }
  41. [Subscription("PM1.TopCenterHeaterData")]
  42. public AITHeaterData TopCenterHeaterData { get; set; }
  43. [Subscription("PM1.TopHeaterData")]
  44. public AITHeaterData TopHeaterData { get; set; }
  45. [Subscription("PM1.Status")]
  46. public string PM1Status { get; set; }
  47. [Subscription("PM1.RecipeHold")]
  48. public bool PM1RecipeHold { get; set; }
  49. public bool IsMannualButtonEnabled
  50. {
  51. get
  52. {
  53. return PM1Status != "Process" || (PM1Status == "Process" && PM1RecipeHold);
  54. }
  55. }
  56. #region AnaLog
  57. [Subscription("PM1.HTCurrent1.DeviceData")]
  58. public AITWaterFlowMeterData HTCurrent1 { get; set; }
  59. [Subscription("PM1.HTCurrent2.DeviceData")]
  60. public AITWaterFlowMeterData HTCurrent2 { get; set; }
  61. [Subscription("PM1.HTCurrent3.DeviceData")]
  62. public AITWaterFlowMeterData HTCurrent3 { get; set; }
  63. [Subscription("PM1.HTCurrent4.DeviceData")]
  64. public AITWaterFlowMeterData HTCurrent4 { get; set; }
  65. [Subscription("PM1.HTCurrent5.DeviceData")]
  66. public AITWaterFlowMeterData HTCurrent5 { get; set; }
  67. [Subscription("PM1.HTVoltage1.DeviceData")]
  68. public AITWaterFlowMeterData HTVoltage1 { get; set; }
  69. [Subscription("PM1.HTVoltage2.DeviceData")]
  70. public AITWaterFlowMeterData HTVoltage2 { get; set; }
  71. [Subscription("PM1.HTVoltage3.DeviceData")]
  72. public AITWaterFlowMeterData HTVoltage3 { get; set; }
  73. [Subscription("PM1.HTVoltage4.DeviceData")]
  74. public AITWaterFlowMeterData HTVoltage4 { get; set; }
  75. [Subscription("PM1.HTVoltage5.DeviceData")]
  76. public AITWaterFlowMeterData HTVoltage5 { get; set; }
  77. public string HTCurrent1Feedback { get; set; }
  78. public string HTCurrent2Feedback { get; set; }
  79. public string HTCurrent3Feedback { get; set; }
  80. public string HTCurrent4Feedback { get; set; }
  81. public string HTCurrent5Feedback { get; set; }
  82. public string HTVoltage1Feedback { get; set; }
  83. public string HTVoltage2Feedback { get; set; }
  84. public string HTVoltage3Feedback { get; set; }
  85. public string HTVoltage4Feedback { get; set; }
  86. public string HTVoltage5Feedback { get; set; }
  87. #endregion
  88. public Dictionary<string, double> _dicTemperatualMaxValue;
  89. private string _topHeaterSetPoint;
  90. public string TopHeaterSetPoint
  91. {
  92. get { return _topHeaterSetPoint; }
  93. set
  94. {
  95. _topHeaterSetPoint = value;
  96. NotifyOfPropertyChange("TopHeaterSetPoint");
  97. }
  98. }
  99. private string _topCenterHeaterSetPoint;
  100. public string TopCenterHeaterSetPoint
  101. {
  102. get { return _topCenterHeaterSetPoint; }
  103. set
  104. {
  105. _topCenterHeaterSetPoint = value;
  106. NotifyOfPropertyChange("TopCenterHeaterSetPoint");
  107. }
  108. }
  109. private string _centerHeaterSetPoint;
  110. public string CenterHeaterSetPoint
  111. {
  112. get { return _centerHeaterSetPoint; }
  113. set
  114. {
  115. _centerHeaterSetPoint = value;
  116. NotifyOfPropertyChange("CenterHeaterSetPoint");
  117. }
  118. }
  119. private string _centerBottomHeaterSetPoint;
  120. public string CenterBottomHeaterSetPoint
  121. {
  122. get { return _centerBottomHeaterSetPoint; }
  123. set
  124. {
  125. _centerBottomHeaterSetPoint = value;
  126. NotifyOfPropertyChange("CenterBottomHeaterSetPoint");
  127. }
  128. }
  129. private string _bottomHeaterSetPoint;
  130. public string BottomHeaterSetPoint
  131. {
  132. get { return _bottomHeaterSetPoint; }
  133. set
  134. {
  135. _bottomHeaterSetPoint = value;
  136. NotifyOfPropertyChange("BottomHeaterSetPoint");
  137. }
  138. }
  139. private bool _isEnableMannual = false;
  140. public bool IsEnableMannual
  141. {
  142. get => _isEnableMannual;
  143. set
  144. {
  145. _isEnableMannual = value;
  146. NotifyOfPropertyChange(nameof(IsEnableMannual));
  147. }
  148. }
  149. private int _mannualSelectCount;
  150. private string _lspModel;
  151. public string LspModel
  152. {
  153. get => _lspModel;
  154. set
  155. {
  156. _lspModel = value;
  157. NotifyOfPropertyChange(nameof(LspModel));
  158. }
  159. }
  160. private string _topHeaterRampSetPoint;
  161. public string TopHeaterRampSetPoint
  162. {
  163. get => _topHeaterRampSetPoint;
  164. set
  165. {
  166. _topHeaterRampSetPoint = value;
  167. NotifyOfPropertyChange(nameof(TopHeaterRampSetPoint));
  168. }
  169. }
  170. private string _topCenterHeaterRampSetPoint;
  171. public string TopCenterHeaterRampSetPoint
  172. {
  173. get => _topCenterHeaterRampSetPoint;
  174. set
  175. {
  176. _topCenterHeaterRampSetPoint = value;
  177. NotifyOfPropertyChange(nameof(TopCenterHeaterRampSetPoint));
  178. }
  179. }
  180. private string _centerHeaterRampSetPoint;
  181. public string CenterHeaterRampSetPoint
  182. {
  183. get => _centerHeaterRampSetPoint;
  184. set
  185. {
  186. _centerHeaterRampSetPoint = value;
  187. NotifyOfPropertyChange(nameof(CenterHeaterRampSetPoint));
  188. }
  189. }
  190. private string _bottomCenterHeaterRampSetPoint;
  191. public string BottomCenterHeaterRampSetPoint
  192. {
  193. get => _bottomCenterHeaterRampSetPoint;
  194. set
  195. {
  196. _bottomCenterHeaterRampSetPoint = value;
  197. NotifyOfPropertyChange(nameof(BottomCenterHeaterRampSetPoint));
  198. }
  199. }
  200. private string _bottomHeaterRampSetPoint;
  201. public string BottomHeaterRampSetPoint
  202. {
  203. get => _bottomHeaterRampSetPoint;
  204. set
  205. {
  206. _bottomHeaterRampSetPoint = value;
  207. NotifyOfPropertyChange(nameof(BottomHeaterRampSetPoint));
  208. }
  209. }
  210. //public string ProfileTable
  211. //{
  212. // get
  213. // {
  214. // return (string.IsNullOrEmpty(Heater2Data.ProfileTable) || Heater2Data.ProfileTable == "None") ? "None" : Heater2Data.ProfileTable;
  215. // }
  216. //}
  217. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  218. {
  219. if (!IsEnableMannual)
  220. {
  221. //LspModel= Heater2Data.IsLspModeFeedBack ? "Outer Control" : "Inner Control";
  222. //InitSetPoint();
  223. //InitRampRate();
  224. }
  225. }
  226. public void InitSetPoint()
  227. {
  228. TopHeaterSetPoint = TopHeaterData.SetPoint.ToString("F1");
  229. TopCenterHeaterSetPoint = TopCenterHeaterData.SetPoint.ToString("F1");
  230. CenterHeaterSetPoint = CenterHeaterData.SetPoint.ToString("F1");
  231. CenterBottomHeaterSetPoint = CenterBottomHeaterData.SetPoint.ToString("F1");
  232. BottomHeaterSetPoint = BottomHeaterData.SetPoint.ToString("F1");
  233. HTCurrent1Feedback = HTCurrent1?.FeedBack.ToString("F3");
  234. HTCurrent2Feedback = HTCurrent2?.FeedBack.ToString("F3");
  235. HTCurrent3Feedback = HTCurrent3?.FeedBack.ToString("F3");
  236. HTCurrent4Feedback = HTCurrent4?.FeedBack.ToString("F3");
  237. HTCurrent5Feedback = HTCurrent5?.FeedBack.ToString("F3");
  238. HTVoltage1Feedback = HTVoltage1?.FeedBack.ToString("F3");
  239. HTVoltage2Feedback = HTVoltage2?.FeedBack.ToString("F3");
  240. HTVoltage3Feedback = HTVoltage3?.FeedBack.ToString("F3");
  241. HTVoltage4Feedback = HTVoltage4?.FeedBack.ToString("F3");
  242. HTVoltage5Feedback = HTVoltage5?.FeedBack.ToString("F3");
  243. }
  244. public void InitRampRate()
  245. {
  246. TopHeaterRampSetPoint = CompterRampPoint(TopHeaterData).ToString("F1");
  247. TopCenterHeaterRampSetPoint = CompterRampPoint(TopCenterHeaterData).ToString("F1");
  248. CenterHeaterRampSetPoint = CompterRampPoint(CenterHeaterData).ToString("F1");
  249. BottomCenterHeaterRampSetPoint = CompterRampPoint(CenterBottomHeaterData).ToString("F1");
  250. BottomHeaterRampSetPoint = CompterRampPoint(BottomHeaterData).ToString("F1");
  251. }
  252. protected override void OnInitialize()
  253. {
  254. base.OnInitialize();
  255. string[] strTempsNames = { "Heater1", "Heater3", "Heater5", "Heater7", "Heater9", "Heater2", "Heater4", "Heater6", "Heater8", "Heater10" };
  256. _dicTemperatualMaxValue = new Dictionary<string, double>();
  257. //获取温度限制配置信息
  258. for (int i = 0; i < strTempsNames.Length; i++)
  259. {
  260. object obj = QueryDataClient.Instance.Service.GetConfig($"PM1.Heater.{strTempsNames[i]}.Range");
  261. _dicTemperatualMaxValue.Add(strTempsNames[i],Convert.ToDouble(obj));
  262. }
  263. }
  264. public void MannualSelectCmd()
  265. {
  266. _mannualSelectCount++;
  267. if (_mannualSelectCount == 1)
  268. {
  269. IsEnableMannual = true;
  270. }
  271. else
  272. {
  273. _mannualSelectCount = 0;
  274. IsEnableMannual = false;
  275. }
  276. }
  277. public double CompterRampPoint(AITHeaterData data)
  278. {
  279. if(data.IsLspModeFeedBack)
  280. {
  281. return data.FeedBack >= data.SetPoint ? data.LspDecreaseRampRateFeedBack : data.LspIncreaseRampRateFeedBack;
  282. }
  283. else
  284. {
  285. return data.FeedBack >= data.SetPoint ? data.RspDecreaseRampRateFeedBack : data.RspIncreaseRampRateFeedBack;
  286. }
  287. }
  288. public void ManualCmd()
  289. {
  290. //((Window)GetView()).DialogResult = true;
  291. var wm = IoC.Get<IWindowManager>();
  292. SetTemperatureViewModel setTemperatureViewModel = new SetTemperatureViewModel();
  293. (wm as WindowManager)?.ShowDialogWithTitle(setTemperatureViewModel, null, "Set Temperature");
  294. }
  295. public void SetCmd(object senderName, object sender, object typeName)
  296. {
  297. double temval = 0;
  298. string name = senderName.ToString();
  299. switch (typeName.ToString())
  300. {
  301. case "setpoint":
  302. double maxvalue = 0;
  303. string tName = GetTempratualMaxValue(name);
  304. if (!string.IsNullOrEmpty(tName))
  305. {
  306. maxvalue = _dicTemperatualMaxValue[tName];
  307. }
  308. string strRetValue = ShowNumberKeyboard(sender as Button, "",true, maxvalue);
  309. if (strRetValue != "Cancel")
  310. {
  311. //if (double.TryParse(strRetValue, out temval))
  312. {
  313. SelectPostionSetPoint(name, strRetValue);
  314. }
  315. }
  316. break;
  317. case "ramp":
  318. strRetValue = ShowNumberKeyboard(sender as Button,"",false,0);
  319. if (strRetValue != "Cancel")
  320. {
  321. //if (double.TryParse(strRetValue, out temval))
  322. {
  323. SelectPositionRamp(name, strRetValue);
  324. }
  325. }
  326. break;
  327. }
  328. }
  329. private string GetTempratualMaxValue(string typeName)
  330. {
  331. string dicName = string.Empty;
  332. bool isLspMode = LspModel!= "Outer Control";
  333. switch (typeName)
  334. {
  335. case "TopHeater":
  336. dicName = isLspMode ? "Heater1" : "Heater2";
  337. break;
  338. case "TopCenterHeater":
  339. dicName = isLspMode ? "Heater3" : "Heater4";
  340. break;
  341. case "CenterHeater":
  342. dicName = isLspMode ? "Heater5" : "Heater6";
  343. break;
  344. case "CenterBottomHeater":
  345. dicName = isLspMode ? "Heater7" : "Heater8";
  346. break;
  347. case "BottomHeater":
  348. dicName = isLspMode ? "Heater9" : "Heater10";
  349. break;
  350. }
  351. return dicName;
  352. }
  353. private void SelectPostionSetPoint(string name,string value)
  354. {
  355. switch (name)
  356. {
  357. case "TopHeater":
  358. TopHeaterSetPoint = value;
  359. break;
  360. case "TopCenterHeater":
  361. TopCenterHeaterSetPoint = value;
  362. break;
  363. case "CenterHeater":
  364. CenterHeaterSetPoint = value;
  365. break;
  366. case "CenterBottomHeater":
  367. CenterBottomHeaterSetPoint = value;
  368. break;
  369. case "BottomHeater":
  370. BottomHeaterSetPoint = value;
  371. break;
  372. }
  373. }
  374. private void SelectPositionRamp(string name, string value)
  375. {
  376. switch (name)
  377. {
  378. case "TopHeater":
  379. TopHeaterRampSetPoint = value;
  380. break;
  381. case "TopCenterHeater":
  382. TopCenterHeaterRampSetPoint = value;
  383. break;
  384. case "CenterHeater":
  385. CenterHeaterRampSetPoint = value;
  386. break;
  387. case "CenterBottomHeater":
  388. BottomCenterHeaterRampSetPoint = value;
  389. break;
  390. case "BottomHeater":
  391. BottomHeaterRampSetPoint = value;
  392. break;
  393. }
  394. }
  395. private string ShowNumberKeyboard(Control control, string defaultValue,bool isValidate,double maxValue=double.MaxValue)
  396. {
  397. NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue);
  398. var point = control.PointFromScreen(new Point(0, 0));
  399. double wx = SystemParameters.WorkArea.Width;
  400. double hy = SystemParameters.WorkArea.Height;
  401. if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy)
  402. {
  403. numberKeyboard.Top = -point.Y + control.ActualHeight + 5;
  404. }
  405. else
  406. {
  407. numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;
  408. }
  409. if (-point.X + numberKeyboard.Width < wx)
  410. {
  411. numberKeyboard.Left = -point.X;
  412. }
  413. else
  414. {
  415. numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);
  416. }
  417. if ((bool)numberKeyboard.ShowDialog())
  418. return numberKeyboard.ValueString;
  419. else
  420. return "Cancel";
  421. }
  422. public void SelectControlMode()
  423. {
  424. var windowManager = IoC.Get<IWindowManager>();
  425. RecipeConditionCheckConModeViewModel recipeConditionCheckConModeViewModel = new RecipeConditionCheckConModeViewModel();
  426. recipeConditionCheckConModeViewModel.SelectControlMode = LspModel;
  427. var result = (windowManager as WindowManager)?.ShowDialogWithTitle(recipeConditionCheckConModeViewModel, null, "Temperature Control Mode Setting");
  428. LspModel = recipeConditionCheckConModeViewModel.SelectControlMode;
  429. }
  430. public void AllZone(string obj)
  431. {
  432. var windowManager = IoC.Get<IWindowManager>();
  433. TemperatureDetailAllZoneViewModel temperatureDetailAllZoneViewModel = new TemperatureDetailAllZoneViewModel();
  434. switch (obj)
  435. {
  436. case "Set":
  437. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(temperatureDetailAllZoneViewModel, null, "Temperature Value Set"))
  438. {
  439. TopHeaterSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  440. TopCenterHeaterSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  441. CenterHeaterSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  442. CenterBottomHeaterSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  443. BottomHeaterSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  444. }
  445. break;
  446. case "Ramp":
  447. if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(temperatureDetailAllZoneViewModel, null, "Temperature Ramp Set"))
  448. {
  449. TopHeaterRampSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  450. TopCenterHeaterRampSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  451. CenterHeaterRampSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  452. BottomCenterHeaterRampSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  453. BottomHeaterRampSetPoint = temperatureDetailAllZoneViewModel.TempSetValue;
  454. }
  455. break;
  456. default:
  457. break;
  458. }
  459. }
  460. public void ExecCmd()
  461. {
  462. if (!DialogBox.Confirm("Ara you sure to execute?"))
  463. return;
  464. if (LspModel != "Outer Control")
  465. {
  466. InvokeClient.Instance.Service.DoOperation("PM1.Heater1.SetParameters", $"{BottomHeaterSetPoint};{BottomHeaterRampSetPoint};inner");
  467. InvokeClient.Instance.Service.DoOperation("PM1.Heater2.SetParameters", $"{BottomHeaterSetPoint};{BottomHeaterRampSetPoint};inner");
  468. InvokeClient.Instance.Service.DoOperation("PM1.Heater3.SetParameters", $"{CenterBottomHeaterSetPoint};{BottomCenterHeaterRampSetPoint};inner");
  469. InvokeClient.Instance.Service.DoOperation("PM1.Heater4.SetParameters", $"{CenterBottomHeaterSetPoint};{BottomCenterHeaterRampSetPoint};inner");
  470. InvokeClient.Instance.Service.DoOperation("PM1.Heater5.SetParameters", $"{CenterHeaterSetPoint};{CenterHeaterRampSetPoint};inner");
  471. InvokeClient.Instance.Service.DoOperation("PM1.Heater6.SetParameters", $"{CenterHeaterSetPoint};{CenterHeaterRampSetPoint};inner");
  472. InvokeClient.Instance.Service.DoOperation("PM1.Heater7.SetParameters", $"{TopCenterHeaterSetPoint};{TopCenterHeaterRampSetPoint};inner");
  473. InvokeClient.Instance.Service.DoOperation("PM1.Heater8.SetParameters", $"{TopCenterHeaterSetPoint};{TopCenterHeaterRampSetPoint};inner");
  474. InvokeClient.Instance.Service.DoOperation("PM1.Heater9.SetParameters", $"{TopHeaterSetPoint};{TopHeaterRampSetPoint};inner");
  475. InvokeClient.Instance.Service.DoOperation("PM1.Heater10.SetParameters", $"{TopHeaterSetPoint};{TopHeaterRampSetPoint};inner");
  476. }
  477. else
  478. {
  479. InvokeClient.Instance.Service.DoOperation("PM1.Heater1.SetParameters", $"{BottomHeaterSetPoint};{BottomHeaterRampSetPoint};outer");
  480. InvokeClient.Instance.Service.DoOperation("PM1.Heater2.SetParameters", $"{BottomHeaterSetPoint};{BottomHeaterRampSetPoint};outer");
  481. InvokeClient.Instance.Service.DoOperation("PM1.Heater3.SetParameters", $"{CenterBottomHeaterSetPoint};{BottomCenterHeaterRampSetPoint};outer");
  482. InvokeClient.Instance.Service.DoOperation("PM1.Heater4.SetParameters", $"{CenterBottomHeaterSetPoint};{BottomCenterHeaterRampSetPoint};outer");
  483. InvokeClient.Instance.Service.DoOperation("PM1.Heater5.SetParameters", $"{CenterHeaterSetPoint};{CenterHeaterRampSetPoint};outer");
  484. InvokeClient.Instance.Service.DoOperation("PM1.Heater6.SetParameters", $"{CenterHeaterSetPoint};{CenterHeaterRampSetPoint};outer");
  485. InvokeClient.Instance.Service.DoOperation("PM1.Heater7.SetParameters", $"{TopCenterHeaterSetPoint};{TopCenterHeaterRampSetPoint};outer");
  486. InvokeClient.Instance.Service.DoOperation("PM1.Heater8.SetParameters", $"{TopCenterHeaterSetPoint};{TopCenterHeaterRampSetPoint};outer");
  487. InvokeClient.Instance.Service.DoOperation("PM1.Heater9.SetParameters", $"{TopHeaterSetPoint};{TopHeaterRampSetPoint};outer");
  488. InvokeClient.Instance.Service.DoOperation("PM1.Heater10.SetParameters", $"{TopHeaterSetPoint};{TopHeaterRampSetPoint};outer");
  489. }
  490. _mannualSelectCount = 0;
  491. IsEnableMannual = false;
  492. }
  493. public void CloseCmd()
  494. {
  495. ClientApp.Instance.SwitchPage("status", "main", null);
  496. }
  497. }
  498. }