Browse Source

fix the clear error command confirm sequence problem and PM pressure bug.

sangwq 1 year ago
parent
commit
052baa3ed3

+ 4 - 2
Venus/Framework/Common/SCCore/SystemConfigManager.cs

@@ -136,7 +136,8 @@ namespace MECF.Framework.Common.SCCore
 
             try
             {
-                xml.Load(xmlFile);
+                var _sc_stream = File.Open(xmlFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
+                xml.Load(_sc_stream);
 
                 XmlNodeList nodeConfigs = xml.SelectNodes("root/configs");
                 foreach (XmlElement nodeConfig in nodeConfigs)
@@ -225,7 +226,8 @@ namespace MECF.Framework.Common.SCCore
                 if (File.Exists(_scDataFile))
                 {
                     XmlDocument xmlData = new XmlDocument();
-                    xmlData.Load(_scDataFile);
+                    var _sc_stream = File.Open(_scDataFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
+                    xmlData.Load(_sc_stream);
 
                     XmlNodeList scdatas = xmlData.SelectNodes("root/scdata");
                     foreach (XmlElement nodedata in scdatas)

+ 44 - 10
Venus/Venus_RT/Devices/EFEM/JetEfem.cs

@@ -31,6 +31,7 @@ namespace Venus_RT.Devices.EFEM
         private readonly AsyncSocket _socket;
         private EfemMessage _currentMsg;
         private EfemMessage _backroundMsg;
+        private bool _backround = false;
         private EfemMessage _revMsg;
         private bool _LiftIsUp = false;
         private bool _LiftIsDown = false;
@@ -129,6 +130,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[ModuleName.EFEM] }
             };
 
+            _backround = false;
             _status = RState.Running;
             string data = _currentMsg.ToString();
             return _socket.Write(data);
@@ -145,6 +147,7 @@ namespace Venus_RT.Devices.EFEM
                     Parameters = new List<string> { Constant.ModuleString[mod] }
                 };
 
+                _backround = true;
                 return _socket.Write(_backroundMsg.ToString());
             }
             else
@@ -156,6 +159,7 @@ namespace Venus_RT.Devices.EFEM
                     Parameters = new List<string> { Constant.ModuleString[mod] }
                 };
 
+                _backround = false;
                 _status = RState.Running;
                 return _socket.Write(_currentMsg.ToString());
             }
@@ -177,6 +181,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -193,6 +198,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { "TRACK" }
             };
 
+            _backround = false;
             _waferPresence = string.Empty;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
@@ -211,12 +217,18 @@ namespace Venus_RT.Devices.EFEM
                 Head = EfemMessage.MsgHead.MOV,
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
 
         public override bool ClearError()
         {
+            if(_status == RState.Running)
+            {
+                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, "EFEM is busy, please wait a minute");
+                return false;
+            }
 
             _backroundMsg = new EfemMessage
             {
@@ -225,6 +237,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { "CLEAR" }
             };
 
+            _backround = true;
             _status = RState.Running;
             return _socket.Write(_backroundMsg.ToString());
         }
@@ -245,6 +258,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
             SetRobotMovingInfo(RobotAction.Extending, hand, chamber);
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -265,6 +279,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Retracting, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
@@ -286,6 +301,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Extending, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
@@ -307,6 +323,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Retracting, hand, chamber);
             return _socket.Write(_currentMsg.ToString());
@@ -329,6 +346,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Picking, hand, station);
             return _socket.Write(_currentMsg.ToString());
@@ -351,6 +369,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             SetRobotMovingInfo(RobotAction.Placing, hand, station);
             return _socket.Write(_currentMsg.ToString());
@@ -373,6 +392,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -392,6 +412,7 @@ namespace Venus_RT.Devices.EFEM
                 }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -407,6 +428,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -422,6 +444,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], "UP" }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -437,6 +460,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], "DOWN" }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         }
@@ -452,6 +476,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { $"A{angle.ToString("000.00")}" }
             };
 
+            _backround = false;
             _status = RState.Running;
             return _socket.Write(_currentMsg.ToString());
         } 
@@ -464,6 +489,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.STOWER, light.ToString(), status.ToString() }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Load(ModuleName mod)
@@ -475,6 +501,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Unload(ModuleName mod)
@@ -486,6 +513,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool ReadCarrierId(ModuleName mod)
@@ -497,6 +525,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool WriteCarrierId(ModuleName mod, string id)
@@ -508,6 +537,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], id }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool ReadTagData(ModuleName mod)
@@ -519,6 +549,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool WriteTagData(ModuleName mod, string tagData)
@@ -530,6 +561,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], tagData }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Dock(ModuleName mod)
@@ -541,6 +573,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod]}
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Undock(ModuleName mod)
@@ -552,6 +585,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod]}
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Clamp(ModuleName mod, bool isUnloadClamp)
@@ -563,6 +597,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             _bIsUnloadClamp = isUnloadClamp;
             return _socket.Write(_backroundMsg.ToString());
         }
@@ -575,6 +610,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod] }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override bool SetThickness(ModuleName mod, string thickness)
@@ -586,6 +622,7 @@ namespace Venus_RT.Devices.EFEM
                 Parameters = new List<string> { Constant.ModuleString[mod], thickness.ToUpper() }
             };
 
+            _backround = true;
             return _socket.Write(_backroundMsg.ToString());
         }
         public override void SetRobotMovingInfo(RobotAction action, Hand hand, ModuleName target)
@@ -610,7 +647,6 @@ namespace Venus_RT.Devices.EFEM
                     case EfemMessage.MsgHead.ACK:
                         if (msg.Contains("ERROR"))
                         {
-                            _status = RState.End;
                             _revMsg = rec_msg;
                         }
                         
@@ -777,16 +813,14 @@ namespace Venus_RT.Devices.EFEM
 
         private void OnCommandUpdated(EfemMessage message)
         {
-            if(message.Operation != EfemOperation.ClearError && 
-                message.Operation != EfemOperation.Ready && 
-                _currentMsg?.Operation != message.Operation && 
-                _backroundMsg.Operation != message.Operation &&
-                message.Operation != EfemOperation.Home &&
-                message.Operation != EfemOperation.Orgsh
-                )
+            if(message.Operation != EfemOperation.Ready)
             {
-                LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, ModuleName.EfemRobot, $"OnCommandUpdated() unexpected return: {message.Operation}, backround: {_backroundMsg.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)

+ 4 - 4
Venus/Venus_RT/Modules/EFEM/EfemHomeRoutine.cs

@@ -86,8 +86,8 @@ namespace Venus_RT.Modules.EFEM
             }
             else if (_efem.Status == RState.Failed || _efem.Status == RState.Timeout)
             {
-
-                LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Efem home failed: {_efem.Status}");
+                Runner.Stop($"Efem home failed: {_efem.Status}");
+                //LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Efem home failed: {_efem.Status}");
                 return true;
             }
             else
@@ -129,10 +129,10 @@ namespace Venus_RT.Modules.EFEM
             if (_efem.Status == RState.End)
             {
                 var waferPresence = _efem.GetWaferPresence();
-                //000/111 upperArmWafer, lowerArmWafer, alignerWafer1, alignerWafer2,  coolingwafer1,coolingwafer2
+                //000/111 upperArmWafer, lowerArmWafer, alignerWafer1, 
                 if (waferPresence.Length != 3)
                 {
-                    LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"EFEM Track wafer present return invalid value, {waferPresence}, should be 6 characters");
+                    LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"EFEM Track wafer present return invalid value, Wafer Presence:{waferPresence}, should be 3 characters");
                     return false;
                 }
 

+ 4 - 2
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -1077,7 +1077,8 @@ namespace Venus_Simulator.Instances
                     float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000);
+                        float targetPressure = getAiValue_ChamberPressure > 26000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000 : 20;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
@@ -1095,7 +1096,8 @@ namespace Venus_Simulator.Instances
                     float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000);
+                        float targetPressure = getAiValue_ChamberPressure > 23000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000 : 20;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)

+ 2 - 2
Venus/Venus_Simulator/Instances/SystemConfig.cs

@@ -31,7 +31,7 @@ namespace Venus_Simulator.Instances
 
                     if (File.Exists(config_path))
                     {
-                        var cfg_stream = File.Open(config_path, FileMode.Open, FileAccess.Read);
+                        var cfg_stream = File.Open(config_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                         XmlDocument xmlData = new XmlDocument();
                         xmlData.Load(config_path);
 
@@ -137,7 +137,7 @@ namespace Venus_Simulator.Instances
 
             try
             {
-                var stream = File.Open(xmlFile, FileMode.Open, FileAccess.Read);
+                var stream = File.Open(xmlFile, FileMode.Open, FileAccess.ReadWrite);
                 xml.Load(stream);
 
                 XmlNodeList nodeConfigs = xml.SelectNodes("root/configs");