Kaynağa Gözat

add reservoir&platingcell 1/2/3/4

chenzk 1 gün önce
ebeveyn
işleme
0d3e5c67b6

+ 0 - 6
Framework/Common/ToolLayout/PlatingCellItemManager.cs

@@ -47,7 +47,6 @@ namespace MECF.Framework.Common.ToolLayout
             platingCellItem.PermittedWaferSizeInMM = platingCellItemElement.SelectSingleNode("PermittedWaferSizeInMM").InnerText;
             platingCellItem.PlatingPowerSupplyAID = platingCellItemElement.SelectSingleNode("PlatingPowerSupplyAID").InnerText;
             platingCellItem.PlatingPowerSupplyBID = platingCellItemElement.SelectSingleNode("PlatingPowerSupplyBID").InnerText;
-            platingCellItem.LinmotID = platingCellItemElement.SelectSingleNode("LinmotID").InnerText;
             string key = $"{PREFIX}{platingCellItem.PlatingCellID}";
             platingCellItem.ModuleName = key;
             platingCellItem.ModuleType = ModuleType.PlatingCell.ToString();
@@ -57,11 +56,6 @@ namespace MECF.Framework.Common.ToolLayout
                 InstalledModules.Add(key);
             }
 
-            LinMotDevice linMotDevice = LinMotDeviceConfigManager.Instance.GetLinMotDevice(platingCellItem.LinmotID);
-            if (linMotDevice != null)
-            {
-                linMotDevice.ParentName = platingCellItem.ModuleName;
-            }
 
             PowerSupplierDevice powerSupplierADevice = PowerSupplierDeviceConfigManager.Instance.GetPowerSupplierDeviceByName(platingCellItem.PlatingPowerSupplyAID);
             if (powerSupplierADevice != null)

+ 1 - 2
Framework/SimulatorCore/Commons/TemperatureControllerSerialPortDevice.cs

@@ -68,7 +68,7 @@ namespace MECF.Framework.Simulator.Core.Commons
 
         System.Timers.Timer[] _timers;
 
-        private int _tcCount = 1;
+        private int _tcCount = 4;
         #endregion
 
         /// <summary>
@@ -106,7 +106,6 @@ namespace MECF.Framework.Simulator.Core.Commons
             catch (Exception ex) 
             {
             }
-            //
             _timers = new System.Timers.Timer[_tcCount];
             for(int i = 0; i < _tcCount; i++)
             {

+ 4 - 0
PunkHPX8_MainPages/ViewModels/TemperatureControllerViewModel.cs

@@ -141,6 +141,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     foreach (TemperatureUIData item in TemperatureUIDatas)
                     {
+                        if (string.IsNullOrEmpty(item.ReserviorName))
+                        {
+                            continue;
+                        }
                         TemperatureControllerData data = CommonFunction.GetValue<TemperatureControllerData>(_rtDataValues, $"{item.Name}.{TEMPERATURE_DATA}");
                         if (data != null)
                         {

+ 38 - 1
PunkHPX8_RT/Config/Devices/Beckhoffcfg - plctask.xml

@@ -114,8 +114,30 @@
 		<Input Name="r_PlatingCell1_2_HEAD_VERTICAL"  Address="MAIN.PlatingCell1_2_DI_16CHANNEL_EL1819_N400_5" Invert="false" Type="Digital" DataType="bool"/>
 		<Input Name="r_CELL1_CLAMSHELL_DISTANCE"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
 		<Input Name="r_CLAMSHELL_CYLINDER_PRESSURE"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_3" Scaling="0=0,20=32767" Type="Analog" DataType="int"/>
-		<Input Name="r_CELL1_OVERFLOW_LEVEL"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_1" Scaling="0=0,20=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL1_OVERFLOW_LEVEL"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_1" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
 		<!--PlatingCell1 inputs End-->
+		
+		
+		<!--PlatingCell2 inputs Start-->
+		<Input Name="r_CELL2_CLAMSHELL_DISTANCE"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL2_OVERFLOW_LEVEL"  Address="MAIN.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_2" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell2 inputs End-->
+		
+		
+		<!--PlatingCell3 inputs Start-->
+		<Input Name="r_PlatingCell3_4_HEAD_TILTED"  Address="MAIN.PlatingCell3_4_DI_16CHANNEL_EL1819_N430_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_PlatingCell3_4_HEAD_VERTICAL"  Address="MAIN.PlatingCell3_4_DI_16CHANNEL_EL1819_N430_5" Invert="false" Type="Digital" DataType="bool"/>
+		
+		<Input Name="r_CELL3_CLAMSHELL_DISTANCE"  Address="MAIN.PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL3_OVERFLOW_LEVEL"  Address="MAIN.PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_1" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell3 inputs End-->
+		
+		
+		<!--PlatingCell4 inputs Start-->
+		<Input Name="r_CELL4_CLAMSHELL_DISTANCE"  Address="MAIN.PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL4_OVERFLOW_LEVEL"  Address="MAIN.PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_2" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell4 inputs End-->
+
 
 
 		<!--Reservoir1 inputs Start-->
@@ -247,6 +269,21 @@
 		<Output Name="c_PlatingCell1_2_HEAD_TILT" Address="MAIN.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_13" Type="Digital" Invert="false" DataType="bool"/>
 		<!--PlatingCell1 outputs End-->
 		
+		<!--PlatingCell2 outputs Start-->
+		<Output Name="c_CELL2_CLAMSHELL_CLOSE" Address="MAIN.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_10" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell2 outputs End-->
+		
+		<!--PlatingCell3 outputs Start-->
+		<Output Name="c_CELL3_CLAMSHELL_CLOSE" Address="MAIN.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_11" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_PlatingCell3_4_HEAD_TILT" Address="MAIN.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_14" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell3 outputs End-->
+		
+		<!--PlatingCell4 outputs Start-->
+		<Output Name="c_CELL4_CLAMSHELL_CLOSE" Address="MAIN.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_12" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell4 outputs End-->
+		
+		
+		
 		<!--Reservoir1 outputs Start-->
 		<Output Name="c_RES1_AN_PUMP_ENABLE" Address="MAIN.RES1_2_DO_16CHANNEL_EL2809_N201_1" Type="Digital" Invert="false" DataType="bool"/>
 		<Output Name="c_RES1_CA_PUMP_ENABLE" Address="MAIN.RES1_2_DO_16CHANNEL_EL2809_N201_3" Type="Digital" Invert="false" DataType="bool"/>

+ 80 - 47
PunkHPX8_RT/Config/Devices/Beckhoffcfg.xml

@@ -108,9 +108,29 @@
 		<Input Name="r_PlatingCell1_2_HEAD_VERTICAL"  Address="Task 2.Inputs.PlatingCell1_2_DI_16CHANNEL_EL1819_N400_5" Invert="false" Type="Digital" DataType="bool"/>
 		<Input Name="r_CELL1_CLAMSHELL_DISTANCE"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
 		<Input Name="r_CLAMSHELL_CYLINDER_PRESSURE"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_3" Scaling="0=0,20=32767" Type="Analog" DataType="int"/>
-		<Input Name="r_CELL1_OVERFLOW_LEVEL"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_1" Scaling="0=0,20=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL1_OVERFLOW_LEVEL"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_1" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
 		<!--PlatingCell1 inputs End-->
 		
+		<!--PlatingCell2 inputs Start-->
+		<Input Name="r_CELL2_CLAMSHELL_DISTANCE"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL2_OVERFLOW_LEVEL"  Address="Task 2.Inputs.PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_2" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell2 inputs End-->
+		
+		
+		<!--PlatingCell3 inputs Start-->
+		<Input Name="r_PlatingCell3_4_HEAD_TILTED"  Address="Task 2.Inputs.PlatingCell3_4_DI_16CHANNEL_EL1819_N430_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_PlatingCell3_4_HEAD_VERTICAL"  Address="Task 2.Inputs.PlatingCell3_4_DI_16CHANNEL_EL1819_N430_5" Invert="false" Type="Digital" DataType="bool"/>
+		
+		<Input Name="r_CELL3_CLAMSHELL_DISTANCE"  Address="Task 2.Inputs.PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL3_OVERFLOW_LEVEL"  Address="Task 2.Inputs.PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_1" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell3 inputs End-->
+		
+		
+		<!--PlatingCell4 inputs Start-->
+		<Input Name="r_CELL4_CLAMSHELL_DISTANCE"  Address="Task 2.Inputs.PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_CELL4_OVERFLOW_LEVEL"  Address="Task 2.Inputs.PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_2" Scaling="4=0,20=32767" Type="Analog" DataType="int"/>
+		<!--PlatingCell4 inputs End-->
+		
 		
 		<!--Reservoir1 inputs Start-->
 		<Input Name="r_RES1_CA_PUMP"  Address="Task 2.Inputs.RES1_2_DI_8CHANNEL_EL1008_N200_1" Invert="false" Type="Digital" DataType="bool"/>
@@ -230,64 +250,77 @@
 		
 				
 		<!--PlatingCell1 outputs Start-->
-		<Output Name="c_CELL1_CLAMSHELL_CLOSE" Address="Task 2.Inputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_9" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_PlatingCell1_2_HEAD_TILT" Address="Task 2.Inputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_13" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_CELL1_CLAMSHELL_CLOSE" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_9" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_PlatingCell1_2_HEAD_TILT" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_13" Type="Digital" Invert="false" DataType="bool"/>
 		<!--PlatingCell1 outputs End-->
 		
+				<!--PlatingCell2 outputs Start-->
+		<Output Name="c_CELL2_CLAMSHELL_CLOSE" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_10" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell2 outputs End-->
+		
+		<!--PlatingCell3 outputs Start-->
+		<Output Name="c_CELL3_CLAMSHELL_CLOSE" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_11" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_PlatingCell3_4_HEAD_TILT" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_14" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell3 outputs End-->
+		
+		<!--PlatingCell4 outputs Start-->
+		<Output Name="c_CELL4_CLAMSHELL_CLOSE" Address="Task 2.Outputs.PlatingCell1_2_DO_16CHANNEL_EL2809_N401_12" Type="Digital" Invert="false" DataType="bool"/>
+		<!--PlatingCell4 outputs End-->
+		
 		<!--Reservoir1 output Start-->
-		<Output Name="c_RES1_AN_PUMP_ENABLE" Address="Task 2.Inputs.RES1_DO_16CHANNEL_EL2809_N201_1" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES1_CA_PUMP_ENABLE" Address="Task 2.Inputs.RES1_DO_16CHANNEL_EL2809_N201_3" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES1_AN_PUMP_SPEED" Address="Task 2.Inputs.RES1_2_AO_8CHANNEL_0_10V_EL4008_N204_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES1_CA_PUMP_SPEED" Address="Task 2.Inputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES1_RETURN_VALVE_OPENING" Address="Task 2.Inputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_3" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES1_CA_DIW_REPLEN" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
-		<Output Name="c_RES1_SAMPLE_OUT" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
-		<Output Name="c_RES1_DEGAS_ENABLE" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
-		<Output Name="c_CELL1_CA_ISOLATION" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
-		<Output Name="c_RES1_AN_DIW_REPLEN" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="4" DataType="byte"/>
-		<Output Name="c_CELL1_AN_ISOLATION" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="5" DataType="byte"/>
+		<Output Name="c_RES1_AN_PUMP_ENABLE" Address="Task 2.Outputs.RES1_DO_16CHANNEL_EL2809_N201_1" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES1_CA_PUMP_ENABLE" Address="Task 2.Outputs.RES1_DO_16CHANNEL_EL2809_N201_3" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES1_AN_PUMP_SPEED" Address="Task 2.Outputs.RES1_2_AO_8CHANNEL_0_10V_EL4008_N204_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES1_CA_PUMP_SPEED" Address="Task 2.Outputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES1_RETURN_VALVE_OPENING" Address="Task 2.Outputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_3" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES1_CA_DIW_REPLEN" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
+		<Output Name="c_RES1_SAMPLE_OUT" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
+		<Output Name="c_RES1_DEGAS_ENABLE" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
+		<Output Name="c_CELL1_CA_ISOLATION" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
+		<Output Name="c_RES1_AN_DIW_REPLEN" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="4" DataType="byte"/>
+		<Output Name="c_CELL1_AN_ISOLATION" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="5" DataType="byte"/>
 		<!--Reservoir1 output End-->
 		
 		<!--Reservoir2 outputs Start-->
-		<Output Name="c_RES2_AN_PUMP_ENABLE" Address="Task 2.Inputs.RES1_2_DO_16CHANNEL_EL2809_N201_2" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES2_CA_PUMP_ENABLE" Address="Task 2.Inputs.RES1_2_DO_16CHANNEL_EL2809_N201_4" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES2_AN_PUMP_SPEED" Address="Task 2.Inputs.RES1_2_AO_8CHANNEL_0_10V_EL4008_N204_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES2_CA_PUMP_SPEED" Address="Task 2.Inputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES2_RETURN_VALVE_OPENING" Address="Task 2.Inputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_4" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES2_CA_DIW_REPLEN" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="6" DataType="byte"/>
-		<Output Name="c_RES2_SAMPLE_OUT" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="7" DataType="byte"/>
-		<Output Name="c_RES2_DEGAS_ENABLE" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
-		<Output Name="c_CELL2_CA_ISOLATION" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
-		<Output Name="c_RES2_AN_DIW_REPLEN" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
-		<Output Name="c_CELL2_AN_ISOLATION" Address="Task 2.Inputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
+		<Output Name="c_RES2_AN_PUMP_ENABLE" Address="Task 2.Outputs.RES1_2_DO_16CHANNEL_EL2809_N201_2" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES2_CA_PUMP_ENABLE" Address="Task 2.Outputs.RES1_2_DO_16CHANNEL_EL2809_N201_4" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES2_AN_PUMP_SPEED" Address="Task 2.Outputs.RES1_2_AO_8CHANNEL_0_10V_EL4008_N204_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES2_CA_PUMP_SPEED" Address="Task 2.Outputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES2_RETURN_VALVE_OPENING" Address="Task 2.Outputs.RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_4" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES2_CA_DIW_REPLEN" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="6" DataType="byte"/>
+		<Output Name="c_RES2_SAMPLE_OUT" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="7" DataType="byte"/>
+		<Output Name="c_RES2_DEGAS_ENABLE" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
+		<Output Name="c_CELL2_CA_ISOLATION" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
+		<Output Name="c_RES2_AN_DIW_REPLEN" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
+		<Output Name="c_CELL2_AN_ISOLATION" Address="Task 2.Outputs.RES1_2_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
 		<!--Reservoir2 outputs End-->
 		
 		<!--Reservoir3 outputs Start-->
-		<Output Name="c_RES3_AN_PUMP_ENABLE" Address="Task 2.Inputs.RES3_4_DO_16CHANNEL_EL2809_N231_1" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES3_CA_PUMP_ENABLE" Address="Task 2.Inputs.RES3_4_DO_16CHANNEL_EL2809_N231_3" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES3_AN_PUMP_SPEED" Address="Task 2.Inputs.RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES3_CA_PUMP_SPEED" Address="Task 2.Inputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES3_RETURN_VALVE_OPENING" Address="Task 2.Inputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_3" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES3_CA_DIW_REPLEN" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
-		<Output Name="c_RES3_SAMPLE_OUT" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
-		<Output Name="c_RES3_DEGAS_ENABLE" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
-		<Output Name="c_CELL3_CA_ISOLATION" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
-		<Output Name="c_RES3_AN_DIW_REPLEN" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="4" DataType="byte"/>
-		<Output Name="c_CELL3_AN_ISOLATION" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="5" DataType="byte"/>
+		<Output Name="c_RES3_AN_PUMP_ENABLE" Address="Task 2.Outputs.RES3_4_DO_16CHANNEL_EL2809_N231_1" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES3_CA_PUMP_ENABLE" Address="Task 2.Outputs.RES3_4_DO_16CHANNEL_EL2809_N231_3" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES3_AN_PUMP_SPEED" Address="Task 2.Outputs.RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES3_CA_PUMP_SPEED" Address="Task 2.Outputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_1" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES3_RETURN_VALVE_OPENING" Address="Task 2.Outputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_3" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES3_CA_DIW_REPLEN" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
+		<Output Name="c_RES3_SAMPLE_OUT" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
+		<Output Name="c_RES3_DEGAS_ENABLE" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
+		<Output Name="c_CELL3_CA_ISOLATION" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
+		<Output Name="c_RES3_AN_DIW_REPLEN" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="4" DataType="byte"/>
+		<Output Name="c_CELL3_AN_ISOLATION" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="5" DataType="byte"/>
 		<!--Reservoir3 outputs End-->
 		
 		<!--Reservoir4 outputs Start-->
-		<Output Name="c_RES4_AN_PUMP_ENABLE" Address="Task 2.Inputs.RES3_4_DO_16CHANNEL_EL2809_N231_2" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES4_CA_PUMP_ENABLE" Address="Task 2.Inputs.RES3_4_DO_16CHANNEL_EL2809_N231_4" Type="Digital" Invert="false" DataType="bool"/>
-		<Output Name="c_RES4_AN_PUMP_SPEED" Address="Task 2.Inputs.RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES4_CA_PUMP_SPEED" Address="Task 2.Inputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES4_RETURN_VALVE_OPENING" Address="Task 2.Inputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_4" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
-		<Output Name="c_RES4_CA_DIW_REPLEN" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="6" DataType="byte"/>
-		<Output Name="c_RES4_SAMPLE_OUT" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="7" DataType="byte"/>
-		<Output Name="c_RES4_DEGAS_ENABLE" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
-		<Output Name="c_CELL4_CA_ISOLATION" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
-		<Output Name="c_RES4_AN_DIW_REPLEN" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
-		<Output Name="c_CELL4_AN_ISOLATION" Address="Task 2.Inputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
+		<Output Name="c_RES4_AN_PUMP_ENABLE" Address="Task 2.Outputs.RES3_4_DO_16CHANNEL_EL2809_N231_2" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES4_CA_PUMP_ENABLE" Address="Task 2.Outputs.RES3_4_DO_16CHANNEL_EL2809_N231_4" Type="Digital" Invert="false" DataType="bool"/>
+		<Output Name="c_RES4_AN_PUMP_SPEED" Address="Task 2.Outputs.RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES4_CA_PUMP_SPEED" Address="Task 2.Outputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_2" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES4_RETURN_VALVE_OPENING" Address="Task 2.Outputs.RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_4" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
+		<Output Name="c_RES4_CA_DIW_REPLEN" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="6" DataType="byte"/>
+		<Output Name="c_RES4_SAMPLE_OUT" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V01_V04" Type="Digital" BitOperated="true" Bit="7" DataType="byte"/>
+		<Output Name="c_RES4_DEGAS_ENABLE" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="0" DataType="byte"/>
+		<Output Name="c_CELL4_CA_ISOLATION" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="1" DataType="byte"/>
+		<Output Name="c_RES4_AN_DIW_REPLEN" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="2" DataType="byte"/>
+		<Output Name="c_CELL4_AN_ISOLATION" Address="Task 2.Outputs.RES3_4_PNEU_SMC_EX260_V05_V08" Type="Digital" BitOperated="true" Bit="3" DataType="byte"/>
 		<!--Reservoir4 outputs End-->
 		
 		

+ 34 - 1
PunkHPX8_RT/Config/Devices/ModuleIOCfg.xml

@@ -142,12 +142,45 @@
 		<IO Name="PlatingCell1.ClamShellCylinderPressure" IOName="r_CLAMSHELL_CYLINDER_PRESSURE"/> 
 		<IO Name="PlatingCell1.OverFlowLevel" IOName="r_CELL1_OVERFLOW_LEVEL"/> 
 		
-		
 		<IO Name="PlatingCell1.ClamShellClose" IOName="c_CELL1_CLAMSHELL_CLOSE"/> 
 		<IO Name="PlatingCell1.HeadTilt" IOName="c_PlatingCell1_2_HEAD_TILT"/> 
 		
 	</Module>
 	
+	<Module Name="PlatingCell2">
+		<IO Name="PlatingCell2.IsHeadTilt" IOName="r_PlatingCell1_2_HEAD_TILTED"/> 
+		<IO Name="PlatingCell2.IsHeadVertical" IOName="r_PlatingCell1_2_HEAD_VERTICAL"/> 
+		<IO Name="PlatingCell2.ClamShellDistance" IOName="r_CELL2_CLAMSHELL_DISTANCE"/> 
+		<IO Name="PlatingCell2.ClamShellCylinderPressure" IOName="r_CLAMSHELL_CYLINDER_PRESSURE"/> 
+		<IO Name="PlatingCell2.OverFlowLevel" IOName="r_CELL2_OVERFLOW_LEVEL"/> 
+		
+		<IO Name="PlatingCell2.ClamShellClose" IOName="c_CELL2_CLAMSHELL_CLOSE"/> 
+		<IO Name="PlatingCell2.HeadTilt" IOName="c_PlatingCell1_2_HEAD_TILT"/> 
+		
+	</Module>
+	
+	<Module Name="PlatingCell3">
+		<IO Name="PlatingCell3.IsHeadTilt" IOName="r_PlatingCell3_4_HEAD_TILTED"/> 
+		<IO Name="PlatingCell3.IsHeadVertical" IOName="r_PlatingCell3_4_HEAD_VERTICAL"/> 
+		<IO Name="PlatingCell3.ClamShellDistance" IOName="r_CELL3_CLAMSHELL_DISTANCE"/> 
+		<IO Name="PlatingCell3.ClamShellCylinderPressure" IOName="r_CLAMSHELL_CYLINDER_PRESSURE"/> 
+		<IO Name="PlatingCell3.OverFlowLevel" IOName="r_CELL3_OVERFLOW_LEVEL"/> 
+		
+		<IO Name="PlatingCell3.ClamShellClose" IOName="c_CELL3_CLAMSHELL_CLOSE"/> 
+		<IO Name="PlatingCell3.HeadTilt" IOName="c_PlatingCell3_4_HEAD_TILT"/> 
+	</Module>
+
+	<Module Name="PlatingCell4">
+		<IO Name="PlatingCell4.IsHeadTilt" IOName="r_PlatingCell3_4_HEAD_TILTED"/> 
+		<IO Name="PlatingCell4.IsHeadVertical" IOName="r_PlatingCell3_4_HEAD_VERTICAL"/> 
+		<IO Name="PlatingCell4.ClamShellDistance" IOName="r_CELL4_CLAMSHELL_DISTANCE"/> 
+		<IO Name="PlatingCell4.ClamShellCylinderPressure" IOName="r_CLAMSHELL_CYLINDER_PRESSURE"/> 
+		<IO Name="PlatingCell4.OverFlowLevel" IOName="r_CELL4_OVERFLOW_LEVEL"/> 
+		
+		<IO Name="PlatingCell4.ClamShellClose" IOName="c_CELL4_CLAMSHELL_CLOSE"/> 
+		<IO Name="PlatingCell4.HeadTilt" IOName="c_PlatingCell3_4_HEAD_TILT"/> 
+	</Module>
+	
 	
 	
 	<Module Name="Reservoir1">

+ 109 - 2
PunkHPX8_RT/Config/Layout/ToolLayoutConfiguration.xml

@@ -159,7 +159,7 @@
 
 		<Item i:type="TempControl">
 			<Installed>true</Installed>
-			<Count>1</Count>
+			<Count>4</Count>
 			<TCID>1</TCID>
 			<SubType>SMC</SubType>
 		</Item>
@@ -182,7 +182,6 @@
 					<PlatingCellID>1</PlatingCellID>
 					<PlatingPowerSupplyAID>Power13-1</PlatingPowerSupplyAID>
 					<PlatingPowerSupplyBID>Power14-1</PlatingPowerSupplyBID>
-					<LinmotID>LNM3-2</LinmotID>
 					<SubType>DM</SubType>
 				</Item>
 			</PlatingCells>
@@ -202,6 +201,114 @@
 			<CMMSupplyID>CMMPower1-1</CMMSupplyID>
 			<EvaporatorType></EvaporatorType>
 		</Item>
+		<Item i:type="Reservoir">
+			<Installed>true</Installed>
+			<ReservoirID>2</ReservoirID>
+			<Size>2</Size>
+			<TCID>TC1-2</TCID>
+			<SubType>DM</SubType>
+			<PHProbeChannelNumber>1</PHProbeChannelNumber>
+			<PlannedInitialChemistry>Cu</PlannedInitialChemistry>
+			<PlatingCells>
+				<Item i:type="PlatingCel2">
+					<Installed>true</Installed>
+					<PermittedWaferSizeInMM>300</PermittedWaferSizeInMM>
+					<CellID>2</CellID>
+					<NominalGantryPositionInMilliMeters>2219</NominalGantryPositionInMilliMeters>
+					<PlatingCellID>2</PlatingCellID>
+					<PlatingPowerSupplyAID></PlatingPowerSupplyAID>
+					<PlatingPowerSupplyBID></PlatingPowerSupplyBID>
+					<SubType>DM</SubType>
+				</Item>
+			</PlatingCells>
+			<CellPosition>14</CellPosition>
+			<PositionInMilliMeters>2000</PositionInMilliMeters>
+			<LengthInMilliMeters>340</LengthInMilliMeters>
+			<ChemicalReplenishmentEnable>true</ChemicalReplenishmentEnable>
+			<DIReplenType>Level</DIReplenType>
+			<ANDIReplenType>Level</ANDIReplenType>
+			<PHProbeType>Standard</PHProbeType>
+			<CrossDoseType>None</CrossDoseType>
+			<ChemReplenType>Peristaltic</ChemReplenType>
+			<ChemReplenPumps>2</ChemReplenPumps>
+			<AutoDrainsInstalled>false</AutoDrainsInstalled>
+			<SlipstreamType>None</SlipstreamType>
+			<CMMType></CMMType>
+			<CMMSupplyID></CMMSupplyID>
+			<EvaporatorType></EvaporatorType>
+		</Item>
+		<Item i:type="Reservoir">
+			<Installed>true</Installed>
+			<ReservoirID>3</ReservoirID>
+			<Size>2</Size>
+			<TCID>TC1-3</TCID>
+			<SubType>DM</SubType>
+			<PHProbeChannelNumber>1</PHProbeChannelNumber>
+			<PlannedInitialChemistry>Cu</PlannedInitialChemistry>
+			<PlatingCells>
+				<Item i:type="PlatingCel3">
+					<Installed>true</Installed>
+					<PermittedWaferSizeInMM>300</PermittedWaferSizeInMM>
+					<CellID>3</CellID>
+					<NominalGantryPositionInMilliMeters>2219</NominalGantryPositionInMilliMeters>
+					<PlatingCellID>3</PlatingCellID>
+					<PlatingPowerSupplyAID></PlatingPowerSupplyAID>
+					<PlatingPowerSupplyBID></PlatingPowerSupplyBID>
+					<SubType>DM</SubType>
+				</Item>
+			</PlatingCells>
+			<CellPosition>15</CellPosition>
+			<PositionInMilliMeters>2000</PositionInMilliMeters>
+			<LengthInMilliMeters>340</LengthInMilliMeters>
+			<ChemicalReplenishmentEnable>true</ChemicalReplenishmentEnable>
+			<DIReplenType>Level</DIReplenType>
+			<ANDIReplenType>Level</ANDIReplenType>
+			<PHProbeType>Standard</PHProbeType>
+			<CrossDoseType>None</CrossDoseType>
+			<ChemReplenType>Peristaltic</ChemReplenType>
+			<ChemReplenPumps>2</ChemReplenPumps>
+			<AutoDrainsInstalled>false</AutoDrainsInstalled>
+			<SlipstreamType>None</SlipstreamType>
+			<CMMType></CMMType>
+			<CMMSupplyID></CMMSupplyID>
+			<EvaporatorType></EvaporatorType>
+		</Item>
+		<Item i:type="Reservoir">
+			<Installed>true</Installed>
+			<ReservoirID>4</ReservoirID>
+			<Size>2</Size>
+			<TCID>TC1-4</TCID>
+			<SubType>DM</SubType>
+			<PHProbeChannelNumber>1</PHProbeChannelNumber>
+			<PlannedInitialChemistry>Cu</PlannedInitialChemistry>
+			<PlatingCells>
+				<Item i:type="PlatingCel3">
+					<Installed>true</Installed>
+					<PermittedWaferSizeInMM>300</PermittedWaferSizeInMM>
+					<CellID>4</CellID>
+					<NominalGantryPositionInMilliMeters>2219</NominalGantryPositionInMilliMeters>
+					<PlatingCellID>4</PlatingCellID>
+					<PlatingPowerSupplyAID></PlatingPowerSupplyAID>
+					<PlatingPowerSupplyBID></PlatingPowerSupplyBID>
+					<SubType>DM</SubType>
+				</Item>
+			</PlatingCells>
+			<CellPosition>16</CellPosition>
+			<PositionInMilliMeters>2000</PositionInMilliMeters>
+			<LengthInMilliMeters>340</LengthInMilliMeters>
+			<ChemicalReplenishmentEnable>true</ChemicalReplenishmentEnable>
+			<DIReplenType>Level</DIReplenType>
+			<ANDIReplenType>Level</ANDIReplenType>
+			<PHProbeType>Standard</PHProbeType>
+			<CrossDoseType>None</CrossDoseType>
+			<ChemReplenType>Peristaltic</ChemReplenType>
+			<ChemReplenPumps>2</ChemReplenPumps>
+			<AutoDrainsInstalled>false</AutoDrainsInstalled>
+			<SlipstreamType>None</SlipstreamType>
+			<CMMType></CMMType>
+			<CMMSupplyID></CMMSupplyID>
+			<EvaporatorType></EvaporatorType>
+		</Item>
 		<!-- SRDs -->
 
 		<Item i:type="SRD">

+ 14 - 0
PunkHPX8_RT/Config/System.sccfg

@@ -337,6 +337,8 @@
 		<config default="1000" name="FlowFaultHoldOffTime" nameView="FlowFaultHoldOffTime" description="Flow Fault HoldOff Time" max="100000" min="0" paramter="" tag="" unit="ms" type="Integer"></config>
 		<config default="3" name="CellFlowStartLowLimit" nameView="CellFlowStartLowLimit" description="Cell Flow StartLowLimit" max="20" min="0" paramter="" tag="" unit="L/min" type="Double"></config>
 		<config default="0.5" name="ANFlowStartLowLimit" nameView="ANFlowStartLowLimit" description="AN Flow StartLow Limit" max="20" min="0" paramter="" tag="" unit="L/min" type="Double"></config>
+		<config default="80" name="OverflowLevelHigh" nameView="OverflowLevelHigh" description="Overflow Level High" max="100" min="0" paramter="" tag="" unit="mm" type="Integer"></config>
+		<config default="25" name="OverflowLevelLow" nameView="OverflowLevelLow" description="Overflow Level Low" max="100" min="0" paramter="" tag="" unit="mm" type="Integer"></config>
 	</configs>
 	<configs name="Reservoir" nameView="Reservoir">
 		<config default="0.5" name="LevelHysteresis" nameView="LevelHysteresis" description="level Hysteresis" max="2" min="0" paramter="" tag="" unit="" type="Double"></config>
@@ -372,6 +374,10 @@
 			<config default="16" name="DIValveMaxOnTime" nameView="DIValveMaxOnTime" description="DI Valve Max Time in period " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="5" name="DIValveMaxOnTimePerFill" nameView="DIValveMaxOnTimePerFill" description="DI Valve Max Time per fill " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="24" name="DIValveMaxOnTimePeriod" nameView="DIValveMaxOnTimePeriod" description="DI Valve Max Time in period " max="48" min="0" paramter="" tag="" unit="hour" type="Double" />
+			<config default="5" name="OverflowLevelDelta" nameView="OverflowLevelDelta" description="Overflow Level Delta" max="100" min="0" paramter="" tag="" unit="mm" type="Integer"/>
+			<config default="1000" name="OverflowLevelCheckTime" nameView="OverflowLevelCheckTime" description="Overflow Level Check Time" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer"/>
+			<config default="2" name="RetrunOpenHoldStep" nameView="RetrunOpenHoldStep" description="Retrun Open Hold Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
+			<config default="10" name="RetrunOpenRampStep" nameView="RetrunOpenRampStep" description="Retrun Open Ramp Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
 		</configs>
 		<configs name="Reservoir3" nameView="Reservoir3">
 			<config default="5.0" name="CAMainFlowFaultLow" nameView="CAMainFlowFaultLow" description="CA Main Flow Fault Low" max="30" min="0" paramter="" tag="" unit="" type="Double"></config>
@@ -382,6 +388,10 @@
 			<config default="16" name="DIValveMaxOnTime" nameView="DIValveMaxOnTime" description="DI Valve Max Time in period " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="5" name="DIValveMaxOnTimePerFill" nameView="DIValveMaxOnTimePerFill" description="DI Valve Max Time per fill " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="24" name="DIValveMaxOnTimePeriod" nameView="DIValveMaxOnTimePeriod" description="DI Valve Max Time in period " max="48" min="0" paramter="" tag="" unit="hour" type="Double" />
+			<config default="5" name="OverflowLevelDelta" nameView="OverflowLevelDelta" description="Overflow Level Delta" max="100" min="0" paramter="" tag="" unit="mm" type="Integer"/>
+			<config default="1000" name="OverflowLevelCheckTime" nameView="OverflowLevelCheckTime" description="Overflow Level Check Time" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer"/>
+			<config default="2" name="RetrunOpenHoldStep" nameView="RetrunOpenHoldStep" description="Retrun Open Hold Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
+			<config default="10" name="RetrunOpenRampStep" nameView="RetrunOpenRampStep" description="Retrun Open Ramp Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
 		</configs>
 		<configs name="Reservoir4" nameView="Reservoir4">
 			<config default="5.0" name="CAMainFlowFaultLow" nameView="CAMainFlowFaultLow" description="CA Main Flow Fault Low" max="30" min="0" paramter="" tag="" unit="" type="Double"></config>
@@ -392,6 +402,10 @@
 			<config default="16" name="DIValveMaxOnTime" nameView="DIValveMaxOnTime" description="DI Valve Max Time in period " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="5" name="DIValveMaxOnTimePerFill" nameView="DIValveMaxOnTimePerFill" description="DI Valve Max Time per fill " max="50" min="0" paramter="" tag="" unit="minute" type="Double" />
 			<config default="24" name="DIValveMaxOnTimePeriod" nameView="DIValveMaxOnTimePeriod" description="DI Valve Max Time in period " max="48" min="0" paramter="" tag="" unit="hour" type="Double" />
+			<config default="5" name="OverflowLevelDelta" nameView="OverflowLevelDelta" description="Overflow Level Delta" max="100" min="0" paramter="" tag="" unit="mm" type="Integer"/>
+			<config default="1000" name="OverflowLevelCheckTime" nameView="OverflowLevelCheckTime" description="Overflow Level Check Time" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer"/>
+			<config default="2" name="RetrunOpenHoldStep" nameView="RetrunOpenHoldStep" description="Retrun Open Hold Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
+			<config default="10" name="RetrunOpenRampStep" nameView="RetrunOpenRampStep" description="Retrun Open Ramp Step" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
 		</configs>
 	</configs>
 	

+ 42 - 1
PunkHPX8_RT/Devices/PlatingCell/PlatingCellDevice.cs

@@ -5,6 +5,7 @@ using Aitex.Core.RT.OperationCenter;
 using Aitex.Core.RT.SCCore;
 using Aitex.Core.Util;
 using MECF.Framework.Common.Beckhoff.ModuleIO;
+using MECF.Framework.Common.CommonData.Metal;
 using MECF.Framework.Common.CommonData.PlatingCell;
 using MECF.Framework.Common.CommonData.Reservoir;
 using MECF.Framework.Common.IOCore;
@@ -63,6 +64,11 @@ namespace PunkHPX8_RT.Devices.PlatingCell
         /// PlatingCell项
         /// </summary>
         private PlatingCellItem _platingCellItem;
+        /// <summary>
+        /// overflow
+        /// </summary>
+        private int _overflowLevelHigh = 85;
+        private int _overflowLevelLow = 25;
         #endregion
 
         #region 属性
@@ -101,6 +107,13 @@ namespace PunkHPX8_RT.Devices.PlatingCell
 
         #endregion
 
+        #region 属性
+        /// <summary>
+        /// 设备数据
+        /// </summary>
+        public PlatingCellData PlatingCellDeviceData { get { return _platingCellData; } }
+        #endregion
+
 
         /// <summary>
         /// 构造函数
@@ -108,7 +121,7 @@ namespace PunkHPX8_RT.Devices.PlatingCell
         /// <param name="moduleName"></param>
         public PlatingCellDevice(string moduleName) : base(moduleName, moduleName, moduleName, moduleName)
         {
-
+        
         }
         /// <summary>
         /// 初始化
@@ -145,6 +158,8 @@ namespace PunkHPX8_RT.Devices.PlatingCell
             {
 
             }
+            _overflowLevelHigh = SC.GetValue<int>($"PlatingCell.OverflowLevelHigh");
+            _overflowLevelLow = SC.GetValue<int>($"PlatingCell.OverflowLevelLow");
         }
         protected virtual void SubscribeValueAction()
         {
@@ -182,6 +197,23 @@ namespace PunkHPX8_RT.Devices.PlatingCell
             if (property != null)
             {
                 property.SetValue(_platingCellData, value);
+                if (variable == OVERFLOW_LEVEL)
+                {
+                    double waterLevel = CurrentToWaterLevel(Convert.ToDouble(value));
+                    _platingCellData.OverFlowLevel = waterLevel;
+                    if (_platingCellData.OverFlowLevel >= _overflowLevelHigh)
+                    {
+                        _platingCellData.OverFlowStatus = "High";
+                    }
+                    else if(_platingCellData.OverFlowLevel <= _overflowLevelLow)
+                    {
+                        _platingCellData.OverFlowStatus = "Empty";
+                    }
+                    else
+                    {
+                        _platingCellData.OverFlowStatus = "Full";
+                    } 
+                }
             }
             if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
             {
@@ -189,6 +221,15 @@ namespace PunkHPX8_RT.Devices.PlatingCell
             }
         }
         /// <summary>
+        /// 把电流mA转成水深mm
+        /// </summary>
+        /// <param name="current"></param>
+        private double CurrentToWaterLevel(double current)
+        {
+            double result = (current - 4) / 8 / 9.8 * 1000;
+            return result;
+        }
+        /// <summary>
         /// 写变量
         /// </summary>
         /// <param name="variable"></param>

+ 23 - 8
PunkHPX8_RT/Devices/Reservoir/ReservoirDevice.cs

@@ -8,6 +8,7 @@ using Aitex.Core.Util;
 using MECF.Framework.Common.Alarm;
 using MECF.Framework.Common.Algorithm;
 using MECF.Framework.Common.Beckhoff.ModuleIO;
+using MECF.Framework.Common.CommonData.PlatingCell;
 using MECF.Framework.Common.CommonData.Prewet;
 using MECF.Framework.Common.CommonData.Reservoir;
 using MECF.Framework.Common.IOCore;
@@ -18,6 +19,7 @@ using MECF.Framework.Common.TwinCat;
 using MECF.Framework.Common.Utilities;
 using PunkHPX8_Core;
 using PunkHPX8_RT.Devices.Facilities;
+using PunkHPX8_RT.Devices.PlatingCell;
 using PunkHPX8_RT.Devices.Safety;
 using PunkHPX8_RT.Devices.Temperature;
 using PunkHPX8_RT.Modules;
@@ -127,10 +129,6 @@ namespace PunkHPX8_RT.Devices.Reservoir
         /// </summary>
         private double _lastOverFlow;
         /// <summary>
-        /// platingcell的overflow status
-        /// </summary>
-        private string _overFlowStatus = "Empty";
-        /// <summary>
         /// 当前调节return valve的时间
         /// </summary>
         private DateTime _adjustReturnvalveStartTime = DateTime.Now;
@@ -170,6 +168,10 @@ namespace PunkHPX8_RT.Devices.Reservoir
         /// Prewet 持久性数值对象
         /// </summary>
         protected ReservoirsPersistentValue _persistentValue;
+        /// <summary>
+        /// platingcellData
+        /// </summary>
+        protected PlatingCellDevice _platingCellDevice;
         #endregion
 
         #region 属性
@@ -263,6 +265,19 @@ namespace PunkHPX8_RT.Devices.Reservoir
                 _resRecipe = RecipeFileManager.Instance.LoadGenericityRecipe<ResRecipe>(_persistentValue.Recipe);
             }
             _direplenHelper = new ReservoirDiReplenHelper(Module, _persistentValue);
+            
+            ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(Module);
+            if (reservoirItem!=null)
+            {
+                List<PlatingCellItem> platingCellItems = reservoirItem.PlatingCells;
+                if (platingCellItems != null && platingCellItems.Count > 0) 
+                {
+                    if (platingCellItems[0].Installed)
+                    {
+                        _platingCellDevice = DEVICE.GetDevice<PlatingCellDevice>(platingCellItems[0].ModuleName);
+                    }
+                }
+            }
         }
         /// <summary>
         /// 初始化Routine
@@ -372,7 +387,7 @@ namespace PunkHPX8_RT.Devices.Reservoir
                 }
                 if (variable == RETURN_VALVE_OPENING)
                 {
-                    if (Convert.ToInt32(value) != 0)
+                    if (Convert.ToDouble(value) != 0)
                     {
                         ReservoirData.ReturnValveEnable = true;
                     }
@@ -419,7 +434,7 @@ namespace PunkHPX8_RT.Devices.Reservoir
         /// </summary>
         public void AutoOpenDegasValve()
         {
-            if(ReservoirData.CaFlow >= Recipe.CAFlowSetPoint) //缺了safety的条件,待补充
+            if(Recipe!= null && ReservoirData.CaFlow >= Recipe.CAFlowSetPoint) //缺了safety的条件,待补充
             {
                 int degasValveOpenIdlePeriod = SC.GetValue<int>($"Reservoir.DegasValveOpenIdlePeriod");
                 if (!_isFirstCaFlowOK)
@@ -452,12 +467,12 @@ namespace PunkHPX8_RT.Devices.Reservoir
                 //retrun valve打开
                 if (ReservoirData.ReturnValveEnable && (!reservoirEntity.IsInit && !reservoirEntity.IsError))
                 {
-                    double overflow = new Random().NextDouble() * 6 + 10;//模拟platingcell的液位;
+                    double overflow = _platingCellDevice.PlatingCellDeviceData.OverFlowLevel;
                     int _overflowLevelDelta = SC.GetValue<int>($"Reservoir.{Module}.OverflowLevelDelta");
                     int _overflowLevelCheckTime = SC.GetValue<int>($"Reservoir.{Module}.OverflowLevelCheckTime");
                     int _retrunOpenHoldStep = SC.GetValue<int>($"Reservoir.{Module}.RetrunOpenHoldStep");
                     int _retrunOpenRampStep = SC.GetValue<int>($"Reservoir.{Module}.RetrunOpenRampStep");
-                    int adjustNumber = "Full".Equals(_overFlowStatus) ? _retrunOpenHoldStep : _retrunOpenRampStep;//判断当前overflow状态
+                    int adjustNumber = "Full".Equals(_platingCellDevice.PlatingCellDeviceData.OverFlowStatus) ? _retrunOpenHoldStep : _retrunOpenRampStep;
                     if (overflow > _lastOverFlow)//液位升高的情况
                     {
                         if (overflow - _lastOverFlow > _overflowLevelDelta && DateTime.Now.Subtract(_adjustReturnvalveStartTime).TotalMilliseconds > _overflowLevelCheckTime)

+ 153 - 8
PunkHPX8_Twincate/PunkHPX8/PlcTest/POUs/MAIN.TcPOU

@@ -364,6 +364,45 @@ VAR
 	//Reservoir1 CaWaterLevel
 	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_5 AT%I* :DINT:=10000;
 	
+	//Reservoir2 CaPumpRunning
+	RES1_2_DI_8CHANNEL_EL1008_N200_2 AT%I* :BOOL;
+	//Reservoir2 AnTowerHigh
+	RES1_2_DI_8CHANNEL_EL1008_N200_5 AT%I* :BOOL;
+	//Reservoir2 AnTowerLow
+	RES1_2_DI_8CHANNEL_EL1008_N200_6 AT%I* :BOOL;
+	//Reservoir2 AnFlow
+	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_2 AT%I* :DINT:=10000;
+	//Reservoir2 CaFlow
+	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_4 AT%I* :DINT:=10000;
+	//Reservoir2 CaWaterLevel
+	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_6 AT%I* :DINT:=10000;
+	
+	//Reservoir3 CaPumpRunning
+	RES3_4_DI_8CHANNEL_EL1008_N230_1 AT%I* :BOOL;
+	//Reservoir3 AnTowerHigh
+	RES3_4_DI_8CHANNEL_EL1008_N230_3 AT%I* :BOOL;
+	//Reservoir3 AnTowerLow
+	RES3_4_DI_8CHANNEL_EL1008_N230_4 AT%I* :BOOL;
+	//Reservoir3 AnFlow
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_1 AT%I* :DINT:=10000;
+	//Reservoir3 CaFlow
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_3 AT%I* :DINT:=10000;
+	//Reservoir3 CaWaterLevel
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_5 AT%I* :DINT:=10000;
+	
+	//Reservoir4 CaPumpRunning
+	RES3_4_DI_8CHANNEL_EL1008_N230_2 AT%I* :BOOL;
+	//Reservoir4 AnTowerHigh
+	RES3_4_DI_8CHANNEL_EL1008_N230_5 AT%I* :BOOL;
+	//Reservoir4 AnTowerLow
+	RES3_4_DI_8CHANNEL_EL1008_N230_6 AT%I* :BOOL;
+	//Reservoir4 AnFlow
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_2 AT%I* :DINT:=10000;
+	//Reservoir4 CaFlow
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_4 AT%I* :DINT:=10000;
+	//Reservoir4 CaWaterLevel
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_6 AT%I* :DINT:=10000;
+	
 	
 	//Reservoir1 AnPumpEnable
 	RES1_2_DO_16CHANNEL_EL2809_N201_1 AT%Q* :BOOL;
@@ -378,6 +417,45 @@ VAR
 	//Reservoir1 CaDiReplen  SampleOut...
 	RES1_2_PNEU_SMC_EX260_V01_V04 AT%Q* :BYTE;
 	
+	//Reservoir2 AnPumpEnable
+	RES1_2_DO_16CHANNEL_EL2809_N201_2 AT%Q* :BOOL;
+	//Reservoir2 CaPumpEnable
+	RES1_2_DO_16CHANNEL_EL2809_N201_4 AT%Q* :BOOL;
+	//Reservoir2 AnPumpSpeed
+	RES1_2_AO_8CHANNEL_0_10V_EL4008_N204_2  AT%Q* :DINT;
+	//Reservoir2 CaPumpSpeed
+	RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_2  AT%Q* :DINT;
+	//Reservoir2 ReturnValveOpening
+	RES1_2_AO_4CHANNEL_4_20mA_EL4024_N205_4  AT%Q* :DINT;
+	//Reservoir2 CaDiReplen  SampleOut...
+	RES1_2_PNEU_SMC_EX260_V05_V08 AT%Q* :BYTE;
+	
+	//Reservoir3 AnPumpEnable
+	RES3_4_DO_16CHANNEL_EL2809_N231_1 AT%Q* :BOOL;
+	//Reservoir3 CaPumpEnable
+	RES3_4_DO_16CHANNEL_EL2809_N231_3 AT%Q* :BOOL;
+	//Reservoir3 AnPumpSpeed
+	RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_1  AT%Q* :DINT;
+	//Reservoir3 CaPumpSpeed
+	RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_1  AT%Q* :DINT;
+	//Reservoir3 ReturnValveOpening
+	RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_3  AT%Q* :DINT;
+	//Reservoir3 CaDiReplen  SampleOut...
+	RES3_4_PNEU_SMC_EX260_V01_V04 AT%Q* :BYTE;
+	
+	//Reservoir4 AnPumpEnable
+	RES3_4_DO_16CHANNEL_EL2809_N231_2 AT%Q* :BOOL;
+	//Reservoir4 CaPumpEnable
+	RES3_4_DO_16CHANNEL_EL2809_N231_4 AT%Q* :BOOL;
+	//Reservoir4 AnPumpSpeed
+	RES3_4_AO_8CHANNEL_0_10V_EL4008_N234_2  AT%Q* :DINT;
+	//Reservoir4 CaPumpSpeed
+	RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_2  AT%Q* :DINT;
+	//Reservoir4 ReturnValveOpening
+	RES3_4_AO_4CHANNEL_4_20mA_EL4024_N235_4  AT%Q* :DINT;
+	//Reservoir4 CaDiReplen  SampleOut...
+	RES3_4_PNEU_SMC_EX260_V05_V08 AT%Q* :BYTE;
+	
 	
 	//PlatingCell1.IsHeadTilt
 	PlatingCell1_2_DI_16CHANNEL_EL1819_N400_4 AT%I* :BOOL;
@@ -390,17 +468,41 @@ VAR
 	//PlatingCell1.OverFlowLevel
 	PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_1 AT%I* :DINT;
 	
-	//PlatingCell1.ClamShellClose
-	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_9 AT%Q* :BOOL;
-	//PlatingCell1.HeadTilt
-	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_13 AT%Q* :BOOL;
-	
+	//PlatingCell2 ClamShellDistance
+	PlatingCell1_2_AI_8CHANNEL_0_10V_EL3068_N402_2 AT%I* :DINT;
+	//PlatingCell2 OverFlowLevel
+	PlatingCell1_2_AI_8CHANNEL_4_20MA_EL3058_N403_2 AT%I* :DINT;
 	
+	//PlatingCell3 IsHeadTilt
+	PlatingCell3_4_DI_16CHANNEL_EL1819_N430_4 AT%I* :BOOL;
+	//PlatingCell3 IsHeadVertical
+	PlatingCell3_4_DI_16CHANNEL_EL1819_N430_5 AT%I* :BOOL;
+	//PlatingCell3 ClamShellDistance
+	PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_1 AT%I* :DINT;
+	//PlatingCell3 OverFlowLevel
+	PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_1 AT%I* :DINT;
 	
+	//PlatingCell4 ClamShellDistance
+	PlatingCell3_4_AI_8CHANNEL_0_10V_EL3068_N432_2 AT%I* :DINT;
+	//PlatingCell4 OverFlowLevel
+	PlatingCell3_4_AI_8CHANNEL_4_20MA_EL3058_N433_2 AT%I* :DINT;
 	
 	
+	//PlatingCell1.ClamShellClose
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_9 AT%Q* :BOOL;
+	//PlatingCell1.HeadTilt
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_13 AT%Q* :BOOL;
 	
+	//PlatingCell2 ClamShellClose
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_10 AT%Q* :BOOL;
+
+	//PlatingCell3 ClamShellClose
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_11 AT%Q* :BOOL;
+	//PlatingCell3 HeadTilt
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_14 AT%Q* :BOOL;
 	
+	//PlatingCell4 ClamShellClose
+	PlatingCell1_2_DO_16CHANNEL_EL2809_N401_12 AT%Q* :BOOL;
 	
 	
 	
@@ -598,11 +700,44 @@ IF  RES1_2_DO_16CHANNEL_EL2809_N201_3=TRUE THEN
 ELSE
 	RES1_2_DI_8CHANNEL_EL1008_N200_1:=FALSE;
 END_IF
-
-
 //reservoir 1 ca DIreplen
 IF  RES1_2_PNEU_SMC_EX260_V01_V04.0=TRUE AND RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_5 <= 32760 THEN
 	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_5:= RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_5 + 10;
+END_IF
+
+
+//reservoir 2 ca pump
+IF  RES1_2_DO_16CHANNEL_EL2809_N201_4=TRUE THEN
+	RES1_2_DI_8CHANNEL_EL1008_N200_2:=TRUE;
+ELSE
+	RES1_2_DI_8CHANNEL_EL1008_N200_2:=FALSE;
+END_IF
+//reservoir 2 ca DIreplen
+IF  RES1_2_PNEU_SMC_EX260_V01_V04.6=TRUE AND RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_6 <= 32760 THEN
+	RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_6:= RES1_2_AI_8CHANNEL_4_20MA_EL3058_N202_6 + 10;
+END_IF
+
+//reservoir 3 ca pump
+IF  RES3_4_DO_16CHANNEL_EL2809_N231_3=TRUE THEN
+	RES3_4_DI_8CHANNEL_EL1008_N230_1:=TRUE;
+ELSE
+	RES3_4_DI_8CHANNEL_EL1008_N230_1:=FALSE;
+END_IF
+//reservoir 3 ca DIreplen
+IF  RES3_4_PNEU_SMC_EX260_V01_V04.0=TRUE AND RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_5 <= 32760 THEN
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_5:= RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_5 + 10;
+END_IF
+
+
+//reservoir 4 ca pump
+IF  RES3_4_DO_16CHANNEL_EL2809_N231_3=TRUE THEN
+	RES3_4_DI_8CHANNEL_EL1008_N230_2:=TRUE;
+ELSE
+	RES3_4_DI_8CHANNEL_EL1008_N230_2:=FALSE;
+END_IF
+//reservoir 4 ca DIreplen
+IF  RES3_4_PNEU_SMC_EX260_V01_V04.6=TRUE AND RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_6 <= 32760 THEN
+	RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_6:= RES3_4_AI_8CHANNEL_4_20MA_EL3058_N232_6 + 10;
 END_IF]]></ST>
     </Implementation>
     <LineIds Name="MAIN">
@@ -666,10 +801,20 @@ END_IF]]></ST>
       <LineId Id="1346" Count="0" />
       <LineId Id="1343" Count="0" />
       <LineId Id="1347" Count="2" />
-      <LineId Id="1737" Count="1" />
       <LineId Id="1339" Count="0" />
       <LineId Id="1740" Count="1" />
       <LineId Id="1739" Count="0" />
+      <LineId Id="2288" Count="0" />
+      <LineId Id="2249" Count="6" />
+      <LineId Id="2258" Count="2" />
+      <LineId Id="2248" Count="0" />
+      <LineId Id="2262" Count="6" />
+      <LineId Id="2271" Count="2" />
+      <LineId Id="2261" Count="0" />
+      <LineId Id="2287" Count="0" />
+      <LineId Id="2275" Count="6" />
+      <LineId Id="2284" Count="2" />
+      <LineId Id="2274" Count="0" />
     </LineIds>
   </POU>
 </TcPlcObject>