Browse Source

1. add the item of AutoUnLoad for Job
2. add Property of HV
3. Fix the bug of SunWayRobot && add Errorcode
4. Fix the bug of SingleArmRun

zhouhr 5 months ago
parent
commit
9e1a79673e

+ 20 - 1
Venus/Venus_MainPages/ViewModels/VenusDeOperationOverViewModel.cs

@@ -90,6 +90,7 @@ namespace Venus_MainPages.ViewModels
         private WaferAssociationInfo m_VCEAwaferAssociation;
         private WaferAssociationInfo m_VCEBwaferAssociation;
         private bool loadflag;
+        private bool m_NeedAutoUnLoad;
 
         private bool m_IsCycleInfoVisibility;
         private bool m_TMIsVAC;
@@ -136,6 +137,12 @@ namespace Venus_MainPages.ViewModels
             set { SetProperty(ref m_VCEBSlots, value); }
         }
 
+        public bool NeedAutoUnLoad
+        {
+            get { return m_NeedAutoUnLoad; }
+            set { SetProperty(ref m_NeedAutoUnLoad, value); }
+        }
+
         public bool IsCycleInfoVisibility
         {
             get { return m_IsCycleInfoVisibility; }
@@ -577,7 +584,9 @@ namespace Venus_MainPages.ViewModels
         private DelegateCommand<object> _ReturnAllWafer;
         public DelegateCommand<object> ReturnAllWafer =>
             _ReturnAllWafer ?? (_ReturnAllWafer = new DelegateCommand<object>(OnReturnAllWafer));
-
+        private DelegateCommand _NeedUnloadCommand;
+        public DelegateCommand NeedUnloadCommand =>
+            _NeedUnloadCommand ?? (_NeedUnloadCommand = new DelegateCommand(OnNeedUnloadCommand));
 
         #endregion
 
@@ -590,6 +599,7 @@ namespace Venus_MainPages.ViewModels
             string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
 
             IsCycleInfoVisibility = (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsCycleMode");
+            NeedAutoUnLoad = (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload");
             PMAIsInstalled = allModules.Contains("PMA");
             PMBIsInstalled = allModules.Contains("PMB");
             PMCIsInstalled = allModules.Contains("PMC");
@@ -706,6 +716,15 @@ namespace Venus_MainPages.ViewModels
             AssociateSequence(info, false);
         }
 
+        private void OnNeedUnloadCommand()
+        {
+            if (NeedAutoUnLoad != (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload"))
+            {
+                InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"System.IsAutoUnload", NeedAutoUnLoad.ToString());
+                NeedAutoUnLoad = (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload");
+            }
+        }
+
         private void OnReturnAllWafer(object obj)
         {
             WaferDialogView dialog = new WaferDialogView()

+ 21 - 1
Venus/Venus_MainPages/ViewModels/VenusSeOperationOverViewModel.cs

@@ -45,6 +45,7 @@ namespace Venus_MainPages.ViewModels
         private SERobotXAction m_Robot2XAction;
         public RobotMoveInfo m_robotMoveInfo;
         private int m_VCE1WaferCount;
+        private bool m_NeedAutoUnLoad;
         private bool m_PMAIsInstalled;
         private bool m_PMBIsInstalled;
         private bool m_PMCIsInstalled;
@@ -252,6 +253,13 @@ namespace Venus_MainPages.ViewModels
                 SetProperty(ref m_TMModuleInfo, value);
             }
         }
+
+        public bool NeedAutoUnLoad
+        {
+            get { return m_NeedAutoUnLoad; }
+            set { SetProperty(ref m_NeedAutoUnLoad, value); }
+        }
+
         public bool PMAIsInstalled
         {
             get { return m_PMAIsInstalled; }
@@ -411,7 +419,9 @@ namespace Venus_MainPages.ViewModels
         private DelegateCommand<object> _ReturnAllWafer;
         public DelegateCommand<object> ReturnAllWafer =>
             _ReturnAllWafer ?? (_ReturnAllWafer = new DelegateCommand<object>(OnReturnAllWafer));
-
+        private DelegateCommand _NeedUnloadCommand;
+        public DelegateCommand NeedUnloadCommand =>
+            _NeedUnloadCommand ?? (_NeedUnloadCommand = new DelegateCommand(OnNeedUnloadCommand));
 
         #endregion
 
@@ -422,6 +432,7 @@ namespace Venus_MainPages.ViewModels
             VCE1WaferCount = 25;
             string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
 
+            NeedAutoUnLoad = (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload");
             PMAIsInstalled = allModules.Contains("PMA");
             PMBIsInstalled = allModules.Contains("PMB");
             PMCIsInstalled = allModules.Contains("PMC");
@@ -480,6 +491,15 @@ namespace Venus_MainPages.ViewModels
             AssociateSequence(info, false);
         }
 
+        private void OnNeedUnloadCommand()
+        {
+            if (NeedAutoUnLoad != (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload"))
+            {
+                InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"System.IsAutoUnload", NeedAutoUnLoad.ToString());
+                NeedAutoUnLoad = (bool)QueryDataClient.Instance.Service.GetConfig($"System.IsAutoUnload");
+            }
+        }
+
         private void OnReturnAllWafer(object obj)
         {
             WaferDialogView dialog = new WaferDialogView()

+ 5 - 6
Venus/Venus_MainPages/Views/VenusDeOperationOverView.xaml

@@ -776,12 +776,11 @@
                 </Border>
                 <Border Grid.Row="3" BorderBrush="{DynamicResource MainFrame_BD}" BorderThickness="1,0,1,1" Padding="5,1" Visibility="{Binding IsCycleInfoVisibility,Converter={StaticResource bool2VisibilityConverter}}">
                     <StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5">
-
-
-
-
-
-                        <Grid x:Name="Cycle_Info"  Margin="0,10,0,0">
+                        <StackPanel  Margin="0,5,0,0">
+                            <CheckBox IsChecked="{Binding NeedAutoUnLoad, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Content="AutoUnload" HorizontalAlignment="Center" VerticalAlignment="Center"
+                                      Command="{Binding NeedUnloadCommand}"  TextBlock.FontWeight="Bold"/>
+                        </StackPanel>
+                        <Grid x:Name="Cycle_Info"  Margin="0,5,0,0">
                             <Grid.ColumnDefinitions>
                                 <ColumnDefinition Width="110"/>
                                 <ColumnDefinition Width="70"/>

+ 4 - 0
Venus/Venus_MainPages/Views/VenusSeOperationOverView.xaml

@@ -567,6 +567,10 @@
                 </Border>
                 <Border Grid.Row="3" BorderBrush="{DynamicResource MainFrame_BD}" BorderThickness="1,0,1,1" Padding="5,1">
                     <StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5">
+                        <StackPanel  Margin="0,5,0,0">
+                            <CheckBox IsChecked="{Binding NeedAutoUnLoad, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Content="AutoUnload" HorizontalAlignment="Center" VerticalAlignment="Center"
+              Command="{Binding NeedUnloadCommand}"  TextBlock.FontWeight="Bold"/>
+                        </StackPanel>
                         <Grid Margin="0,10,0,0">
                             <Grid.ColumnDefinitions>
                                 <ColumnDefinition Width="110"></ColumnDefinition>

+ 4 - 1
Venus/Venus_RT/Devices/ESC5HighVoltage.cs

@@ -136,7 +136,10 @@ namespace Venus_RT.Devices
 
         public bool Initialize()
         {
-            DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);
+            DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData, Aitex.Core.Util.SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.{Name}.OutputVoltage", () => OutputVoltage);
+            DATA.Subscribe($"{Module}.{Name}.PositiveOutputCurrent", () => PositiveOutputCurrent);
+            DATA.Subscribe($"{Module}.{Name}.NegativeOutputCurrent", () => NegativeOutputCurrent);
 
             if (!_serial.Open())
             {

+ 1 - 1
Venus/Venus_RT/Devices/JetVenusDEPM.cs

@@ -1639,10 +1639,10 @@ namespace Venus_RT.Devices
                 OpenValve(ValveType.TurboPumpPumping, true);
                 _pendulumValve.SetPosition(1000);
             }
-            OnOffSetESCHV(false);
             SetBacksideHeThreshold(0, 0);
             if (_chamberWaferSize == 8)
                 SetBacksideOutHeThreshold(0, 0);
+            OnOffSetESCHV(false);
         }
 
     }

+ 1 - 1
Venus/Venus_RT/Devices/JetVenusSEPM.cs

@@ -1498,8 +1498,8 @@ namespace Venus_RT.Devices
                 OpenValve(ValveType.TurboPumpPumping, true);
                 _pendulumValve.SetPosition(1000);
             }
-            OnOffSetESCHV(false);
             SetBacksideHeThreshold(0, 0);
+            OnOffSetESCHV(false);
 
         }
 

+ 107 - 44
Venus/Venus_RT/Devices/TM/SunWayRobot.cs

@@ -4,7 +4,7 @@ using Aitex.Sorter.Common;
 using MECF.Framework.Common.CommonData;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.SubstrateTrackings;
-using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
+using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -20,7 +20,7 @@ namespace Venus_RT.Devices.TM
     public class SunWayRobot : ITransferRobot
     {
         private readonly AsyncSocket _socket;
-        private const string EOF = "\n";
+        private const string EOF = "\r";
         private RState _status;
         private bool _IsHomed;
         private VRStep _currentStep = VRStep.Idle;
@@ -50,51 +50,114 @@ namespace Venus_RT.Devices.TM
 
         public Dictionary<string, string> _error2msg = new Dictionary<string, string>()
         {
+            {"105"  , "数据解析错误" },
             {"221"  , "手臂选择无效,检查指令中的对应参数" },
-            {"222"  , "无效的 Pan 参数"},
+            //{"222"  , "无效的 Pan 参数"},
+            {"233"  , "伸缩信号未使能,检查传输腔传感器信号是否正常" },
+            {"304"  , "未识别的错误码" },
             {"305"  , "无法识别的命令,检查指令" },
             {"309"  , "不支持的指令,检查指令" },
-            {"350"  , "解析器错误,堆栈溢出,检查指令" },
-            {"402"  , "槽位参数异常,检查指令中的对应参数" },
-            {"403"  , "Slot编号错误,指令的参数中指定的 Slot 编号超过了有效范围" },
-            {"407"  , "旋转轴超过限位,检查指令中的对应参数" },
-            {"408"  , "伸展轴超过限位,检查指令中的对应参数" },
-            {"409"  , "升降轴超过限位,检查指令中的对应参数" },
-            {"416"  , "无法执行 CheckLoad 操作,检查指令中的对应参数" },
-            {"417"  , "Offset 参数参数超限,检查指令中指定的 offset 值是否在允许范围内" },
-            {"418"  , "AWC 功能检测到误差过大,检查晶圆是否过偏或检查AWC传感器标定参数" },
-            {"420"  , "副臂没有在HOME位置,请检查副臂的位置,可以使用HOME ALL使得所有关节姿态回到HOME位置" },
-            {"451"  , "取片后 AWC校验异常,机械臂取片后缩回时,检测到晶圆偏心过大,或者 AWC 校验失败" },
+            //{"350"  , "解析器错误,堆栈溢出,检查指令" },
+            {"401"  , "ZWAFER参数错误 ,检查ZWAFER参数" },
+            {"402"  , "非法的slot参数,检查slot设置参数" },
+            {"403"  , "运动指令RX参数错误,检查RX参数字段" },
+            {"404"  , "晶圆夹取失败,检测传感器是否正常" },
+            {"405"  , "晶圆释放失败,检测传感器是否正常" },
+            {"406"  , "气缸压力表检测错误,检查气缸传感器" },
+            {"407"  , "Mapping传感器伸出失败,检查气缸传感器" },
+            {"408"  , "Mapping传感器缩回失败,检查气缸传感器" },
+            {"409"  , "Mapping传感器位置数据不正确,检查mapping工位或传感器设置" },
+            {"410"  , "Mapping参数值不合理,检查Mapping设置参数" },
+            //{"416"  , "无法执行 CheckLoad 操作,检查指令中的对应参数" },
+            //{"417"  , "Offset 参数参数超限,检查指令中指定的 offset 值是否在允许范围内" },
+            //{"418"  , "AWC 功能检测到误差过大,检查晶圆是否过偏或检查AWC传感器标定参数" },
+            //{"420"  , "副臂没有在HOME位置,请检查副臂的位置,可以使用HOME ALL使得所有关节姿态回到HOME位置" },
+            {"451"  , "放片时,AWC偏差超过设定最大偏差值(PAN L) ,检测到晶圆偏心过大,或者 AWC 校验失败" },
+            {"452"  , "PICK时,AWC偏差超过设定最大偏差值(PAN L) ,检测到晶圆偏心过大,或者 AWC 校验失败" },
+            {"453"  , "AWC采集数据个数异常,检查AWC传感器配置" },
+            {"455"  , "放片时,AWC偏差超过设定最大偏差值(PAN R) ,检测到晶圆偏心过大,或者 AWC 校验失败" },
+            {"456"  , "PICK时,AWC偏差超过设定最大偏差值(PAN R) ,检测到晶圆偏心过大,或者 AWC 校验失败" },
+            {"457"  , "AWC检查到破片报警(PAN L),检查破片设置值,晶圆位置,或者 AWC 校验失败" },
+            {"458"  , "AWC检查到破片报警(PAN R),检查破片设置值,晶圆位置,或者 AWC 校验失败" },
+            {"459"  , "AWC未标定,检查AWC标定信息,工位示教后进行AWC标定" },
+            {"460"  , "AWC标定失败,检查晶圆SIZE设置是否正确 ,检查AWC传感器是否正常触发 " },
             {"550"  , "Station参数超出范围,检查站点配置参数" },
-            {"551"  , "ARM 不在站点,检查当前手臂实际位置与逻辑位置" },
-            {"560"  , "机械臂处于 HALT 状态,拒绝接受新的指令" },
-            {"561"  , "当前机械臂状态机与指令不匹配,当前状态机不满足执行该指令的条件" },
-            {"600"  , "PAligner通讯异常,检查与 PA 的通讯电缆,上电情况等" },
-            {"603"  , "收到急停指令" },
-            {"608"  , "机械臂急停中" },
-            {"610"  , "手持示教器急停按钮按下" },
-            {"692"  , "检测左 PAN 上有片,与逻辑状态不匹配" },
-            {"693"  , "检测右 PAN 上有片,与逻辑状态不匹配" },
-            {"694"  , "检测左 PAN 上无片,与逻辑状态不匹配" },
-            {"695"  , "检测右 PAN 上有片,与逻辑状态不匹配" },
-            {"700"  , "当前手臂有晶圆 ,检查指令动作要求的晶圆状态,与手臂内部存储的晶圆状态是否匹配" },
-            {"701" , "当前手臂无晶圆,检查指令动作要求的晶圆状态,与手臂内部存储的晶圆状态是否匹配"},
-            {"711" , "站点互锁错误,检查站点的“允许机械臂进入信号”是否就绪"},
-            {"721" , "取片失败,检查手臂晶圆状态,或者晶圆检测传感器状态"},
-            {"722" , "放片失败,检查手臂晶圆状态,或者晶圆检测传感器状态"},
-            {"771" , "取片时 AWC 传感器检测失败,检查 AWC 传感器状态,或者 AWC 配置相关是否正确"},
-            {"791" , "查询 AWC 数据失败,未曾执行过 AWC 相关功能的操作"},
-            {"792" , "AWC 传感器检测失败,检查AWC传感器状态,或者AWC配置相关是否正确"},
-            {"799" , "放片失败,检查手臂晶圆状态,或者晶圆检测传感器状态"},
-            {"802" , "伺服报错,伺服提示异常,目前暂时无法读取伺服错误。开机盖可以读到伺服信息。一般整机断电重启。"},
-            {"803" , "机械臂上电失败,HOME ALL 指令,或者其他上电操作,驱动器未能正常响应上电"},
-            {"805" , "第1个伺服收敛异常,伺服没有在规定时间内运动到位置,或者停稳。"},
-            {"806" , "第2个伺服收敛异常,伺服没有在规定时间内运动到位置,或者停稳。"},
-            {"807" , "第3个伺服收敛异常,伺服没有在规定时间内运动到位置,或者停稳。"},
-            {"808" , "第4个伺服收敛异常,伺服没有在规定时间内运动到位置,或者停稳。"},
-            {"1100" , "无法安全回 HOME 操作,检查机械臂是否在安全 HOME 半径内,常见于双臂机械臂,双臂同时伸出超过安全位"},
-            {"1805" , "当前处于示教器模式,检查示教器档位,一般此时处于 Teach 档位"},
-            {"13004" , "PA报错,检查 PA 运行状态,PA 扫片结果等"},
+            //{"551"  , "ARM 不在站点,检查当前手臂实际位置与逻辑位置" },
+            //{"560"  , "机械臂处于 HALT 状态,拒绝接受新的指令" },
+            //{"561"  , "当前机械臂状态机与指令不匹配,当前状态机不满足执行该指令的条件" },
+            {"599"  , "用户急停开启 ,检查用户急停 " },
+            {"600"  , "系统未上电,发送上电指令" },
+            {"602"  , "指令正在执行中,等待机械手运动完成" },
+            //{"603"  , "收到急停指令" },
+            {"604"  , "示教器控制中,通过操作示教盒退出示教盒模式 " },
+            {"605"  , "机械手运动中停止,确认是否发送了HALT指令" },
+            //{"608"  , "机械臂急停中" },
+            {"609"  , "系统存在错误,检查错误码或查看Robot内部log文件" },
+            {"610"  , "示教盒急停启动,解除示教盒急停按钮" },
+            {"611"  , "驱动器报警,检查驱动器状态或对应IO状态" },
+            {"629"  , "驱动器存在报警,检查驱动器报警码" },
+            //{"692"  , "检测左 PAN 上有片,与逻辑状态不匹配" },
+            //{"693"  , "检测右 PAN 上有片,与逻辑状态不匹配" },
+            //{"694"  , "检测左 PAN 上无片,与逻辑状态不匹配" },
+            //{"695"  , "检测右 PAN 上有片,与逻辑状态不匹配" },
+            //{"700"  , "当前手臂有晶圆 ,检查指令动作要求的晶圆状态,与手臂内部存储的晶圆状态是否匹配" },
+            //{"701" , "当前手臂无晶圆,检查指令动作要求的晶圆状态,与手臂内部存储的晶圆状态是否匹配"},
+            {"705" , "LOAD状态未知,RQ LOAD查询状态 "},
+            //{"711" , "站点互锁错误,检查站点的“允许机械臂进入信号”是否就绪"},
+            {"712" , "真空吸附动作失败,检查真空吸附传感器是否正常"},
+            {"720" , "PAN L PICK RE状态不正确,检查PAN L上是否有晶圆"},
+            {"721" , "PAN R PICK RE状态不正确,检查PAN R是否有晶圆 "},
+            {"722" , "PAN R PLACE前状态不正确,查询PAN R状态"},
+            {"723" , "PAN L PLACE前状态不正确,查询PAN L状态"},
+            {"724" , "PAN R PLACE EX状态不正确 ,检查PAN R上是否有晶圆"},
+            {"725" , "PAN L PLACE EX状态不正确 ,检查PAN L上是否有晶圆"},
+            {"726" , "PAN R PLACE RE状态不正确 ,检查PAN R上是否有晶圆"},
+            {"727" , "PAN L PLACE RE状态不正确 ,检查PAN L是否有晶圆"},
+            {"730" , "PLACE前LOAD状态错误,RQ LOAD查询状态"},
+            {"731" , "PLACE后检测到晶圆,检查手指上晶圆状态"},
+            {"734" , "PLACE执行Extend过程中未检测到晶圆,检查Sensor状态和wafer check配置"},
+            {"736" , "PLACE执行Retract过程中检测到晶圆,检查Sensor状态和wafer check配置"},
+            {"740" , "PICK前LOAD状态错误 ,RQ LOAD查询状态"},
+            {"741" , "PICK后未检测到晶圆 ,检查手指是否有晶圆和Sensor状态"},
+            {"744" , "PICK执行Extend过程中检测到晶圆,检查Sensor状态和wafer check配置"},
+            {"745" , "PICK执行Retract过程中未检测到晶圆,检查Sensor状态和wafer check配置"},
+            {"751" , "PAN L晶圆不存在,查询LOAD状态"},
+            {"752" , "PAN R晶圆不存在,查询LOAD状态"},
+            {"757" , "PAN R晶圆不存在,查询LOAD状态"},
+            {"758" , "PAN R PICK EX检测到晶圆,检查Sensor状态和PAN R当前是否晶圆"},
+            {"759" , "PAN L PICK RE未检测到晶圆,检查Sensor状态和PAN L当前是否晶圆"},
+            {"760" , "PAN R PICK RE未检测到晶圆,检查Sensor状态和PAN R当前是否晶圆"},
+            {"761" , "PAN L PLACE EX未检测到晶圆,检查Sensor状态和PAN L当前是否有晶圆"},
+            {"762" , "PAN R PLACE EX未检测到晶圆,检查Sensor状态和PAN R当前是否有晶圆"},
+            {"763" , "PAN L PLACE RE检测到晶圆,检查Sensor状态和PAN L当前是否有晶圆"},
+            {"764" , "PAN R PLACE RE检测到晶圆,检查Sensor状态和PAN R当前是否有晶圆"},
+            //{"771" , "取片时 AWC 传感器检测失败,检查 AWC 传感器状态,或者 AWC 配置相关是否正确"},
+            //{"791" , "查询 AWC 数据失败,未曾执行过 AWC 相关功能的操作"},
+            //{"792" , "AWC 传感器检测失败,检查AWC传感器状态,或者AWC配置相关是否正确"},
+            //{"799" , "放片失败,检查手臂晶圆状态,或者晶圆检测传感器状态"},
+            {"800" , "PICK执行Retract过程中未检测到晶圆,检查Sensor状态和wafer check配置"},
+            {"801" , "改变运动状态发生错误,检查当前运动状态"},
+            {"802" , "无法获取下一个状态,检查机械手当前运动状态"},
+            {"803" , "没有正在运行的指令 ,指令是否运行完成"},
+            {"804" , "没有暂停的动作,检查机械手是否在运动"},
+            {"805" , "没有可跳过的动作,检查运动状态"},
+            {"806" , "带拐点工位不支持该指令,拐点开关是否打开"},
+            {"1006" , "非法的IO端口号,确认配置的IO号"},
+            {"1314" , "PITCH轴超界,检查PITCH关节值"},
+            {"1315" , "关节位置超界 ,查询当前关节值和软限位"},
+            {"1316" , "关节位置超硬限 ,查询当前关节值和硬限位传感器"},
+            {"1320" , "机械手跟踪差超限错误 ,查询当前跟踪差配置值"},
+            {"1321" , "机械手发生碰撞,检测当前碰撞参数配置值"},
+            {"1322" , "机械手发生碰撞,检测当前碰撞参数配置值"},
+            {"1323" , "机械手发生碰撞,检测当前碰撞参数配置值"},
+            {"2000" , "ALGN偏差超过最大值,检查设置的晶圆最大偏差值 检查晶圆位置 "},
+            {"2001" , "AGLN CCD数据异常,确认晶圆位置是否正确 确认CCD传感器位置是否正确 确认内部线路正负正确 "},
+            {"2002" , "返回值格式错误,确认返回值格式"},
+            {"2003" , "通信已经断开,检查通讯线路是否正常"},
+            {"2008" , "FLAT片数据异常,确认晶圆位置是否正确 确认CCD传感器位置是否正确 "},
+            {"13007" , "通信断开,检查通讯线路是否正常"},
+            {"13033" , "伺服驱动器初始化失败,检查驱动器通信连线或检查通信配置"},
+            
         };
         private BlockingCollection<RobotAnimationData> blockingCollection = new BlockingCollection<RobotAnimationData>();
         private ModuleName _module;
@@ -356,7 +419,7 @@ namespace Venus_RT.Devices.TM
 
         private void OnReceiveMessage(string revMsg)
         {
-            string[] ResMsgs = revMsg.Split('\n');
+            string[] ResMsgs = revMsg.Split('\r');
             foreach (string revRawMsg in ResMsgs)
             {
                 if (string.IsNullOrWhiteSpace(revRawMsg)) continue;

+ 2 - 0
Venus/Venus_RT/Modules/VenusDispatcher.cs

@@ -1739,6 +1739,8 @@ namespace Venus_RT.Modules
                     {
                         foreach(var wafer in waitInWafers)
                         {
+                            if (_tmSchdActions.Count > 0)
+                                break;
                             if(emptyAndReadyIn20sPMs.Contains(wafer.destMod))
                             {
                                 // move one wafer from LP to aligner

+ 2 - 2
Venus/Venus_Simulator/Devices/DETMSimulatorServer.cs

@@ -122,7 +122,7 @@ namespace Venus_Simulator.Devices
                 string arm = result.Groups[4].Value;
                 string dir = result.Groups[5].Value;
 
-                Thread.Sleep(2000);
+                Thread.Sleep(6000);
                 OnWriteMessage("_RDY");
             }
             else if (_move_wafer.IsMatch(str))
@@ -135,7 +135,7 @@ namespace Venus_Simulator.Devices
                 string slot = result.Groups[3].Value;
                 string arm = result.Groups[4].Value;
 
-                Thread.Sleep(2000);
+                Thread.Sleep(6000);
                 OnWriteMessage("_RDY");
             }
         }

+ 2 - 2
Venus/Venus_Simulator/Devices/SETMSimulatorServer.cs

@@ -69,7 +69,7 @@ namespace Venus_Simulator.Devices
                 string arm = result.Groups[4].Value;
                 string dir = result.Groups[5].Value;
 
-                Thread.Sleep(2000);
+                Thread.Sleep(7000);
                 OnWriteMessage("_RDY");
             }
             else if (_move_wafer.IsMatch(str))
@@ -82,7 +82,7 @@ namespace Venus_Simulator.Devices
                 string slot = result.Groups[3].Value;
                 string arm = result.Groups[4].Value;
 
-                Thread.Sleep(2000);
+                Thread.Sleep(7000);
                 OnWriteMessage("_RDY");
             }
         }

+ 1 - 1
Venus/Venus_Simulator/Devices/VPASimulator.cs

@@ -24,7 +24,7 @@ namespace Venus_Simulator.Devices
         {
             if (string.IsNullOrEmpty(message))
                 throw new ArgumentException("Hardware command message is invalid");
-            Thread.Sleep(500);
+            Thread.Sleep(3000);
             if (message == "RSLT\r")
             {
                 OnWriteMessage("DATA 0000 1230 01000 01000 Y" + EOF);