Browse Source

add VPWMain Persistent value speed variable;

chenkui 7 hours ago
parent
commit
802ecf62cb

+ 9 - 7
Framework/Common/CommonData/Vpw/VpwMainCommonData.cs

@@ -28,9 +28,7 @@ namespace MECF.Framework.Common.CommonData.Vpw
         public double VacuumPumpSpeed { get { return _vacuumPumpSpeed; } set { _vacuumPumpSpeed = value;InvokePropertyChanged(nameof(VacuumPumpSpeed)); } }
 
         public bool BoosterPumpStatus { get { return _boosterPumpStatus; } set { _boosterPumpStatus = value; InvokePropertyChanged(nameof(BoosterPumpStatus)); } }
-        //待删除
-        public bool BoosterPumpIsAutoMode { get { return _boosterPumpIsAutoMode; } set { _boosterPumpIsAutoMode = value;InvokePropertyChanged(nameof(BoosterPumpIsAutoMode)); } }
-
+       
         public double BoosterPumpSpeed { get { return _boosterPumpSpeed; } set { _boosterPumpSpeed = value; InvokePropertyChanged(nameof(BoosterPumpSpeed)); } }
         
         public bool BoosterPumpEnable { get { return _boosterPumpEnable; } set { _boosterPumpEnable = value;InvokePropertyChanged(nameof(BoosterPumpEnable)); } }
@@ -47,7 +45,11 @@ namespace MECF.Framework.Common.CommonData.Vpw
         /// pump电流
         /// </summary>
         public double BoosterPumpCurrent { get { return _boosterPumpCurrent; } set { _boosterPumpCurrent = value; InvokePropertyChanged(nameof(BoosterPumpCurrent)); } }
-        
+        /// <summary>
+        /// Pump Speed Auto模式
+        /// </summary>
+        public bool BoosterPumpSpeedAuto { get { return _boosterPumpSpeedAuto; } set { _boosterPumpSpeedAuto = value; InvokePropertyChanged(nameof(BoosterPumpSpeedAuto)); } }
+
         public bool DiwEnable { get { return _diwEnable; } set { _diwEnable = value;InvokePropertyChanged(nameof(DiwEnable)); } }
 
         public bool DiwProcess { get { return _diwProcess; } set { _diwProcess = value;InvokePropertyChanged(nameof(DiwProcess)); } }
@@ -79,11 +81,12 @@ namespace MECF.Framework.Common.CommonData.Vpw
         private bool _vacuumPumpSpeedEnable;
         private double _vacuumPumpSpeed;
         private double _boosterPumpSpeed;
-        private bool _boosterPumpEnable;
-        private bool _boosterPumpIsAutoMode;
+        private bool _boosterPumpSpeedAuto;
         private string _boosterPumpStatusContent;
         private string _boosterPumpModel;
         private double _boosterPumpCurrent;
+        private bool _boosterPumpEnable;
+        private bool _boosterPumpStatus;
         private bool _diwEnable;
         private bool _diwProcess;
         private bool _diwDegas;
@@ -93,7 +96,6 @@ namespace MECF.Framework.Common.CommonData.Vpw
         private bool _degasPurge;
         private bool _degasPumpEnable;
         private double _degasPumpPressure;
-        private bool _boosterPumpStatus;
         #endregion
     }
 }

+ 3 - 3
Framework/Common/Persistent/VpwMain/VpwMainPersistentManager.cs

@@ -57,14 +57,14 @@ namespace MECF.Framework.Common.Persistent.VpwMain
             }
             catch (Exception ex)
             {
-                LOG.WriteLog(eEvent.ERR_VPWMAIN, "System", "Load RinsePersistent xml exception");
+                LOG.WriteLog(eEvent.ERR_VPWMAIN, "System", "Load VPW Main Persistent xml exception");
             }
         }
         /// <summary>
-        /// 获取Rinse Persistent数值
+        /// 获取 Persistent数值
         /// </summary>
         /// <returns></returns>
-        public VpwMainPersistentValue GetRinsePersistentValue(string module)
+        public VpwMainPersistentValue GetPersistentValue(string module)
         {
             VpwMainPersistentValue value = new VpwMainPersistentValue();
             if (_persistentValueDic.ContainsKey(module) == false)

+ 11 - 2
Framework/Common/Persistent/VpwMain/VpwMainPersistentValue.cs

@@ -15,7 +15,11 @@ namespace MECF.Framework.Common.Persistent.VpwMain
         /// <summary>
         /// 名称
         /// </summary>
-        private string _name;
+        private string _name;
+        /// <summary>
+        /// 速度
+        /// </summary>
+        private short _speed;
         /// <summary>
         /// 操作模式
         /// </summary>
@@ -29,7 +33,12 @@ namespace MECF.Framework.Common.Persistent.VpwMain
         /// 名称
         /// </summary>
         [XmlAttribute(AttributeName = "Name", Form = XmlSchemaForm.Unqualified, DataType = "string")]
-        public string Name { get { return _name; } set { _name = value; InvokePropertyChanged(nameof(Name)); } }
+        public string Name { get { return _name; } set { _name = value; InvokePropertyChanged(nameof(Name)); } }
+
+        /// <summary>
+        /// 速度
+        /// </summary>
+        public short Speed { get { return _speed; } set { _speed = value; InvokePropertyChanged(nameof(Speed)); } }
         /// <summary>
         /// 操作模式
         /// </summary>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <BeckhoffCfg>
-	<Controller Name="MASTER" IPAddress="10.4.6.75.1.1" PortAddress="851">
+	<Controller Name="MASTER" IPAddress="192.168.0.200.1.1" PortAddress="851">
 
 		<!-- Need to have at least one input and one output before Axis stuff -->
 
@@ -17,6 +17,7 @@
 		<Input Name="r_VPW_DIW_TOTAL_FLOW"  Address="MAIN.VPW_AI_8CHANNEL_4_20mA_EL3058_N102_1" Scaling="0=0,20=32767" Type="Analog" DataType="int"/>
 		<Input Name="r_VPW_DIW_PRESSURE"  Address="MAIN.VPW_AI_8CHANNEL_4_20mA_EL3058_N102_4" Scaling="0=0,100=32767" Type="Analog" DataType="int"/>
 		<Input Name="r_VPW_DEGAS_PUMP_PRESSURE"  Address="MAIN.VPW_AI_8CHANNEL_4_20mA_EL3058_N102_5" Scaling="758=0,100=32767" Type="Analog" DataType="int"/>
+		<Input Name="r_VPW_BOOSTER_PUMP_CURRENT" Address="MAIN.VPW_AO_8CHANNEL_0_10V_EL4008_N104_5" Scaling="0=0, 10=32767" Type="Analog" DataType="int"/>
 		<!--VPW Main End-->
 
 		<!--VPW1 Start-->

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

@@ -151,6 +151,7 @@
 		<IO Name="VPWMain1.VacuumPumpEnable" IOName="c_VPW_VACUUM_PUMP_ENABLE"/>
 		<IO Name="VPWMain1.VacuumPumpSpeedEnable" IOName="c_VPW_VACUUM_PUMP_SPEED_ENABLE"/>
 		<IO Name="VPWMain1.VacuumPumpSpeed" IOName="c_VPW_VACUUM_PUMP_SPEED"/>
+		<IO Name="VPWMain1.BoosterPumpCurrent" IOName="r_VPW_BOOSTER_PUMP_CURRENT"/>
 		<IO Name="VPWMain1.BoosterPumpSpeed" IOName="c_VPW_BOOSTER_PUMP_SPPED"/>
 		<IO Name="VPWMain1.BoosterPumpEnable" IOName="c_VPW_BOOSTER_PUMP_ENABLE"/>
 		<IO Name="VPWMain1.BoosterPumpStatus" IOName="r_VPW_BOOSTER_PUMP_STATUS"/>

+ 1 - 366
PunkHPX8_RT/Config/System.sccfg

@@ -141,80 +141,6 @@
 			<config default="0" name="AlignerPlatType" nameView="AlignerPlatType" description="aligner default plat type" max="10" min="0" paramter="" tag="" unit="" type="Integer" visible="true"/>
 		</configs>
 	</configs>
-	<!--DualPUF-->
-	<configs name="DualPUF" nameView="DualPUF">
-		<config default="490" name="PufLayoutRotationDistance" nameView="PufLayoutRotationDistance" description="Rotation Layout distance between efem and loader." max="600" min="300" paramter="" tag="" unit="mm" type="Integer" />
-		<config default="-218" name="RobotLayoutPosition" nameView="RobotLayoutPosition" description="Robot Layout position." max="200" min="-300" paramter="" tag="" unit="mm" type="Integer" />
-	</configs>
-	<!--PUF1-->
-	<configs name="PUF1" nameView="PUF1">
-		<config default="30" name="CheckStuckWafer200_TorqueLimit_Percent" nameView="CheckStuckWafer200_TorqueLimit_Percent" description="torque value of 200 wafer is less than this value,it is normal,otherwise innormal" max="100" min="1" paramter="" tag="" unit="deg" type="Double" />
-		<config default="2" name="CheckStuckWafer200_DistanceOffset1" nameView="Distance Sensor Offset1 mm" description="200 wafer Check Stuck Wafer Distance Sensor Offset1 MM" max="100" min="0" paramter="" tag="" unit="mm" type="Double" />
-		<config default="2" name="CheckStuckWafer200_DistanceOffset2" nameView="Distance Sensor Offset2 mm" description="200 wafer Check Stuck Wafer Distance Sensor Offset2 MM" max="100" min="0" paramter="" tag="" unit="mm" type="Double" />
-		<config default="-400" name="ChuckVacuumWaferPresent" nameView="ChuckVacuumWaferPresent" description="Vacuum level is more negative than this value when a wafer is present" max="-300" min="-600" paramter="" tag="" unit="mmHg" type="Double" />
-		<config default="-200" name="ChuckVacuumWaferAbsent" nameView="ChuckVacuumWaferAbsent" description="Vacuum level is more positive than this value when a wafer is absent" max="0" min="-300" paramter="" tag="" unit="mmHg" type="Double" />
-		<config default="0" name="ChuckVacuumCloseLimit" nameView="ChuckVacuumCloseLimit" description="The limit used to check vacuum level when the vacuum valve is closed. If the vacuum level is less than or equal to this value, there may be vacuum leak." max="100" min="-760" paramter="" tag="" unit="mmHg" type="Double" />
-		<config default="5" name="ChuckVacuumOpenLimit" nameView="ChuckVacuumOpenLimit" description="when the vacuum value is close,chuck vacuum level is less than this value,status is vacuum off." max="700" min="-700" paramter="" tag="" unit="mmHg" type="Double" />
-		<config default="True" name="EnableCheckStickDistanceStatus" nameView="EnableCheckStickDistanceStatus" description="Pick or place wafer procgress enable check stick distance status." max="" min="" paramter="" tag="" unit="" type="Bool" />
-		<config default="100" name="ChuckValveSwitchingTimeDelayInMilliSeconds" nameView="ChuckValveSwitchingTimeDelayInMilliSeconds" description="Chuck valve switching time delay." max="5000" min="0" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="20" name="CheckStuckWafer_DistanceSensorThreshold_mm" nameView="CheckStuckWafer_DistanceSensorThreshold_mm" description="Distance Sensor threshold." max="20" min="0.1" paramter="" tag="" unit="mmHg" type="Double" />
-	</configs>
-	<!--Loader1-->
-	<configs name="Loader1" nameView="Loader1">
-		<config default="200" name="SideAWaferSize" nameView="SideA Wafer Size" description="SideA Wafer尺寸" max="200" min="0" paramter="" tag="" unit="" type="Integer" visible="true"/>
-		<config default="200" name="SideBWaferSize" nameView="SideB Wafer Size" description="SideB Wafer尺寸" max="200" min="0" paramter="" tag="" unit="" type="Integer" visible="true"/>
-		<config default="30000" name="DoorLockTimeout" nameView="DoorLockTimeout" description="Max amount of time to wait for doors to be opened/closed. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="10000" name="LSVacuumTimeout" nameView="LSVacuumTimeout" description="Max amount of time to wait for LS vacuum to be enabled/disabled. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="30000" name="WSBladderEnableTimeout" nameView="WSBladderEnableTimeout" description="Max amount of time to wait for WS bladder to be enabled. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="30000" name="WSBladderDisableTimeout" nameView="WSBladderDisableTimeout" description="Max amount of time to wait for WS bladder to be disabled. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="30000" name="TranslateBladderTimeout" nameView="TranslateBladderTimeout" description="Max amount of time to wait for translation bladder to extend/retract. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="30000" name="BernoulliBladderTimeout" nameView="BernoulliBladderTimeout" description="Max amount of time to wait for bernoulli bladder to extend/retract. (ms)" max="60000" min="1000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="400" name="LeakTestLSOKLimit" nameView="LeakTestLSOKLimit" description="Leak Test LS OK Limit" max="700" min="0" paramter="" tag="" unit="" type="Double" />
-		<config default="20000" name="LeakTestCutOffTime" nameView="LeakTestCutOffTime" description="Leak Test Cut Off Time (ms)" max="50000" min="10000" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="50" name="LeakTestCutOffValue" nameView="LeakTestCutOffValue" description="Leak Test Cut Off Value" max="700" min="0" paramter="" tag="" unit="" type="Double" />
-		<config default="5" name="LeakTestRetryWait" nameView="LeakTestRetryWait" description="Wait time before retry (sec)." max="600" min="0" paramter="" tag="" unit="s" type="Integer" />
-		<config default="-550" name="LSVacuumHighLimit" nameView="LSVacuumHighLimit" description="LS vacuum high limit" max="0" min="-760" paramter="" tag="" unit="s" type="Double" />
-		<config default="-480" name="LSVacuumLowLimit" nameView="LSVacuumLowLimit" description="LS vacuum low limit" max="0" min="-760" paramter="" tag="" unit="s" type="Double" />
-		<config default="20" name="MinBernoulliN2Pressure" nameView="MinBernoulliN2Pressure" description="Minimum pressure of Bernoulli N2" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-		<config default="250" name="LSVacuumReleaseDelayInMilliseconds" nameView="LSVacuumReleaseDelayInMilliseconds" description="Delay before turning off LS vacuum after WH bladder is turned off in Load operation. (ms)" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="250" name="TranslateOutDelayInMilliseconds" nameView="TranslateOutDelayInMilliseconds" description="Delay before retracting loader chuck after CRS vacuum is turned off in Load operation. (ms)" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer" />
-		<config default="52" name="WSBladderPressure" nameView="WSBladderPressure" description="Minimum pressure of WS Bladder" max="100" min="0" paramter="" tag="" unit="s" type="Double" />
-		<config default="false" name="PlateOutCameraEnable" nameView="PlateOutCameraEnable" description="Enable Plate Out Detection Camera" max="" min="" paramter="" tag="" unit="" type="Bool" />
-		<config default="12" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-	</configs>
-	<!--Transporter-->
-	<configs name="Transporter" nameView="Transporter">
-		<config default="600" name="TransporterMinimumDistance" nameView="TransporterMinimumDistance" description="Miminum Distance between Loader Transporter and Process Transporter." max="2000" min="100" paramter="" tag="" unit="mm" type="Integer" />
-		<config default="1460" name="TransporterLayoutHorizontalDistance" nameView="TransporterLayoutHorizontalDistance" description="Transporter Layout distance betwwn cell1 and loader." max="2000" min="100" paramter="" tag="" unit="mm" type="Integer" />
-		<config default="265" name="TransporterLayoutLoaderPosition" nameView="TransporterLayoutLoaderPosition" description="Transporter Layout loader cell position." max="2000" min="100" paramter="" tag="" unit="mm" type="Integer" />
-		<config default="8" name="BiasDistanceBetweenLoaderAndProcess" nameView="BiasDistanceBetweenLoaderAndProcess" description="Bias Distance between Loader Transporter and Process Transporter" max="1000" min="0" paramter="" tag="" unit="mm" type="Integer" />
-		<config default="false" name="BypassWaferHolderPresent" nameView="BypassWaferHolderPresent" description="Transporter bypass check waferholder present when Transporter pick or place wafer holder" max="" min="" paramter="" tag="" unit="" type="Bool" />
-		<config default="20" name="TransporterTransferSeconds" nameView="TransporterTransferSeconds" description="Transporter Transfer WaferHolder Seconds." max="100" min="1" paramter="" tag="" unit="s" type="Integer" />
-		<config default="5" name="TransporterTransferOffSeconds" nameView="TransporterTransferOffSeconds" description="Transporter Transfer WaferHolder offset seconds between Max Seconds and Min Seconds." max="100" min="1" paramter="" tag="" unit="s" type="Integer" />
-		<config default="2" name="MaxPickTries" nameView="MaxPickTries" description="Transporter pick up max retry times." max="5" min="0" paramter="" tag="" unit="" type="Integer" />
-		<!--Loader Transporter-->
-		<configs name="Transporter2" nameView="Transporter2">
-			<config default="15" name="StartCellId" nameView="StartCellId" description="Loader Transporter transfer start cell id." max="40" min="1" paramter="" tag="" unit="" type="Integer" />
-			<config default="40" name="EndCellId" nameView="EndCellId" description="Loader Transporter transfer start cell id." max="40" min="1" paramter="" tag="" unit="" type="Integer" />
-			<config default="20" name="UnlockTimerLock" nameView="UnlockTimerLock" description="start unlock after unlocktimerlock seconds,transporter auto lock." max="30" min="5" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="LockCheckTime" nameView="LockCheckTime" description="start lock after lockchecktime seconds,check 1,2 locker status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="UnlockCheckTime" nameView="UnlockCheckTime" description="start unlock after unlockchecktime seconds,check 1,2 unlocker status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="RetractCheckTime" nameView="RetractCheckTime" description="start restract after retractchecktime seconds,check 1,2 retract status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="ExtendCheckTime" nameView="ExtendCheckTime" description="start extend after extendchecktime seconds,check 1,2 extend status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-		</configs>
-		<configs name="Transporter1" nameView="Transporter1">
-			<config default="1" name="StartCellId" nameView="StartCellId" description="Loader Transporter transfer start cell id." max="40" min="1" paramter="" tag="" unit="" type="Integer" />
-			<config default="33" name="EndCellId" nameView="EndCellId" description="Loader Transporter transfer start cell id." max="40" min="1" paramter="" tag="" unit="" type="Integer" />
-			<config default="20" name="UnlockTimerLock" nameView="UnlockTimerLock" description="start unlock after unlocktimerlock seconds,transporter auto lock." max="30" min="5" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="LockCheckTime" nameView="LockCheckTime" description="start lock after lockchecktime seconds,check 1,2 locker status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="UnlockCheckTime" nameView="UnlockCheckTime" description="start unlock after unlockchecktime seconds,check 1,2 unlocker status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="RetractCheckTime" nameView="RetractCheckTime" description="start restract after retractchecktime seconds,check 1,2 retract status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="2" name="ExtendCheckTime" nameView="ExtendCheckTime" description="start extend after extendchecktime seconds,check 1,2 extend status." max="5" min="0" paramter="" tag="" unit="s" type="Integer" />
-		</configs>
-	</configs>
 	<configs name="Log" nameView="Log">
 		<config default="false" name="EnableLinmotLog" nameView="EnableLinmotLog" description="enable linmot log" max="" min="" paramter="" tag="" unit="" type="Bool" />
 		<config default="false" name="EnableResistivityLog" nameView="EnableResistivityLog" description="enable Resistivity log" max="" min="" paramter="" tag="" unit="" type="Bool" />
@@ -222,119 +148,6 @@
 		<config default="false" name="EnablePowerSupplierLog" nameView="EnablePowerSupplierLog" description="enable Temperature log" max="" min="" paramter="" tag="" unit="" type="Bool" />
 		<config default="false" name="EnableBarcodeReaderLog" nameView="EnalbeBarcodeReaderlog" description="enable BarcodeReader log" max="" min="" paramter="" tag="" unit="" type="Bool" />
 	</configs>
-	<configs name="Metal" nameView="Metal">
-		<config default="10000" name="CellFlowFaultHoldOffTime" nameView="CellFlowFaultHoldOffTime" description="Cell Flow fault Hold Off time" max="50000" min="0" paramter="" tag="" unit="ms" type="Integer"></config>
-		<config default="0.5" name="MinPumpFlow" nameView="MinPumpFlow" description="Minimum pump flow" max="10" min="0" paramter="" tag="" unit="L/min" type="Double"></config>
-		<config default="12" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="0" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="0" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="0" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2.5" name="AnodeFillVolume" nameView="AnodeFillVolume" description="Time delay after placing wafer holder down to cell" max="5" min="0" paramter="" tag="" unit="" type="Double"/>
-		<config default="240" name="AnodeDrainTime" nameView="AnodeDrainTime" description="Time for AN Drain" max="600" min="0" paramter="" tag="" unit="s" type="Double"/>
-		<config default="3.0" name="CellFlowStartLowLimit" nameView="CellFlowStartLowLimit" description="cell flow start low limit" max="30" min="0" paramter="" tag="" unit="" type="Double"/>
-		<config default="0.125" name="ShortTestThreshold" nameView="ShortTestThreshold" description="short test threshold" max="1" min="0" paramter="" tag="" unit="A" type="Double"/>		
-		<config default="100" name="WaferShuttleSoakMaxTime" nameView="WaferShuttleSoakMaxTime" description="Max Time Length of Wafer Shuttle Soak in metal" type="Integer" min="0" max="100000" paramter="" tag="" unit="minute"/>
-		<config default="10" name="CurrentCheckDelay" nameView="CurrentCheckDelay" description="After delay second to check current"  type="Integer" min="0" max="60" paramter="" tag="" unit="s" />
-
-		<config default="5" name="CellFlowAlarmHoldoffTime" nameView="CellFlowAlarmHoldoffTime" description="CellFlow Alarm Holdoff Time" max="100" min="0" paramter="" tag="" unit="s" type="Double"/>
-		<config default="5" name="CurrentAlarmHoldoffTime" nameView="CurrentAlarmHoldoffTime" description="Current Alarm Holdoff Time" max="100" min="0" paramter="" tag="" unit="s" type="Double"/>
-		<config default="5" name="VoltageAlarmHoldoffTime" nameView="VoltageAlarmHoldoffTime" description="Voltage Alarm Holdoff Time" max="100" min="0" paramter="" tag="" unit="s" type="Double"/>
-		
-		<configs name="Metal1" nameView="Metal1">
-				<config default="50" name="MetalTotalAmpHoursWarningLimit" nameView="MetalTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-				<config default="100" name="MetalTotalAmpHoursFaultLimit" nameView="MetalTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="AnodeATotalAmpHoursWarningLimit" nameView="AnodeATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeATotalAmpHoursFaultLimit" nameView="AnodeATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="AnodeBTotalAmpHoursWarningLimit" nameView="AnodeBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeBTotalAmpHoursFaultLimit" nameView="AnodeBTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="MembraneATotalAmpHoursWarningLimit" nameView="MembraneATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="MembraneATotalAmpHoursFaultLimit" nameView="MembraneATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="MembraneBTotalAmpHoursWarningLimit" nameView="MembraneBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="MembraneBTotalAmpHoursFaultLimit" nameView="MembraneBTotalAmpHoursFaultLimit"  type="Double" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="MetalTotalWafersWarningLimit" nameView="MetalTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="MetalTotalWafersFaultLimit" nameView="MetalTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-				<config default="50" name="AnodeATotalWafersWarningLimit" nameView="AnodeATotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeATotalWafersFaultLimit" nameView="AnodeATotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="AnodeBTotalWafersWarningLimit" nameView="AnodeBTotalWafersWarningLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeBTotalWafersFaultLimit" nameView="AnodeBTotalWafersFaultLimit" type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description=""/>
-				<config default="50" name="AnodeABathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeABathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="50" name="AnodeBBathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-				<config default="100" name="AnodeBBathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-		  </configs>
-	      <configs name="Metal2" nameView="Metal2">
-					<config default="50" name="MetalTotalAmpHoursWarningLimit" nameView="MetalTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="100" name="MetalTotalAmpHoursFaultLimit" nameView="MetalTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeATotalAmpHoursWarningLimit" nameView="AnodeATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalAmpHoursFaultLimit" nameView="AnodeATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalAmpHoursWarningLimit" nameView="AnodeBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalAmpHoursFaultLimit" nameView="AnodeBTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneATotalAmpHoursWarningLimit" nameView="MembraneATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneATotalAmpHoursFaultLimit" nameView="MembraneATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneBTotalAmpHoursWarningLimit" nameView="MembraneBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneBTotalAmpHoursFaultLimit" nameView="MembraneBTotalAmpHoursFaultLimit"  type="Double" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MetalTotalWafersWarningLimit" nameView="MetalTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MetalTotalWafersFaultLimit" nameView="MetalTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="50" name="AnodeATotalWafersWarningLimit" nameView="AnodeATotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalWafersFaultLimit" nameView="AnodeATotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalWafersWarningLimit" nameView="AnodeBTotalWafersWarningLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalWafersFaultLimit" nameView="AnodeBTotalWafersFaultLimit" type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description=""/>
-					<config default="50" name="AnodeABathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeABathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBBathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBBathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-		  </configs>
-	      <configs name="Metal3" nameView="Metal3">
-					<config default="50" name="MetalTotalAmpHoursWarningLimit" nameView="MetalTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="100" name="MetalTotalAmpHoursFaultLimit" nameView="MetalTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeATotalAmpHoursWarningLimit" nameView="AnodeATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalAmpHoursFaultLimit" nameView="AnodeATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalAmpHoursWarningLimit" nameView="AnodeBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalAmpHoursFaultLimit" nameView="AnodeBTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneATotalAmpHoursWarningLimit" nameView="MembraneATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneATotalAmpHoursFaultLimit" nameView="MembraneATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneBTotalAmpHoursWarningLimit" nameView="MembraneBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneBTotalAmpHoursFaultLimit" nameView="MembraneBTotalAmpHoursFaultLimit"  type="Double" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MetalTotalWafersWarningLimit" nameView="MetalTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MetalTotalWafersFaultLimit" nameView="MetalTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="50" name="AnodeATotalWafersWarningLimit" nameView="AnodeATotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalWafersFaultLimit" nameView="AnodeATotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalWafersWarningLimit" nameView="AnodeBTotalWafersWarningLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalWafersFaultLimit" nameView="AnodeBTotalWafersFaultLimit" type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description=""/>
-					<config default="50" name="AnodeABathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeABathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBBathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBBathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-		  </configs>
-		  <configs name="Metal4" nameView="Metal4">
-					<config default="50" name="MetalTotalAmpHoursWarningLimit" nameView="MetalTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="100" name="MetalTotalAmpHoursFaultLimit" nameView="MetalTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeATotalAmpHoursWarningLimit" nameView="AnodeATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalAmpHoursFaultLimit" nameView="AnodeATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalAmpHoursWarningLimit" nameView="AnodeBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalAmpHoursFaultLimit" nameView="AnodeBTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneATotalAmpHoursWarningLimit" nameView="MembraneATotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneATotalAmpHoursFaultLimit" nameView="MembraneATotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MembraneBTotalAmpHoursWarningLimit" nameView="MembraneBTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MembraneBTotalAmpHoursFaultLimit" nameView="MembraneBTotalAmpHoursFaultLimit"  type="Double" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="MetalTotalWafersWarningLimit" nameView="MetalTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="MetalTotalWafersFaultLimit" nameView="MetalTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-					<config default="50" name="AnodeATotalWafersWarningLimit" nameView="AnodeATotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeATotalWafersFaultLimit" nameView="AnodeATotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBTotalWafersWarningLimit" nameView="AnodeBTotalWafersWarningLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBTotalWafersFaultLimit" nameView="AnodeBTotalWafersFaultLimit" type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description=""/>
-					<config default="50" name="AnodeABathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeABathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="50" name="AnodeBBathTotalUsageDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-					<config default="100" name="AnodeBBathTotalUsageDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-		  </configs>
-	</configs>
-	<configs name="Buffer" nameView="Buffer">
-		<config default="10" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-	</configs>
 	<configs name="Facilities" nameView="Facilities">
 		<config default="300" name="SampleAutoDisableTime" nameView="SampleAutoDisableTime" description="Sample Auto Disable Time" max="600" min="1" paramter="" tag="" unit="s" type="Integer"/>
 		<configs name="CDA_1_Pressure" nameView="CDA_1_Pressure">
@@ -415,31 +228,13 @@
 		<config default="true" name="SRD1EnablePresenceCheckvalue" nameView="SRD1EnablePresenceCheckvalue" description="SRD1 Enable Presence Test" max="" min="" paramter="" tag="" unit="" type="Bool"/>
 		<config default="true" name="SRD2EnablePresenceCheckvalue" nameView="SRD2EnablePresenceCheckvalue" description="SRD2 Enable Presence Test" max="" min="" paramter="" tag="" unit="" type="Bool"/>
 	</configs>
-	<configs name="Dryer">
-		<config default="1800" name="AutoShutoffTimeoutSeconds" nameView="AutoShutoffTimeoutSeconds" description="Auto shutoff timeout in seconds" max="10000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="-3" name="MinimumPressure" nameView="MinimumPressure" description="Minimum Pressure" max="1000" min="-1000" paramter="" tag="" unit="mmHg" type="Double"/>
-		<config default="5" name="PressureCheckWarningHoldoffSeconds" nameView="PressureCheckWarningHoldoffSeconds" description="Hold off seconds to check pressure warning" max="10000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="-100" name="PressureCheckWarningMMHG" nameView="PressureCheckWarningMMHG" description="Warning Pressure Value" max="1000" min="-1000" paramter="" tag="" unit="mmHg" type="Double"/>
-		<config default="5" name="PressureCheckErrorHoldoffSeconds" nameView="PressureCheckErrorHoldoffSeconds" description="Hold off seconds to check pressure error" max="10000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="-150" name="PressureCheckErrorMMHG" nameView="PressureCheckErrorMMHG" description="Error Pressure Value" max="1000" min="-1000" paramter="" tag="" unit="mmHg" type="Double"/>
-		<config default="10" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-	</configs>
-	<configs name="Prewet">
+	<configs name="VPWMain">
 		<config default="5.1" name="PumpKp" nameView="PumpKp" description="PumpKp" max="1000" min="0" paramter="" tag="" unit="s" type="Double"/>
 		<config default="0" name="PumpKi" nameView="PumpKi" description="PumpKi" max="1000" min="0" paramter="" tag="" unit="s" type="Double"/>
 		<config default="0" name="PumpKd" nameView="PumpKd" description="PumpKd" max="1000" min="0" paramter="" tag="" unit="s" type="Double"/>
 		<config default="42" name="PressureTarget" nameView="PressureTarget" description="PressureTarget" max="100" min="0" paramter="" tag="" unit="s" type="Double"/>
-		<config default="30" name="KeepWetMaxLimit" nameView="KeepWetMaxLimit" description="Keep Max Max Times" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
-		<config default="10" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
 		<config default="7300" name="MaxPumpSpeed" nameView="MaxPumpSpeed" description="Max Pump Speed" max="32768" min="0" paramter="" tag="" unit="" type="Integer"/>
 		<config default="300" name="MinPumpSpeed" nameView="MinPumpSpeed" description="Min Pump Speed" max="32768" min="0" paramter="" tag="" unit="" type="Integer"/>
-		<config default="30" name="IdleKeepwetPauseBetweenScanSeconds" nameView="IdleKeepwetPauseBetweenScanSeconds" description="Idle Keepwet Pause Between Scan Seconds" max="60" min="0" paramter="" tag="" unit="s" type="Integer"/>
 		<config default="0.5" name="PrewetTargetLimit" nameView="PrewetTargetLimit" description="Prewet pressure in PrewetTarget Limit,device stop adjust speed" max="60" min="0" paramter="" tag="" unit="" type="Double"/>
 		<configs name="PumpFlow" nameView="PumpFlow">
 			<config default="60.0" name="Error_Max" nameView="Error_Max" max="100.0" min="0" paramter="" tag="" unit="" type="Double"  description="This value defines the maximum flow, in liters per minute, above which this interlock will transition to an Error state."/>
@@ -454,166 +249,6 @@
 			<config default="30.0" name="Warning_Min" nameView="Warning_Min" max="100.0" min="0" paramter="" tag="" unit="" type="Double"  description="This value defines the minimum flow, in liters per minute, below which this interlock will transition to an Warning state.  Note corresponding Error_Min/Error_Max testing supersedes this test."/>
 		</configs>
 	</configs>
-	<configs name="QDR">
-		<config default="65" name="SensorReadingFull" nameView="SensorReadingFull" description="QDR Sensor Reading Full" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
-		<config default="20" name="SensorReadingEmpty" nameView="SensorReadingEmpty" description="QDR Sensor Reading Empty" max="100" min="0" paramter="" tag="" unit="" type="Integer"/>
-		<config default="8" name="NominalDrainTimeSeconds" nameView="NominalDrainTimeSeconds" description="QDR Nominal Drain Time" max="1000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="35.0" name="FillingStartedDelta" nameView="FillingStartedDelta" description="water level substract start water level is over delta means filling water normal" max="100" min="0" paramter="" tag="" unit="" type="Double"/>
-		<config default="20" name="ConcurrentFillTimeSeconds" nameView="ConcurrentFillTimeSeconds" description="QDR Concurrent Fill Time" max="60" min="1" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="ClampCycleTimeSeconds" nameView="ClampCycleTimeSeconds" description="Clamp cycle time seconds" max="60" min="1" paramter="" tag="" unit="s" type="Double"/>
-		<config default="3" name="NumberClampCyclesToComplete" nameView="NumberClampCyclesToComplete" description="Clamp cycle counts" max="60" min="0" paramter="" tag="" unit="" type="Integer"/>
-		<config default="120" name="PickupDelayWarningSeconds" nameView="PickupDelayWarningSeconds" description="Wait transporter goto QDR to pickup Wafer Shuttle" max="500" min="1" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PickTimeSeconds" nameView="PickTimeSeconds" description="Time taken to pick up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="PlaceTimeSeconds" nameView="PlaceTimeSeconds" description="Time taken to place down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PickDelaySeconds" nameView="PickDelaySeconds" description="Time delay before picking wafer holder up from cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="2" name="PlaceDelaySeconds" nameView="PlaceDelaySeconds" description="Time delay after placing wafer holder down to cell" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="5" name="NominalCheckFillWaterTimeSeconds" nameView="NominalCheckFillWaterTimeSeconds" description="Time delay to check water is filling" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="10" name="NominalCheckFillFullTimeSeconds" nameView="NominalCheckFillFullTimeSeconds" description="Time delay to check water is full" max="100000" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		<config default="false" name="KeepWaferShuttleWetUntilTransfer" nameView="KeepWaferShuttleWetUntilTransfer" description="whether or not to execute keepwet action" max="" min="" paramter="" tag="" unit="s" type="Bool"/>
-		<config default="20" name="QDRKeepWetBelowClampWaterLevel" nameView="QDRKeepWetBelowClampWaterLevel" description="QDR KeepWet BelowClamp WaterLevel" max="100" min="0" paramter="" tag="" unit="" type="Double"/>
-	</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>
-		<config default="300" name="PHUpdatePeriod" nameView="PHUpdatePeriod" description="PH update period" max="500" min="0" paramter="" tag="" unit="s" type="Double"></config>
-		<config default="10" name="PHFlowTime" nameView="PHFlowTime" description="PH Valve time" max="20" min="0" paramter="" tag="" unit="s" type="Double"></config>
-		<config default="240" name="PHStabilizationTime" nameView="PHStabilizationTime" description="PH Stabilization time" max="500" min="0" paramter="" tag="" unit="s" type="Double"></config>
-		<config default="2.5" name="PHSampleTime" nameView="PHSampleTime" description="PH sample time" max="10" min="0" paramter="" tag="" unit="s" type="Double"></config>
-		<config default="20" name="PHSamples" nameView="PHSamples" description="PH sample count" max="50" min="0" paramter="" tag="" unit="" type="Integer"></config>
-		<config default="20" name="LevelAvgSamples" nameView="LevelAvgSamples" description="Level average sample" max="100" min="0" paramter="" tag="" unit="" type="Integer"></config>
-		<config default="5000" name="DefaultPumpSpeed" nameView="DefaultPumpSpeed" description="pump default speed" max="7200" min="0" paramter="" tag="" unit="" type="Double"></config>
-		<config default="7200" name="MaxPumpSpeed" nameView="MaxPumpSpeed" description="Max Pump Speed" max="10000" min="1" paramter="" tag="" unit="rpm" type="Double"></config>
-		<config default="3" name="ANDefaultPumpSpeed" nameView="ANDefaultPumpSpeed" description="AN pump default speed" max="5" min="0" paramter="" tag="" unit="" type="Double"></config>
-		<config default="5" name="ANOverFlow" nameView="ANOverFlow" description="AN Pump ignor AN over flow " max="10" min="0" paramter="" tag="" unit="" type="Double"></config>
-		<config default="3" name="DrainSpeed" nameView="DrainSpeed" description="AN drain pump default speed" max="5" min="0" paramter="" tag="" unit="" type="Double"></config>
-		<config default="30" name="CellFlowUpdatePeriod" nameView="CellFlowUpdatePeriod" description="Cell Flow Update Period" max="60" min="0" paramter="" tag="" unit="s" type="Integer"/>
-		
-		<configs name="Reservoir1" nameView="Reservoir1">
-			<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="10000" name="DIReplenMaxAccumulation" nameView="DIReplenMaxAccumulation" description="DI Valve Max Time in period " max="20000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="95" name="HighLevel" nameView="HighLevel" description="High Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="30" name="LowLevel" nameView="LowLevel" description="Low Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0,0,1.5022,94.782" name="LevelCurve" nameView="LevelCurve" description="Level curve" max="" min="" paramter="" tag="" unit="" type="String" />
-			<config default="260" name="MaxTankVolume" nameView="MaxTankVolume" description="Maximum Tank volume" max="300" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="HEDFlowLowLimit" nameView="HEDFlowLowLimit" description="HED Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="CellFlowLowLimit" nameView="CellFlowLowLimit" description="Cell Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0.56" name="InitialDosingSpeed" nameView="InitialDosingSpeed" description="Initial Dosing Speed" max="0.672" min="0" paramter="" tag="" unit="mL/min" type="Double" />
-			<config default="0.14" name="MinDoseAmount" nameView="MinDoseAmount" description="Minimum Dose Amount" max="200" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume1" nameView="BottleReserveVolume1" description="Bottle Reserve Volume of Replen1" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume2" nameView="BottleReserveVolume2" description="Bottle Reserve Volume of Replen2" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="60" name="DosingOutTime" nameView="DosingOutTime" description="Dosing Out Time" max="600" min="1" paramter="" tag="" unit="s" type="Double" />
-
-			<config default="52" name="ReservoirTotalAmpHoursWarningLimit" nameView="ReservoirTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalAmpHoursFaultLimit" nameView="ReservoirTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalAmpHoursWarningLimit" nameView="BathTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalAmpHoursFaultLimit" nameView="BathTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="MembraneTotalAmpHoursWarningLimit" nameView="MembraneTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="MembraneTotalAmpHoursFaultLimit" nameView="MembraneTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-			<config default="52" name="ReservoirTotalWafersWarningLimit" nameView="ReservoirTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalWafersFaultLimit" nameView="ReservoirTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-		</configs>
-		<configs name="Reservoir2" nameView="Reservoir2">
-			<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="10000" name="DIReplenMaxAccumulation" nameView="DIReplenMaxAccumulation" description="DI Valve Max Time in period " max="20000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="95" name="HighLevel" nameView="HighLevel" description="High Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="30" name="LowLevel" nameView="LowLevel" description="Low Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0,0,1.5022,94.782" name="LevelCurve" nameView="LevelCurve" description="Level curve" max="" min="" paramter="" tag="" unit="" type="String" />
-			<config default="260" name="MaxTankVolume" nameView="MaxTankVolume" description="Maximum Tank volume" max="300" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="HEDFlowLowLimit" nameView="HEDFlowLowLimit" description="HED Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="CellFlowLowLimit" nameView="CellFlowLowLimit" description="Cell Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0.56" name="InitialDosingSpeed" nameView="InitialDosingSpeed" description="Initial Dosing Speed" max="0.672" min="0" paramter="" tag="" unit="mL/min" type="Double" />
-			<config default="0.14" name="MinDoseAmount" nameView="MinDoseAmount" description="Minimum Dose Amount" max="200" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume1" nameView="BottleReserveVolume1" description="Bottle Reserve Volume of Replen1" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume2" nameView="BottleReserveVolume2" description="Bottle Reserve Volume of Replen2" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="60" name="DosingOutTime" nameView="DosingOutTime" description="Dosing Out Time" max="600" min="1" paramter="" tag="" unit="s" type="Double" />
-
-			
-
-			<config default="52" name="ReservoirTotalAmpHoursWarningLimit" nameView="ReservoirTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalAmpHoursFaultLimit" nameView="ReservoirTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalAmpHoursWarningLimit" nameView="BathTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalAmpHoursFaultLimit" nameView="BathTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="MembraneTotalAmpHoursWarningLimit" nameView="MembraneTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="MembraneTotalAmpHoursFaultLimit" nameView="MembraneTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-			<config default="52" name="ReservoirTotalWafersWarningLimit" nameView="ReservoirTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalWafersFaultLimit" nameView="ReservoirTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-		</configs>
-		<configs name="Reservoir3" nameView="Reservoir3">
-			<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="10000" name="DIReplenMaxAccumulation" nameView="DIReplenMaxAccumulation" description="DI Valve Max Time in period " max="20000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="95" name="HighLevel" nameView="HighLevel" description="High Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="30" name="LowLevel" nameView="LowLevel" description="Low Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0,0,1.5022,94.782" name="LevelCurve" nameView="LevelCurve" description="Level curve" max="" min="" paramter="" tag="" unit="" type="String" />
-			<config default="260" name="MaxTankVolume" nameView="MaxTankVolume" description="Maximum Tank volume" max="300" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="HEDFlowLowLimit" nameView="HEDFlowLowLimit" description="HED Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="CellFlowLowLimit" nameView="CellFlowLowLimit" description="Cell Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0.56" name="InitialDosingSpeed" nameView="InitialDosingSpeed" description="Initial Dosing Speed" max="0.672" min="0" paramter="" tag="" unit="mL/min" type="Double" />
-			<config default="0.14" name="MinDoseAmount" nameView="MinDoseAmount" description="Minimum Dose Amount" max="200" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume1" nameView="BottleReserveVolume1" description="Bottle Reserve Volume of Replen1" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume2" nameView="BottleReserveVolume2" description="Bottle Reserve Volume of Replen2" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="60" name="DosingOutTime" nameView="DosingOutTime" description="Dosing Out Time" max="600" min="1" paramter="" tag="" unit="s" type="Double" />
-
-			<config default="20" name="CMMFlowHighFault" nameView="CMMFlowHighFault" description="CMM Flow Over HighFault,system occurs error " max="20" min="0" paramter="" tag="" unit="L/min" type="Double" />
-			<config default="20" name="CMMFlowHighWarning" nameView="CMMFlowHighWarning" description="CMM Flow Over HighWarninb,system occurs warning " max="20" min="0" paramter="" tag="" unit="L/min" type="Double" />
-			<config default="0" name="CMMFlowLowFault" nameView="CMMFlowLowFault" description="CMM Flow Less LowFault,system occurs error " max="20" min="0" paramter="" tag="" unit="L/min" type="Double" />
-			<config default="0" name="CMMFlowLowWarning" nameView="CMMFlowLowWarning" description="CMM Flow less HighFault,system occurs warning " max="20" min="0" paramter="" tag="" unit="L/min" type="Double" />
-			<config default="1000" name="CMMAnodeLifeTimeAHrs" nameView="CMMAnodeLifeTimeAHrs" description="CMM Anode LifeTimeAHrs" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			<config default="1000" name="CMMCathodeLifeTimeAHrs" nameView="CMMCathodeLifeTimeAHrs" description="CMM Cathode LifeTimeAHrs" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			<config default="6" name="CMMFlowCheckDelaySeconds" nameView="CMMFlowCheckDelaySeconds" description="CMM Flow Check Delay Seconds" max="30" min="0" paramter="" tag="" unit="s" type="Integer" />
-			<config default="50" name="CMMAnodeTotalAmpHoursWarningLimit" nameView="CMMAnodeTotalAmpHoursWarningLimit" description="CMM Anode Total Amp Hours Warning Limit" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			<config default="100" name="CMMAnodeTotalAmpHoursFaultLimit" nameView="CMMAnodeTotalAmpHoursFaultLimit" description="CMM Anode Total Amp Hours Fault Limit" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			<config default="50" name="CMMCathodeTotalAmpHoursWarningLimit" nameView="CMMCathodeTotalAmpHoursWarningLimit" description="CMM Cathode Total AmpHours Warning Limit" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			<config default="100" name="CMMCathodeTotalAmpHoursFaultLimit" nameView="CMMCathodeTotalAmpHoursFaultLimit" description="CMM Cathode Total AmpHours Fault Limit" max="100000" min="0" paramter="" tag="" unit="Ah" type="Double" />
-			
-			<config default="52" name="ReservoirTotalAmpHoursWarningLimit" nameView="ReservoirTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalAmpHoursFaultLimit" nameView="ReservoirTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalAmpHoursWarningLimit" nameView="BathTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalAmpHoursFaultLimit" nameView="BathTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="MembraneTotalAmpHoursWarningLimit" nameView="MembraneTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="MembraneTotalAmpHoursFaultLimit" nameView="MembraneTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-			<config default="52" name="ReservoirTotalWafersWarningLimit" nameView="ReservoirTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalWafersFaultLimit" nameView="ReservoirTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-		</configs>
-		<configs name="Reservoir4" nameView="Reservoir4">
-			<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="10000" name="DIReplenMaxAccumulation" nameView="DIReplenMaxAccumulation" description="DI Valve Max Time in period " max="20000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="95" name="HighLevel" nameView="HighLevel" description="High Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="30" name="LowLevel" nameView="LowLevel" description="Low Level" max="100" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0,0,1.5022,94.782" name="LevelCurve" nameView="LevelCurve" description="Level curve" max="" min="" paramter="" tag="" unit="" type="String" />
-			<config default="260" name="MaxTankVolume" nameView="MaxTankVolume" description="Maximum Tank volume" max="300" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="HEDFlowLowLimit" nameView="HEDFlowLowLimit" description="HED Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="3" name="CellFlowLowLimit" nameView="CellFlowLowLimit" description="Cell Flow Limit" max="30" min="0" paramter="" tag="" unit="" type="Double" />
-			<config default="0.56" name="InitialDosingSpeed" nameView="InitialDosingSpeed" description="Initial Dosing Speed" max="0.672" min="0" paramter="" tag="" unit="mL/min" type="Double" />
-			<config default="0.14" name="MinDoseAmount" nameView="MinDoseAmount" description="Minimum Dose Amount" max="200" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume1" nameView="BottleReserveVolume1" description="Bottle Reserve Volume of Replen1" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="1" name="BottleReserveVolume2" nameView="BottleReserveVolume2" description="Bottle Reserve Volume of Replen2" max="5000" min="0" paramter="" tag="" unit="mL" type="Double" />
-			<config default="60" name="DosingOutTime" nameView="DosingOutTime" description="Dosing Out Time" max="600" min="1" paramter="" tag="" unit="s" type="Double" />
-
-			<config default="52" name="ReservoirTotalAmpHoursWarningLimit" nameView="ReservoirTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalAmpHoursFaultLimit" nameView="ReservoirTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalAmpHoursWarningLimit" nameView="BathTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalAmpHoursFaultLimit" nameView="BathTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="BathTotalDaysWarningLimit" nameView="BathTotalDaysWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="BathTotalDaysFaultLimit" nameView="BathTotalDaysFaultLimit"  type="Integer" value="0" min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="52" name="MembraneTotalAmpHoursWarningLimit" nameView="MembraneTotalAmpHoursWarningLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="MembraneTotalAmpHoursFaultLimit" nameView="MembraneTotalAmpHoursFaultLimit"  type="Double" value="0"  min="0" max="100000" paramter="" tag="" unit=""/>
-			<config default="52" name="ReservoirTotalWafersWarningLimit" nameView="ReservoirTotalWafersWarningLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-			<config default="102" name="ReservoirTotalWafersFaultLimit" nameView="ReservoirTotalWafersFaultLimit"  type="Integer" value="0"  min="0" max="100000" paramter="" tag="" unit="" description="" />
-		</configs>
-	</configs>
 	<configs name="Linmot" nameView="Linmot">
 		<config default="5000" name="LinmotHoldoffMilliseconds" nameView="LinmotHoldoffMilliseconds" description="Linmot Hold off Milliseconds" max="10000" min="1" paramter="" tag="" unit="ms" type="Integer"></config>
 	</configs>

+ 78 - 10
PunkHPX8_RT/Devices/VpwMain/VpwMainDevice.cs

@@ -1,5 +1,6 @@
 using Aitex.Core.RT.DataCenter;
 using Aitex.Core.RT.Device;
+using Aitex.Core.RT.Log;
 using Aitex.Core.RT.OperationCenter;
 using Aitex.Core.Util;
 using MECF.Framework.Common.Beckhoff.ModuleIO;
@@ -7,6 +8,7 @@ using MECF.Framework.Common.CommonData.Prewet;
 using MECF.Framework.Common.CommonData.Vpw;
 using MECF.Framework.Common.IOCore;
 using MECF.Framework.Common.Persistent.Prewet;
+using MECF.Framework.Common.Persistent.VpwMain;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -31,6 +33,7 @@ namespace PunkHPX8_RT.Devices.VpwMain
         private const string VACUUM_PUMP_SPEED_ENABLE = "VacuumPumpSpeedEnable";
         private const string VACUUM_PUMP_SPEED = "VacuumPumpSpeed";
         private const string BOOSTER_PUMP_SPEED = "BoosterPumpSpeed";
+        private const string BOOSTER_PUMP_CURRENT = "BoosterPumpCurrent";
         private const string BOOSTER_PUMP_ENABLE = "BoosterPumpEnable";
         private const string BOOSTER_PUMP_STATUS = "BoosterPumpStatus";
         private const string DIW_ENABLE = "DiwEnable";
@@ -53,6 +56,14 @@ namespace PunkHPX8_RT.Devices.VpwMain
         /// 数据
         /// </summary>
         private VpwMainCommonData _commonData=new VpwMainCommonData();
+        /// <summary>
+        /// 持久性数值
+        /// </summary>
+        private VpwMainPersistentValue _persistentValue;
+        /// <summary>
+        /// 上一次Booster泵速
+        /// </summary>
+        private short _lastBoosterPumpSpeed = 0;
         #endregion
 
         #region 属性
@@ -89,6 +100,15 @@ namespace PunkHPX8_RT.Devices.VpwMain
         /// </summary>
         private void InitializeParameter()
         {
+            _persistentValue = VpwMainPersistentManager.Instance.GetPersistentValue(Module);
+            if (_persistentValue != null)
+            {
+                _lastBoosterPumpSpeed = _persistentValue.Speed;
+            }
+            else
+            {
+                LOG.WriteLog(eEvent.ERR_PREWET, Module, "Persistent Value Object is not exist");
+            }
         }
         /// <summary>
         /// 初始化Routine
@@ -115,6 +135,7 @@ namespace PunkHPX8_RT.Devices.VpwMain
             IoSubscribeUpdateVariable(BOOSTER_PUMP_STATUS);
             IoSubscribeUpdateVariable(BOOSTER_PUMP_SPEED);
             IoSubscribeUpdateVariable(BOOSTER_PUMP_ENABLE);
+            IoSubscribeUpdateVariable(BOOSTER_PUMP_CURRENT);
             IoSubscribeUpdateVariable(DEGAS_PURGE);
             IoSubscribeUpdateVariable(DEGAS_ADJUST);
             IoSubscribeUpdateVariable(DEGAS_PUMP_ENABLE);
@@ -156,6 +177,13 @@ namespace PunkHPX8_RT.Devices.VpwMain
             {
                 _variableInitializeDic[variable] = true;
             }
+            switch (variable)
+            {
+                case BOOSTER_PUMP_STATUS:
+                    string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
+                    _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
+                    break;
+            }
         }
         /// <summary>
         /// 初始化OP
@@ -168,9 +196,7 @@ namespace PunkHPX8_RT.Devices.VpwMain
             OP.Subscribe($"{Module}.VacuumPumpDisable", (cmd, para) => { return VacuumPumpDisable(); });
             OP.Subscribe($"{Module}.VacuumPumpSpeedEnable", (cmd, para) => { return VacuumSpeedEnable(); });
             OP.Subscribe($"{Module}.VacuumPumpSpeedDisable", (cmd, para) => { return VacuumSpeedDisable(); });
-            OP.Subscribe($"{Module}.VacuumPumpSpeed", (cmd, para) =>{
-                short speed = short.Parse(para[0].ToString());
-                return WriteVacuumSpeed(speed); });
+            OP.Subscribe($"{Module}.VacuumPumpSpeed", (cmd, para) => { return BoosterPumpSpeedKeyDownOperation(cmd, para); });
             OP.Subscribe($"{Module}.DegasPumpEnable", (cmd, para) => { return DegasPumpEnable(); });
             OP.Subscribe($"{Module}.DegasPumpDisable", (cmd, para) => { return DegasPumpDisable(); });
             OP.Subscribe($"{Module}.DegasAdjustOn", (cmd, para) => { return DegasAdjustOn(); });
@@ -187,8 +213,8 @@ namespace PunkHPX8_RT.Devices.VpwMain
             OP.Subscribe($"{Module}.ChamberUp", (cmd, para) => { return ChamberUp(); });
             OP.Subscribe($"{Module}.ChamberDown", (cmd, para) => { return ChamberDown(); });
             
-            OP.Subscribe($"{Module}.BoosterPumpSpeedAuto", (cmd, para) => { return BoosterPumpSpeedAuto(); });
-            OP.Subscribe($"{Module}.BoosterPumpSpeedManual", (cmd, para) => { return BoosterPumpSpeedManual(); });
+            OP.Subscribe($"{Module}.BoosterPumpSpeedAuto", (cmd, para) => { return BoosterPumpSpeedAutoOperation(); });
+            OP.Subscribe($"{Module}.BoosterPumpSpeedManual", (cmd, para) => { return BoosterPumpSpeedManualOperation(); });
         }
         #endregion
 
@@ -331,6 +357,31 @@ namespace PunkHPX8_RT.Devices.VpwMain
         {
             return WriteVariableValue(BOOSTER_PUMP_SPEED, speed);
         }
+
+
+        /// Booster Pump Speed回车操作
+        /// </summary>
+        /// <param name="cmd"></param>
+        /// <param name="param"></param>
+        /// <returns></returns>
+        private bool BoosterPumpSpeedKeyDownOperation(string cmd, object[] param)
+        {
+            if (_commonData.BoosterPumpSpeedAuto)
+            {
+                LOG.WriteLog(eEvent.ERR_PREWET, Module, "Pump speed is auto,cannot change speed");
+                return false;
+            }
+
+            short speed = (short)param[0];
+            bool result = BoosterPumpSpeed(speed);
+            if (result)
+            {
+                _persistentValue.Speed = speed;
+                _lastBoosterPumpSpeed = speed;
+                PrewetPersistentManager.Instance.UpdatePersistentValue(Module);
+            }
+            return true;
+        }
         #endregion
 
         #region Chamber
@@ -350,15 +401,32 @@ namespace PunkHPX8_RT.Devices.VpwMain
         {
             return WriteVariableValue(CHAMBER_CLOSE, true);
         }
-
-        public bool BoosterPumpSpeedAuto()
+        /// <summary>
+        /// Pump Speed手动模式
+        /// </summary>
+        /// <param name="cmd"></param>
+        /// <param name="param"></param>
+        /// <returns></returns>
+        private bool BoosterPumpSpeedManualOperation()
         {
-            _commonData.BoosterPumpIsAutoMode = true;
+            _commonData.BoosterPumpSpeedAuto = true;
+            _commonData.BoosterPumpModel = "Manual";
+            string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
+            _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
             return true;
         }
-        public bool BoosterPumpSpeedManual()
+        /// <summary>
+        /// Pump Speed自动模式
+        /// </summary>
+        /// <param name="cmd"></param>
+        /// <param name="param"></param>
+        /// <returns></returns>
+        private bool BoosterPumpSpeedAutoOperation()
         {
-            _commonData.BoosterPumpIsAutoMode = false;
+            _commonData.BoosterPumpSpeedAuto = true;
+            _commonData.BoosterPumpModel = "Auto";
+            string statusContent = _commonData.BoosterPumpStatus ? "On" : "Off";
+            _commonData.BoosterPumpStatusContent = $"{_commonData.BoosterPumpModel}: {statusContent}";
             return true;
         }
         #endregion