Bläddra i källkod

1.增加IO信号,修改报警过程

JET-YDB\JET-YANGDB 9 timmar sedan
förälder
incheckning
ff5db94875

+ 1 - 0
Framework/Common/Device/Unit/IoReset.cs

@@ -35,6 +35,7 @@ namespace Aitex.Core.RT.Device.Unit
             if (_timer.IsTimeout())
             {
                 _doReset.Value = false;
+                _timer.Stop();
             }
         }
 

+ 2 - 2
VirgoRT/App.config

@@ -99,8 +99,8 @@
     </services>
 
     <client>
-	    <endpoint address="net.tcp://192.168.10.20:5771/EPDService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDService" name="Client_IEPDService"/>
-	    <endpoint address="net.tcp://192.168.10.20:5773/EPDCallbackService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDCallbackService" name="Client_IEPDCallbackService"/>
+	    <endpoint address="net.tcp://192.168.10.100:5771/EPDService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDService" name="Client_IEPDService"/>
+	    <endpoint address="net.tcp://192.168.10.100:5773/EPDCallbackService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDCallbackService" name="Client_IEPDCallbackService"/>
     </client>
     <behaviors>
       <serviceBehaviors>

BIN
VirgoRT/Config/DeviceModelVirgo.xml


+ 9 - 1
VirgoRT/Config/System.sccfg

@@ -148,6 +148,10 @@
     <config default="false" name="ScrubberIsInstalled" nameView="Is Scrubber Installed"  description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" visible="false"/>
     <config default="5" name="LiftUpDownTimeout" nameView="Lift Up Down Timeout" description="Lift up/down time out" max="99999" min="1" paramter="" tag="" unit="second" type="Integer" />
 
+    <config default="30" name="SubstrateTemperatureTCTMDiff" nameView="Substrate Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+    <config default="30" name="ForelineTemperatureTCTMDiff" nameView="Foreline Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+    <config default="30" name="CHBWallTemperatureTCTMDiff" nameView="CHB Wall Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+
 		<configs name="MFCVerification" nameView="MFC Verification" >
 			<config default="7500" name="ChamberVolume" nameView="Chamber Volume" max="100000" min="0" paramter="" tag="" unit="mL"  visible="false" type="Double" />
 			<config default="25" name="GasTemperature" nameView="Gas Temperature" max="1000" min="-1000" paramter="" tag="" unit="℃" visible="false" type="Double" />
@@ -552,7 +556,11 @@
 		<config default="false" name="EnableResetError" nameView="Enable Reset Chamber Error by Click Reset Button" description="" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
     <config default="false" name="ScrubberIsInstalled" nameView="Is Scrubber Installed"  description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" visible="false"/>
     <config default="5" name="LiftUpDownTimeout" nameView="Lift Up Down Timeout" description="Lift up/down time out" max="99999" min="1" paramter="" tag="" unit="second" type="Integer" />
-		<configs name="MFCVerification" nameView="MFC Verification" >
+    <config default="30" name="SubstrateTemperatureTCTMDiff" nameView="Substrate Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+    <config default="30" name="ForelineTemperatureTCTMDiff" nameView="Foreline Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+    <config default="30" name="CHBWallTemperatureTCTMDiff" nameView="CHB Wall Temperature TC TM Diff" description="" max="500" min="1" paramter="" tag="" unit="" type="Integer" visible="false"/>
+    
+    <configs name="MFCVerification" nameView="MFC Verification" >
 			<config default="7500" name="ChamberVolume" nameView="Chamber Volume" max="100000" min="0" paramter="" tag="" unit="mL"  visible="false" type="Double" />
 			<config default="25" name="GasTemperature" nameView="Gas Temperature" max="1000" min="-1000" paramter="" tag="" unit="℃" visible="false" type="Double" />
 			<config default="9" name="TargetPressure" nameView="Target pressure" max="100" min="0" paramter="" tag="" unit="Torr" visible="true" type="Double" />

+ 5 - 5
VirgoRT/Config/_ioDefineVirgo.xml

@@ -79,8 +79,8 @@
 		<DI_ITEM Index="75" Name="" />
 		<DI_ITEM Index="76" Name="" />
 		<DI_ITEM Index="77" Name="" />
-		<DI_ITEM Index="78" Name="" />
-		<DI_ITEM Index="79" Name="" />
+		<DI_ITEM Index="78" Name="DI_Reset_Signal_Reply" Addr="w24.14"/>
+		<DI_ITEM Index="79" Name="DI_Water_Valve_Opened" Addr="w24.15"/>
 		<DI_ITEM Index="80" Name="" Addr="w25.00"/>
 		<DI_ITEM Index="81" Name="" Addr="w25.01" />
 		<DI_ITEM Index="82" Name="" Addr="w25.02" />
@@ -379,9 +379,9 @@
     <AO_ITEM Index="67" Name="" />
     <AO_ITEM Index="68" Name="" />
     <AO_ITEM Index="69" Name="" />
-    <AO_ITEM Index="70" Name="" />
-    <AO_ITEM Index="71" Name="" />
-    <AO_ITEM Index="72" Name="" />
+    <AO_ITEM Index="70" Name="AO_Substrate_Temperature_TC_TM_Diff" Addr="D1140"   Device=""/>
+    <AO_ITEM Index="71" Name="AO_Foreline_Temperature_TC_TM_Diff" Addr="D1142"   Device="" />
+    <AO_ITEM Index="72" Name="AO_CHB_Wall_Temperature_TC_TM_Diff" Addr="D1144"   Device="" />
     <AO_ITEM Index="73" Name="" />
     <AO_ITEM Index="74" Name="" />
     <AO_ITEM Index="75" Name="" />

+ 4 - 0
VirgoRT/Devices/EFEM/Efem.cs

@@ -826,7 +826,11 @@ namespace VirgoRT.Devices.EFEM
                         SetRobotMovingInfo(RobotAction.None, Hand.Both, ModuleName.System);
 
                     if (arg.CommandType == EfemOperation.Home)
+                    {
+                        SetRobotMovingInfo(RobotAction.None, Hand.Both, ModuleName.System);
                         _queryLpStateTimer.Restart();
+                    }
+                        
 
                     action.OnPostWork(arg.Data);
 

+ 3 - 3
VirgoRT/Devices/IODevices/IoHeater.cs

@@ -391,19 +391,19 @@ namespace VirgoRT.Devices
                 _trigControlTcBroken.CLK = IsControlTcBroken;
                 if (_trigControlTcBroken.Q)
                 {
-                    EV.PostWarningLog(Module, $"{Display}, Found control TC broken");
+                    EV.PostAlarmLog(Module, $"{Display}, Found control TC broken");
                 }
 
                 _trigMonitorTcBroken.CLK = IsMonitorTcBroken;
                 if (_trigMonitorTcBroken.Q)
                 {
-                    EV.PostWarningLog(Module, $"{Display}, Found monitor TC broken");
+                    EV.PostAlarmLog(Module, $"{Display}, Found monitor TC broken");
                 }
 
                 _trigDeviation.CLK = IsTcDeviation;
                 if (_trigDeviation.Q)
                 {
-                    EV.PostWarningLog(Module, $"{Display}, Found TC Deviation out of range");
+                    EV.PostAlarmLog(Module, $"{Display}, Found TC Deviation out of range");
                 }
 
                 this.SetBySC(_aoSetPointLimit, _scSetPointLimit);

+ 68 - 18
VirgoRT/Devices/IODevices/IoTriStateLift2.cs

@@ -12,6 +12,7 @@ using Aitex.Core.RT.OperationCenter;
 
 using VirgoCommon;
 using Aitex.Core.RT.Log;
+using Aitex.Core.Util;
 
 namespace VirgoRT.Devices
 {
@@ -389,6 +390,22 @@ namespace VirgoRT.Devices
         {
 
         }
+        private readonly R_TRIG _trigdiBatteryLowAlarm = new R_TRIG();
+        private readonly R_TRIG _trigdiCOMMAlarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_L_Servo_Driver_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_L_Servo_Driver_Warning = new R_TRIG();
+        private readonly R_TRIG _trigdi1_Search_ORG_Fail_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_ABS_Fail_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_Up_Limit_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_Down_Limit_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi1_Over_Software_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_L_Servo_Driver_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_L_Servo_Driver_Warning = new R_TRIG();
+        private readonly R_TRIG _trigdi2_Search_ORG_Fail_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_ABS_Fail_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_Up_Limit_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_Down_Limit_Alarm = new R_TRIG();
+        private readonly R_TRIG _trigdi2_Over_Software_Alarm = new R_TRIG();
         public void Monitor()
         {
             if (_manualStopTimer.ElapsedMilliseconds > _stopButtonAutoResetTime)
@@ -397,70 +414,86 @@ namespace VirgoRT.Devices
                 _manualStopTimer.Stop();
             }
 
-            if (_diBatteryLowAlarm.Value)
+            _trigdiBatteryLowAlarm.CLK = _diBatteryLowAlarm.Value;
+            if (_trigdiBatteryLowAlarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_diBatteryLowAlarm.Index} alarm");
             }
 
-            if (_diCOMMAlarm.Value)
+            _trigdiCOMMAlarm.CLK = _diCOMMAlarm.Value;
+            if (_trigdiCOMMAlarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_diCOMMAlarm.Index}  alarm");
             }
 
-            if(_di1_L_Servo_Driver_Alarm.Value)
+            _trigdi1_L_Servo_Driver_Alarm.CLK = _di1_L_Servo_Driver_Alarm.Value;
+            if (_trigdi1_L_Servo_Driver_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_L_Servo_Driver_Alarm.Index}  alarm");
             }
-            if (_di1_L_Servo_Driver_Warning.Value)
+            _trigdi1_L_Servo_Driver_Warning.CLK = _di1_L_Servo_Driver_Warning.Value;
+            if (_trigdi1_L_Servo_Driver_Warning.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_L_Servo_Driver_Warning.Index}  alarm");
             }
-            if (_di1_Search_ORG_Fail_Alarm.Value)
+            _trigdi1_Search_ORG_Fail_Alarm.CLK = _di1_Search_ORG_Fail_Alarm.Value;
+            if (_trigdi1_Search_ORG_Fail_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_Search_ORG_Fail_Alarm.Index}  alarm");
             }
-            if (_di1_ABS_Fail_Alarm.Value)
+            _trigdi1_ABS_Fail_Alarm.CLK = _di1_ABS_Fail_Alarm.Value;
+            if (_trigdi1_ABS_Fail_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_ABS_Fail_Alarm.Index}  alarm");
             }
-            if (_di1_Up_Limit_Alarm.Value)
+            _trigdi1_Up_Limit_Alarm.CLK = _di1_Up_Limit_Alarm.Value;
+            if (_trigdi1_Up_Limit_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_Up_Limit_Alarm.Index}  alarm");
             }
-            if (_di1_Down_Limit_Alarm.Value)
+            _trigdi1_Down_Limit_Alarm.CLK = _di1_Down_Limit_Alarm.Value;
+            if (_trigdi1_Down_Limit_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_Down_Limit_Alarm.Index}  alarm");
             }
-            if (_di1_Over_Software_Alarm.Value)
+            _trigdi1_Over_Software_Alarm.CLK = _di1_Over_Software_Alarm.Value;
+            if (_trigdi1_Over_Software_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di1_Over_Software_Alarm.Index}  alarm");
             }
-
-            if (_di2_L_Servo_Driver_Alarm.Value)
+            _trigdi2_L_Servo_Driver_Alarm.CLK = _di2_L_Servo_Driver_Alarm.Value;
+            if (_trigdi2_L_Servo_Driver_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_L_Servo_Driver_Alarm.Index}  alarm");
             }
-            if (_di2_L_Servo_Driver_Warning.Value)
+            _trigdi2_L_Servo_Driver_Warning.CLK = _di2_L_Servo_Driver_Warning.Value;
+            if (_trigdi2_L_Servo_Driver_Warning.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_L_Servo_Driver_Warning.Index}  alarm");
             }
-            if (_di2_Search_ORG_Fail_Alarm.Value)
+            _trigdi2_Search_ORG_Fail_Alarm.CLK = _di2_Search_ORG_Fail_Alarm.Value;
+            if (_trigdi2_Search_ORG_Fail_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_Search_ORG_Fail_Alarm.Index}  alarm");
             }
-            if (_di2_ABS_Fail_Alarm.Value)
+            _trigdi2_ABS_Fail_Alarm.CLK = _di2_ABS_Fail_Alarm.Value;
+            if (_trigdi2_ABS_Fail_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_ABS_Fail_Alarm.Index}  alarm");
             }
-            if (_di2_Up_Limit_Alarm.Value)
+            _trigdi2_Up_Limit_Alarm.CLK = _di2_Up_Limit_Alarm.Value;
+            if (_trigdi2_Up_Limit_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_Up_Limit_Alarm.Index}  alarm");
             }
-            if (_di2_Down_Limit_Alarm.Value)
+            _trigdi2_Down_Limit_Alarm.CLK = _di2_Down_Limit_Alarm.Value;
+            if (_trigdi2_Down_Limit_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_Down_Limit_Alarm.Index}  alarm");
             }
-            if (_di2_Over_Software_Alarm.Value)
+
+            _trigdi2_Over_Software_Alarm.CLK = _di2_Over_Software_Alarm.Value;
+            if (_trigdi2_Over_Software_Alarm.Q)
             {
                 NoDuplicatedAlarm($"Lift Pin DI-{_di2_Over_Software_Alarm.Index}  alarm");
             }
@@ -502,12 +535,29 @@ namespace VirgoRT.Devices
             _doStop.Value = false;
             _bAlarmReported = false;
 
+            _trigdiBatteryLowAlarm.RST = true;
+            _trigdiCOMMAlarm.RST = true;
+            _trigdi1_L_Servo_Driver_Alarm.RST = true;
+            _trigdi1_L_Servo_Driver_Warning.RST = true;
+            _trigdi1_Search_ORG_Fail_Alarm.RST = true;
+            _trigdi1_ABS_Fail_Alarm.RST = true;
+            _trigdi1_Up_Limit_Alarm.RST = true;
+            _trigdi1_Down_Limit_Alarm.RST = true;
+            _trigdi1_Over_Software_Alarm.RST = true;
+            _trigdi2_L_Servo_Driver_Alarm.RST = true;
+            _trigdi2_L_Servo_Driver_Warning.RST = true;
+            _trigdi2_Search_ORG_Fail_Alarm.RST = true;
+            _trigdi2_ABS_Fail_Alarm.RST = true;
+            _trigdi2_Up_Limit_Alarm.RST = true;
+            _trigdi2_Down_Limit_Alarm.RST = true;
+            _trigdi2_Over_Software_Alarm.RST = true;
+
             EV.PostInfoLog(Module, $"Lift Pin reset all do to off.");
         }
 
         private void NoDuplicatedAlarm(string log)
         {
-            if (_bAlarmReported == false)
+            //if (_bAlarmReported == false)
             {
                 EV.PostAlarmLog(Module, log);
                 _bAlarmReported = true;

+ 21 - 1
VirgoRT/Devices/JetPM.cs

@@ -45,6 +45,11 @@ namespace VirgoRT.Devices
         private readonly IoLid               _Lid;
         //private readonly IoCylinder        _LidLocker;
         private readonly IoMessage           _Messager;
+
+        private readonly IoMessage _SubstrateTemperature;
+        private readonly IoMessage _ForelineTemperature;
+        private readonly IoMessage _CHBWallTemperature;
+
         private readonly IoSensor            _ATM_sw;
         private readonly IoSensor            _VAC_sw;
         private readonly IoSensor            _WLK_sw;
@@ -88,6 +93,8 @@ namespace VirgoRT.Devices
         private readonly ChillerBase _gridChiller;
         private readonly IoHeater _gridHeater;
 
+        private readonly IoReset _ResetPlcSignal;
+
         private readonly R_TRIG _trigBasePressure = new R_TRIG();
         private readonly R_TRIG _trigBaseTemperature = new R_TRIG();
         private readonly R_TRIG _trigWaterLeak = new R_TRIG();
@@ -323,6 +330,11 @@ namespace VirgoRT.Devices
             _Lid                    = DEVICE.GetDevice<IoLid>($"{Module}.{VirgoDevice.Lid}");
             //_LidLocker            = DEVICE.GetDevice<IoCylinder>($"{Module}.{VirgoDevice.LidLocker}");
             _Messager               = DEVICE.GetDevice<IoMessage>($"{Module}.Messager");
+
+            _SubstrateTemperature = DEVICE.GetDevice<IoMessage>($"{Module}.SubstrateTemperature");
+            _ForelineTemperature = DEVICE.GetDevice<IoMessage>($"{Module}.ForelineTemperature");
+            _CHBWallTemperature = DEVICE.GetDevice<IoMessage>($"{Module}.CHBWallTemperature");
+
             _ATM_sw                 = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
             _N2Pressure_sw          = DEVICE.GetDevice<IoSensor>($"{Module}.N2PressureOk");
             _VAC_sw                 = DEVICE.GetDevice<IoSensor>($"{Module}.SensorVacSwitch");
@@ -362,6 +374,8 @@ namespace VirgoRT.Devices
             _gridChiller = DEVICE.GetDevice<ChillerBase>($"{Module}.GridChiller");
             _gridHeater = DEVICE.GetDevice<IoHeater>($"{Module}.GridHeater");
 
+            _ResetPlcSignal = DEVICE.GetDevice<IoReset>($"{Module}.ResetPlcSignal");
+
             _gridHeater.Controller = (IoHeaterController)_gridChiller;
             // RS223 AdTec Generator
             if (SC.GetValue<int>($"{mod}.Rf.CommunicationType") == (int)CommunicationType.RS232 &&
@@ -487,6 +501,10 @@ namespace VirgoRT.Devices
             {
                 _Messager.SetMessager(0);   //Virgo A
             }
+            _SubstrateTemperature?.SetMessager(SC.GetValue<int>($"{Module}.SubstrateTemperatureTCTMDiff"));
+            _ForelineTemperature?.SetMessager(SC.GetValue<int>($"{Module}.ForelineTemperatureTCTMDiff"));
+            _CHBWallTemperature?.SetMessager(SC.GetValue<int>($"{Module}.CHBWallTemperatureTCTMDiff"));
+            _ResetPlcSignal?.Reset();
         }
 
         public void SetSlitDoor(bool open, out string reason)
@@ -636,11 +654,13 @@ namespace VirgoRT.Devices
                 if (_trigWaterLeak.Q)
                 {
                     IO.DO[$"{ModuleName.PMA}.DO_EV5_Water_Valve"].Value = false;
+                    IO.DO[$"{ModuleName.PMB}.DO_EV5_Water_Valve"].Value = false;
                     EV.PostMessage(Module.ToString(), EventEnum.DefaultAlarm, $"PM water leak");
                 }
-                if (IsWLK && !IO.DO[$"{ModuleName.PMA}.DO_EV5_Water_Valve"].Value)
+                if (IsWLK && IO.DI[$"{ModuleName.PMA}.DI_Reset_Signal_Reply"].Value && !IO.DI[$"{ModuleName.PMA}.DI_Water_Valve_Opened"].Value)
                 {
                     IO.DO[$"{ModuleName.PMA}.DO_EV5_Water_Valve"].Value = true;
+                    IO.DO[$"{ModuleName.PMB}.DO_EV5_Water_Valve"].Value = true;
                 }
                 _trigScrubberSysAlarm.CLK = CheckFactoryScrubberSysAlarm;
                 if (_trigScrubberSysAlarm.Q)

+ 2 - 2
VirgoUI/App.config

@@ -44,8 +44,8 @@
       <endpoint address="net.tcp://localhost:9006/PMService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="ClusterInterface.IPmService" name="Client_IICPService"/>
 
 
-      <endpoint address="net.tcp://192.168.10.20:5771/EPDService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDService" name="Client_IEPDService"/>
-      <endpoint address="net.tcp://192.168.10.20:5773/EPDCallbackService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDCallbackService" name="Client_IEPDCallbackService"/>
+      <endpoint address="net.tcp://192.168.10.100:5771/EPDService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDService" name="Client_IEPDService"/>
+      <endpoint address="net.tcp://192.168.10.100:5773/EPDCallbackService" behaviorConfiguration="EndpointBehavior" binding="netTcpBinding" bindingConfiguration="Aitex_netTcpBinding" contract="EPInterface.IEPDCallbackService" name="Client_IEPDCallbackService"/>
 
 	</client>
   </system.serviceModel>

+ 1 - 1
VirgoUI/Controls/Parts/ATMDualArmRobot.xaml.cs

@@ -339,7 +339,7 @@ namespace VirgoUI.Controls.Parts
             {
                 var needMove = CurrentPosition != RobotMoveInfo.BladeTarget || CurrentAction != RobotMoveInfo.Action;
 
-                if (needMove)
+                if (needMove || CurrentPosition == "Both.System")
                 {
                     //LogMsg($" RobotMoveInfo, action:{RobotMoveInfo.Action}  armTarget:{RobotMoveInfo.ArmTarget} bladeTarget:{RobotMoveInfo.BladeTarget}");
 

+ 1 - 1
VirgoUI/Models/Platform/EFEM/EFEMView.xaml

@@ -832,7 +832,7 @@
                                     </i:EventTrigger>
                                 </i:Interaction.Triggers>
                             </Button>
-                            <Button Content="HomeRobot" Width="90" Height="24" Margin="4,0,0,0">
+                            <Button Content="HomeRobot" Width="90" Height="24" Margin="4,0,0,0" Visibility="Collapsed">
                                 <i:Interaction.Triggers>
                                     <i:EventTrigger EventName="Click">
                                         <cal:ActionMessage MethodName="HomeEfem">