Przeglądaj źródła

enhance the EFEM driver.

sangwq 11 miesięcy temu
rodzic
commit
cc43a1d632

+ 120 - 103
Venus/Venus_RT/Devices/EFEM/JetEfem.cs

@@ -31,8 +31,6 @@ namespace Venus_RT.Devices.EFEM
         private readonly AsyncSocket _socket;
         private EfemMessage _currentMsg;
         private EfemMessage _backroundMsg;
-        private bool _backround = false;
-        private List<EfemMessage> _backroundlist = new List<EfemMessage>();
         private EfemMessage _revMsg;
         private bool _LiftIsUp = false;
         private bool _LiftIsDown = false;
@@ -137,6 +135,9 @@ namespace Venus_RT.Devices.EFEM
 
         public override bool HomeAll()
         {
+            if (_status == RState.Running)
+                _backroundMsg = _currentMsg;
+
             _currentMsg = new EfemMessage
             {
                 Port = ModuleName.EFEM,
@@ -145,19 +146,21 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[ModuleName.EFEM] }
             };
 
-            _backround = false;
             _status = RState.Running;
             string data = _currentMsg.ToString();
             SetRobotMovingInfo(RobotAction.Homing, Hand.Both, ModuleName.EFEM);
 
             return _socket.Write(data);
         }
+
         public override bool Home(ModuleName mod)
         {
+            if (_status == RState.Running)
+                _backroundMsg = _currentMsg;
 
             if (ModuleHelper.IsLoadPort(mod))
             {
-                _backroundMsg = new EfemMessage
+                _currentMsg = new EfemMessage
                 {
                     Port = mod,
                     Operation = EfemOperation.Home,
@@ -165,10 +168,8 @@ namespace Venus_RT.Devices.EFEM
                     Parameters = new List<string> { Constant.ModuleString[mod] }
                 };
 
-                _backround = true;
-                _backroundlist.Add(_backroundMsg);
-
-                return _socket.Write(_backroundMsg.ToString());
+                _status = RState.Running;
+                return _socket.Write(_currentMsg.ToString());
             }
             else
             {
@@ -180,11 +181,9 @@ namespace Venus_RT.Devices.EFEM
                     Parameters = new List<string> { Constant.ModuleString[mod] }
                 };
 
-                _backround = false;
                 _status = RState.Running;
                 return _socket.Write(_currentMsg.ToString());
             }
-
         }
 
         public override bool OriginalSearch(ModuleName mod)
@@ -203,7 +202,6 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -221,7 +219,6 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { "TRACK" }
             };
 
-            _backround = false;
             _waferPresence = string.Empty;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
@@ -234,6 +231,9 @@ namespace Venus_RT.Devices.EFEM
 
         public override bool Halt()
         {
+            if (_status == RState.Running)
+                _backroundMsg = _currentMsg;
+
             _currentMsg = new EfemMessage
             {
                 Port = ModuleName.EFEM,
@@ -241,7 +241,6 @@ namespace Venus_RT.Devices.EFEM
                 Head = EfemMessage.MsgHead.MOV,
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -254,7 +253,7 @@ namespace Venus_RT.Devices.EFEM
                 return false;
             }
 
-            _backroundMsg = new EfemMessage
+            _currentMsg = new EfemMessage
             {
                 Port = ModuleName.EFEM,
                 Operation = EfemOperation.ClearError,
@@ -262,11 +261,10 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { "CLEAR" }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
             _status = RState.Running;
-            return _socket.Write(_backroundMsg.ToString());
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool PickExtend(ModuleName chamber, int slot, Hand hand)
         {
             if (!CheckEfemStatus())
@@ -283,8 +281,8 @@ namespace Venus_RT.Devices.EFEM
                     Constant.ArmString[hand],
                 }
             };
+
             SetRobotMovingInfo(RobotAction.Extending, hand, chamber);
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -305,7 +303,6 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Retracting, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
@@ -327,11 +324,11 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Extending, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool PlaceRetract(ModuleName chamber, int slot, Hand hand)
         {
             if (!CheckEfemStatus())
@@ -349,11 +346,11 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Retracting, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Pick(ModuleName station, int slot, Hand hand)
         {
             if (!CheckEfemStatus())
@@ -372,11 +369,11 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Picking, hand, station);
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Place(ModuleName station, int slot, Hand hand)
         {
             if (!CheckEfemStatus())
@@ -395,11 +392,11 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Placing, hand, station);
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Goto(ModuleName station, Hand hand)
         {
             if (!CheckEfemStatus())
@@ -418,10 +415,10 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Grip(Hand blade, bool isGrip)
         {
             if (!CheckEfemStatus())
@@ -438,10 +435,10 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Map(ModuleName mod)
         {
             if (!CheckEfemStatus())
@@ -454,10 +451,10 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool SetPinUp(ModuleName mod)
         {
             if (!CheckEfemStatus())
@@ -470,10 +467,10 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], "UP" }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool SetPinDown(ModuleName mod)
         {
             if (!CheckEfemStatus())
@@ -486,10 +483,10 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], "DOWN" }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Align(ModuleName mod, double angle, float delayTime, WaferSize size)
         {
             if (!CheckEfemStatus())
@@ -502,13 +499,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { $"A{angle.ToString("000.00")}" }
             };
 
-            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool SetLamp(LightType light, LightStatus status)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = ModuleName.EFEM,
                 Operation = EfemOperation.Light,
@@ -516,13 +516,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.STOWER, light.ToString(), status.ToString() }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Load(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Load,
@@ -530,13 +533,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Unload(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Unload,
@@ -544,13 +550,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool ReadCarrierId(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.CarrierId,
@@ -558,13 +567,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool WriteCarrierId(ModuleName mod, string id)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.CarrierId,
@@ -572,13 +584,15 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], id }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
         public override bool ReadTagData(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.CarrierId,
@@ -586,13 +600,15 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
         public override bool WriteTagData(ModuleName mod, string tagData)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.CarrierId,
@@ -600,13 +616,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], tagData }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Dock(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Dock,
@@ -614,13 +633,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Undock(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Undock,
@@ -628,13 +650,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool Clamp(ModuleName mod, bool isUnloadClamp)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Clamp,
@@ -642,14 +667,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
+            _status = RState.Running;
             _bIsUnloadClamp = isUnloadClamp;
-            return _socket.Write(_backroundMsg.ToString());
+            return _socket.Write(_currentMsg.ToString());
         }
         public override bool Unclamp(ModuleName mod)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.Unclamp,
@@ -657,13 +684,16 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override bool SetThickness(ModuleName mod, string thickness)
         {
-            _backroundMsg = new EfemMessage
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
             {
                 Port = mod,
                 Operation = EfemOperation.SetThickness,
@@ -671,10 +701,10 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], thickness.ToUpper() }
             };
 
-            _backround = true;
-            _backroundlist.Add(_backroundMsg);
-            return _socket.Write(_backroundMsg.ToString());
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
+
         public override void SetRobotMovingInfo(RobotAction action, Hand hand, ModuleName target)
         {
             blockingCollection.Add(new RobotAnimationData(action, hand, target));
@@ -867,17 +897,11 @@ namespace Venus_RT.Devices.EFEM
         {
             if (message.Operation != EfemOperation.Ready)
             {
-                if (!SearchForDeleteBackMsg(message) && _currentMsg.Operation != message.Operation)
+                if (_currentMsg.Operation != message.Operation && (_backroundMsg == null || _backroundMsg.Operation != message.Operation))
                 {
                     LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, ModuleName.EfemRobot, $"OnCommandUpdated() unexpected return: {message.Operation}, expect: {_currentMsg.Operation}");
                     return;
                 }
-                //var operation = _backround ? _backroundMsg.Operation : _currentMsg.Operation;
-                //if (operation != message.Operation)
-                //{
-                //    LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, ModuleName.EfemRobot, $"OnCommandUpdated() unexpected return: {message.Operation}, expect: {operation}");
-                //    return;
-                //}
             }
 
             switch (message.Operation)
@@ -891,6 +915,7 @@ namespace Venus_RT.Devices.EFEM
                 case EfemOperation.Goto:
                 case EfemOperation.Orgsh:
                 case EfemOperation.EmsStop:
+                case EfemOperation.Light:
                     _status = RState.End;
                     break;
                 case EfemOperation.StateTrack:
@@ -907,7 +932,6 @@ namespace Venus_RT.Devices.EFEM
                             _LPMs[0].OnHomed();
                             _LPMs[1].OnHomed();
                             _LPMs[2].OnHomed();
-                            _backroundlist = new List<EfemMessage>() { };
                         }
                         else if (ModuleHelper.IsLoadPort(_currentMsg.Port))
                         {
@@ -920,11 +944,13 @@ namespace Venus_RT.Devices.EFEM
                 case EfemOperation.Load:
                     {
                         _LPMs[message.Port - ModuleName.LP1].OnLoaded();
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.Unload:
                     {
                         _LPMs[message.Port - ModuleName.LP1].OnUnloaded();
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.CarrierId:
@@ -937,16 +963,20 @@ namespace Venus_RT.Devices.EFEM
                         {
                             _LPMs[message.Port - ModuleName.LP1].OnCarrierIDWrite(message.Data.First());
                         }
+
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.Clamp:
                     {
                         _LPMs[message.Port - ModuleName.LP1].OnClamped(_bIsUnloadClamp);
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.Unclamp:
                     {
                         _LPMs[message.Port - ModuleName.LP1].OnUnclamped();
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.Grip:
@@ -959,7 +989,8 @@ namespace Venus_RT.Devices.EFEM
                         {
                             GripStateBlade2 = _currentMsg.Parameters[0];
                         }
-                        SearchForDeleteBackMsg(message);
+
+                        _status = RState.End;
                     }
                     break;
                 case EfemOperation.Ready:
@@ -974,36 +1005,22 @@ namespace Venus_RT.Devices.EFEM
                         {
                             _LiftIsUp = true;
                             _LiftIsDown = false;
-                            _status = RState.End;
 
                         }
                         else if (_currentMsg.Parameters[1] == "DOWN")
                         {
                             _LiftIsUp = false;
                             _LiftIsDown = true;
-                            _status = RState.End;
                         }
+
+                        _status = RState.End;
                     }
                     break;
             }
         }
-        private bool SearchForDeleteBackMsg(EfemMessage message)
-        {
-            //searchForDelete
-            for (int i = 0; i < _backroundlist.Count; i++)
-            {
-                if (_backroundlist[i].Operation == message.Operation && _backroundlist[i].Port == message.Port)
-                {
-                    _backroundlist.RemoveAt(i);//消除被去除后的空间 否则内存的GC变量将持续增长
-                    return true;
-                }
-            }
-            return false;
-        }
 
-        async void SendBack(string data)
+        void SendBack(string data)
         {
-            //await Task.Run(() => _socket.Write(data + '\r'));
             _socket.Write(data + '\r');
         }
     }

+ 3 - 1
Venus/Venus_RT/Devices/TruPlasmaRF.cs

@@ -172,7 +172,9 @@ namespace Venus_RT.Devices
                 }
             }
             catch (Exception ex) 
-            { }
+            {
+                LOG.WriteExeption(ex);
+            }
 
 
         }