Explorar el Código

1. 为SEMI 2认证通过增加检查代码,主要包括ChamberWallHeater/ForelineHeater/Chiller
2. 增加LOG中存在的crash问题
3. 增加传进chamber前的两chiller同步检查
4. 增加load UnloadRoutine的禁用R轴

zhouhr hace 23 horas
padre
commit
e9fad18660

+ 24 - 3
FrameworkLocal/RTEquipmentLibrary/Unit/IoHeater.cs

@@ -239,6 +239,8 @@ namespace Aitex.Core.RT.Device.Unit
 
         private string HeaterDeviationAlarm = "HeaterDeviationAlarm";
 
+        //public Action AlarmAction;
+
 
         public IoHeater(string module, XmlElement node, string ioModule = "")
         {
@@ -332,7 +334,16 @@ namespace Aitex.Core.RT.Device.Unit
                 _scDeviationWarningTime = SC.GetConfigItem($"{Module}.HeaterChamberWall.HeaterWarningTime");
             }
 
+            if (Name == "ForelineHeater")
+            {
+                _scEnableToleranceCheck = SC.GetConfigItem($"{Module}.ForelineHeater.HeaterEnableTolerance");
+                _scDeviationAlarmRange = SC.GetConfigItem($"{Module}.ForelineHeater.HeaterAlarmRange");
+                _scDeviationAlarmTime = SC.GetConfigItem($"{Module}.ForelineHeater.HeaterAlarmTime");
+                _scDeviationWarningRange = SC.GetConfigItem($"{Module}.ForelineHeater.HeaterWarningRange");
+                _scDeviationWarningTime = SC.GetConfigItem($"{Module}.ForelineHeater.HeaterWarningTime");
+                EV.PostWarningLog(Module, $"检查是否开启{_scEnableToleranceCheck.BoolValue}, ");
 
+            }
 
             EV.Subscribe(new EventItem("Event", HeaterDeviationAlarm, "Heater Deviation Out of Tolerance", EventLevel.Alarm, EventType.HostNotification));
 
@@ -422,8 +433,15 @@ namespace Aitex.Core.RT.Device.Unit
 
         private void CheckDeviation()
         {
-            if (_scEnableToleranceCheck==null || !_scEnableToleranceCheck.BoolValue||!((Name == "HeaterChamber")|| (Name == "LEHeater1") || (Name == "LEHeater2")) || !IsPowerOnFeedback)
+
+
+            if (_scEnableToleranceCheck == null || !_scEnableToleranceCheck.BoolValue || !((Name == "HeaterChamber") || (Name == "LEHeater1") || (Name == "LEHeater2") || (Name == "ForelineHeater")) || !IsPowerOnFeedback)
+            {
+                _checkerWarning.Reset(0);
+                _checkerAlarm.Reset(0);
                 return;
+            }
+            
 
             _checkerWarning.Monitor(ControlTcFeedback, ControlTcSetPoint - Math.Abs(_scDeviationWarningRange.IntValue)
                 , ControlTcSetPoint + Math.Abs(_scDeviationWarningRange.IntValue), _scDeviationWarningTime.IntValue);
@@ -436,6 +454,7 @@ namespace Aitex.Core.RT.Device.Unit
                 else
                 {
                     EV.PostWarningLog(Module, $"{Name} temperature feedback deviation than {Math.Abs(_scDeviationWarningRange.IntValue)} from setpoint for {_scDeviationWarningTime.IntValue} seconds");
+
                 }
             }
 
@@ -444,16 +463,18 @@ namespace Aitex.Core.RT.Device.Unit
                 , ControlTcSetPoint + Math.Abs(_scDeviationAlarmRange.IntValue), _scDeviationAlarmTime.IntValue);
             if (_checkerAlarm.Trig)
             {
+                TurnOnOff(false);
                 if (Name == "HeaterChamber")
                 {
                     EV.PostAlarmLog(Module, $"HeaterChamberWall temperature feedback deviation than {Math.Abs(_scDeviationAlarmRange.IntValue)} from setpoint for {_scDeviationAlarmTime.IntValue} seconds");
                 }
                 else
                 {
-                    EV.PostAlarmLog(Module, $"{Name} temperature feedback deviation than {Math.Abs(_scDeviationAlarmRange.IntValue)} from setpoint for {_scDeviationAlarmTime.IntValue} seconds");
+                    EV.PostAlarmLog(Module, $"{Module}.{Name} temperature feedback deviation than {Math.Abs(_scDeviationAlarmRange.IntValue)} from setpoint for {_scDeviationAlarmTime.IntValue} seconds");
                 }
-                
 
+                //if (AlarmAction != null)
+                //    AlarmAction();
                 EV.Notify(HeaterDeviationAlarm);
             }
         }

+ 5 - 0
FrameworkLocal/RTModuleLibrary/SystemModules/EquipmentManager.cs

@@ -223,6 +223,11 @@ namespace MECF.Framework.RT.ModuleLibrary.SystemModules
         {
         }
 
+        public ModuleFsmDevice GetPM(ModuleName pm)
+        {
+            return Modules[pm];
+        }
+
 
         //private PeriodicJob _job1;
 

+ 0 - 1
FrameworkLocal/UICore/DeviceControl/AITHeaterControl.xaml.cs

@@ -136,7 +136,6 @@ namespace Aitex.Core.UI.DeviceControl
             else
             {
                 Command.Execute(new object[] { DeviceData.DeviceName, AITHeaterOperation.SetPowerOnOff.ToString(), value.ToString() });
-
             }
         }
 

+ 15 - 1
JetVirgoPM/Devices/SMCChiller.cs

@@ -421,6 +421,12 @@ namespace JetVirgoPM.Devices
                     LastAlarmflag[i] = Alarmflag[i];
                 }
 
+                if (!IsRunning && _scEnableAlarm != null && _scEnableAlarm.BoolValue)
+                {
+                    _toleranceChecker.Reset(0);
+                    _toleranceWarningChecker.Reset(0);
+                }
+
                 if (IsRunning && _scEnableAlarm != null && _scEnableAlarm.BoolValue)
                 {
                     var range = _scAlarmRange.IntValue;
@@ -429,8 +435,16 @@ namespace JetVirgoPM.Devices
 
                     if (_toleranceChecker.Trig)
                     {
+                        int index = 10;
+                        while (index > 0)
+                        {
+                            --index;
+                            SetChillerOnOff(false);
+                        }
                         EV.PostAlarmLog(Module, Display + $" temperature out of tolerance in {time:0} seconds");
+                        EV.PostAlarmLog(Module, Display + $" {Module}.{Name} will off!");
                     }
+
                 }
                 else
                 {
@@ -471,7 +485,6 @@ namespace JetVirgoPM.Devices
         {
             _toleranceChecker.RST = true;
             _toleranceWarningChecker.RST = true;
-            
         }
 
         public override void Terminate()
@@ -489,6 +502,7 @@ namespace JetVirgoPM.Devices
 
         public override void SetChillerOnOff(bool on)
         {
+            EV.PostInfoLog(Module, Display + $" is excuting {on}");
             SendCmd(on ? SMCChillerMessage.SET_ON : SMCChillerMessage.SET_OFF);
         }
     }

+ 40 - 2
JetVirgoPM/PMs/Routines/PMPrepareTransferRoutine.cs

@@ -20,6 +20,7 @@ namespace JetVirgoPM.PMs.Routines
             Vent,
             VentDelay,
             SetGuidePin,
+            CheckCoolantTemp,
             CheckCoolantTemp1,
             CheckCoolantTemp2,
             CheckTemp1,
@@ -169,8 +170,9 @@ namespace JetVirgoPM.PMs.Routines
         public RState Monitor()
         {
             Runner
-                    .Run(RoutineStep.CheckCoolantTemp1,    SetCoolant1Temp, CheckCoolant1Temp,   _checkChamberTempTimeout * 1000)
-                    .Run(RoutineStep.CheckCoolantTemp2,    SetCoolant2Temp, CheckCoolant2Temp,   _checkChamberTempTimeout * 1000)
+                    .Run(RoutineStep.CheckCoolantTemp,     SetCoolant1And2Temp,CheckCoolant1And2Temp, _checkChamberTempTimeout * 1000)
+                    //.Run(RoutineStep.CheckCoolantTemp1,    SetCoolant1Temp, CheckCoolant1Temp,   _checkChamberTempTimeout * 1000)
+                    //.Run(RoutineStep.CheckCoolantTemp2,    SetCoolant2Temp, CheckCoolant2Temp,   _checkChamberTempTimeout * 1000)
                     .Run(RoutineStep.CheckLETemp,          SetLETemp,       CheckLETemp,         _checkChamberTempTimeout * 1000)
                     .Run(RoutineStep.CheckTemp1,           SetLETemp1,      CheckLETemp1,        _checkChamberTempTimeout * 1000)
                     .Run(RoutineStep.CheckTemp2,           SetLETemp2,      CheckLETemp2,        _checkChamberTempTimeout * 1000)
@@ -214,6 +216,42 @@ namespace JetVirgoPM.PMs.Routines
             return true;
         }
 
+        bool SetCoolant1And2Temp()
+        {
+            bool chiller1flag = true;
+            bool chiller2flag = true;
+            if (_TransferType == EnumTransferType.Place && !SC.IsATMMode && _enableCheckTemp && !_Chamber1Disabled && _TargetTemp1 > 0 && _enableChiller1)
+            {
+                _enableLE1 = false;
+                chiller1flag = SetCoolant1Temp(_TargetTemp1, _Chiller1OffsetTemp, _tolerance);
+            }
+
+            if (_TransferType == EnumTransferType.Place && !SC.IsATMMode && _enableCheckTemp && !_Chamber2Disabled && _TargetTemp2 > 0 && _enableChiller2)
+            {
+                _enableLE2 = false;
+                chiller2flag = SetCoolant2Temp(_TargetTemp2, _Chiller2OffsetTemp, _tolerance);
+            }
+
+            return chiller1flag && chiller2flag;
+        }
+
+        bool CheckCoolant1And2Temp()
+        {
+            bool chiller1flag = true;
+            bool chiller2flag = true;
+            if (_TransferType == EnumTransferType.Place && !SC.IsATMMode && _enableCheckTemp && !_Chamber1Disabled && _TargetTemp1 > 0 && _enableChiller1)
+            {
+                chiller1flag = CheckCoolant1Temp(_TargetTemp1, _Chiller1OffsetTemp, _tolerance);
+            }
+
+            if (_TransferType == EnumTransferType.Place && !SC.IsATMMode && _enableCheckTemp && !_Chamber2Disabled && _TargetTemp2 > 0 && _enableChiller2)
+            {
+                chiller2flag = CheckCoolant2Temp(_TargetTemp2, _Chiller2OffsetTemp, _tolerance);
+            }
+
+            return chiller1flag && chiller2flag;
+        }
+
         bool SetCoolant1Temp()
         {
             if (_TransferType == EnumTransferType.Place && !SC.IsATMMode && _enableCheckTemp && !_Chamber1Disabled && _TargetTemp1 > 0 && _enableChiller1)

+ 2 - 2
Mars/EfemDual.sln

@@ -94,8 +94,8 @@ Global
 		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Debug|x86.Build.0 = Debug|Any CPU
-		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|Any CPU.Build.0 = Debug|Any CPU
 		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|x86.ActiveCfg = Release|Any CPU
 		{A40B734C-F2EC-453C-A5FB-70CD46452BF1}.Release|x86.Build.0 = Release|Any CPU
 		{7C395751-ABE6-4B5B-8F3A-BDA0FCE08F6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+ 37 - 1
Mars/EfemDualRT/Config/System.sccfg

@@ -194,6 +194,7 @@
 
   <configs name="VCEA">
     <config default="true" name="IsPlus"  description="Is Plus VCE" max="0" min="0" paramter="" tag="" unit="" type="Bool"  />
+    <config default="true" name="NeedRAxis"  description="Is load Unload need R axis" max="0" min="0" paramter="" tag="" unit="" type="Bool"  />
     <config default="COM105" name="Port" nameView="Port" description="" max="" min="0" paramter="" tag="" unit="" type="String" />
     <config default="30" name="MotionTimeout" nameView="" description="" max="60" min="0" paramter="" tag="" unit="s" type="Integer" />
     <config default="400" name="PumpBasePressure" nameView="Pump Base Pressure" description="Pump抽真空底压" max="2000" min="0" paramter="" tag="" unit="mTorr" type="Double" />
@@ -226,6 +227,7 @@
   </configs>
   <configs name="VCEB">
     <config default="true" name="IsPlus"  description="Is Plus VCE" max="0" min="0" paramter="" tag="" unit="" type="Bool"  />
+    <config default="true" name="NeedRAxis"  description="Is load Unload need R axis" max="0" min="0" paramter="" tag="" unit="" type="Bool"  />
     <config default="COM103" name="Port" nameView="Port" description="" max="" min="0" paramter="" tag="" unit="" type="String" />
     <config default="30" name="MotionTimeout" nameView="" description="" max="60" min="0" paramter="" tag="" unit="s" type="Integer" />
     <config default="400" name="PumpBasePressure" nameView="Pump Base Pressure" description="Pump抽真空底压" max="2000" min="0" paramter="" tag="" unit="mTorr" type="Double" />
@@ -971,7 +973,13 @@
       <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
       <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
       <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
-
+    </configs>
+    <configs name="ForelineHeater" nameView="Foreline Heater" >
+      <config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+      <config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+      <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
     </configs>
     <configs name="HeaterChamber1" nameView="Heater Chamber" >
 
@@ -1408,6 +1416,13 @@
       <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 
     </configs>
+    <configs name="ForelineHeater" nameView="Foreline Heater" >
+      <config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+      <config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+      <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+    </configs>
     <configs name="HeaterChamber1" nameView="Heater Chamber" >
 
       <config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
@@ -1820,6 +1835,27 @@
       <config default="10" name="PurgePumpStableTime" nameView="Purge Pump Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Double" />
     </configs>
     <configs name="HeaterChamber" nameView="Heater Chamber" >
+      <config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+      <config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+      <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+    </configs>
+    <configs name="HeaterChamberWall" nameView="Heater Chamber Wall" >
+      <config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+      <config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+      <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+    </configs>
+    <configs name="ForelineHeater" nameView="Foreline Heater" >
+      <config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+      <config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+      <config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+      <config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+    </configs>
+    <configs name="HeaterChamber" nameView="Heater Chamber" >
       <config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
       <config name="OffsetValue_1" nameView="Offset Value 1" description="补偿值 1" unit="degree" type="Double" max="300" min="0" />
       <config name="TempOffsetPoint_2" nameView="Temp Offset Point 2" description="温度补偿点 2" unit="degree" type="Integer" max="300" min="0" />

+ 37 - 25
Mars/EfemDualRT/Equipments/Systems/EfemDualEquipment.cs

@@ -77,34 +77,46 @@ namespace EfemDualRT.Equipments.Systems
 
         private void Instance_OnAlarmEvent(EventItem obj)
         {
-            FSM_MSG msg = FSM_MSG.NONE;
-            if (obj.Level == EventLevel.Warning)
-                msg = FSM_MSG.WARNING;
-            else if (obj.Level == EventLevel.Alarm)
-                msg = FSM_MSG.ALARM;
-
-            if (obj.Description.Contains("WaterLeak"))
+            try
             {
-                Modules[ModuleName.PMA]?.PostMsg(msg, obj.Id, obj.Description);
-                Modules[ModuleName.PMB]?.PostMsg(msg, obj.Id, obj.Description);
-                Modules[ModuleName.PMC]?.PostMsg(msg, obj.Id, obj.Description);
-                Modules[ModuleName.TM]?.PostMsg(msg, obj.Id, obj.Description);
-                return;
+                FSM_MSG msg = FSM_MSG.NONE;
+                if (obj.Level == EventLevel.Warning)
+                    msg = FSM_MSG.WARNING;
+                else if (obj.Level == EventLevel.Alarm)
+                    msg = FSM_MSG.ALARM;
+
+                if (obj.Description.Contains("WaterLeak"))
+                {
+                    Modules[ModuleName.PMA]?.PostMsg(msg, obj.Id, obj.Description);
+                    Modules[ModuleName.PMB]?.PostMsg(msg, obj.Id, obj.Description);
+                    Modules[ModuleName.PMC]?.PostMsg(msg, obj.Id, obj.Description);
+                    Modules[ModuleName.TM]?.PostMsg(msg, obj.Id, obj.Description);
+                    return;
+                }
+
+                if (!Enum.TryParse(obj.Source, out ModuleName module))
+                    return;
+
+                if (!Modules.ContainsKey(ModuleHelper.Converter(obj.Source)))
+                    return;
+
+                switch (obj.Source)
+                {
+                    case "PMA":
+                    case "PMB":
+                    case "PMC":
+                    case "TM":
+                        Modules[ModuleHelper.Converter(obj.Source)]?.PostMsg(msg, obj.Id, obj.Description);
+                        break;
+                    case "TMRobot":
+                    case "System":
+                        Modules[ModuleName.TM]?.PostMsg(msg, obj.Id, obj.Description);
+                        break;
+                }
             }
-
-            switch (obj.Source)
+            catch (Exception ex)
             {
-                case "PMA":
-                case "PMB":
-                case "PMC":
-                case "EFEM":
-                case "TM":
-                    Modules[ModuleHelper.Converter(obj.Source)]?.PostMsg(msg, obj.Id, obj.Description);
-                    break;
-                case "TMRobot":
-                case "System":
-                    Modules[ModuleName.TM]?.PostMsg(msg, obj.Id, obj.Description);
-                    break;
+
             }
         }
 

+ 1 - 0
Mars/EfemDualSchedulerLib/EfemDualSchedulerLib.csproj

@@ -63,6 +63,7 @@
     <Compile Include="Schedulers\SchedulerModuleFactory.cs" />
     <Compile Include="Schedulers\SchedulerPM.cs" />
     <Compile Include="VCEDualAutoTransfer.cs" />
+    <Compile Include="VCEDualAutoTransferBackUpNew.cs" />
     <Compile Include="VceDualManualTransfer.cs" />
     <Compile Include="VceDualTMCycle.cs" />
   </ItemGroup>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3878 - 0
Mars/EfemDualSchedulerLib/VCEDualAutoTransferBackUpNew.cs


+ 4 - 2
Mars/JetMainframe/VCEs/LoadRoutine.cs

@@ -41,6 +41,7 @@ namespace JetMainframe.VCEs
         MFPumpRoutine pumpRoutine;
         ModuleName _module;
         bool IsPlus = false ;
+        bool needRAxis = true;
 
         public LoadRoutine(ModuleName module, IVCE vce) : base(module.ToString())
         {
@@ -56,6 +57,7 @@ namespace JetMainframe.VCEs
             
             _timeout = SC.GetValue<int>($"{Module}.MotionTimeout") * 1000;
             _waitCassette = SC.GetValue<int>($"{Module}.WaitBeforeLoad")*1000;
+            needRAxis = SC.GetValue<bool>($"{Module}.NeedRAxis");
             //if vce inner door not close cannot do it as it will pump
 
             switch (_module)
@@ -139,7 +141,7 @@ namespace JetMainframe.VCEs
         //private bool 
         private bool ReadR()
         {
-            if (IsPlus)
+            if (IsPlus && needRAxis)
                 return _vce.ReadR();
 
             return true;
@@ -147,7 +149,7 @@ namespace JetMainframe.VCEs
 
         private bool RHandPushIn()
         {
-            if(IsPlus && _vce.RPosition != 0)
+            if(IsPlus && _vce.RPosition != 0 && needRAxis)
                 return _vce.RaxisPI();
 
             return true;

+ 3 - 1
Mars/JetMainframe/VCEs/UnloadRoutine.cs

@@ -33,6 +33,7 @@ namespace JetMainframe.VCEs
         int _timeout;
         ModuleName _module;
         MFVentRoutine ventRoutine;
+        bool needRAxis = true;
 
         public UnloadRoutine(ModuleName module, IVCE vce) : base(module.ToString())
         {
@@ -46,6 +47,7 @@ namespace JetMainframe.VCEs
         public RState Start(params object[] objs)
         {
             _timeout = SC.GetValue<int>($"{Module}.MotionTimeout") * 1000;
+            needRAxis = SC.GetValue<bool>($"{Module}.NeedRAxis");
             Reset();
             return Runner.Start(Module, "VCE Unload Routine");
         }
@@ -96,7 +98,7 @@ namespace JetMainframe.VCEs
 
         private bool RHandPushOut()
         {
-            if (SC.GetValue<bool>($"{Module}.IsPlus"))
+            if (SC.GetValue<bool>($"{Module}.IsPlus") && needRAxis)
                 return _vce.RaxisPO();
 
             return true;