Browse Source

revise pause/resume and robot simulator

chenzk 3 weeks ago
parent
commit
a8bf067f6f

+ 3 - 3
CyberX8_RT/Devices/EFEM/EfemBase.cs

@@ -87,9 +87,9 @@ namespace CyberX8_RT.Devices.EFEM
         public virtual bool LiftIsUp { get; }
         public virtual bool LiftIsDown { get; }
 
-        public virtual bool IsResumeRDYReceived {  get; set;}
-        public virtual bool IsPauseRDYReceived {  get; set;}
-        public virtual bool IsActionRDYReceived {  get; set;}
+        public virtual bool IsResumeRDYReceived {  get;}
+        public virtual bool IsPauseRDYReceived {  get;}
+        public virtual bool IsActionRDYReceived {  get;}
 
         public abstract bool HomeAll();
         public abstract bool Home(ModuleName mod);

+ 34 - 9
CyberX8_RT/Devices/EFEM/SunWayRobot.cs

@@ -96,9 +96,12 @@ namespace CyberX8_RT.Devices.EFEM
 
         private string _address = "";
 
-        public override bool IsResumeRDYReceived { get; set; }
-        public override bool IsPauseRDYReceived { get; set; }
-        public override bool IsActionRDYReceived { get; set; }
+        private bool _isResumeRDYReceived = false;
+        private bool _isPauseRDYReceived = false;
+        private bool _isActionRDYReceived = false;
+        public override bool IsResumeRDYReceived { get { return _isResumeRDYReceived; } }
+        public override bool IsPauseRDYReceived { get { return _isPauseRDYReceived; } }
+        public override bool IsActionRDYReceived { get { return _isActionRDYReceived; } }
 
         public SunWayRobot()
         {
@@ -329,7 +332,7 @@ namespace CyberX8_RT.Devices.EFEM
         }
         public override bool Resume()
         {
-            IsActionRDYReceived = false; //把收到resume信号后执行resume动作成功的变量置false 
+            _isActionRDYReceived = false; //把收到resume信号后执行resume动作成功的变量置false 
             //判断socket是否链接
             if (!_socket.IsConnected)
             {
@@ -962,9 +965,28 @@ namespace CyberX8_RT.Devices.EFEM
             }
             else if (msg.StartsWith("ACTION_RDY"))
             {
-                IsResumeRDYReceived = false;
-                IsPauseRDYReceived = false;
-                IsActionRDYReceived = true;
+                _isResumeRDYReceived = false;
+                _isPauseRDYReceived = false;
+                _isActionRDYReceived = true;
+                
+                _status = RState.End;
+                switch (_currentMessage.Operation)
+                {
+                    case EfemOperation.Home:
+                        SetRobotMovingInfo(RobotAction.Homing, Hand.Both, ModuleName.EFEM);
+                        break;
+                    case EfemOperation.Map:
+                    case EfemOperation.GotoMap:
+                        if (ModuleHelper.IsLoadPort(_currentMessage.Module))
+                        {
+                            GetLoadPort(_currentMessage.Module).OnMaped();
+                        }
+                        break;
+                    case EfemOperation.Pick:
+                    case EfemOperation.Place:
+                        SetRobotMovingInfo(RobotAction.None, Hand.Both, ModuleName.EfemRobot);
+                        break;
+                }
             }
             else if (msg.StartsWith("_RDY"))
             {
@@ -989,11 +1011,14 @@ namespace CyberX8_RT.Devices.EFEM
             }
             else if (msg.Contains("PAUSE_RDY"))
             {
-                 IsPauseRDYReceived = true;
+                _isPauseRDYReceived = true;
+                _isResumeRDYReceived = false; //收到pause把收到resume的信号置false
+
             }
             else if(msg.Contains("RESUME_RDY"))
             {
-                 IsResumeRDYReceived = true;
+                 _isResumeRDYReceived = true;
+                _isPauseRDYReceived =  false;  //收到Resume把收到pause的信号置false
             }
             else
             {

+ 0 - 10
CyberX8_RT/Modules/EFEM/EfemSafeCloseRoutine.cs

@@ -51,7 +51,6 @@ namespace CyberX8_RT.Modules.EFEM
             Runner.Run(SafeCloseStep.Close, () => { return Close(); }, _delay_1ms)
                   .Run(SafeCloseStep.Resume, () => { return Resume(); },_delay_1ms)
                   .Wait(SafeCloseStep.ResumeSignalCheck, CheckResumeDone)
-                  .Wait(SafeCloseStep.ResumeActionDoneCheck, ResumeActionDoneCheck)
                   .End(SafeCloseStep.End, NullFun, 0);
 
             return Runner.Status;
@@ -74,15 +73,6 @@ namespace CyberX8_RT.Modules.EFEM
             return _efem.IsResumeRDYReceived;
         }
 
-        /// <summary>
-        /// 检查Resume动作是否完成
-        /// </summary>
-        /// <returns></returns>
-        private bool ResumeActionDoneCheck()
-        {
-            return _efem.IsActionRDYReceived;
-        }
-
         private bool Close()
         {
             _efemEntity = Singleton<RouteManager>.Instance.GetModule<EfemEntity>(Module.ToString());

+ 14 - 6
CyberX8_Simulator/Devices/SunWayEfemSimulator.cs

@@ -107,8 +107,11 @@ namespace CyberX8_Simulator.Devices
                 // 发送所有积压的消息
                 while (_pendingAcks.Count > 0)
                 {
+                    Thread.Sleep((ushort)3000);
                     var (ack, tcs) = _pendingAcks.Dequeue();
-                    OnWriteMessage(ack);
+
+                    //OnWriteMessage(ack);
+                    
                     tcs.TrySetResult(true);
                 }
             }
@@ -238,11 +241,13 @@ namespace CyberX8_Simulator.Devices
             }
             else if(str.StartsWith("RESUME"))
             {
-                Resume();
+              
                 ack = "RESUME_RDY";
                 OnWriteMessage(ack);
                 _ = Task.Run(DelayAnswerResume); // 启动后台任务
-                
+                Resume();
+
+
 
             }
             else //默认回复
@@ -262,7 +267,6 @@ namespace CyberX8_Simulator.Devices
                             return;
                         }
                     }
-
                     // 启动延迟任务
                     var delayTask = Task.Delay(2200);
 
@@ -279,6 +283,7 @@ namespace CyberX8_Simulator.Devices
                                     _pendingAcks.Enqueue((ack, tcs));
                                     return;
                                 }
+                                
                             }
                         }
 
@@ -302,8 +307,11 @@ namespace CyberX8_Simulator.Devices
 
         private void DelayAnswerResume()
         {
-            Thread.Sleep((ushort)3000);
-            OnWriteMessage("ACTION_RDY");
+            Thread.Sleep((ushort)2200);
+            if (_pendingAcks.Count > 0) 
+            {
+                OnWriteMessage("ACTION_RDY");
+            }
         }
         private void UpdateLocked(string lpNumber,bool locked)
         {