Browse Source

1.修复kepler 气缸开关信号只读on或者off bug
2.修复 气缸信号interlock无作用bug
3.优化安装包功能,现在可以正常使用
4.修复recipe step no 默认为1 bug
5.TM/LL 加上配置文件时间关平衡阀
6.pick/swap 开门前等待压力稳定值为配置文件开门控压值-5,避免压力不稳定开门压差报警
7.删除PM里面关于loadlock的冗余代码

lixiang 1 year ago
parent
commit
ecd991d2f4

+ 0 - 1
Venus/Venus_Core/Recipe.cs

@@ -251,7 +251,6 @@ namespace Venus_Core
 
         private int m_StepNo = 1;
         [IsOnlyRead]
-        [JsonIgnore]
         public int StepNo
         {
             get { return m_StepNo; }

+ 1 - 0
Venus/Venus_MainPages/ViewModels/RecipeViewModel.cs

@@ -247,6 +247,7 @@ namespace Venus_MainPages.ViewModels
 
         private void SaveEAPRecipe(string recipeContent, ObservableCollection<RecipeStep> Steps)
         {
+            return;
             if (currentChamber == JetChamber.Kepler2200A || currentChamber == JetChamber.Kepler2200B)
             {
                 var newrecipePath2 = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName, $"{typeFolder}_EAP", CurrentRecipeName + ".rcp");

+ 1 - 1
Venus/Venus_MainPages/Views/WaferAssociationUnit.xaml

@@ -107,7 +107,7 @@
                                     <Style>
                                         <Style.Triggers>
                                             <DataTrigger Binding="{Binding WaferStatus}" Value="0">
-                                                <Setter Property="Border.Background" Value="#F5F7FA"/>
+                                                <Setter Property="Border.Background" Value="LightBlue"/>
                                             </DataTrigger>
                                             <DataTrigger Binding="{Binding WaferStatus}" Value="1">
                                                 <Setter Property="Border.Background" Value="SkyBlue"/>

BIN
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200ADeviceModel.xml


BIN
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BDeviceModel.xml


+ 2 - 2
Venus/Venus_RT/Config/System_Kepler2200.sccfg

@@ -121,7 +121,6 @@
 
 		<config default="1" name="TMRobotType" nameView="TM Robot Type" description="TM 类型,1=SIASUN新松 2=HONGHU泓浒 3==Brooks" max="10" min="1" paramter="" tag="" unit="" type="Integer" />
 
-		<config default="100" name="SoftVentEndPressure" nameView="Soft Vent End Pressure" description="" max="30000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 
 		<config default="1" name="LLAStationNumber" nameView="LLA Station Number" description="LLA Station Number" max="99" min="0" paramter="" tag="" unit="" type="Integer" />
 		<config default="2" name="LLBStationNumber" nameView="LLB Station Number" description="LLB Station Number" max="99" min="0" paramter="" tag="" unit="" type="Integer" />
@@ -138,7 +137,8 @@
 		<config default="2000" name="PumpCrossingPressure" nameView="Pump Crossing Pressure" description="" max="300000" min="200" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="60"  name="PumpingTimeout" nameView="Pumping Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="500" name="PumpForelinePressureLimit" nameView="ForelinePressure" description="PumpDown Check it" max="2000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
-		
+
+		<config default="100" name="SoftVentEndPressure" nameView="Soft Vent End Pressure" description="" max="30000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 		<config default="60" name="VentingTimeout" nameView="Venting Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="2000" name="OverVentTime" nameView="Over Vent Time Delay" description="" max="60000" min="0" paramter="" tag="" unit="ms" type="Integer" />
 		<config default="2000" name="PurgeVentPressure" description="Purge Vent Pressure" max="760000" min="0" paramter="" tag="" unit="Pa" type="Double" />

+ 8 - 8
Venus/Venus_RT/Config/TM/TMInterlock.xml

@@ -149,14 +149,14 @@
 		<Limit di="DI_Water_Leak_Sensor"				value="true" tip="Water Leak Sensor"		tip.zh-CN="" tip.en-US="DI-3" />
 	</Action>
 
-	<Action do="DO_PMA_SlitDoor_Open"					value="true" tip="PMA Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+	<Action do="DO_PMA_SlitDoor_Open"					value="true" tip="PMA Slit Door Open"		tip.zh-CN="" tip.en-US="DO-32" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMA_Lid_Closed"			    value="true" tip="PMA CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-42" />
 	</Action>
 
 
-	<Action do="DO_PMA_SlitDoor_Close"				value="true" tip="PMA Slit Door Close"	    tip.zh-CN="" tip.en-US="DO-14" >
+	<Action do="DO_PMA_SlitDoor_Close"				value="true" tip="PMA Slit Door Close"	    tip.zh-CN="" tip.en-US="DO-33" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMA_Lid_Closed"			    value="true" tip="PMA CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-42" />
@@ -164,14 +164,14 @@
 
 	</Action>
 
-	<Action do="DO_PMB_SlitDoor_Open"					value="true" tip="PMB Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+	<Action do="DO_PMB_SlitDoor_Open"			    value="true" tip="PMB Slit Door Open"		tip.zh-CN="" tip.en-US="DO-34" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMB_Lid_Closed"			    value="true" tip="PMB CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-43" />
 	</Action>
 
 
-	<Action do="DO_PMB_SlitDoor_Close"				value="true" tip="PMB Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+	<Action do="DO_PMB_SlitDoor_Close"				value="true" tip="PMB Slit Door Close"	tip.zh-CN="" tip.en-US="DO-35" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMB_Lid_Closed"			    value="true" tip="PMB CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-43" />
@@ -179,14 +179,14 @@
 
 	</Action>
 
-	<Action do="DO_PMC_SlitDoor_Open"					value="true" tip="PMC Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+	<Action do="DO_PMC_SlitDoor_Open"					value="true" tip="PMC Slit Door Open"		tip.zh-CN="" tip.en-US="DO-36" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMC_Lid_Closed"			    value="true" tip="PMC CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-54" />
 	</Action>
 
 
-	<Action do="DO_PMC_SlitDoor_Close"				value="true" tip="PMC Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+	<Action do="DO_PMC_SlitDoor_Close"				value="true" tip="PMC Slit Door Close"	tip.zh-CN="" tip.en-US="DO-37" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMC_Lid_Closed"			    value="true" tip="PMC CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-54" />
@@ -194,14 +194,14 @@
 
 	</Action>
 
-	<Action do="DO_PMD_SlitDoor_Open"					value="true" tip="PMD Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+	<Action do="DO_PMD_SlitDoor_Open"					value="true" tip="PMD Slit Door Open"		tip.zh-CN="" tip.en-US="DO-38" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMD_Lid_Closed"			    value="true" tip="PMD CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-55" />
 	</Action>
 
 
-	<Action do="DO_PMD_SlitDoor_Close"				value="true" tip="PMD Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+	<Action do="DO_PMD_SlitDoor_Close"				value="true" tip="PMD Slit Door Close"	tip.zh-CN="" tip.en-US="DO-39" >
 		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_PMD_Lid_Closed"			    value="true" tip="PMD CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-55" />

+ 17 - 22
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -58,7 +58,7 @@ namespace Venus_RT.Devices
 
         private readonly IoSensor _ATM_sw;
         private readonly IoSensor _CDAPressure;
-        private readonly IoSensor _ATM_Loadlock_sw;
+        //private readonly IoSensor _ATM_Loadlock_sw;
         private readonly IoSensor _N2Pressure_sw;
         private readonly IoSensor _VAC_sw;
         private readonly IoSensor _WLK_sw;
@@ -66,7 +66,7 @@ namespace Venus_RT.Devices
         private readonly IoSensor _RFG_Interlock;
         private readonly IoSensor _PM_Lid_Closed;
         private readonly IoSensor _Source_RF_Match_Interlock;
-        private readonly IoSensor _PM_SlitDoor_Closed;
+        //private readonly IoSensor _PM_SlitDoor_Closed;
         private readonly IoSensor _TurboPumpInterlock;
         private readonly IoSensor _GasBoxDoor;
         private readonly IoSensor _GasBoxPressure;
@@ -74,6 +74,7 @@ namespace Venus_RT.Devices
 
         private readonly IoHighTemperatureHeater _highTemperatureHeater;
         private readonly F_TRIG _GasBoxN2FlowSwitchTrigger = new F_TRIG();
+        private readonly Stopwatch _GasBoxN2FlowSwitchStopWatch = new Stopwatch();
 
 
         private readonly PumpBase _MainPump;
@@ -90,7 +91,7 @@ namespace Venus_RT.Devices
 
         //private readonly IoSignalTower _SignalTower;
 
-        private readonly IoHeater _ForelineTC;
+        //private readonly IoHeater _ForelineTC;
         private readonly IoHeater _WallTC;
 
         private readonly IoPressureControl _pressureController;
@@ -112,7 +113,7 @@ namespace Venus_RT.Devices
         public override bool IsLidClosed => _Lid.OFFFeedback;
         //public override bool IsLidLoadlockClosed => _LidLoadlock.OFFFeedback;
 
-        public override bool IsSlitDoorClosed => !_slitDoor.ONFeedback && _slitDoor.OFFFeedback;
+        public override bool IsSlitDoorClosed => _slitDoor.State == CylinderState.Close;
 
         public override bool IsPumpRunning => _MainPump.IsRunning;
         public override bool IsISOOpen => _TurboPumpPumpingValve.Status;
@@ -145,8 +146,8 @@ namespace Venus_RT.Devices
         public override bool LiftPinIsDown => false;
         public override bool LiftPinIsUp => false;
 
-        public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
-        public override bool IsVACLoadLock => LoadlockPressure <= 1000;
+        //public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
+        //public override bool IsVACLoadLock => LoadlockPressure <= 1000;
         public override bool IsVAC => _VAC_sw.Value;
         public override bool IsWaterFlowOk => true;
         public override bool IsWLK => _WLK_sw.Value;
@@ -154,7 +155,7 @@ namespace Venus_RT.Devices
         public override bool PMLidClosed => _PM_Lid_Closed.Value;
         public override bool TurboPumpInterlock => _TurboPumpInterlock.Value;
         public override bool SourceRFMatchInterlock => _Source_RF_Match_Interlock.Value;
-        public override bool SlitDoorClosed => _PM_SlitDoor_Closed.Value;
+        //public override bool SlitDoorClosed => _PM_SlitDoor_Closed.Value;
 
         public override double CalculationPressure
         {
@@ -286,7 +287,7 @@ namespace Venus_RT.Devices
             //_LoadlockVentValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockVent}");
             //_LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
             _ATM_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
-            _ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
+            //_ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
             _N2Pressure_sw = DEVICE.GetDevice<IoSensor>($"{Module}.N2PressureOk");
             _VAC_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorVacSwitch");
             _Water_Flow = DEVICE.GetDevice<IoSensor>($"{Module}.SensorWaterFlowOk");
@@ -296,13 +297,13 @@ namespace Venus_RT.Devices
 
             _PM_Lid_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorPMLidClosed");
             _Source_RF_Match_Interlock = DEVICE.GetDevice<IoSensor>($"{Module}.RFMatchInterlock");
-            _PM_SlitDoor_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSlitDoorClosed");
+            //_PM_SlitDoor_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSlitDoorClosed");
             _TurboPumpInterlock = DEVICE.GetDevice<IoSensor>($"{Module}.TurboPumpInterlock");
             _GasBoxDoor = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxDoorSW");
             _GasBoxPressure = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxPressureSW");
             _GasBoxN2Flow_sw = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxN2FlowSwitch");
 
-            _ForelineTC = DEVICE.GetDevice<IoHeater>($"{Module}.ForelineHeater");
+            //_ForelineTC = DEVICE.GetDevice<IoHeater>($"{Module}.ForelineHeater");
             _WallTC = DEVICE.GetDevice<IoHeater>($"{Module}.WallHeater");
 
 
@@ -404,7 +405,7 @@ namespace Venus_RT.Devices
             _GasRFStopWatch.Stop();
 
             processPressureLimit = ConvertPressureUnit.ConvertmTorrToPa(1950);
-
+            _GasBoxN2FlowSwitchStopWatch.Start();
             //_PressureType = (PressureType)SC.GetValue<int>("System.PressureUnitType");
 
             //DATA.Subscribe($"{Name}.SCR1", () => GetAiValue($"{Module}.AI_CHB_M-HT_SCR1_PWR_OUT"));
@@ -581,8 +582,11 @@ namespace Venus_RT.Devices
             }
 
             CheckPermanentInterlock();
-
-            CheckHighTemperatureHeaterInterlock();
+            if (_GasBoxN2FlowSwitchStopWatch.ElapsedMilliseconds > 10 * 1000)
+            {
+                _GasBoxN2FlowSwitchStopWatch.Stop();
+                CheckHighTemperatureHeaterInterlock();
+            }
         }
 
         private void CheckHighTemperatureHeaterInterlock()
@@ -625,15 +629,6 @@ namespace Venus_RT.Devices
             }
         }
 
-        //public override void BuzzerBlinking(double time)
-        //{
-        //    _SignalTower.BuzzerBlinking(time);
-        //}
-
-        //public override void SwitchOnBuzzerAndRed()
-        //{
-        //    _SignalTower.SwitchOnBuzzerAndRed("", null);
-        //}
 
         public override void Home()
         {

+ 17 - 9
Venus/Venus_RT/Devices/JetKepler2200BPM.cs

@@ -62,7 +62,7 @@ namespace Venus_RT.Devices
 
         private readonly IoSensor _ATM_sw;
         private readonly IoSensor _CDAPressure;
-        private readonly IoSensor _ATM_Loadlock_sw;
+        //private readonly IoSensor _ATM_Loadlock_sw;
         private readonly IoSensor _N2Pressure_sw;
         private readonly IoSensor _VAC_sw;
         private readonly IoSensor _WLK_sw;
@@ -70,7 +70,7 @@ namespace Venus_RT.Devices
         private readonly IoSensor _RFG_Interlock;
         private readonly IoSensor _PM_Lid_Closed;
         private readonly IoSensor _Source_RF_Match_Interlock;
-        private readonly IoSensor _PM_SlitDoor_Closed;
+        //private readonly IoSensor _PM_SlitDoor_Closed;
         private readonly IoSensor _TurboPumpInterlock;
         private readonly IoSensor _GasBoxDoor;
         private readonly IoSensor _GasBoxPressure;
@@ -82,6 +82,7 @@ namespace Venus_RT.Devices
 
         private readonly IoHighTemperatureHeater _highTemperatureHeater;
         private readonly F_TRIG _GasBoxN2FlowSwitchTrigger = new F_TRIG();
+        private readonly Stopwatch _GasBoxN2FlowSwitchStopWatch = new Stopwatch();
 
         private readonly PumpBase _MainPump;
         //private readonly ESC5HighVoltage _ESCHV;
@@ -154,8 +155,8 @@ namespace Venus_RT.Devices
         public override bool LiftPinIsDown => false;
         public override bool LiftPinIsUp => false;
 
-        public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
-        public override bool IsVACLoadLock => LoadlockPressure <= 1000;
+        //public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
+        //public override bool IsVACLoadLock => LoadlockPressure <= 1000;
         public override bool IsVAC => _VAC_sw.Value;
         public override bool IsWaterFlowOk => true;
         public override bool IsWLK => _WLK_sw.Value;
@@ -163,7 +164,7 @@ namespace Venus_RT.Devices
         public override bool PMLidClosed => _PM_Lid_Closed.Value;
         public override bool TurboPumpInterlock => _TurboPumpInterlock.Value;
         public override bool SourceRFMatchInterlock => _Source_RF_Match_Interlock.Value;
-        public override bool SlitDoorClosed => _PM_SlitDoor_Closed.Value;
+        //public override bool SlitDoorClosed => _PM_SlitDoor_Closed.Value;
         //public override double ProcessLowPressure => _pendulumValve.Pressure;
         //public override double ProcessHighPressure => _pressureController.ProcessHigh.Value;
 
@@ -303,7 +304,7 @@ namespace Venus_RT.Devices
             //_LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
             //_heMfc = DEVICE.GetDevice<IoMfc>($"{Module}.MfcHe");
             _ATM_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
-            _ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
+            //_ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
             _N2Pressure_sw = DEVICE.GetDevice<IoSensor>($"{Module}.N2PressureOk");
             _VAC_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorVacSwitch");
             _Water_Flow = DEVICE.GetDevice<IoSensor>($"{Module}.SensorWaterFlowOk");
@@ -313,7 +314,7 @@ namespace Venus_RT.Devices
 
             _PM_Lid_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorPMLidClosed");
             _Source_RF_Match_Interlock = DEVICE.GetDevice<IoSensor>($"{Module}.RFMatchInterlock");
-            _PM_SlitDoor_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSlitDoorClosed");
+            //_PM_SlitDoor_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSlitDoorClosed");
             _TurboPumpInterlock = DEVICE.GetDevice<IoSensor>($"{Module}.TurboPumpInterlock");
             _GasBoxDoor = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxDoorSW");
             _GasBoxPressure = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxPressureSW");
@@ -391,7 +392,7 @@ namespace Venus_RT.Devices
             else if (
                 SC.GetValue<int>($"{Module}.Match.MFG") == (int)MatchMFG.Revtech)
             {
-                _Match = DEVICE.GetDevice<RevtechMatch>($"{Module}.{VenusDevice.BiasMatch}");
+                _Match = DEVICE.GetDevice<RevtechMatch>($"{Module}.{VenusDevice.Match}");
             }
 
             _GasRFStopWatch.Stop();
@@ -409,6 +410,9 @@ namespace Venus_RT.Devices
             }
 
             _foreline_interlock_pressure = SC.GetValue<int>($"{Module}.PendulumValve.ForelinePressureLimit");
+
+            _GasBoxN2FlowSwitchStopWatch.Start();
+
             //_PressureType = (PressureType)SC.GetValue<int>("System.PressureUnitType");
 
             //DATA.Subscribe($"{Name}.SCR1", () => GetAiValue($"{Module}.AI_CHB_M-HT_SCR1_PWR_OUT"));
@@ -590,7 +594,11 @@ namespace Venus_RT.Devices
             }
 
             CheckPermanentInterlock();
-            CheckHighTemperatureHeaterInterlock();
+            if (_GasBoxN2FlowSwitchStopWatch.ElapsedMilliseconds > 10 * 1000)
+            {
+                _GasBoxN2FlowSwitchStopWatch.Stop();
+                CheckHighTemperatureHeaterInterlock();
+            }
         }
         private void CheckHighTemperatureHeaterInterlock()
         {

+ 16 - 16
Venus/Venus_RT/Devices/JetKepler2300PM.cs

@@ -26,7 +26,7 @@ namespace Venus_RT.Devices
     class JetKepler2300PM : JetPMBase
     {
         private readonly IoLid _Lid;
-        private readonly IoLid _LidLoadlock;
+        //private readonly IoLid _LidLoadlock;
 
         private readonly IoCylinder _slitDoor;
         private readonly IoCylinder _LiftPin;
@@ -59,8 +59,8 @@ namespace Venus_RT.Devices
         private readonly IoValve _TurboPumpPumpingValve;
         private readonly IoValve _TurboPumpPurgeValve;
         private readonly IoValve _GuageValve;
-        private readonly IoValve _LoadlockVentValve;
-        private readonly IoValve _LoadlockPumpingValve;
+        //private readonly IoValve _LoadlockVentValve;
+        //private readonly IoValve _LoadlockPumpingValve;
 
         private readonly IoSensor _ATM_sw;
         private readonly IoSensor _CDAPressure;
@@ -122,7 +122,7 @@ namespace Venus_RT.Devices
 
         // 盖子的状态
         public override bool IsLidClosed => _Lid.OFFFeedback;
-        public override bool IsLidLoadlockClosed => _LidLoadlock.OFFFeedback;
+        //public override bool IsLidLoadlockClosed => _LidLoadlock.OFFFeedback;
 
         public override bool IsSlitDoorClosed => !_slitDoor.ONFeedback && _slitDoor.OFFFeedback;
 
@@ -157,8 +157,8 @@ namespace Venus_RT.Devices
         public override bool LiftPinIsDown => _LiftPin.OFFFeedback;
         public override bool LiftPinIsUp => _LiftPin.ONFeedback;
 
-        public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
-        public override bool IsVACLoadLock => LoadlockPressure <= 1000;
+        //public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
+        //public override bool IsVACLoadLock => LoadlockPressure <= 1000;
         public override bool IsVAC => _VAC_sw.Value;
         public override bool IsWaterFlowOk => true;
         public override bool IsWLK => _WLK_sw.Value;
@@ -189,7 +189,7 @@ namespace Venus_RT.Devices
         public override double ChamberPressure => _pressureController.PressureGauge.Value;
         public override double ForelinePressure => _pressureController.ForelineGauge.Value;
         public override double TargetPressure => _pressureController.TargetPressure;
-        public override double LoadlockPressure => 0;
+        //public override double LoadlockPressure => 0;
         public override double ESCHePressure => _pressureController.ESCHeGauge.Value;
 
         public override int ESCOutputVoltage => _ESCHV.OutputVoltage;
@@ -314,7 +314,7 @@ namespace Venus_RT.Devices
         {
             Module = moduleName;
             _Lid = DEVICE.GetDevice<IoLid>($"{Module}.{VenusDevice.Lid}");
-            _LidLoadlock = DEVICE.GetDevice<IoLid>($"{Module}.{VenusDevice.LidLoadlock}");
+            //_LidLoadlock = DEVICE.GetDevice<IoLid>($"{Module}.{VenusDevice.LidLoadlock}");
 
             _slitDoor = DEVICE.GetDevice<IoCylinder>($"{Module}.{VenusDevice.SlitDoor}");
             _LiftPin = DEVICE.GetDevice<IoCylinder>($"{Module}.{VenusDevice.LiftPin}");
@@ -347,8 +347,8 @@ namespace Venus_RT.Devices
             _TurboPumpPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveTurboPumpPumping}");
             _TurboPumpPurgeValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveTurboPumpPurge}");
             _GuageValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveGuage}");
-            _LoadlockVentValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockVent}");
-            _LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
+            //_LoadlockVentValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockVent}");
+            //_LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
             _heMfc = DEVICE.GetDevice<IoMfc>($"{Module}.MfcHe");
             _ATM_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
             _ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
@@ -633,12 +633,12 @@ namespace Venus_RT.Devices
                 case ValveType.Guage:
                     _GuageValve.TurnValve(on, out _);
                     break;
-                case ValveType.LoadlockVent:
-                    _LoadlockVentValve.TurnValve(on, out _);
-                    break;
-                case ValveType.LoadlockPumping:
-                    _LoadlockPumpingValve.TurnValve(on, out _);
-                    break;
+                //case ValveType.LoadlockVent:
+                //    _LoadlockVentValve.TurnValve(on, out _);
+                //    break;
+                //case ValveType.LoadlockPumping:
+                //    _LoadlockPumpingValve.TurnValve(on, out _);
+                //    break;
                 case ValveType.Mfc1:
                     _Mfc1Valve.TurnValve(on, out _);
                     break;

+ 7 - 7
Venus/Venus_RT/Devices/JetPMBase.cs

@@ -51,8 +51,8 @@ namespace Venus_RT.Devices
         public virtual bool LiftPinIsDown { get; }
         public virtual bool LiftPinIsUp { get; }
 
-        public abstract bool IsATMLoadlock { get; }
-        public abstract bool IsVACLoadLock { get; }
+        //public abstract bool IsATMLoadlock { get; }
+        //public abstract bool IsVACLoadLock { get; }
         public abstract bool IsVAC { get; }
         public abstract bool IsWaterFlowOk { get; }
         public abstract bool IsWLK { get; }
@@ -62,7 +62,7 @@ namespace Venus_RT.Devices
         public abstract bool TurboPumpInterlock { get; }
         public virtual bool SourceRFFanInterlock { get; }
         public virtual bool SourceRFMatchInterlock { get; }
-        public abstract bool SlitDoorClosed { get; }
+        public virtual bool SlitDoorClosed { get; }
         public virtual bool LinerDoorClosed { get; }
         //public virtual double ProcessLowPressure { get; }
         //public virtual double ProcessHighPressure { get; }
@@ -149,7 +149,7 @@ namespace Venus_RT.Devices
         public abstract bool HasGasOutOfRange { get; }
         public abstract bool PendulumValveIsOpen();
 
-        public virtual double LoadlockPressure { get; }
+        //public virtual double LoadlockPressure { get; }
 
         public virtual double MFC1FeedBack { get; }
         public virtual double MFC2FeedBack { get; }
@@ -222,7 +222,7 @@ namespace Venus_RT.Devices
             DATA.Subscribe($"{Name}.ChamberPressure", () => ChamberPressure);
             DATA.Subscribe($"{Name}.ProcessPressure", () => ProcessPressure);
             DATA.Subscribe($"{Name}.ESCHePressure", () => ESCHePressure);
-            DATA.Subscribe($"{Name}.LoadlockPressure", () => LoadlockPressure);
+            //DATA.Subscribe($"{Name}.LoadlockPressure", () => LoadlockPressure);
 
             DATA.Subscribe($"{Name}.IsATM", () => IsATM, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Name}.IsVAC", () => IsVAC, SubscriptionAttribute.FLAG.IgnoreSaveDB);
@@ -244,8 +244,8 @@ namespace Venus_RT.Devices
 
             DATA.Subscribe($"{Name}.IsTurboPumpInterlock", () => TurboPumpInterlock, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-            DATA.Subscribe($"{Name}.IsATMLoadlock", () => IsATMLoadlock, SubscriptionAttribute.FLAG.IgnoreSaveDB);
-            DATA.Subscribe($"{Name}.IsVACLoadlock", () => IsVACLoadLock, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            //DATA.Subscribe($"{Name}.IsATMLoadlock", () => IsATMLoadlock, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            //DATA.Subscribe($"{Name}.IsVACLoadlock", () => IsVACLoadLock, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
             DATA.Subscribe($"{Name}.GetPVPosition", () => GetPVPosition());
 

+ 24 - 24
Venus/Venus_RT/Devices/JetVenusDEPM.cs

@@ -647,23 +647,23 @@ namespace Venus_RT.Devices
             }
         }
 
-        public override bool IsATMLoadlock
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return false;
-            }
-        }
+        //public override bool IsATMLoadlock
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return false;
+        //    }
+        //}
 
-        public override bool IsVACLoadLock
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return false;
-            }
-        }
+        //public override bool IsVACLoadLock
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return false;
+        //    }
+        //}
 
         public override bool IsLoadlockArmRetract
         {
@@ -707,14 +707,14 @@ namespace Venus_RT.Devices
 
         public override float BiasRFMatchC2 => _BiasMatch != null ? _BiasMatch.TunePosition1 : 0;
 
-        public override double LoadlockPressure
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return -100;
-            }
-        }
+        //public override double LoadlockPressure
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return -100;
+        //    }
+        //}
         public override void Monitor()
         {
             CheckPermanentInterlock();

+ 25 - 25
Venus/Venus_RT/Devices/JetVenusSEPM.cs

@@ -622,23 +622,23 @@ namespace Venus_RT.Devices
             }
         }
 
-        public override bool IsATMLoadlock
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return false;
-            }
-        }
-
-        public override bool IsVACLoadLock
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return false;
-            }
-        }
+        //public override bool IsATMLoadlock
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return false;
+        //    }
+        //}
+
+        //public override bool IsVACLoadLock
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return false;
+        //    }
+        //}
 
         public override bool IsLoadlockArmRetract
         {
@@ -682,14 +682,14 @@ namespace Venus_RT.Devices
 
         public override float BiasRFMatchC2 => _BiasMatch != null ? _BiasMatch.TunePosition1 : 0;
 
-        public override double LoadlockPressure
-        {
-            get
-            {
-                //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
-                return -100;
-            }
-        }
+        //public override double LoadlockPressure
+        //{
+        //    get
+        //    {
+        //        //LOG.Write(eEvent.ERR_PM, Module, "VenusSE PM is not exist Loadlock!");
+        //        return -100;
+        //    }
+        //}
 
         public override void BuzzerBlinking(double time)
         {

+ 4 - 5
Venus/Venus_RT/Devices/RevtechMatch.cs

@@ -39,7 +39,7 @@ namespace Venus_RT.Devices
         private string _port;
         public string WorkMode { get; set; } = "";
 
-        public string Vpp { get; set; }
+        public float Vpp { get; set; }
 
         private float c1SetPoint;
         private float c2SetPoint;
@@ -53,7 +53,7 @@ namespace Venus_RT.Devices
                 WorkMode = WorkMode,
                 C1 = TunePosition1,
                 C2 = TunePosition2,
-                VPP = Vpp,
+                VPP = Vpp.ToString(),
                 DCBias = DCBias.ToString(),
                 C1SetPoint = c1SetPoint,
                 C2SetPoint = c2SetPoint,
@@ -197,7 +197,7 @@ namespace Venus_RT.Devices
 
                         TunePosition1 = Convert.ToSingle(matchData[8]);
                         TunePosition2 = Convert.ToSingle(matchData[7]);
-                        Vpp = matchData[12];
+                        Vpp =Convert.ToSingle( matchData[12]);
                         DCBias = Convert.ToSingle(matchData[13]);
                     }
                 }
@@ -284,8 +284,7 @@ namespace Venus_RT.Devices
                 return  _serial.ReConnect();
             }
             else if (_matchCommunicationType == MatchCommunicationType.Ethernet)
-            {
-                //var ip = SC.GetStringValue($"{Module}.{_device}.IPAddress");
+            {               
                 return _socket.ReConnect(_address);
             }
             return false;

+ 8 - 8
Venus/Venus_RT/Devices/TM/JetTM.cs

@@ -214,14 +214,14 @@ namespace Venus_RT.Devices
 
         public LLPumpState LLPumpStatus { get { return _llPumpingState; } }
 
-        public bool PMASlitDoorClosed => _PMASlitDoor.OFFFeedback;
-        public bool PMASlitDoorOpened => _PMASlitDoor.ONFeedback;
-        public bool PMBSlitDoorClosed => _PMBSlitDoor.OFFFeedback;
-        public bool PMBSlitDoorOpened => _PMBSlitDoor.ONFeedback;
-        public bool PMCSlitDoorClosed => _PMCSlitDoor.OFFFeedback;
-        public bool PMCSlitDoorOpened => _PMCSlitDoor.ONFeedback;
-        public bool PMDSlitDoorClosed => _PMDSlitDoor.OFFFeedback;
-        public bool PMDSlitDoorOpened => _PMDSlitDoor.ONFeedback;
+        public bool PMASlitDoorClosed => _PMASlitDoor.State == CylinderState.Close;
+        public bool PMASlitDoorOpened => _PMASlitDoor.State == CylinderState.Open;
+        public bool PMBSlitDoorClosed => _PMBSlitDoor.State == CylinderState.Close;
+        public bool PMBSlitDoorOpened => _PMBSlitDoor.State == CylinderState.Open;
+        public bool PMCSlitDoorClosed => _PMCSlitDoor.State == CylinderState.Close;
+        public bool PMCSlitDoorOpened => _PMCSlitDoor.State == CylinderState.Open;
+        public bool PMDSlitDoorClosed => _PMDSlitDoor.State == CylinderState.Close;
+        public bool PMDSlitDoorOpened => _PMDSlitDoor.State == CylinderState.Open;
 
         public bool AllPMSlitDoorClosed
         {

+ 154 - 154
Venus/Venus_RT/Modules/PMs/LLPickRoutine.cs

@@ -1,155 +1,155 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Aitex.Core.Util;
-using Venus_RT.Devices;
-using MECF.Framework.Common.Equipment;
-using MECF.Framework.Common.SubstrateTrackings;
-using Venus_Core;
-
-namespace Venus_RT.Modules.PMs
-{
-    class LLPickRoutine : PMRoutineBase, IRoutine
-    {
-        private enum LLPickStep
-        {
-            kPrepareTransfer,
-            kExtend,
-            KDelay2s,
-            kPinUp,
-            kRetract,
-            kPostTransfer,
-            kVentLoadLock,
-        }
-
-        private readonly LoadLockVentRoutine _loadLockVentRoutine;
-        private int _prepareTransferTimeout = 120;
-        private int _transferWaferTimeout = 120;
-        public LLPickRoutine(JetPMBase chamber, LoadLockVentRoutine ventRoutine) : base(chamber)
-        {
-            Name = "PickWafer";
-            _loadLockVentRoutine = ventRoutine;
-        }
-
-        public RState Start(params object[] objs)
-        {
-            _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
-            _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
-
-            if(WaferManager.Instance.CheckNoWafer(ModuleName.PMA, 0))
-            {
-                Stop("腔体没有 Wafer,不能执行取片动作");
-                return RState.Failed;
-            }
-
-            if (WaferManager.Instance.CheckHasWafer(ModuleName.LLA, 0))
-            {
-                Stop("Loadlock 里面有片 Wafer,不能执行取片动作");
-                return RState.Failed;
-            }
-
-            if(WaferManager.Instance.GetWafer(ModuleName.PMA, 0).ChuckState == Aitex.Core.Common.EnumWaferChuckStatus.Chucked)
-            {
-                Stop("腔体中Wafer没有 Dechuck,不能执行取片动作");
-                return RState.Failed;
-            }
-
-            if (RouteManager.IsATMMode)
-            {
-                if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
-                {
-                    Stop("腔体非大气状态,请先执行充气动作");
-                    return RState.Failed;
-                }
-            }
-            else
-            {
-                if (!_chamber.IsVAC || !_chamber.IsVACLoadLock)
-                {
-                    Stop("腔体非真空状态,请先执行抽真空动作");
-                    return RState.Failed;
-                }
-            }
-
-            _chamber.OpenValve(ValveType.FastPump, false);
-            _chamber.OpenValve(ValveType.LoadlockPumping, false);
-
-            Reset();
-            return Runner.Start(Module, Name);
-        }
-        public RState Monitor()
-        {
-            Runner.Run(LLPickStep.kPrepareTransfer,    PrepareTransfer,        IsPrepareReady,                                     _prepareTransferTimeout * 1000)
-                .Run(LLPickStep.kExtend,               _chamber.ExtendWafer,   () => { return _chamber.IsLoadlockArmExtend; },     _transferWaferTimeout * 1000)
-                .Delay(LLPickStep.KDelay2s,2000)
-                .Run(LLPickStep.kPinUp,                SetLiftPinDown,         () => { return _chamber.CheckLiftDown(); })
-                .Run(LLPickStep.kRetract,              _chamber.RetractWafer,  () => { return _chamber.IsLoadlockArmRetract; },    _transferWaferTimeout * 1000)
-                .Run(LLPickStep.kPostTransfer,         PostTransfer,           IsPostTransferReady,                                _prepareTransferTimeout * 1000)
-                .End(LLPickStep.kVentLoadLock,         VentLoadLock,           IsVentDone);
-
-            return Runner.Status;
-        }
-
-        private bool PrepareTransfer()
-        {
-            _chamber.SetLiftPin(MovementPosition.Up, out _);
-            _chamber.SetSlitDoor(true, out _);
-            return true;
-        }
-
-        private bool IsPrepareReady()
-        {
-            return _chamber.CheckLiftUp() && _chamber.CheckSlitDoorOpen();
-        }
-
-        private bool PostTransfer()
-        {
-            WaferManager.Instance.WaferMoved(ModuleName.PMA, 0, ModuleName.LLA, 0);
-            _chamber.SetSlitDoor(false, out _);
-            return true;
-        }
-
-        private bool IsPostTransferReady()
-        {
-
-            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorClose();
-        }
-
-        private bool SetLiftPinDown()
-        {
-            return _chamber.SetLiftPin(MovementPosition.Down, out _);
-        }
-
-        private bool VentLoadLock()
-        {
-            //2023/06/08朱让取消
-            //if (!_isATMMode)
-            //{
-            //    return _loadLockVentRoutine.Start() == RState.Running;
-            //}
-            //else
-                return true;
-        }
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Aitex.Core.Util;
+//using Venus_RT.Devices;
+//using MECF.Framework.Common.Equipment;
+//using MECF.Framework.Common.SubstrateTrackings;
+//using Venus_Core;
+
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LLPickRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum LLPickStep
+//        {
+//            kPrepareTransfer,
+//            kExtend,
+//            KDelay2s,
+//            kPinUp,
+//            kRetract,
+//            kPostTransfer,
+//            kVentLoadLock,
+//        }
+
+//        private readonly LoadLockVentRoutine _loadLockVentRoutine;
+//        private int _prepareTransferTimeout = 120;
+//        private int _transferWaferTimeout = 120;
+//        public LLPickRoutine(JetPMBase chamber, LoadLockVentRoutine ventRoutine) : base(chamber)
+//        {
+//            Name = "PickWafer";
+//            _loadLockVentRoutine = ventRoutine;
+//        }
+
+//        public RState Start(params object[] objs)
+//        {
+//            _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
+//            _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
+
+//            if(WaferManager.Instance.CheckNoWafer(ModuleName.PMA, 0))
+//            {
+//                Stop("腔体没有 Wafer,不能执行取片动作");
+//                return RState.Failed;
+//            }
+
+//            if (WaferManager.Instance.CheckHasWafer(ModuleName.LLA, 0))
+//            {
+//                Stop("Loadlock 里面有片 Wafer,不能执行取片动作");
+//                return RState.Failed;
+//            }
+
+//            if(WaferManager.Instance.GetWafer(ModuleName.PMA, 0).ChuckState == Aitex.Core.Common.EnumWaferChuckStatus.Chucked)
+//            {
+//                Stop("腔体中Wafer没有 Dechuck,不能执行取片动作");
+//                return RState.Failed;
+//            }
+
+//            if (RouteManager.IsATMMode)
+//            {
+//                if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
+//                {
+//                    Stop("腔体非大气状态,请先执行充气动作");
+//                    return RState.Failed;
+//                }
+//            }
+//            else
+//            {
+//                if (!_chamber.IsVAC || !_chamber.IsVACLoadLock)
+//                {
+//                    Stop("腔体非真空状态,请先执行抽真空动作");
+//                    return RState.Failed;
+//                }
+//            }
+
+//            _chamber.OpenValve(ValveType.FastPump, false);
+//            _chamber.OpenValve(ValveType.LoadlockPumping, false);
+
+//            Reset();
+//            return Runner.Start(Module, Name);
+//        }
+//        public RState Monitor()
+//        {
+//            Runner.Run(LLPickStep.kPrepareTransfer,    PrepareTransfer,        IsPrepareReady,                                     _prepareTransferTimeout * 1000)
+//                .Run(LLPickStep.kExtend,               _chamber.ExtendWafer,   () => { return _chamber.IsLoadlockArmExtend; },     _transferWaferTimeout * 1000)
+//                .Delay(LLPickStep.KDelay2s,2000)
+//                .Run(LLPickStep.kPinUp,                SetLiftPinDown,         () => { return _chamber.CheckLiftDown(); })
+//                .Run(LLPickStep.kRetract,              _chamber.RetractWafer,  () => { return _chamber.IsLoadlockArmRetract; },    _transferWaferTimeout * 1000)
+//                .Run(LLPickStep.kPostTransfer,         PostTransfer,           IsPostTransferReady,                                _prepareTransferTimeout * 1000)
+//                .End(LLPickStep.kVentLoadLock,         VentLoadLock,           IsVentDone);
+
+//            return Runner.Status;
+//        }
+
+//        private bool PrepareTransfer()
+//        {
+//            _chamber.SetLiftPin(MovementPosition.Up, out _);
+//            _chamber.SetSlitDoor(true, out _);
+//            return true;
+//        }
+
+//        private bool IsPrepareReady()
+//        {
+//            return _chamber.CheckLiftUp() && _chamber.CheckSlitDoorOpen();
+//        }
+
+//        private bool PostTransfer()
+//        {
+//            WaferManager.Instance.WaferMoved(ModuleName.PMA, 0, ModuleName.LLA, 0);
+//            _chamber.SetSlitDoor(false, out _);
+//            return true;
+//        }
+
+//        private bool IsPostTransferReady()
+//        {
+
+//            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorClose();
+//        }
+
+//        private bool SetLiftPinDown()
+//        {
+//            return _chamber.SetLiftPin(MovementPosition.Down, out _);
+//        }
+
+//        private bool VentLoadLock()
+//        {
+//            //2023/06/08朱让取消
+//            //if (!_isATMMode)
+//            //{
+//            //    return _loadLockVentRoutine.Start() == RState.Running;
+//            //}
+//            //else
+//                return true;
+//        }
       
-        private bool IsVentDone()
-        {
-            //2023/06/08朱让取消
-            //if(!_isATMMode)
-            //{
-            //    RState ret = _loadLockVentRoutine.Monitor();
-            //    if (ret == RState.Failed || ret == RState.Timeout)
-            //    {
-            //        Runner.Stop("Vent Failed");
-            //        return false;
-            //    }
-
-            //    return ret == RState.End;
-            //}
-
-            return true;
-        }
-
-        public void Abort()
-        {
-        }
-    }
-}
+//        private bool IsVentDone()
+//        {
+//            //2023/06/08朱让取消
+//            //if(!_isATMMode)
+//            //{
+//            //    RState ret = _loadLockVentRoutine.Monitor();
+//            //    if (ret == RState.Failed || ret == RState.Timeout)
+//            //    {
+//            //        Runner.Stop("Vent Failed");
+//            //        return false;
+//            //    }
+
+//            //    return ret == RState.End;
+//            //}
+
+//            return true;
+//        }
+
+//        public void Abort()
+//        {
+//        }
+//    }
+//}

+ 128 - 128
Venus/Venus_RT/Modules/PMs/LLPlaceRoutine.cs

@@ -1,128 +1,128 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Venus_RT.Devices;
-using Aitex.Core.Util;
-using MECF.Framework.Common.Equipment;
-using MECF.Framework.Common.SubstrateTrackings;
-using System.Diagnostics;
-using System.Collections.Generic;
-using Venus_Core;
-using Venus_RT.Modules;
-namespace Venus_RT.Modules.PMs
-{
-    class LLPlaceRoutine : PMRoutineBase, IRoutine
-    {
-        private enum LLPlaceStep
-        {
-            kPrepareTransfer,
-            kExtend,
-            KDelay2s,
-            kPinUp,
-            kRetract,
-            kPostTransfer,
-            kOpenFastPump,
-        }
-
-        private int _prepareTransferTimeout = 120;
-        private int _transferWaferTimeout = 120;
-        public LLPlaceRoutine(JetPMBase chamber) : base(chamber)
-        {
-            Name = "PlaceWafer";
-        }
-
-        public RState Start(params object[] objs)
-        {
-            _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
-            _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
-
-            if (WaferManager.Instance.CheckHasWafer(ModuleName.PMA, 0))
-            {
-                Stop("腔体里面有 Wafer,不能执行放片动作");
-                return RState.Failed;
-            }
-
-            if (WaferManager.Instance.CheckNoWafer(ModuleName.LLA, 0))
-            {
-                Stop("Loadlock 里面没有 Wafer,不能执行放片动作");
-                return RState.Failed;
-            }
-
-            if (RouteManager.IsATMMode)
-            {
-                if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
-                {
-                    Stop("腔体非大气状态,请先执行充气动作");
-                    return RState.Failed;
-                }
-            }
-            else
-            {
-                if (!_chamber.IsVAC || !_chamber.IsVACLoadLock)
-                {
-                    Stop("腔体非真空状态,请先执行抽真空动作");
-                    return RState.Failed;
-                }
-            }
-
-            _chamber.OpenValve(ValveType.FastPump, false);
-            _chamber.OpenValve(ValveType.LoadlockPumping, false);
-
-            Reset();
-            return Runner.Start(Module, Name);
-        }
-        public RState Monitor()
-        {
-            Runner.Run(LLPlaceStep.kPrepareTransfer,   PrepareTransfer,        IsPrepareReady,                                     _prepareTransferTimeout * 1000)
-                .Run(LLPlaceStep.kExtend,              _chamber.ExtendWafer,   () => { return _chamber.IsLoadlockArmExtend; },     _transferWaferTimeout * 1000)
-                .Delay(LLPlaceStep.KDelay2s, 2000)
-                .Run(LLPlaceStep.kPinUp,               SetLiftPinUp,           () => { return _chamber.CheckLiftUp(); })
-                .Run(LLPlaceStep.kRetract,             _chamber.RetractWafer,  () => { return _chamber.IsLoadlockArmRetract; },    _transferWaferTimeout * 1000)
-                .Run(LLPlaceStep.kPostTransfer,        PostTransfer,           IsPostTransferReady,                                _prepareTransferTimeout * 1000)
-                .End(LLPlaceStep.kOpenFastPump,        OpenFastPump,           _delay_50ms);
-
-            return Runner.Status;
-        }
-
-        private bool PrepareTransfer()
-        {
-            _chamber.SetLiftPin(MovementPosition.Down, out _);
-            _chamber.SetSlitDoor(true, out _);
-            return true;
-        }
-
-        private bool IsPrepareReady()
-        {
-            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorOpen();
-        }
-
-        private bool PostTransfer()
-        {
-            WaferManager.Instance.WaferMoved(ModuleName.LLA, 0, ModuleName.PMA, 0);
-            _chamber.SetLiftPin(MovementPosition.Down, out _);
-            _chamber.SetSlitDoor(false, out _);
-            return true;
-        }
-
-        private bool IsPostTransferReady()
-        {
-            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorClose();
-        }
-
-        private bool SetLiftPinUp()
-        {
-            return _chamber.SetLiftPin(MovementPosition.Up, out _);
-        }
-
-        private bool OpenFastPump()
-        {
-            if (!RouteManager.IsATMMode)
-                _chamber.OpenValve(ValveType.FastPump, true);
-
-            return true;
-        }
-
-        public void Abort()
-        {
-        }
-    }
-}
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Venus_RT.Devices;
+//using Aitex.Core.Util;
+//using MECF.Framework.Common.Equipment;
+//using MECF.Framework.Common.SubstrateTrackings;
+//using System.Diagnostics;
+//using System.Collections.Generic;
+//using Venus_Core;
+//using Venus_RT.Modules;
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LLPlaceRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum LLPlaceStep
+//        {
+//            kPrepareTransfer,
+//            kExtend,
+//            KDelay2s,
+//            kPinUp,
+//            kRetract,
+//            kPostTransfer,
+//            kOpenFastPump,
+//        }
+
+//        private int _prepareTransferTimeout = 120;
+//        private int _transferWaferTimeout = 120;
+//        public LLPlaceRoutine(JetPMBase chamber) : base(chamber)
+//        {
+//            Name = "PlaceWafer";
+//        }
+
+//        public RState Start(params object[] objs)
+//        {
+//            _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
+//            _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
+
+//            if (WaferManager.Instance.CheckHasWafer(ModuleName.PMA, 0))
+//            {
+//                Stop("腔体里面有 Wafer,不能执行放片动作");
+//                return RState.Failed;
+//            }
+
+//            if (WaferManager.Instance.CheckNoWafer(ModuleName.LLA, 0))
+//            {
+//                Stop("Loadlock 里面没有 Wafer,不能执行放片动作");
+//                return RState.Failed;
+//            }
+
+//            if (RouteManager.IsATMMode)
+//            {
+//                if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
+//                {
+//                    Stop("腔体非大气状态,请先执行充气动作");
+//                    return RState.Failed;
+//                }
+//            }
+//            else
+//            {
+//                if (!_chamber.IsVAC || !_chamber.IsVACLoadLock)
+//                {
+//                    Stop("腔体非真空状态,请先执行抽真空动作");
+//                    return RState.Failed;
+//                }
+//            }
+
+//            _chamber.OpenValve(ValveType.FastPump, false);
+//            _chamber.OpenValve(ValveType.LoadlockPumping, false);
+
+//            Reset();
+//            return Runner.Start(Module, Name);
+//        }
+//        public RState Monitor()
+//        {
+//            Runner.Run(LLPlaceStep.kPrepareTransfer,   PrepareTransfer,        IsPrepareReady,                                     _prepareTransferTimeout * 1000)
+//                .Run(LLPlaceStep.kExtend,              _chamber.ExtendWafer,   () => { return _chamber.IsLoadlockArmExtend; },     _transferWaferTimeout * 1000)
+//                .Delay(LLPlaceStep.KDelay2s, 2000)
+//                .Run(LLPlaceStep.kPinUp,               SetLiftPinUp,           () => { return _chamber.CheckLiftUp(); })
+//                .Run(LLPlaceStep.kRetract,             _chamber.RetractWafer,  () => { return _chamber.IsLoadlockArmRetract; },    _transferWaferTimeout * 1000)
+//                .Run(LLPlaceStep.kPostTransfer,        PostTransfer,           IsPostTransferReady,                                _prepareTransferTimeout * 1000)
+//                .End(LLPlaceStep.kOpenFastPump,        OpenFastPump,           _delay_50ms);
+
+//            return Runner.Status;
+//        }
+
+//        private bool PrepareTransfer()
+//        {
+//            _chamber.SetLiftPin(MovementPosition.Down, out _);
+//            _chamber.SetSlitDoor(true, out _);
+//            return true;
+//        }
+
+//        private bool IsPrepareReady()
+//        {
+//            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorOpen();
+//        }
+
+//        private bool PostTransfer()
+//        {
+//            WaferManager.Instance.WaferMoved(ModuleName.LLA, 0, ModuleName.PMA, 0);
+//            _chamber.SetLiftPin(MovementPosition.Down, out _);
+//            _chamber.SetSlitDoor(false, out _);
+//            return true;
+//        }
+
+//        private bool IsPostTransferReady()
+//        {
+//            return _chamber.CheckLiftDown() && _chamber.CheckSlitDoorClose();
+//        }
+
+//        private bool SetLiftPinUp()
+//        {
+//            return _chamber.SetLiftPin(MovementPosition.Up, out _);
+//        }
+
+//        private bool OpenFastPump()
+//        {
+//            if (!RouteManager.IsATMMode)
+//                _chamber.OpenValve(ValveType.FastPump, true);
+
+//            return true;
+//        }
+
+//        public void Abort()
+//        {
+//        }
+//    }
+//}

+ 106 - 106
Venus/Venus_RT/Modules/PMs/LoadLockLeakCheckRoutine.cs

@@ -1,107 +1,107 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Venus_RT.Devices;
-using MECF.Framework.Common.Routine;
-using Venus_Core;
-namespace Venus_RT.Modules.PMs
-{
-    class LoadLockLeakCheckRoutine : PMRoutineBase, IRoutine
-    {
-        private enum LeakCheckStep
-        {
-            kCloseValves,
-            kPumpToBasePressure,
-            kPumpingDelay,
-            kLeakCheckDelay,
-            kLeakCheckCalc,
-            kPumpToBasePressure_2,
-            kEnd,
-        }
-        public double LeakRate { get; private set; }
-
-        private int _basePressureLL = 100;
-        private int _leakcheckPumpTimeLL = 180;
-        private int _leakcheckWaitTimeLL = 300;
-
-        private double _startPressure = 0;
-        private double _endPressure = 0;
-        private double _leakRate = 30.0;
-
-
-        public LoadLockLeakCheckRoutine(JetPMBase chamber) : base(chamber)
-        {
-            Name = "Loadlock Leakcheck";
-        }
-
-        public RState Start(params object[] objs)
-        {
-            if (CheckLidLoadLock() &&
-                CheckSlitDoor() &&
-                CheckDryPump())
-            {
-                Reset();
-
-                _chamber.CloseValves();
-                _basePressureLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
-                _leakcheckPumpTimeLL = SC.GetValue<int>($"{Module}.Pump.LoadLockLeakCheckPumpTime");
-                _leakcheckWaitTimeLL = SC.GetValue<int>($"{Module}.Pump.LoadLockLeakCheckWaitTime");
-                _leakRate = SC.GetValue<double>($"{Module}.Pump.LoadLockLeakRate");
-
-                return Runner.Start(Module, Name);
-            }
-            return RState.Failed;
-        }
-
-        public RState Monitor()
-        {
-            Runner.Delay(LeakCheckStep.kCloseValves,       _delay_1s)
-                .Run(LeakCheckStep.kPumpToBasePressure,    HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure <= _basePressureLL; })
-                .Delay(LeakCheckStep.kPumpingDelay,        _leakcheckPumpTimeLL * 1000)
-                .Run(LeakCheckStep.kLeakCheckDelay,        StartLeakCheck,                                                         _leakcheckWaitTimeLL * 1000)
-                .Run(LeakCheckStep.kLeakCheckCalc,         CalcLeakCheckResult,                                                    _delay_50ms)
-                .Run(LeakCheckStep.kPumpToBasePressure_2,  HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure <= _basePressureLL; })
-                .End(LeakCheckStep.kEnd,                   LeakCheckEnd,                                                           _delay_50ms);
-
-            return Runner.Status;
-        }
-
-        public void Abort()
-        {
-            CloseAllValves();
-        }
-
-        bool StartLeakCheck()
-        {
-            _chamber.OpenValve(ValveType.LoadlockPumping, false);
-            _startPressure = _chamber.LoadlockPressure;
-
-            Notify($"LoadLock压力开始值 {_startPressure} mt");
-            return true;
-        }
-
-        bool CalcLeakCheckResult()
-        {
-            _endPressure = _chamber.LoadlockPressure;
-
-            LeakRate = (_endPressure - _startPressure) * 60.0 / _leakcheckWaitTimeLL;
-
-            if(LeakRate < _leakRate)
-            {
-                Notify($"LoadLock Leakcheck完成, 压力结束值: {_startPressure} mt, 漏率:{LeakRate} mt/min");
-            }
-            else
-            {
-                Stop($"LoadLock Leakcheck失败, 腔体漏率 [{LeakRate}] mt/min, 高于 [{_leakRate}] mt/min");
-            }
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Venus_RT.Devices;
+//using MECF.Framework.Common.Routine;
+//using Venus_Core;
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LoadLockLeakCheckRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum LeakCheckStep
+//        {
+//            kCloseValves,
+//            kPumpToBasePressure,
+//            kPumpingDelay,
+//            kLeakCheckDelay,
+//            kLeakCheckCalc,
+//            kPumpToBasePressure_2,
+//            kEnd,
+//        }
+//        public double LeakRate { get; private set; }
+
+//        private int _basePressureLL = 100;
+//        private int _leakcheckPumpTimeLL = 180;
+//        private int _leakcheckWaitTimeLL = 300;
+
+//        private double _startPressure = 0;
+//        private double _endPressure = 0;
+//        private double _leakRate = 30.0;
+
+
+//        public LoadLockLeakCheckRoutine(JetPMBase chamber) : base(chamber)
+//        {
+//            Name = "Loadlock Leakcheck";
+//        }
+
+//        public RState Start(params object[] objs)
+//        {
+//            if (CheckLidLoadLock() &&
+//                CheckSlitDoor() &&
+//                CheckDryPump())
+//            {
+//                Reset();
+
+//                _chamber.CloseValves();
+//                _basePressureLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
+//                _leakcheckPumpTimeLL = SC.GetValue<int>($"{Module}.Pump.LoadLockLeakCheckPumpTime");
+//                _leakcheckWaitTimeLL = SC.GetValue<int>($"{Module}.Pump.LoadLockLeakCheckWaitTime");
+//                _leakRate = SC.GetValue<double>($"{Module}.Pump.LoadLockLeakRate");
+
+//                return Runner.Start(Module, Name);
+//            }
+//            return RState.Failed;
+//        }
+
+//        public RState Monitor()
+//        {
+//            Runner.Delay(LeakCheckStep.kCloseValves,       _delay_1s)
+//                .Run(LeakCheckStep.kPumpToBasePressure,    HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure <= _basePressureLL; })
+//                .Delay(LeakCheckStep.kPumpingDelay,        _leakcheckPumpTimeLL * 1000)
+//                .Run(LeakCheckStep.kLeakCheckDelay,        StartLeakCheck,                                                         _leakcheckWaitTimeLL * 1000)
+//                .Run(LeakCheckStep.kLeakCheckCalc,         CalcLeakCheckResult,                                                    _delay_50ms)
+//                .Run(LeakCheckStep.kPumpToBasePressure_2,  HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure <= _basePressureLL; })
+//                .End(LeakCheckStep.kEnd,                   LeakCheckEnd,                                                           _delay_50ms);
+
+//            return Runner.Status;
+//        }
+
+//        public void Abort()
+//        {
+//            CloseAllValves();
+//        }
+
+//        bool StartLeakCheck()
+//        {
+//            _chamber.OpenValve(ValveType.LoadlockPumping, false);
+//            _startPressure = _chamber.LoadlockPressure;
+
+//            Notify($"LoadLock压力开始值 {_startPressure} mt");
+//            return true;
+//        }
+
+//        bool CalcLeakCheckResult()
+//        {
+//            _endPressure = _chamber.LoadlockPressure;
+
+//            LeakRate = (_endPressure - _startPressure) * 60.0 / _leakcheckWaitTimeLL;
+
+//            if(LeakRate < _leakRate)
+//            {
+//                Notify($"LoadLock Leakcheck完成, 压力结束值: {_startPressure} mt, 漏率:{LeakRate} mt/min");
+//            }
+//            else
+//            {
+//                Stop($"LoadLock Leakcheck失败, 腔体漏率 [{LeakRate}] mt/min, 高于 [{_leakRate}] mt/min");
+//            }
             
-            return true;
-        }
-
-        bool LeakCheckEnd()
-        {
-            // 临时版试验机, 关Pumping Valve, 正式版保持 Pumping Valve 打开
-            _chamber.OpenValve(ValveType.LoadlockPumping, false);
-            return true;
-        }
-    }
-}
+//            return true;
+//        }
+
+//        bool LeakCheckEnd()
+//        {
+//            // 临时版试验机, 关Pumping Valve, 正式版保持 Pumping Valve 打开
+//            _chamber.OpenValve(ValveType.LoadlockPumping, false);
+//            return true;
+//        }
+//    }
+//}

+ 67 - 67
Venus/Venus_RT/Modules/PMs/LoadLockPumpRoutine.cs

@@ -1,79 +1,79 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Venus_RT.Devices;
-using MECF.Framework.Common.Routine;
-using Venus_Core;
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Venus_RT.Devices;
+//using MECF.Framework.Common.Routine;
+//using Venus_Core;
 
-namespace Venus_RT.Modules.PMs
-{
-    class LoadLockPumpRoutine : PMRoutineBase, IRoutine
-    {
-        private enum PumpStep
-        {
-            kClosePendulumValve,
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LoadLockPumpRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum PumpStep
+//        {
+//            kClosePendulumValve,
 
-            kCloseValves,
-            KCloseISO,
-            kPump,
-            kClosePumpValves,
-        }
+//            kCloseValves,
+//            KCloseISO,
+//            kPump,
+//            kClosePumpValves,
+//        }
 
-        private int _basePressureLL = 100;
-        private int _pumpTimeLimitLL = 120;
+//        private int _basePressureLL = 100;
+//        private int _pumpTimeLimitLL = 120;
         
         
-        public LoadLockPumpRoutine(JetPMBase chamber) : base(chamber)
-        {
-            Name = "Loadlock Pump";
-        }
+//        public LoadLockPumpRoutine(JetPMBase chamber) : base(chamber)
+//        {
+//            Name = "Loadlock Pump";
+//        }
 
-        public RState Start(params object[] objs)
-        {
-            if (CheckLidLoadLock() &&
-                CheckSlitDoor() &&
-                CheckDryPump())
-            {
-                Reset();
+//        public RState Start(params object[] objs)
+//        {
+//            if (CheckLidLoadLock() &&
+//                CheckSlitDoor() &&
+//                CheckDryPump())
+//            {
+//                Reset();
 
-                //_chamber.CloseValves();
-                _basePressureLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
-                _pumpTimeLimitLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpTimeLimit");
+//                //_chamber.CloseValves();
+//                _basePressureLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
+//                _pumpTimeLimitLL = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpTimeLimit");
                
-                return Runner.Start(Module, Name);
-            }
-            return RState.Failed;
-        }
+//                return Runner.Start(Module, Name);
+//            }
+//            return RState.Failed;
+//        }
 
-        public RState Monitor()
-        {
-          Runner.Run(PumpStep.kClosePendulumValve,  ClosePendulumValve,                                                         _delay_1s)
-                .Run(PumpStep.kCloseValves,         CloseValves,                                                                _delay_1s)
-                .Run(PumpStep.KCloseISO,            HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false))
-                .Run(PumpStep.kPump,                HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),        () => { return _chamber.LoadlockPressure <= _basePressureLL; }, _pumpTimeLimitLL * 1000)
-                .End(PumpStep.kClosePumpValves,     HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, false),       _delay_1s);
+//        public RState Monitor()
+//        {
+//          Runner.Run(PumpStep.kClosePendulumValve,  ClosePendulumValve,                                                         _delay_1s)
+//                .Run(PumpStep.kCloseValves,         CloseValves,                                                                _delay_1s)
+//                .Run(PumpStep.KCloseISO,            HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false))
+//                .Run(PumpStep.kPump,                HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),        () => { return _chamber.LoadlockPressure <= _basePressureLL; }, _pumpTimeLimitLL * 1000)
+//                .End(PumpStep.kClosePumpValves,     HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, false),       _delay_1s);
 
-            return Runner.Status;
-        }
-        public bool ClosePendulumValve()
-        {
-            if (_chamber.PendulumValveIsOpen() == true)
-            {
-                _chamber.TurnPendulumValve(false);
-            }
-            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
-            _chamber.OpenValve(ValveType.Guage, false);
+//            return Runner.Status;
+//        }
+//        public bool ClosePendulumValve()
+//        {
+//            if (_chamber.PendulumValveIsOpen() == true)
+//            {
+//                _chamber.TurnPendulumValve(false);
+//            }
+//            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
+//            _chamber.OpenValve(ValveType.Guage, false);
 
-            return true;
-        }
-        public bool CloseValves()
-        {
-            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
+//            return true;
+//        }
+//        public bool CloseValves()
+//        {
+//            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
 
-            return true;
-        }
-        public void Abort()
-        {
-            CloseAllValves();
-        }
-    }
-}
+//            return true;
+//        }
+//        public void Abort()
+//        {
+//            CloseAllValves();
+//        }
+//    }
+//}

+ 71 - 71
Venus/Venus_RT/Modules/PMs/LoadLockPurgeRoutine.cs

@@ -1,83 +1,83 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Venus_RT.Devices;
-using MECF.Framework.Common.Routine;
-using Venus_Core;
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Venus_RT.Devices;
+//using MECF.Framework.Common.Routine;
+//using Venus_Core;
 
-namespace Venus_RT.Modules.PMs
-{
-    class LoadLockPurgeRoutine : PMRoutineBase, IRoutine
-    {
-        private enum PurgeStep
-        {
-            kCloseValves,
-            kPumpToBase,
-            kPurgeDelay_1,
-            kPurgeVent,
-            kPurgeDelay_2,                                                                               
-            kPurgePumpToBase,
-            kPurgePumpDelay,
-            kPurgeEnd,
-            kEnd,
-        }
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LoadLockPurgeRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum PurgeStep
+//        {
+//            kCloseValves,
+//            kPumpToBase,
+//            kPurgeDelay_1,
+//            kPurgeVent,
+//            kPurgeDelay_2,                                                                               
+//            kPurgePumpToBase,
+//            kPurgePumpDelay,
+//            kPurgeEnd,
+//            kEnd,
+//        }
 
-        public int PurgeCounter { get; private set; }
+//        public int PurgeCounter { get; private set; }
 
-        private int _basePressureLL = 100;
-        private int _purgeVentPressureLL = 10;
-        private int _purgeCycleCounter = 30;
-        private int _purgePumpTime = 120;
+//        private int _basePressureLL = 100;
+//        private int _purgeVentPressureLL = 10;
+//        private int _purgeCycleCounter = 30;
+//        private int _purgePumpTime = 120;
 
 
-        public LoadLockPurgeRoutine(JetPMBase chamber) : base(chamber)
-        {
-            Name = "Loadlock Purge";
-        }
+//        public LoadLockPurgeRoutine(JetPMBase chamber) : base(chamber)
+//        {
+//            Name = "Loadlock Purge";
+//        }
 
-        public RState Start(params object[] objs)
-        {
-            if (CheckLidLoadLock() &&
-                CheckSlitDoor() &&
-                CheckDryPump())
-            {
-                Reset();
+//        public RState Start(params object[] objs)
+//        {
+//            if (CheckLidLoadLock() &&
+//                CheckSlitDoor() &&
+//                CheckDryPump())
+//            {
+//                Reset();
 
-                _chamber.CloseValves();
-                _basePressureLL         = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
-                _purgeVentPressureLL    = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeVentPressure");
-                _purgeCycleCounter      = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeCycleCount");
-                _purgePumpTime          = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgePumpTime");
+//                _chamber.CloseValves();
+//                _basePressureLL         = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");
+//                _purgeVentPressureLL    = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeVentPressure");
+//                _purgeCycleCounter      = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeCycleCount");
+//                _purgePumpTime          = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgePumpTime");
 
-                PurgeCounter = 0;
-                return Runner.Start(Module, Name);
-            }
-            return RState.Failed;
-        }
+//                PurgeCounter = 0;
+//                return Runner.Start(Module, Name);
+//            }
+//            return RState.Failed;
+//        }
 
-        public RState Monitor()
-        {
-            Runner.Delay(PurgeStep.kCloseValves,       _delay_1s)
-                .Run(PurgeStep.kPumpToBase,            HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })
-                .LoopStart(PurgeStep.kPurgeDelay_1,    "Purge",            _purgeCycleCounter,                                 HOFs.WrapAction(_chamber.OpenValve,  ValveType.LoadlockPumping, false), _delay_1s)
-                .LoopRun(PurgeStep.kPurgeVent,         HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true),      () => { return _chamber.LoadlockPressure >= _purgeVentPressureLL; })
-                .LoopRun(PurgeStep.kPurgeDelay_2,      HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, false),     _delay_1s)
-                .LoopRun(PurgeStep.kPurgePumpToBase,   HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })
-                .LoopRun(PurgeStep.kPurgePumpDelay,    NullFun,                                                                _purgePumpTime * 1000)
-                .LoopEnd(PurgeStep.kPurgeEnd,          ClosePumpValve,                                                         _delay_1s)
-                .End(PurgeStep.kEnd,                   NullFun,                                                                _delay_50ms);
+//        public RState Monitor()
+//        {
+//            Runner.Delay(PurgeStep.kCloseValves,       _delay_1s)
+//                .Run(PurgeStep.kPumpToBase,            HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })
+//                .LoopStart(PurgeStep.kPurgeDelay_1,    "Purge",            _purgeCycleCounter,                                 HOFs.WrapAction(_chamber.OpenValve,  ValveType.LoadlockPumping, false), _delay_1s)
+//                .LoopRun(PurgeStep.kPurgeVent,         HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true),      () => { return _chamber.LoadlockPressure >= _purgeVentPressureLL; })
+//                .LoopRun(PurgeStep.kPurgeDelay_2,      HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, false),     _delay_1s)
+//                .LoopRun(PurgeStep.kPurgePumpToBase,   HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })
+//                .LoopRun(PurgeStep.kPurgePumpDelay,    NullFun,                                                                _purgePumpTime * 1000)
+//                .LoopEnd(PurgeStep.kPurgeEnd,          ClosePumpValve,                                                         _delay_1s)
+//                .End(PurgeStep.kEnd,                   NullFun,                                                                _delay_50ms);
                 
-            return Runner.Status;
-        }
+//            return Runner.Status;
+//        }
 
-        public void Abort()
-        {
-            CloseAllValves();
-        }
+//        public void Abort()
+//        {
+//            CloseAllValves();
+//        }
 
-        private bool ClosePumpValve()
-        {
-            _chamber.OpenValve(ValveType.LoadlockPumping, false);
-            return true;
-        }
-    }
-}
+//        private bool ClosePumpValve()
+//        {
+//            _chamber.OpenValve(ValveType.LoadlockPumping, false);
+//            return true;
+//        }
+//    }
+//}

+ 79 - 79
Venus/Venus_RT/Modules/PMs/LoadLockVentRoutine.cs

@@ -1,92 +1,92 @@
-using Aitex.Core.RT.Routine;
-using Aitex.Core.RT.SCCore;
-using Venus_RT.Devices;
-using MECF.Framework.Common.Routine;
-using Venus_Core;
-namespace Venus_RT.Modules.PMs
-{
-    class LoadLockVentRoutine : PMRoutineBase, IRoutine
-    {
-        private enum VentStep
-        {
-            kClosePendulumValve,
-            kCloseValves,
-            kVent,
-            kOverVent,
-            kCloseVentValves,
-        }
+//using Aitex.Core.RT.Routine;
+//using Aitex.Core.RT.SCCore;
+//using Venus_RT.Devices;
+//using MECF.Framework.Common.Routine;
+//using Venus_Core;
+//namespace Venus_RT.Modules.PMs
+//{
+//    class LoadLockVentRoutine : PMRoutineBase, IRoutine
+//    {
+//        private enum VentStep
+//        {
+//            kClosePendulumValve,
+//            kCloseValves,
+//            kVent,
+//            kOverVent,
+//            kCloseVentValves,
+//        }
 
-        private int _overVentTime = 2000;
-        private int _checkATMTimeout = 90000;
-        //private int _ATMPressureLL = 720000;
+//        private int _overVentTime = 2000;
+//        private int _checkATMTimeout = 90000;
+//        //private int _ATMPressureLL = 720000;
 
-        public LoadLockVentRoutine(JetPMBase chamber) : base(chamber)
-        {
-            Name = "Loadlock Vent";
-        }
+//        public LoadLockVentRoutine(JetPMBase chamber) : base(chamber)
+//        {
+//            Name = "Loadlock Vent";
+//        }
 
-        public RState Start(params object[] objs)
-        {
-            if (CheckLidLoadLock()&&
-                CheckSlitDoor()&&
-                CheckATMLoadLock())
-            {
-                Reset();
+//        public RState Start(params object[] objs)
+//        {
+//            if (CheckLidLoadLock()&&
+//                CheckSlitDoor()&&
+//                CheckATMLoadLock())
+//            {
+//                Reset();
 
-                // _chamber.CloseValves();
+//                // _chamber.CloseValves();
 
-                //_chamber.TurnPendulumValve(false);
+//                //_chamber.TurnPendulumValve(false);
 
-                _checkATMTimeout = SC.GetValue<int>($"{Module}.CheckATMTimeout") * 1000;
-                _overVentTime = SC.GetValue<int>($"{Module}.OverVentTime");
+//                _checkATMTimeout = SC.GetValue<int>($"{Module}.CheckATMTimeout") * 1000;
+//                _overVentTime = SC.GetValue<int>($"{Module}.OverVentTime");
 
 
-                return Runner.Start(Module, Name);
-            }
-            return RState.Failed;
-        }
+//                return Runner.Start(Module, Name);
+//            }
+//            return RState.Failed;
+//        }
 
-        public RState Monitor()
-        {
-          Runner.Run(VentStep.kClosePendulumValve,      ClosePendulumValve,                                                     _delay_1s)
-                .Run(VentStep.kCloseValves,             CloseValves,                                                            _delay_1s)
-                //.Run(VentStep.kVent, HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true), () => { return _chamber.LoadlockPressure >= _ATMPressureLL; }, _checkATMTimeout)
-                .Run(VentStep.kVent,                    HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true),      () => { return _chamber.IsATMLoadlock; }, _checkATMTimeout)
+//        public RState Monitor()
+//        {
+//          Runner.Run(VentStep.kClosePendulumValve,      ClosePendulumValve,                                                     _delay_1s)
+//                .Run(VentStep.kCloseValves,             CloseValves,                                                            _delay_1s)
+//                //.Run(VentStep.kVent, HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true), () => { return _chamber.LoadlockPressure >= _ATMPressureLL; }, _checkATMTimeout)
+//                .Run(VentStep.kVent,                    HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true),      () => { return _chamber.IsATMLoadlock; }, _checkATMTimeout)
 
-                .Delay(VentStep.kOverVent,              _overVentTime)
-                .End(VentStep.kCloseVentValves,         HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, false),     _delay_1s);
+//                .Delay(VentStep.kOverVent,              _overVentTime)
+//                .End(VentStep.kCloseVentValves,         HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, false),     _delay_1s);
 
-            return Runner.Status;
-        }
+//            return Runner.Status;
+//        }
 
-        public void Abort()
-        {
-            CloseAllValves();
-        }
-        public bool ClosePendulumValve()
-        {
-            if (_chamber.PendulumValveIsOpen() == true)
-            {
-                _chamber.TurnPendulumValve(false);
-            }
-            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
-            _chamber.OpenValve(ValveType.Guage, false);
+//        public void Abort()
+//        {
+//            CloseAllValves();
+//        }
+//        public bool ClosePendulumValve()
+//        {
+//            if (_chamber.PendulumValveIsOpen() == true)
+//            {
+//                _chamber.TurnPendulumValve(false);
+//            }
+//            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
+//            _chamber.OpenValve(ValveType.Guage, false);
 
-            return true;
-        }
-        public bool CloseValves()
-        {
-            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
-            return true;
-        }
-        public bool CheckATMLoadLock()
-        {
-            if (_chamber.IsATMLoadlock)
-            {
-                this.Stop("LoadLock 是ATM状态");
-                return false;
-            }
-            return true;
-        }
-    }
-}
+//            return true;
+//        }
+//        public bool CloseValves()
+//        {
+//            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
+//            return true;
+//        }
+//        public bool CheckATMLoadLock()
+//        {
+//            if (_chamber.IsATMLoadlock)
+//            {
+//                this.Stop("LoadLock 是ATM状态");
+//                return false;
+//            }
+//            return true;
+//        }
+//    }
+//}

+ 15 - 11
Venus/Venus_RT/Modules/TM/MFVentRoutine.cs

@@ -1,7 +1,6 @@
 using Aitex.Core.RT.Routine;
 using Aitex.Core.RT.SCCore;
 using Venus_RT.Devices;
-using MECF.Framework.Common.Routine;
 using MECF.Framework.Common.Equipment;
 using Venus_Core;
 
@@ -14,9 +13,11 @@ namespace Venus_RT.Modules.TM
             kVenting,
             kOpenSoftVent,
             KSwitchFastVent,
-            //KDelay,
             kCloseVentValves,
             kOpenExhaustValve,
+            KDelay,
+            kCloseExhaustValve,
+
         }
 
         private int _ventingTimeout;
@@ -26,7 +27,7 @@ namespace Venus_RT.Modules.TM
         public MFVentRoutine(JetTM jetTM, ModuleName mod) : base(mod)
         {
             _JetTM = jetTM;
-            Name = "Vent";
+            Name = "Vent ";
         }
 
         public RState Start(params object[] objs)
@@ -50,15 +51,13 @@ namespace Venus_RT.Modules.TM
 
         public RState Monitor()
         {
-            //Runner.Run(VentStep.kVenting,          OpenVentValve,      IsPressureReady,    _ventingTimeout)
-            //    .End(VentStep.kCloseVentValves,    CloseVentValve,     _delay_50ms);
-
-            Runner.Run(VentStep.kOpenSoftVent, OpenSoftVentValve, IsSoftVentEnd)
-                  .Run(VentStep.KSwitchFastVent, SwitchFastVentValve, IsPressureReady, _ventingTimeout)
-                  //.Delay(VentStep.KDelay, _ventTimeDelay)
-                  .Run(VentStep.kCloseVentValves,  CloseVentValve,        _delay_50ms)
-                  .End(VentStep.kOpenExhaustValve, OpenExhaustValve);
 
+            Runner.Run(VentStep.kOpenSoftVent,     OpenSoftVentValve,   IsSoftVentEnd)
+                  .Run(VentStep.KSwitchFastVent,   SwitchFastVentValve, IsPressureReady, _ventingTimeout)
+                  .Run(VentStep.kCloseVentValves,  CloseVentValve,      _delay_50ms)
+                  .Run(VentStep.kOpenExhaustValve, OpenExhaustValve)
+                  .Delay(VentStep.KDelay,          _ventTimeDelay)
+                  .End(VentStep.kCloseExhaustValve,CloseExhaustValve);
 
             return Runner.Status;
         }
@@ -75,6 +74,11 @@ namespace Venus_RT.Modules.TM
             _JetTM.TurnExhaustValve(Module, true);
             return true;
         }
+        private bool CloseExhaustValve()
+        {
+            _JetTM.TurnExhaustValve(Module, false);
+            return true;
+        }
         private bool IsSoftVentEnd()
         {
            return _JetTM.GetModulePressure(Module) > _SoftVentEndPressure;

+ 2 - 1
Venus/Venus_Setup/Venus_RT.iss

@@ -28,12 +28,13 @@ WizardStyle=modern
 LicenseFile=License.txt
 UsePreviousAppDir=no
 
+
 [Languages]
 Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
 
 
 [Files]
-Source: "..\Venus_RT\bin\Release\*";Excludes:"Config,Recipes,Logs,Objects,PartialPressureResult,VATPerformanceResult"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
+Source: "..\Venus_RT\bin\Release\*";Excludes:"Config,Recipes,Logs,Objects,PartialPressureResult,VATPerformanceResult"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
 Source: "..\Venus_RT\bin\Release\Config\*"; Excludes:"*.data,*.bak,IoProviderConfig.xml";DestDir: "{app}\Config";  Flags: recursesubdirs
 
 

+ 1 - 1
Venus/Venus_Setup/Venus_UI.iss

@@ -34,7 +34,7 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
 [Files]
 //Source: "..\Venus_UI\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
-Source: "..\Venus_UI\bin\Release\*";Excludes:"Config"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
+Source: "..\Venus_UI\bin\Release\*";Excludes:"Config"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
 Source: "..\Venus_UI\bin\Release\Config\*"; DestDir: "{app}\Config"; Flags: onlyifdoesntexist
 
 [Icons]

+ 12 - 8
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -45,7 +45,7 @@ namespace Venus_Simulator.Instances
             //_MockDevices.Add(ModuleName.PMB, new AdTecMatchMock());
 
             // TODO
-            type = (ConfigType)QueryDataClient.Instance.Service.GetData("System.ConfigType");
+            type = ConfigType.Kepler2200;
             jetChambers.Add(ModuleName.PMA, SimulatorJetChamber.CurrentPMAChamber);
             jetChambers.Add(ModuleName.PMB, SimulatorJetChamber.CurrentPMBChamber);
             jetChambers.Add(ModuleName.PMC, SimulatorJetChamber.CurrentPMCChamber);
@@ -430,7 +430,7 @@ namespace Venus_Simulator.Instances
                     IO.DI[$"{mod}.DI_MFC7_Pressure_Switch"].Value = true;
                     IO.DI[$"{mod}.DI_MFC8_Pressure_Switch"].Value = true;
                     IO.DI[$"{mod}.DI_N2_Purge_Pressure_Switch"].Value = true;
-
+                    IO.DI[$"{mod}.DI_GasBox_N2_Flow_Switch"].Value = true;
 
                     IO.DI[$"{mod}.DI_Gas_Box_Door_Switch"].Value = true;
                     IO.DI[$"{mod}.DI_Lid_Up_Limit_Pos_SW"].Value = true;
@@ -440,6 +440,10 @@ namespace Venus_Simulator.Instances
                     //IO.DI[$"{mod}.DI_TM_Safety_Door_Colse"].Value = true;
 
                     IO.DI[$"{mod}.DI_Arm_Not_Extend_to_PM"].Value = true;
+
+                    
+
+
                     //IO.DI[$"{mod}.DI_Source_RF_Water_Flow_Switch"].Value = true;
                     //// pressure
                     SetAiValue($"{mod}.AI_Foreline_Pressure_10t", 5001);
@@ -517,12 +521,12 @@ namespace Venus_Simulator.Instances
             IO.DI[$"{mod}.DI_Vaccum_Pressure_Switch"].Value = true;
             IO.DI[$"{mod}.DI_N2_Pressure_Switch"].Value = true;
 
-            IO.DI[$"{mod}.DI_TM_Chamber_VAC_Gauge_Alarm"].Value = true;
-            IO.DI[$"{mod}.DI_TM_Foreline_VAC_Gauge_Alarm"].Value = true;
-            IO.DI[$"{mod}.DI_LLA_Chamber_VAC_Gauge_Alarm"].Value = true;
-            IO.DI[$"{mod}.DI_LLA_Foreline_VAC_Gauge_Alarm"].Value = true;
-            IO.DI[$"{mod}.DI_LLB_Chamber_VAC_Gauge_Alarm"].Value = true;
-            IO.DI[$"{mod}.DI_LLB_Foreline_VAC_Gauge_Alarm"].Value = true;
+            IO.DI[$"{mod}.DI_TM_Chamber_VAC_Gauge_Alarm"].Value = false;
+            IO.DI[$"{mod}.DI_TM_Foreline_VAC_Gauge_Alarm"].Value = false;
+            IO.DI[$"{mod}.DI_LLA_Chamber_VAC_Gauge_Alarm"].Value = false;
+            IO.DI[$"{mod}.DI_LLA_Foreline_VAC_Gauge_Alarm"].Value = false;
+            IO.DI[$"{mod}.DI_LLB_Chamber_VAC_Gauge_Alarm"].Value = false;
+            IO.DI[$"{mod}.DI_LLB_Foreline_VAC_Gauge_Alarm"].Value = false;
 
             IO.DI[$"{mod}.DI_TM_ATM_Switch"].Value = true;
             IO.DI[$"{mod}.DI_LLA_ATM_Switch"].Value = true;

+ 4 - 4
Venus/Venus_Themes/UserControls/NiceUIControls/GuangChuanRobot.xaml

@@ -11,7 +11,7 @@
             <VisualStateGroup Name="RobotXActions">
                 <VisualStateGroup.Transitions>
                     <VisualTransition To="Extend1" >
-                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="8">
+                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="18">
                             <DoubleAnimation Storyboard.TargetName="armXTRotateAct" Storyboard.TargetProperty="Angle"  To="0" Duration="0:0:9">
                             </DoubleAnimation>
                             <DoubleAnimation Storyboard.TargetName="armXT1RotateAct" Storyboard.TargetProperty="Angle"  To="0" Duration="0:0:9">
@@ -21,7 +21,7 @@
                         </Storyboard>
                     </VisualTransition>
                     <VisualTransition To="Retract1">
-                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="8">
+                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="18">
                             <DoubleAnimation Storyboard.TargetName="armXTRotateAct" Storyboard.TargetProperty="Angle"  To="180" Duration="0:0:9">
                             </DoubleAnimation>
                             <DoubleAnimation Storyboard.TargetName="armXT1RotateAct" Storyboard.TargetProperty="Angle"  To="-180" Duration="0:0:9">
@@ -31,7 +31,7 @@
                         </Storyboard>
                     </VisualTransition>
                     <VisualTransition To="Extend2" >
-                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="8">
+                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="18">
                             <DoubleAnimation Storyboard.TargetName="armXTRotateAct" Storyboard.TargetProperty="Angle"  To="0" Duration="0:0:9">
                             </DoubleAnimation>
                             <DoubleAnimation Storyboard.TargetName="armXT1RotateAct" Storyboard.TargetProperty="Angle"  To="-180" Duration="0:0:9">
@@ -42,7 +42,7 @@
                         </Storyboard>
                     </VisualTransition>
                     <VisualTransition To="Retract2">
-                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="8">
+                        <Storyboard FillBehavior="HoldEnd" SpeedRatio="18">
                             <DoubleAnimation Storyboard.TargetName="armXTRotateAct" Storyboard.TargetProperty="Angle"  To="180" Duration="0:0:9">
                             </DoubleAnimation>
                             <DoubleAnimation Storyboard.TargetName="armXT1RotateAct" Storyboard.TargetProperty="Angle"  To="-180" Duration="0:0:9">