Browse Source

fix process导出 按照DisplayReplace文件顺序/支持单元格颜色自定义

jiangjy 1 day ago
parent
commit
cb1dfcca35

+ 82 - 24
FrameworkLocal/UIClient/CenterViews/DataLogs/ProcessHistory/ProcessExportAllViewModel.cs

@@ -13,6 +13,8 @@ using MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory;
 using MECF.Framework.UI.Client.CenterViews.Dialogs;
 using MECF.Framework.UI.Client.CenterViews.Operations.RealTime;
 using MECF.Framework.UI.Client.ClientBase;
+using NPOI.HSSF.UserModel;
+using NPOI.HSSF.Util;
 using NPOI.SS.UserModel;
 using NPOI.XSSF.UserModel;
 using OpenSEMI.ClientBase;
@@ -337,7 +339,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     ProcessDataLotList.Add(item);
                 }
                 if (ProcessDataLotList.Count == 0) { LOG.Warning($"QueryStep:No process data({sql})"); return; }
-    
+
 
                 //   Annotations.Add(VerLine(Media.Brushes.Blue, ProcessDataLotList[0].ProcessBeginTime, Media.Brushes.Blue, $"{ProcessDataLotList[0].RecipeName}"));
 
@@ -555,8 +557,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             List<string> keys = new List<string>(nodeOrigin);
             List<string> pmList = new List<string>();
             List<string> systemList = new List<string>();
+
+
+
             if (keys != null && keys.Count > 0)
             {
+                keys = _processDetailDisplayDic.Keys.Intersect(keys).OrderBy(key => _processDetailDisplayDic.Keys.ToList().IndexOf(key)).ToList();
+
                 foreach (var dataKey in keys)
                 {
                     var dataId = _processDetailDisplayDic.ContainsKey(dataKey) ? _processDetailDisplayDic[dataKey] : dataKey;
@@ -604,7 +611,65 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             return keyValuePairs;
 
         }
+        public class NeedCellColor
+        {
+            public bool IsNeed;
+            public string Color;
+            public short FillForegroundColor;
+            public FillPattern FillPatternShort;
+        }
+        private ICellStyle GetICellStyle(IWorkbook workbook, NeedCellColor needCellColor = null)
+        {
+            ICellStyle cellStyle = workbook.CreateCellStyle();
+            cellStyle.WrapText = true;
+            cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
+            cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
+            cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
+            cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
+            cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
+            cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
+
+            if (needCellColor != null && needCellColor.IsNeed)
+            {
+                //string hexColor = needCellColor.Color;
+                //short colorIndex = GetCustomPaletteColor(workbook, hexColor);
+                cellStyle.FillForegroundColor = needCellColor.FillForegroundColor;
+                cellStyle.FillPattern = needCellColor.FillPatternShort;
+            }
+
+
+            return cellStyle;
 
+        }
+        static short GetCustomPaletteColor(IWorkbook workbook, string hexColor)
+        {
+            if (hexColor.StartsWith("#"))
+            {
+                hexColor = hexColor.Substring(1);
+            }
+
+            int red = Convert.ToInt32(hexColor.Substring(0, 2), 16);
+            int green = Convert.ToInt32(hexColor.Substring(2, 2), 16);
+            int blue = Convert.ToInt32(hexColor.Substring(4, 2), 16);
+
+            HSSFWorkbook hssfWorkbook = (HSSFWorkbook)workbook;
+            HSSFPalette palette = hssfWorkbook.GetCustomPalette();
+
+            try
+            {
+                return palette.FindSimilarColor((byte)red, (byte)green, (byte)blue).Indexed;
+            }
+            catch (Exception)
+            {
+                // 如果找不到相似的颜色,则分配新的调色板索引
+                HSSFColor customColor = palette.FindColor((byte)red, (byte)green, (byte)blue);
+                if (customColor == null)
+                {
+                    customColor = palette.AddColor((byte)red, (byte)green, (byte)blue);
+                }
+                return customColor.Indexed;
+            }
+        }
         private void SaveDataToTable(string fileName, List<string> pmList, List<string> systemList, DateTime startTime, DateTime endTime, ProcessHistoryLot recipeInfo)
         {
             string stepID = "", stepName = "", subRecipeLoopInfo = "", subRecipeStepName = "", subRecipeStepNumber = "", tempCorrection = "", tempPid = "";
@@ -672,14 +737,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             ISheet sheet = workbook.CreateSheet("Sheet1");
             #region style
 
-            ICellStyle cellStyle = workbook.CreateCellStyle();
-            cellStyle.WrapText = true;
-            cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
-            cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
-            cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
-            cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
-            cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
-            cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
+
 
             ICellStyle borderCellStyle = workbook.CreateCellStyle();
             borderCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;//粗线
@@ -737,7 +795,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
 
                 // Create header row
                 IRow headerRow = sheet.CreateRow(rowIndex++);
-                cellIndex = 1;
+                cellIndex = 0;
                 headerRow.HeightInPoints = 35;
                 foreach (var subCol in subColNames)
                 {
@@ -745,7 +803,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
 
                     string headerText = subCol.ColumnName.Replace("(", "\n(");
                     cell.SetCellValue(headerText);
-                    cell.CellStyle = cellStyle;
+                    cell.CellStyle = GetICellStyle(workbook);
                     sheet.SetColumnWidth(cell.ColumnIndex, subCol.ColumnName.Length * 256);
                 }
 
@@ -754,8 +812,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     ICell cell = headerRow.CreateCell(cellIndex++);
                     string headerText = sysCol.Replace("(", "\n(");
                     cell.SetCellValue(headerText);
-
-                    cell.CellStyle = cellStyle;
+                    cell.CellStyle = GetICellStyle(workbook);
                     sheet.SetColumnWidth(cell.ColumnIndex, sysCol.Length * 256);
                 }
 
@@ -764,7 +821,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     ICell cell = headerRow.CreateCell(cellIndex++);
                     string headerText = pmCol.Replace("(", "\n(");
                     cell.SetCellValue(headerText);
-                    cell.CellStyle = cellStyle;
+                    cell.CellStyle = GetICellStyle(workbook);
                     sheet.SetColumnWidth(cell.ColumnIndex, pmCol.Length * 256);
                 }
             }
@@ -783,7 +840,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             {
                 ICell keyCell = dictRow.CreateCell(cellIndex++);
                 keyCell.SetCellValue(kvp.Key);
-                keyCell.CellStyle = cellStyle;
+                keyCell.CellStyle = GetICellStyle(workbook);
             }
 
             rowIndex = 1;
@@ -794,12 +851,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
             {
                 ICell keyCell = dictRow.CreateCell(cellIndex++);
                 keyCell.SetCellValue(kvp.Value);
-                keyCell.CellStyle = cellStyle;
+                keyCell.CellStyle = GetICellStyle(workbook);
                 //sheet.AutoSizeColumn(cellIndex);
                 sheet.SetColumnWidth(cellIndex - 1, kvp.Value.Length * 256);
             }
             int columnIndex = subColNames.Count + 1;
             rowIndex = 5;
+
             for (int i = 0; i < maxRow; i++)
             {
                 IRow dataRow = sheet.CreateRow(rowIndex++);
@@ -822,10 +880,10 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     tempPid = !string.IsNullOrEmpty(tempStepInfo.TempPid) ? tempStepInfo.TempPid : "";
                 }
 
-                cellIndex = 1;
+                cellIndex = 0;
 
                 dataRow.CreateCell(cellIndex++).SetCellValue(dateTimeKey.ToString("yyyy/MM/dd"));
-                dataRow.CreateCell(cellIndex++).SetCellValue(dateTimeKey.ToString("HH:mm:ss.f"));
+                dataRow.CreateCell(cellIndex++).SetCellValue(dateTimeKey.ToString("HH:mm:ss"));
                 dataRow.CreateCell(cellIndex++).SetCellValue(stepID);
                 dataRow.CreateCell(cellIndex++).SetCellValue(stepName);
                 dataRow.CreateCell(cellIndex++).SetCellValue(subRecipeStepName);
@@ -839,13 +897,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     {
                         ICell cell = dataRow.CreateCell(cellIndex++);
                         cell.SetCellValue(systemRow[j].ToString());
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                     for (int j = 0; j < (pmDataTable?.Columns.Count ?? 0); j++)
                     {
                         ICell cell = dataRow.CreateCell(cellIndex++);
                         cell.SetCellValue("");
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                 }
                 else if (pmRow != null && systemRow == null)
@@ -854,7 +912,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     {
                         ICell cell = dataRow.CreateCell(cellIndex++);
                         cell.SetCellValue("");
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                     for (int j = 1; j < pmRow.ItemArray.Length; j++)
                     {
@@ -862,7 +920,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                         if ((headers.Count > cellIndex - 1 - columnIndex) && headers[cellIndex - 1 - columnIndex].StartsWith("Valve."))//TiN需求164
                             cell.SetCellValue(pmRow[j].ToString() == bool.TrueString ? "Open" : "Close");
                         else cell.SetCellValue(pmRow[j].ToString());
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                 }
                 else if (systemDataTable != null)
@@ -871,7 +929,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                     {
                         ICell cell = dataRow.CreateCell(cellIndex++);
                         cell.SetCellValue(systemRow[j].ToString());
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                     for (int j = 1; j < pmRow.ItemArray.Length; j++)
                     {
@@ -879,7 +937,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
                         if ((headers.Count > cellIndex - 1 - columnIndex) && headers[cellIndex - 1 - columnIndex].StartsWith("Valve."))
                             cell.SetCellValue(pmRow[j].ToString() == bool.TrueString ? "Open" : "Close");
                         else cell.SetCellValue(pmRow[j].ToString());
-                        cell.CellStyle = cellStyle;
+                        cell.CellStyle = GetICellStyle(workbook);
                     }
                 }
             }

+ 152 - 141
Furnace/FurnaceRT/Config/DisplayReplace.xml

@@ -40,7 +40,7 @@
 		<Display Name="PM1.N25PurgePressure.Value"					  DisplayName="Pressure.N25PurgePressure.Actual"   />
 		<Display Name="PM1.N26PurgePressure.Value"					  DisplayName="Pressure.N26PurgePressure.Actual"   />
 		<Display Name="PM1.N27PurgePressure.Value" 					  DisplayName="Pressure.N27PurgePressure.Actual"   />
-		
+
 		<Display Name="PM1.PG1.Value" 					  DisplayName="Pressure.PG1.Actual"   />
 		<Display Name="PM1.PG2.Value" 					  DisplayName="Pressure.PG2.Actual"   />
 		<Display Name="PM1.PG3.Value" 					  DisplayName="Pressure.PG3.Actual"   />
@@ -302,14 +302,14 @@
 		<Display Name="PM1.MFC15.Feedback" DisplayName="MFC.MFC15.Actual" />
 		<Display Name="PM1.MFC16.SetPoint" DisplayName="MFC.MFC16.Set" />
 		<Display Name="PM1.MFC16.Feedback" DisplayName="MFC.MFC16.Actual" />
-		
+
 		<Display Name="PM1.MFC17.SetPoint" DisplayName="MFC.MFC17.Set" />
 		<Display Name="PM1.MFC17.Feedback" DisplayName="MFC.MFC17.Actual" />
 		<Display Name="PM1.MFC31.SetPoint" DisplayName="MFC.MFC31.Set" />
 		<Display Name="PM1.MFC31.Feedback" DisplayName="MFC.MFC31.Actual" />
 		<Display Name="PM1.MFC32.SetPoint" DisplayName="MFC.MFC32.Set" />
 		<Display Name="PM1.MFC32.Feedback" DisplayName="MFC.MFC32.Actual" />
-		
+
 		<Display Name="PM1.MFC51.SetPoint" DisplayName="MFC.MFC51.Set" />
 		<Display Name="PM1.MFC51.Feedback" DisplayName="MFC.MFC51.Actual" />
 
@@ -370,39 +370,130 @@
 		<Display Name="System.HeaterL.HeaterControlModeSV" DisplayName="Heater.L.Heater Control Mode SV" />
 	</HistoryGroup>
 	<DetailGroup name="ProcessDetail" display="Process Detail">
-		<Display ColName="PS132(act)" Name="PM1.Tank1Pressure.Value" DisplayName="Pressure.PS132.Actual" />
-		<Display ColName="PS135(act)" Name="PM1.Tank2Pressure.Value" DisplayName="Pressure.PS135.Actual" />
-		<Display ColName="O2(act)" Name="PM1.ConcentrationO2.Value" DisplayName="Pressure.O2.Actual" />
 
-		<Display ColName="PG1(act)"	 Name="PM1.PG1.Value" 		   DisplayName="Pressure.PG1.Actual"   />
-		<Display ColName="PG2(act)"	 Name="PM1.PG2.Value" 		   DisplayName="Pressure.PG2.Actual"   />
-		<Display ColName="PG3(act)"	 Name="PM1.PG3.Value" 		   DisplayName="Pressure.PG3.Actual"   />
-		<Display ColName="PG4(act)"	 Name="PM1.PG4.Value" 		   DisplayName="Pressure.PG4.Actual"   />
-		<Display ColName="PG5(act)"	 Name="PM1.PG5.Value" 		   DisplayName="Pressure.PG5.Actual"   />
-		<Display ColName="PG6(act)"	 Name="PM1.PG6.Value" 		   DisplayName="Pressure.PG6.Actual"   />
-		<Display ColName="PG7(act)"	 Name="PM1.PG7.Value" 		   DisplayName="Pressure.PG7.Actual"   />
-		<Display ColName="PG8(act)"	 Name="PM1.PG8.Value" 		   DisplayName="Pressure.PG8.Actual"   />
-		<Display ColName="PG15(act)"	 Name="PM1.PG15.Value" 		   DisplayName="Pressure.PG15.Actual"   />
-		<Display ColName="PG16(act)"	 Name="PM1.PG16.Value" 		   DisplayName="Pressure.PG16.Actual"   />
-		<Display ColName="PG70(act)"	 Name="PM1.PG70.Value" 		   DisplayName="Pressure.PG70.Actual"   />
-		
+		<Display	ColName="U.Temp(act)[℃]"             Name="System.HeaterU.TempFeedback" DisplayName="Heater.U.Actual" />
+		<Display	ColName="CU.Temp(act)[℃]"             Name="System.HeaterCU.TempFeedback" DisplayName="Heater.CU.Actual" />
+		<Display	ColName="C.Temp(act)[℃]"             Name="System.HeaterC.TempFeedback" DisplayName="Heater.C.Actual" />
+		<Display	ColName="CL.Temp(act)[℃]"           Name="System.HeaterCL.TempFeedback" DisplayName="Heater.CL.Actual" />
+		<Display	ColName="L.Temp(act)[℃]"            Name="System.HeaterL.TempFeedback" DisplayName="Heater.L.Actual" />
+
+		<Display	ColName="U.Temp(set)[℃]"             Name="System.HeaterU.TempSetPoint" DisplayName="Heater.U.Set" />
+		<Display	ColName="CU.Temp(set)[℃]"             Name="System.HeaterCU.TempSetPoint" DisplayName="Heater.CU.Set" />
+		<Display	ColName="C.Temp(set)[℃]"             Name="System.HeaterC.TempSetPoint" DisplayName="Heater.C.Set" />
+		<Display	ColName="CL.Temp(set)[℃]"           Name="System.HeaterCL.TempSetPoint" DisplayName="Heater.CL.Set" />
+		<Display	ColName="L.Temp(set)[℃]"            Name="System.HeaterL.TempSetPoint" DisplayName="Heater.L.Set" />
+
+		<Display	ColName="U.Power(act)[%]"             Name="System.HeaterU.WorkingOutput" DisplayName="Heater.U.Power Output" />
+		<Display	ColName="CU.Power(act)[%]"             Name="System.HeaterCU.WorkingOutput" DisplayName="Heater.CU.Power Output" />
+		<Display	ColName="C.Power(act)[%]"             Name="System.HeaterC.WorkingOutput" DisplayName="Heater.C.Power Output" />
+		<Display	ColName="CL.Power(act)[%]"           Name="System.HeaterCL.WorkingOutput" DisplayName="Heater.CL.Power Output" />
+		<Display	ColName="L.Power(act)[%]"            Name="System.HeaterL.WorkingOutput" DisplayName="Heater.L.Power Output" />
+
+		<Display ColName="U.Cascde(act)[℃]"           Name="System.HeaterU.CascadePV" DisplayName="Heater.U.Cascade PV" />
+		<Display   ColName="CU.Cascde(act)[℃]"           Name="System.HeaterCU.CascadePV" DisplayName="Heater.CU.Cascade PV" />
+		<Display  ColName="C.Cascde(act)[℃]"           Name="System.HeaterC.CascadePV" DisplayName="Heater.C.Cascade PV" />
+		<Display   ColName="CL.Cascde(act)[℃]"         Name="System.HeaterCL.CascadePV" DisplayName="Heater.CL.Cascade PV" />
+		<Display   ColName="L.Cascde(act)[℃]"          Name="System.HeaterL.CascadePV" DisplayName="Heater.L.Cascade PV" />
+
+		<Display ColName="U.Heater(act)[℃]"           Name="System.HeaterU.HeaterPV" DisplayName="Heater.U.Heater PV" />
+		<Display   ColName="CU.Heater(act)[℃]"           Name="System.HeaterCU.HeaterPV" DisplayName="Heater.CU.Heater PV" />
+		<Display  ColName="C.Heater(act)[℃]"           Name="System.HeaterC.HeaterPV" DisplayName="Heater.C.Heater PV" />
+		<Display   ColName="CL.Heater(act)[℃]"         Name="System.HeaterCL.HeaterPV" DisplayName="Heater.CL.Heater PV" />
+		<Display   ColName="L.Heater(act)[℃]"          Name="System.HeaterL.HeaterPV" DisplayName="Heater.L.Heater PV" />
+
+		<Display ColName="U.OverTemp(act)[℃]"         Name="System.HeaterU.OverTemp" DisplayName="Heater.U.Over Temp" />
+		<Display   ColName="CU.ControlMode(set)"          Name="System.HeaterCU.ControlMode" DisplayName="Heater.CU.Control Mode" />
+		<Display  ColName="C.OverTemp(act)[℃]"         Name="System.HeaterC.OverTemp" DisplayName="Heater.C.Over Temp" />
+		<Display   ColName="CL.OverTemp(act)[℃]"       Name="System.HeaterCL.OverTemp" DisplayName="Heater.CL.Over Temp" />
+		<Display   ColName="L.OverTemp(act)[℃]"        Name="System.HeaterL.OverTemp" DisplayName="Heater.L.Over Temp" />
+
+		<Display ColName="U.UpRate(set)[℃/min]"       Name="System.HeaterU.UpRate" DisplayName="Heater.U.Up Rate" />
+		<Display ColName="U.DownRate(set)[℃/min]"     Name="System.HeaterU.DownRate" DisplayName="Heater.U.Down Rate" />
+		<Display ColName="U.ControlMode(set)"          Name="System.HeaterU.ControlMode" DisplayName="Heater.U.Control Mode" />
+		<Display ColName="U.CascadeControlMode(set)"   Name="System.HeaterU.CascadeControlModeSV" DisplayName="Heater.U.Cascade Control Mode SV" />
+		<Display ColName="U.HeaterControlMode(set)"    Name="System.HeaterU.HeaterControlModeSV" DisplayName="Heater.U.Heater Control Mode SV" />
+
+		<Display   ColName="CU.UpRate(set)[℃/min]"       Name="System.HeaterCU.UpRate" DisplayName="Heater.CU.Up Rate" />
+		<Display   ColName="CU.DownRate(set)[℃/min]"     Name="System.HeaterCU.DownRate" DisplayName="Heater.CU.Down Rate" />
+		<Display   ColName="CU.OverTemp(act)[℃]"         Name="System.HeaterCU.OverTemp" DisplayName="Heater.CU.Over Temp" />
+		<Display   ColName="CU.CascadeControlMode(set)"   Name="System.HeaterCU.CascadeControlModeSV" DisplayName="Heater.CU.Cascade Control Mode SV" />
+		<Display   ColName="CU.HeaterControlMode(set)"    Name="System.HeaterCU.HeaterControlModeSV" DisplayName="Heater.CU.Heater Control Mode SV" />
+
+		<Display  ColName="C.UpRate(set)[℃/min]"       Name="System.HeaterC.UpRate" DisplayName="Heater.C.Up Rate" />
+		<Display  ColName="C.DownRate(set)[℃/min]"     Name="System.HeaterC.DownRate" DisplayName="Heater.C.Down Rate" />
+		<Display  ColName="C.ControlMode(set)"          Name="System.HeaterC.ControlMode" DisplayName="Heater.C.Control Mode" />
+		<Display  ColName="C.CascadeControlMode(set)"   Name="System.HeaterC.CascadeControlModeSV" DisplayName="Heater.C.Cascade Control Mode SV" />
+		<Display  ColName="C.HeaterControlMode(set)"    Name="System.HeaterC.HeaterControlModeSV" DisplayName="Heater.C.Heater Control Mode SV" />
+
+		<Display   ColName="CL.UpRate(set)[℃/min]"     Name="System.HeaterCL.UpRate" DisplayName="Heater.CL.Up Rate" />
+		<Display   ColName="CL.DownRate(set)[℃/min]"   Name="System.HeaterCL.DownRate" DisplayName="Heater.CL.Down Rate" />
+		<Display   ColName="CL.ControlMode(set)"        Name="System.HeaterCL.ControlMode" DisplayName="Heater.CL.Control Mode" />
+		<Display   ColName="CL.CascadeControlMode(set)" Name="System.HeaterCL.CascadeControlModeSV" DisplayName="Heater.CL.Cascade Control Mode SV" />
+		<Display   ColName="CL.HeaterControlMode(set)"  Name="System.HeaterCL.HeaterControlModeSV" DisplayName="Heater.CL.Heater Control Mode SV" />
+
+		<Display   ColName="L.UpRate(set)[℃/min]"      Name="System.HeaterL.UpRate" DisplayName="Heater.L.Up Rate" />
+		<Display   ColName="L.DownRate(set)[℃/min]"    Name="System.HeaterL.DownRate" DisplayName="Heater.L.Down Rate" />
+		<Display   ColName="L.ControlMode(set)"         Name="System.HeaterL.ControlMode" DisplayName="Heater.L.Control Mode" />
+		<Display   ColName="L.CascadeControlMode(set)"  Name="System.HeaterL.CascadeControlModeSV" DisplayName="Heater.L.Cascade Control Mode SV" />
+		<Display   ColName="L.HeaterControlMode(set)"   Name="System.HeaterL.HeaterControlModeSV" DisplayName="Heater.L.Heater Control Mode SV" />
+
+
 		<Display ColName="APCPressure(set)" Name="PM1.APC.PressureSetPoint" DisplayName="APC.CKD.Pressure Set" />
 		<Display ColName="APCSensor1(act)" Name="PM1.APC.Pressure1Feedback" DisplayName="APC.CKD.Sensor1" />
 		<Display ColName="APCSensor2(act)" Name="PM1.APC.Pressure2Feedback" DisplayName="APC.CKD.Sensor2" />
-		<Display ColName="VG11(act)" Name="PM1.VG11.Value" DisplayName="APC.VG11.Actual" />
-		<Display ColName="VG13(act)" Name="PM1.VG13.Value" DisplayName="APC.VG13.Actual" />
-		<Display ColName="VG21(act)" Name="PM1.VG21.Value" DisplayName="APC.VG21.Actual" />
-		<Display ColName="VG22(act)" Name="PM1.VG22.Value" DisplayName="APC.VG22.Actual" />
 		<Display ColName="APCMode(act)" Name="PM1.APC.ModeFeedback"     DisplayName="APC.CKD.Mode Actual" />
 		<Display ColName="SlowRate(set)" Name="PM1.APC.SlowRateSetPoint" DisplayName="APC.CKD.SlowRate Set" />
 		<Display ColName="ValveAngle(set)" Name="PM1.APC.PositionSetPoint" DisplayName="APC.CKD.ValveAngle Set" />
 		<Display ColName="ValveAngle(act)" Name="PM1.APC.PositionFeedback" DisplayName="APC.CKD.ValveAngle Actual" />
+
 		<Display ColName="ZAxis.Position(act)" Name="PM1.BoatElevatorServo.CurrentPosition" DisplayName="Boat.BoatElevator.Real" />
 		<Display ColName="ZAxis.Position(set)" Name="PM1.BoatElevatorServo.TargetPosition" DisplayName="Boat.BoatElevator.Target" />
 		<Display ColName="ZAxis.Speed(act)[mm/min]" Name="PM1.BoatElevatorServo.CurrentSpeed" DisplayName="Boat.BoatElevator.Speed" />
 		<Display ColName="RAxis.Position(act)" Name="PM1.BoatRotationServo.CurrentPosition" DisplayName="Boat.BoatRotation.Real" />
 		<Display ColName="RAxis.Position(set)" Name="PM1.BoatRotationServo.TargetPosition" DisplayName="Boat.BoatRotation.Target" />
 		<Display ColName="RAxis.Speed(act)[rpm]" Name="PM1.BoatRotationServo.CurrentSpeed" DisplayName="Boat.BoatRotation.Speed" />
+
+		<Display ColName="MFC1(set)[sccm]"  Name="PM1.MFC1.SetPoint" DisplayName="MFC.MFC1.Set" />
+		<Display ColName="MFC1(act)[sccm]"  Name="PM1.MFC1.Feedback" DisplayName="MFC.MFC1.Actual" />
+		<Display ColName="MFC2(set)[sccm]"  Name="PM1.MFC2.SetPoint" DisplayName="MFC.MFC2.Set" />
+		<Display ColName="MFC2(act)[sccm]"  Name="PM1.MFC2.Feedback" DisplayName="MFC.MFC2.Actual" />
+		<Display ColName="MFC3(set)[sccm]"  Name="PM1.MFC3.SetPoint" DisplayName="MFC.MFC3.Set" />
+		<Display ColName="MFC3(act)[sccm]"  Name="PM1.MFC3.Feedback" DisplayName="MFC.MFC3.Actual" />
+		<Display ColName="MFC4(set)[sccm]"  Name="PM1.MFC4.SetPoint" DisplayName="MFC.MFC4.Set" />
+		<Display ColName="MFC4(act)[sccm]"  Name="PM1.MFC4.Feedback" DisplayName="MFC.MFC4.Actual" />
+		<Display ColName="MFC5(set)[sccm]"  Name="PM1.MFC5.SetPoint" DisplayName="MFC.MFC5.Set" />
+		<Display ColName="MFC5(act)[sccm]"  Name="PM1.MFC5.Feedback" DisplayName="MFC.MFC5.Actual" />
+		<Display ColName="MFC6(set)[sccm]"  Name="PM1.MFC6.SetPoint" DisplayName="MFC.MFC6.Set" />
+		<Display ColName="MFC6(act)[sccm]"  Name="PM1.MFC6.Feedback" DisplayName="MFC.MFC6.Actual" />
+		<Display ColName="MFC7(set)[sccm]"  Name="PM1.MFC7.SetPoint" DisplayName="MFC.MFC7.Set" />
+		<Display ColName="MFC7(act)[sccm]"  Name="PM1.MFC7.Feedback" DisplayName="MFC.MFC7.Actual" />
+		<Display ColName="MFC8(set)[sccm]"  Name="PM1.MFC8.SetPoint" DisplayName="MFC.MFC8.Set" />
+		<Display ColName="MFC8(act)[sccm]"  Name="PM1.MFC8.Feedback" DisplayName="MFC.MFC8.Actual" />
+		<Display ColName="MFC9(set)[sccm]"  Name="PM1.MFC9.SetPoint" DisplayName="MFC.MFC9.Set" />
+		<Display ColName="MFC9(act)[sccm]"  Name="PM1.MFC9.Feedback" DisplayName="MFC.MFC9.Actual" />
+		<Display ColName="MFC10(set)[sccm]" Name="PM1.MFC10.SetPoint" DisplayName="MFC.MFC10.Set" />
+		<Display ColName="MFC10(act)[sccm]" Name="PM1.MFC10.Feedback" DisplayName="MFC.MFC10.Actual" />
+		<Display ColName="MFC11(set)[sccm]" Name="PM1.MFC11.SetPoint" DisplayName="MFC.MFC11.Set" />
+		<Display ColName="MFC11(act)[sccm]" Name="PM1.MFC11.Feedback" DisplayName="MFC.MFC11.Actual" />
+		<Display ColName="MFC12(set)[sccm]" Name="PM1.MFC12.SetPoint" DisplayName="MFC.MFC12.Set" />
+		<Display ColName="MFC12(act)[sccm]" Name="PM1.MFC12.Feedback" DisplayName="MFC.MFC12.Actual" />
+		<Display ColName="MFC13(set)[sccm]" Name="PM1.MFC13.SetPoint" DisplayName="MFC.MFC13.Set" />
+		<Display ColName="MFC13(act)[sccm]" Name="PM1.MFC13.Feedback" DisplayName="MFC.MFC13.Actual" />
+		<Display ColName="MFC14(set)[sccm]" Name="PM1.MFC14.SetPoint" DisplayName="MFC.MFC14.Set" />
+		<Display ColName="MFC14(act)[sccm]" Name="PM1.MFC14.Feedback" DisplayName="MFC.MFC14.Actual" />
+		<Display ColName="MFC15(set)[sccm]" Name="PM1.MFC15.SetPoint" DisplayName="MFC.MFC15.Set" />
+		<Display ColName="MFC15(act)[sccm]" Name="PM1.MFC15.Feedback" DisplayName="MFC.MFC15.Actual" />
+		<Display ColName="MFC16(set)[sccm]" Name="PM1.MFC16.SetPoint" DisplayName="MFC.MFC16.Set" />
+		<Display ColName="MFC16(act)[sccm]" Name="PM1.MFC16.Feedback" DisplayName="MFC.MFC16.Actual" />
+		<Display ColName="MFC17(set)[sccm]" Name="PM1.MFC17.SetPoint" DisplayName="MFC.MFC17.Set" />
+		<Display ColName="MFC17(act)[sccm]" Name="PM1.MFC17.Feedback" DisplayName="MFC.MFC17.Actual" />
+		<Display ColName="MFC31(set)[sccm]" Name="PM1.MFC31.SetPoint" DisplayName="MFC.MFC31.Set" />
+		<Display ColName="MFC31(act)[sccm]" Name="PM1.MFC31.Feedback" DisplayName="MFC.MFC31.Actual" />
+		<Display ColName="MFC32(set)[sccm]" Name="PM1.MFC32.SetPoint" DisplayName="MFC.MFC32.Set" />
+		<Display ColName="MFC32(act)[sccm]" Name="PM1.MFC32.Feedback" DisplayName="MFC.MFC32.Actual" />
+		<Display ColName="MFC51(set)[sccm]" Name="PM1.MFC51.SetPoint" DisplayName="MFC.MFC51.Set" />
+		<Display ColName="MFC51(act)[sccm]" Name="PM1.MFC51.Feedback" DisplayName="MFC.MFC51.Actual" />
+
 		<Display   ColName="AV1(set)"   Name="PM1.ValveAV1.SetPoint" DisplayName="Valve.AV1.Set" />
 		<Display   ColName="AV1(act)"   Name="PM1.ValveAV1.Feedback" DisplayName="Valve.AV1.Actual" />
 		<Display   ColName="AV2(set)"   Name="PM1.ValveAV2.SetPoint" DisplayName="Valve.AV2.Set" />
@@ -559,35 +650,33 @@
 		<Display   ColName="AV95(act)"  Name="PM1.ValveAV95.Feedback" DisplayName="Valve.AV95.Actual" />
 		<Display   ColName="AV96(set)"  Name="PM1.ValveAV96.SetPoint" DisplayName="Valve.AV96.Set" />
 		<Display   ColName="AV96(act)"  Name="PM1.ValveAV96.Feedback" DisplayName="Valve.AV96.Actual" />
-		<Display ColName="AV202LADoor(set)" Name="PM1.ValveAV202LADoor.SetPoint" DisplayName="Valve.AV202.Set" />
-		<Display ColName="AV202LADoor(act)" Name="PM1.ValveAV202LADoor.Feedback" DisplayName="Valve.AV202.Actual" />
-		<Display ColName="SV61(set)" Name="PM1.ValveSV61.SetPoint" DisplayName="Valve.SV61.Set" />
-		<Display ColName="SV61(act)" Name="PM1.ValveSV61.Feedback" DisplayName="Valve.SV61.Actual" />
-		<Display ColName="SV62(set)" Name="PM1.ValveSV62.Feedback" DisplayName="Valve.SV62.Actual" />
-		<Display ColName="SV63(set)" Name="PM1.ValveSV63.SetPoint" DisplayName="Valve.SV63.Set" />
-		<Display ColName="SV63(act)" Name="PM1.ValveSV63.Feedback" DisplayName="Valve.SV63.Actual" />
-		<Display ColName="SV64(set)" Name="PM1.ValveSV64.SetPoint" DisplayName="Valve.SV64.Set" />
-		<Display ColName="SV64(act)" Name="PM1.ValveSV64.Feedback" DisplayName="Valve.SV64.Actual" />
-		<Display ColName="SV227(set)" Name="PM1.ValveSV227.SetPoint" DisplayName="Valve.SV227.Set" />
-		<Display ColName="SV227(act)" Name="PM1.ValveSV227.Feedback" DisplayName="Valve.SV227.Actual" />
-
-		<Display ColName="HREF(set)" Name="PM1.HREF.SetPoint" DisplayName="Valve.HREF.Set" />
-		<Display ColName="HREF(set)" Name="PM1.HREF.Feedback" DisplayName="Valve.HREF.Actual" />
-		<Display ColName="IsCEXHOn" Name="PM1.IsCEXHOn" DisplayName="Valve.IsCEXHOn" />
-		<Display ColName="IsCREFOn" Name="PM1.IsCREFOn" DisplayName="Valve.IsCREFOn" />
-		<Display ColName="IsDEPOOn" Name="PM1.IsDEPOOn" DisplayName="Valve.IsDEPOOn" />
-		<Display ColName="IsError" Name="PM1.IsError" DisplayName="Valve.IsError" />
+		<Display   ColName="AV202LADoor(set)" Name="PM1.ValveAV202LADoor.SetPoint" DisplayName="Valve.AV202.Set" />
+		<Display   ColName="AV202LADoor(act)" Name="PM1.ValveAV202LADoor.Feedback" DisplayName="Valve.AV202.Actual" />
+		<Display   ColName="SV61(set)" Name="PM1.ValveSV61.SetPoint" DisplayName="Valve.SV61.Set" />
+		<Display   ColName="SV61(act)" Name="PM1.ValveSV61.Feedback" DisplayName="Valve.SV61.Actual" />
+		<Display   ColName="SV62(set)" Name="PM1.ValveSV62.Feedback" DisplayName="Valve.SV62.Actual" />
+		<Display   ColName="SV63(set)" Name="PM1.ValveSV63.SetPoint" DisplayName="Valve.SV63.Set" />
+		<Display   ColName="SV63(act)" Name="PM1.ValveSV63.Feedback" DisplayName="Valve.SV63.Actual" />
+		<Display   ColName="SV64(set)" Name="PM1.ValveSV64.SetPoint" DisplayName="Valve.SV64.Set" />
+		<Display   ColName="SV64(act)" Name="PM1.ValveSV64.Feedback" DisplayName="Valve.SV64.Actual" />
+		<Display   ColName="SV227(set)" Name="PM1.ValveSV227.SetPoint" DisplayName="Valve.SV227.Set" />
+		<Display   ColName="SV227(act)" Name="PM1.ValveSV227.Feedback" DisplayName="Valve.SV227.Actual" />
 		<Display ColName="AV201(set)" Name="PM1.ValveAV201.SetPoint" DisplayName="Valve.Common Box Pressure Regulating.Set" />
 		<Display ColName="AV201(act)" Name="PM1.ValveAV201.Feedback" DisplayName="Valve.Common Box Pressure Regulating.Actual" />
 		<Display ColName="AV202(set)" Name="PM1.ValveAV202.SetPoint" DisplayName="Valve.LA Backside Door.Set" />
 		<Display ColName="AV202(act)" Name="PM1.ValveAV202.Feedback" DisplayName="Valve.LA Backside Door.Actual" />
 		<Display ColName="ValveLAExhaustDamper(set)" Name="PM1.ValveLAExhaustDamper.SetPoint" DisplayName="Valve.LA Exhaust Damper.Set" />
 		<Display ColName="ValveLAExhaustDamper(act)" Name="PM1.ValveLAExhaustDamper.Feedback" DisplayName="Valve.LA Exhaust Damper.Actual" />
-
 		<Display ColName="ValveFIMS1N2Purge(set)" Name="PM1.ValveFIMS1N2Purge.SetPoint" DisplayName="Valve.FIMS1 N2 Purge.Set" />
 		<Display ColName="ValveFIMS1N2Purge(act)" Name="PM1.ValveFIMS1N2Purge.Feedback" DisplayName="Valve.FIMS1 N2 Purge.Actual" />
 		<Display ColName="ValveFIMS2N2Purge(set)" Name="PM1.ValveFIMS2N2Purge.SetPoint" DisplayName="Valve.FIMS2 N2 Purge.Set" />
 		<Display ColName="ValveFIMS2N2Purge(act)" Name="PM1.ValveFIMS2N2Purge.Feedback" DisplayName="Valve.FIMS2 N2 Purge.Actual" />
+
+		<Display ColName="HREF(set)" Name="PM1.HREF.SetPoint" DisplayName="Valve.HREF.Set" />
+		<Display ColName="HREF(set)" Name="PM1.HREF.Feedback" DisplayName="Valve.HREF.Actual" />
+		<Display ColName="IsCEXHOn" Name="PM1.IsCEXHOn" DisplayName="Valve.IsCEXHOn" />
+		<Display ColName="IsCREFOn" Name="PM1.IsCREFOn" DisplayName="Valve.IsCREFOn" />
+		<Display ColName="IsDEPOOn" Name="PM1.IsDEPOOn" DisplayName="Valve.IsDEPOOn" />
 		<Display ColName="BWR(set)" Name="PM1.ValveBlowerPowerOn.SetPoint" DisplayName="Valve.BWR.Set" />
 		<Display ColName="BWR(act)" Name="PM1.ValveBlowerPowerOn.Feedback" DisplayName="Valve.BWR.Actual" />
 		<Display ColName="DPR(set)" Name="PM1.ValveAV91.SetPoint" DisplayName="Valve.DPR.Set" />
@@ -600,105 +689,27 @@
 		<Display ColName="AGV2Pump(act)" Name="PM1.AGV2Pump.Feedback" DisplayName="Valve.AGV2 Pump.Actual" />
 		<Display ColName="BothPump(set)" Name="PM1.BothPump.SetPoint" DisplayName="Valve.Both Pump.Set" />
 		<Display ColName="BothPump(act)" Name="PM1.BothPump.Feedback" DisplayName="Valve.Both Pump.Actual" />
-		<Display ColName="MFC1(set)[sccm]"  Name="PM1.MFC1.SetPoint" DisplayName="MFC.MFC1.Set" />
-		<Display ColName="MFC1(act)[sccm]"  Name="PM1.MFC1.Feedback" DisplayName="MFC.MFC1.Actual" />
-		<Display ColName="MFC2(set)[sccm]"  Name="PM1.MFC2.SetPoint" DisplayName="MFC.MFC2.Set" />
-		<Display ColName="MFC2(act)[sccm]"  Name="PM1.MFC2.Feedback" DisplayName="MFC.MFC2.Actual" />
-		<Display ColName="MFC3(set)[sccm]"  Name="PM1.MFC3.SetPoint" DisplayName="MFC.MFC3.Set" />
-		<Display ColName="MFC3(act)[sccm]"  Name="PM1.MFC3.Feedback" DisplayName="MFC.MFC3.Actual" />
-		<Display ColName="MFC4(set)[sccm]"  Name="PM1.MFC4.SetPoint" DisplayName="MFC.MFC4.Set" />
-		<Display ColName="MFC4(act)[sccm]"  Name="PM1.MFC4.Feedback" DisplayName="MFC.MFC4.Actual" />
-		<Display ColName="MFC5(set)[sccm]"  Name="PM1.MFC5.SetPoint" DisplayName="MFC.MFC5.Set" />
-		<Display ColName="MFC5(act)[sccm]"  Name="PM1.MFC5.Feedback" DisplayName="MFC.MFC5.Actual" />
-		<Display ColName="MFC6(set)[sccm]"  Name="PM1.MFC6.SetPoint" DisplayName="MFC.MFC6.Set" />
-		<Display ColName="MFC6(act)[sccm]"  Name="PM1.MFC6.Feedback" DisplayName="MFC.MFC6.Actual" />
-		<Display ColName="MFC7(set)[sccm]"  Name="PM1.MFC7.SetPoint" DisplayName="MFC.MFC7.Set" />
-		<Display ColName="MFC7(act)[sccm]"  Name="PM1.MFC7.Feedback" DisplayName="MFC.MFC7.Actual" />
-		<Display ColName="MFC8(set)[sccm]"  Name="PM1.MFC8.SetPoint" DisplayName="MFC.MFC8.Set" />
-		<Display ColName="MFC8(act)[sccm]"  Name="PM1.MFC8.Feedback" DisplayName="MFC.MFC8.Actual" />
-		<Display ColName="MFC9(set)[sccm]"  Name="PM1.MFC9.SetPoint" DisplayName="MFC.MFC9.Set" />
-		<Display ColName="MFC9(act)[sccm]"  Name="PM1.MFC9.Feedback" DisplayName="MFC.MFC9.Actual" />
-		<Display ColName="MFC10(set)[sccm]" Name="PM1.MFC10.SetPoint" DisplayName="MFC.MFC10.Set" />
-		<Display ColName="MFC10(act)[sccm]" Name="PM1.MFC10.Feedback" DisplayName="MFC.MFC10.Actual" />
-		<Display ColName="MFC11(set)[sccm]" Name="PM1.MFC11.SetPoint" DisplayName="MFC.MFC11.Set" />
-		<Display ColName="MFC11(act)[sccm]" Name="PM1.MFC11.Feedback" DisplayName="MFC.MFC11.Actual" />
-		<Display ColName="MFC12(set)[sccm]" Name="PM1.MFC12.SetPoint" DisplayName="MFC.MFC12.Set" />
-		<Display ColName="MFC12(act)[sccm]" Name="PM1.MFC12.Feedback" DisplayName="MFC.MFC12.Actual" />
-		<Display ColName="MFC13(set)[sccm]" Name="PM1.MFC13.SetPoint" DisplayName="MFC.MFC13.Set" />
-		<Display ColName="MFC13(act)[sccm]" Name="PM1.MFC13.Feedback" DisplayName="MFC.MFC13.Actual" />
-		<Display ColName="MFC14(set)[sccm]" Name="PM1.MFC14.SetPoint" DisplayName="MFC.MFC14.Set" />
-		<Display ColName="MFC14(act)[sccm]" Name="PM1.MFC14.Feedback" DisplayName="MFC.MFC14.Actual" />
-		<Display ColName="MFC15(set)[sccm]" Name="PM1.MFC15.SetPoint" DisplayName="MFC.MFC15.Set" />
-		<Display ColName="MFC15(act)[sccm]" Name="PM1.MFC15.Feedback" DisplayName="MFC.MFC15.Actual" />
-		<Display ColName="MFC16(set)[sccm]" Name="PM1.MFC16.SetPoint" DisplayName="MFC.MFC16.Set" />
-		<Display ColName="MFC16(act)[sccm]" Name="PM1.MFC16.Feedback" DisplayName="MFC.MFC16.Actual" />
-		<Display ColName="MFC17(set)[sccm]" Name="PM1.MFC17.SetPoint" DisplayName="MFC.MFC17.Set" />
-		<Display ColName="MFC17(act)[sccm]" Name="PM1.MFC17.Feedback" DisplayName="MFC.MFC17.Actual" />
-		<Display ColName="MFC31(set)[sccm]" Name="PM1.MFC31.SetPoint" DisplayName="MFC.MFC31.Set" />
-		<Display ColName="MFC31(act)[sccm]" Name="PM1.MFC31.Feedback" DisplayName="MFC.MFC31.Actual" />
-		<Display ColName="MFC32(set)[sccm]" Name="PM1.MFC32.SetPoint" DisplayName="MFC.MFC32.Set" />
-		<Display ColName="MFC32(act)[sccm]" Name="PM1.MFC32.Feedback" DisplayName="MFC.MFC32.Actual" />
-		<Display ColName="MFC51(set)[sccm]" Name="PM1.MFC51.SetPoint" DisplayName="MFC.MFC51.Set" />
-		<Display ColName="MFC51(act)[sccm]" Name="PM1.MFC51.Feedback" DisplayName="MFC.MFC51.Actual" />
-		
-		<Display ColName="U.Temp(act)[℃]"             Name="System.HeaterU.TempFeedback" DisplayName="Heater.U.Actual" />
-		<Display ColName="U.Temp(set)[℃]"             Name="System.HeaterU.TempSetPoint" DisplayName="Heater.U.Set" />
-		<Display ColName="U.Cascde(act)[℃]"           Name="System.HeaterU.CascadePV" DisplayName="Heater.U.Cascade PV" />
-		<Display ColName="U.Heater(act)[℃]"           Name="System.HeaterU.HeaterPV" DisplayName="Heater.U.Heater PV" />
-		<Display ColName="U.UpRate(set)[℃/min]"       Name="System.HeaterU.UpRate" DisplayName="Heater.U.Up Rate" />
-		<Display ColName="U.DownRate(set)[℃/min]"     Name="System.HeaterU.DownRate" DisplayName="Heater.U.Down Rate" />
-		<Display ColName="U.Power(act)[%]"             Name="System.HeaterU.WorkingOutput" DisplayName="Heater.U.Power Output" />
-		<Display ColName="U.OverTemp(act)[℃]"         Name="System.HeaterU.OverTemp" DisplayName="Heater.U.Over Temp" />
-		<Display ColName="U.ControlMode(set)"          Name="System.HeaterU.ControlMode" DisplayName="Heater.U.Control Mode" />
-		<Display ColName="U.CascadeControlMode(set)"   Name="System.HeaterU.CascadeControlModeSV" DisplayName="Heater.U.Cascade Control Mode SV" />
-		<Display ColName="U.HeaterControlMode(set)"    Name="System.HeaterU.HeaterControlModeSV" DisplayName="Heater.U.Heater Control Mode SV" />
-		
-		<Display   ColName="CU.Temp(act)[℃]"             Name="System.HeaterCU.TempFeedback" DisplayName="Heater.CU.Actual" />
-		<Display   ColName="CU.Temp(set)[℃]"             Name="System.HeaterCU.TempSetPoint" DisplayName="Heater.CU.Set" />
-		<Display   ColName="CU.Cascde(act)[℃]"           Name="System.HeaterCU.CascadePV" DisplayName="Heater.CU.Cascade PV" />
-		<Display   ColName="CU.Heater(act)[℃]"           Name="System.HeaterCU.HeaterPV" DisplayName="Heater.CU.Heater PV" />
-		<Display   ColName="CU.UpRate(set)[℃/min]"       Name="System.HeaterCU.UpRate" DisplayName="Heater.CU.Up Rate" />
-		<Display   ColName="CU.DownRate(set)[℃/min]"     Name="System.HeaterCU.DownRate" DisplayName="Heater.CU.Down Rate" />
-		<Display   ColName="CU.Power(act)[%]"             Name="System.HeaterCU.WorkingOutput" DisplayName="Heater.CU.Power Output" />
-		<Display   ColName="CU.OverTemp(act)[℃]"         Name="System.HeaterCU.OverTemp" DisplayName="Heater.CU.Over Temp" />
-		<Display   ColName="CU.ControlMode(set)"          Name="System.HeaterCU.ControlMode" DisplayName="Heater.CU.Control Mode" />
-		<Display   ColName="CU.CascadeControlMode(set)"   Name="System.HeaterCU.CascadeControlModeSV" DisplayName="Heater.CU.Cascade Control Mode SV" />
-		<Display   ColName="CU.HeaterControlMode(set)"    Name="System.HeaterCU.HeaterControlModeSV" DisplayName="Heater.CU.Heater Control Mode SV" />
-		
-		<Display  ColName="C.Temp(act)[℃]"             Name="System.HeaterC.TempFeedback" DisplayName="Heater.C.Actual" />
-		<Display  ColName="C.Temp(set)[℃]"             Name="System.HeaterC.TempSetPoint" DisplayName="Heater.C.Set" />
-		<Display  ColName="C.Cascde(act)[℃]"           Name="System.HeaterC.CascadePV" DisplayName="Heater.C.Cascade PV" />
-		<Display  ColName="C.Heater(act)[℃]"           Name="System.HeaterC.HeaterPV" DisplayName="Heater.C.Heater PV" />
-		<Display  ColName="C.UpRate(set)[℃/min]"       Name="System.HeaterC.UpRate" DisplayName="Heater.C.Up Rate" />
-		<Display  ColName="C.DownRate(set)[℃/min]"     Name="System.HeaterC.DownRate" DisplayName="Heater.C.Down Rate" />
-		<Display  ColName="C.Power(act)[%]"             Name="System.HeaterC.WorkingOutput" DisplayName="Heater.C.Power Output" />
-		<Display  ColName="C.OverTemp(act)[℃]"         Name="System.HeaterC.OverTemp" DisplayName="Heater.C.Over Temp" />
-		<Display  ColName="C.ControlMode(set)"          Name="System.HeaterC.ControlMode" DisplayName="Heater.C.Control Mode" />
-		<Display  ColName="C.CascadeControlMode(set)"   Name="System.HeaterC.CascadeControlModeSV" DisplayName="Heater.C.Cascade Control Mode SV" />
-		<Display  ColName="C.HeaterControlMode(set)"    Name="System.HeaterC.HeaterControlModeSV" DisplayName="Heater.C.Heater Control Mode SV" />
-		
-		<Display   ColName="CL.Temp(act)[℃]"           Name="System.HeaterCL.TempFeedback" DisplayName="Heater.CL.Actual" />
-		<Display   ColName="CL.Temp(set)[℃]"           Name="System.HeaterCL.TempSetPoint" DisplayName="Heater.CL.Set" />
-		<Display   ColName="CL.Cascde(act)[℃]"         Name="System.HeaterCL.CascadePV" DisplayName="Heater.CL.Cascade PV" />
-		<Display   ColName="CL.Heater(act)[℃]"         Name="System.HeaterCL.HeaterPV" DisplayName="Heater.CL.Heater PV" />
-		<Display   ColName="CL.UpRate(set)[℃/min]"     Name="System.HeaterCL.UpRate" DisplayName="Heater.CL.Up Rate" />
-		<Display   ColName="CL.DownRate(set)[℃/min]"   Name="System.HeaterCL.DownRate" DisplayName="Heater.CL.Down Rate" />
-		<Display   ColName="CL.Power(act)[%]"           Name="System.HeaterCL.WorkingOutput" DisplayName="Heater.CL.Power Output" />
-		<Display   ColName="CL.OverTemp(act)[℃]"       Name="System.HeaterCL.OverTemp" DisplayName="Heater.CL.Over Temp" />
-		<Display   ColName="CL.ControlMode(set)"        Name="System.HeaterCL.ControlMode" DisplayName="Heater.CL.Control Mode" />
-		<Display   ColName="CL.CascadeControlMode(set)" Name="System.HeaterCL.CascadeControlModeSV" DisplayName="Heater.CL.Cascade Control Mode SV" />
-		<Display   ColName="CL.HeaterControlMode(set)"  Name="System.HeaterCL.HeaterControlModeSV" DisplayName="Heater.CL.Heater Control Mode SV" />
-		
-		<Display   ColName="L.Temp(act)[℃]"            Name="System.HeaterL.TempFeedback" DisplayName="Heater.L.Actual" />
-		<Display   ColName="L.Temp(set)[℃]"            Name="System.HeaterL.TempSetPoint" DisplayName="Heater.L.Set" />
-		<Display   ColName="L.Cascde(act)[℃]"          Name="System.HeaterL.CascadePV" DisplayName="Heater.L.Cascade PV" />
-		<Display   ColName="L.Heater(act)[℃]"          Name="System.HeaterL.HeaterPV" DisplayName="Heater.L.Heater PV" />
-		<Display   ColName="L.UpRate(set)[℃/min]"      Name="System.HeaterL.UpRate" DisplayName="Heater.L.Up Rate" />
-		<Display   ColName="L.DownRate(set)[℃/min]"    Name="System.HeaterL.DownRate" DisplayName="Heater.L.Down Rate" />
-		<Display   ColName="L.Power(act)[%]"            Name="System.HeaterL.WorkingOutput" DisplayName="Heater.L.Power Output" />
-		<Display   ColName="L.OverTemp(act)[℃]"        Name="System.HeaterL.OverTemp" DisplayName="Heater.L.Over Temp" />
-		<Display   ColName="L.ControlMode(set)"         Name="System.HeaterL.ControlMode" DisplayName="Heater.L.Control Mode" />
-		<Display   ColName="L.CascadeControlMode(set)"  Name="System.HeaterL.CascadeControlModeSV" DisplayName="Heater.L.Cascade Control Mode SV" />
-		<Display   ColName="L.HeaterControlMode(set)"   Name="System.HeaterL.HeaterControlModeSV" DisplayName="Heater.L.Heater Control Mode SV" />
+
+
+
+		<Display ColName="O2(act)" Name="PM1.ConcentrationO2.Value" DisplayName="Pressure.O2.Actual" />
+		<Display ColName="PG1(act)"	 Name="PM1.PG1.Value" 		   DisplayName="Pressure.PG1.Actual"   />
+		<Display ColName="PG2(act)"	 Name="PM1.PG2.Value" 		   DisplayName="Pressure.PG2.Actual"   />
+		<Display ColName="PG3(act)"	 Name="PM1.PG3.Value" 		   DisplayName="Pressure.PG3.Actual"   />
+		<Display ColName="PG4(act)"	 Name="PM1.PG4.Value" 		   DisplayName="Pressure.PG4.Actual"   />
+		<Display ColName="PG5(act)"	 Name="PM1.PG5.Value" 		   DisplayName="Pressure.PG5.Actual"   />
+		<Display ColName="PG6(act)"	 Name="PM1.PG6.Value" 		   DisplayName="Pressure.PG6.Actual"   />
+		<Display ColName="PG7(act)"	 Name="PM1.PG7.Value" 		   DisplayName="Pressure.PG7.Actual"   />
+		<Display ColName="PG8(act)"	 Name="PM1.PG8.Value" 		   DisplayName="Pressure.PG8.Actual"   />
+		<Display ColName="PG15(act)"	 Name="PM1.PG15.Value" 		   DisplayName="Pressure.PG15.Actual"   />
+		<Display ColName="PG16(act)"	 Name="PM1.PG16.Value" 		   DisplayName="Pressure.PG16.Actual"   />
+		<Display ColName="PG70(act)"	 Name="PM1.PG70.Value" 		   DisplayName="Pressure.PG70.Actual"   />
+		<Display ColName="PS132(act)" Name="PM1.Tank1Pressure.Value" DisplayName="Pressure.PS132.Actual" />
+		<Display ColName="PS135(act)" Name="PM1.Tank2Pressure.Value" DisplayName="Pressure.PS135.Actual" />
+
+		<Display ColName="VG11(act)" Name="PM1.VG11.Value" DisplayName="APC.VG11.Actual" />
+		<Display ColName="VG13(act)" Name="PM1.VG13.Value" DisplayName="APC.VG13.Actual" />
+		<Display ColName="VG21(act)" Name="PM1.VG21.Value" DisplayName="APC.VG21.Actual" />
+		<Display ColName="VG22(act)" Name="PM1.VG22.Value" DisplayName="APC.VG22.Actual" />
 	</DetailGroup>
 </Displays>

+ 1 - 0
Furnace/FurnaceRT/Config/FurnaceGemModel.xml

@@ -62,6 +62,7 @@
     <SVID id="10010008" valueType="Boolean" logicalName="System.IsIdle" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="10010009" valueType="Boolean" logicalName="System.IsInitialized" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="10010010" valueType="Ascii" logicalName="System.SpoolingState" value="" eventTrigger="" units="" description="" isArray="false" />
+    <SVID id="10010011" valueType="Boolean" logicalName="System.IsSpoolingEnable" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="10020001" valueType="Boolean" logicalName="System.AlarmSignalHeaterCCascadePVSBrk.Value" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="10030001" valueType="Boolean" logicalName="System.AlarmSignalHeaterCHeaterPVSBrk.Value" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="10040001" valueType="Boolean" logicalName="System.AlarmSignalHeaterCLCascadePVSBrk.Value" value="" eventTrigger="" units="" description="" isArray="false" />

BIN
Furnace/FurnaceRT/Config/VIDs/Equipment_VIDs_20250805.xlsx


+ 1 - 0
Furnace/FurnaceRT/Config/VIDs/_SVID.xml

@@ -10,6 +10,7 @@
   <VIDItem Name="System.IsIdle" Index="10010008" DataType="System.Boolean" Description="" Module="System" Type="" Unit="" Parameter="IsIdle" />
   <VIDItem Name="System.IsInitialized" Index="10010009" DataType="System.Boolean" Description="" Module="System" Type="" Unit="" Parameter="IsInitialized" />
   <VIDItem Name="System.SpoolingState" Index="10010010" DataType="System.Int32" Description="" Module="System" Type="" Unit="" Parameter="SpoolingState" />
+  <VIDItem Name="System.IsSpoolingEnable" Index="10010011" DataType="System.Boolean" Description="" Module="System" Type="" Unit="" Parameter="IsSpoolingEnable" />
   <VIDItem Name="System.AlarmSignalHeaterCCascadePVSBrk.Value" Index="10020001" DataType="System.Boolean" Description="" Module="System" Type="" Unit="AlarmSignalHeaterCCascadePVSBrk" Parameter="Value" />
   <VIDItem Name="System.AlarmSignalHeaterCHeaterPVSBrk.Value" Index="10030001" DataType="System.Boolean" Description="" Module="System" Type="" Unit="AlarmSignalHeaterCHeaterPVSBrk" Parameter="Value" />
   <VIDItem Name="System.AlarmSignalHeaterCLCascadePVSBrk.Value" Index="10040001" DataType="System.Boolean" Description="" Module="System" Type="" Unit="AlarmSignalHeaterCLCascadePVSBrk" Parameter="Value" />