Переглянути джерело

Add SE VCE|TM FsmState in TopView && Fix bug of CycledWafer number in SE Cycle && Add VCE Goto slot in SwapRoutine

zhouhr 1 рік тому
батько
коміт
a83b38ac11

+ 12 - 7
Venus/Venus_MainPages/ViewModels/SeTMViewModel.cs

@@ -431,32 +431,37 @@ namespace Venus_MainPages.ViewModels
         }
         private void OnPick()
         {
+            Queue<MoveItem> moveItems = new Queue<MoveItem>();
             var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PickSelectedModule.ToString(), true);
             var selectedHand = (Hand)Enum.Parse(typeof(Hand), PickSelectedBlade.ToString(), true);
+            MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex] - 1, ModuleName.TMRobot, 0, selectedHand);
+            moveItems.Enqueue(moveItem);
+            //var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PickSelectedModule.ToString(), true);
+            //var selectedHand = (Hand)Enum.Parse(typeof(Hand), PickSelectedBlade.ToString(), true);
             if ((int)PickSelectedModule < TMModules.Count - 2)
             {
-                InvokeClient.Instance.Service.DoOperation($"SETM.PMPick", moduleName, PickSoltItemsSource[PickSoltSelectedIndex] - 1, selectedHand);
+                InvokeClient.Instance.Service.DoOperation($"SETM.PMPick", moveItems);
             }
             else
             {
-                InvokeClient.Instance.Service.DoOperation($"SETM.Pick", moduleName, PickSoltItemsSource[PickSoltSelectedIndex] - 1, selectedHand);
+                InvokeClient.Instance.Service.DoOperation($"SETM.Pick", moveItems);
             }
 
         }
         private void OnPlace()
         {
-            //Queue<MoveItem> moveItems = new Queue<MoveItem>();
+            Queue<MoveItem> moveItems = new Queue<MoveItem>();
             var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
             var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
-            //MoveItem moveItem = new MoveItem(moduleName, PlaceSoltItemsSource[PickSoltSelectedIndex] - 1, 0, 0, selectedHand);
-            //moveItems.Enqueue(moveItem);
+            MoveItem moveItem = new MoveItem( ModuleName.TMRobot, 0, moduleName, PlaceSoltItemsSource[PickSoltSelectedIndex] - 1, selectedHand);
+            moveItems.Enqueue(moveItem);
             if ((int)PickSelectedModule < TMModules.Count - 2)
             {
-                InvokeClient.Instance.Service.DoOperation($"SETM.PMPlace", moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex] - 1, selectedHand);
+                InvokeClient.Instance.Service.DoOperation($"SETM.PMPlace", moveItems);
             }
             else
             {
-                InvokeClient.Instance.Service.DoOperation($"SETM.Pick", moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex] - 1, selectedHand);
+                InvokeClient.Instance.Service.DoOperation($"SETM.Place", moveItems);
             }
         }
         private void OnExtend()

+ 25 - 1
Venus/Venus_MainPages/ViewModels/TopViewModel.cs

@@ -222,6 +222,19 @@ namespace Venus_MainPages.ViewModels
             get { return m_EFEMIsInstalled; }
             set { SetProperty(ref m_EFEMIsInstalled, value); }
         }
+        private bool m_SETMIsInstalled;
+        private bool m_VCE1IsInstalled;
+        public bool SETMIsInstalled
+        {
+            get { return m_SETMIsInstalled; }
+            set { SetProperty(ref m_SETMIsInstalled, value); }
+        }
+        public bool VCE1IsInstalled
+        {
+            get { return m_VCE1IsInstalled; }
+            set { SetProperty(ref m_VCE1IsInstalled, value); }
+        }
+
         #endregion
 
         #region 命令
@@ -279,7 +292,8 @@ namespace Venus_MainPages.ViewModels
             LLBIsInstalled = allModules.Contains("LLB");
             TMIsInstalled  = allModules.Contains("TM");
             EFEMIsInstalled = allModules.Contains("EFEM");
-
+            SETMIsInstalled = allModules.Contains("SETM");
+            VCE1IsInstalled = allModules.Contains("VCE1");
 
             //ModuleName = "PMA";
             addDataKeys();
@@ -387,6 +401,16 @@ namespace Venus_MainPages.ViewModels
                 m_RtDataKeys.Add("EFEM.FsmState");
                 m_RtDataKeys.Add("EFEM.IsOnline");
             }
+            if (SETMIsInstalled)
+            {
+                m_RtDataKeys.Add("SETM.FsmState");
+                //m_RtDataKeys.Add("SETM.IsOnline");
+            }
+            if (VCE1IsInstalled)
+            {
+                m_RtDataKeys.Add("VCE1.FsmState");
+                //m_RtDataKeys.Add("VCE1.IsOnline");
+            }
 
             m_RtDataKeys.Add("SYSTEM.FsmState");
             m_RtDataKeys.Add("System.IsAutoMode");

+ 9 - 2
Venus/Venus_MainPages/ViewModels/VenusSeOperationOverViewModel.cs

@@ -16,6 +16,7 @@ using System.Windows.Threading;
 using Venus_MainPages.Unity;
 using Microsoft.VisualBasic;
 using ExcelLibrary.BinaryFileFormat;
+using MECF.Framework.Common.Schedulers;
 
 namespace Venus_MainPages.ViewModels
 {
@@ -501,13 +502,19 @@ namespace Venus_MainPages.ViewModels
         {
             ModuleName target = ModuleName.VCE1;
             int slot = PickNum;
-            InvokeClient.Instance.Service.DoOperation("SETM.Pick", target, slot);
+            MoveItem moveItem = new MoveItem(target, slot - 1, ModuleName.TMRobot, 0, 0);
+            Queue<MoveItem> que = new Queue<MoveItem>();
+            que.Enqueue(moveItem);
+            InvokeClient.Instance.Service.DoOperation("SETM.Pick", que);
         }
         private void tmplace()
         {
             ModuleName target = ModuleName.VCE1;
             int slot = PickNum;
-            InvokeClient.Instance.Service.DoOperation("SETM.Place", target, slot);
+            MoveItem moveItem = new MoveItem( ModuleName.TMRobot, 0, target, slot - 1, 0);
+            Queue<MoveItem> que = new Queue<MoveItem>();
+            que.Enqueue(moveItem);
+            InvokeClient.Instance.Service.DoOperation("SETM.Place", que);
         }
         #endregion
 

+ 6 - 1
Venus/Venus_MainPages/Views/TopView.xaml

@@ -45,17 +45,22 @@
 
             </Grid.ColumnDefinitions>
             <userControls:StateTitle Title="System"                 TextBoxValue="{Binding RtDataValues[SYSTEM.FsmState]}" TextBoxColor="{Binding RtDataValues[SYSTEM.FsmState],Converter={StaticResource SystemStateConverter}}" LabelColor="{Binding RtDataValues[System.IsAutoMode],Converter={StaticResource IsOnlineConverter}}"/>
+
+            <userControls:StateTitle Title="VCE1"  Grid.Column="3"  TextBoxValue="{Binding RtDataValues[VCE1.FsmState]}"   Visibility="{Binding VCE1IsInstalled,Converter={StaticResource bool2VisibilityConverter}}" />
+
             <userControls:StateTitle Title="EFEM"  Grid.Column="3"  TextBoxValue="{Binding RtDataValues[EFEM.FsmState]}"   TextBoxColor="{Binding RtDataValues[EFEM.FsmState],Converter={StaticResource EFEMStateConverter}}"     LabelColor="{Binding RtDataValues[EFEM.IsOnline],Converter={StaticResource IsOnlineConverter}}"  Visibility="{Binding EFEMIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" />
             <userControls:StateTitle Title="LLA"   Grid.Column="1"  TextBoxValue="{Binding RtDataValues[LLA.FsmState]}"    TextBoxColor="{Binding RtDataValues[LLA.FsmState],Converter={StaticResource LLStateConverter}}"        LabelColor="{Binding RtDataValues[LLA.IsOnline],Converter={StaticResource IsOnlineConverter}}"     Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
             <userControls:StateTitle Title="LLB"   Grid.Column="2"  TextBoxValue="{Binding RtDataValues[LLB.FsmState]}"    TextBoxColor="{Binding RtDataValues[LLB.FsmState],Converter={StaticResource LLStateConverter}}"        LabelColor="{Binding RtDataValues[LLB.IsOnline],Converter={StaticResource IsOnlineConverter}}"     Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
 
 
+
             <userControls:StateTitle Title="PMA"   Grid.Column="0"  Grid.Row="1"  TextBoxValue="{Binding RtDataValues[PMA.FsmState]}"    TextBoxColor="{Binding RtDataValues[PMA.FsmState],Converter={StaticResource PMStateConverter}}"  Visibility="{Binding PMAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[PMA.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
             <userControls:StateTitle Title="PMB"   Grid.Column="1"  Grid.Row="1"  TextBoxValue="{Binding RtDataValues[PMB.FsmState]}"    TextBoxColor="{Binding RtDataValues[PMB.FsmState],Converter={StaticResource PMStateConverter}}"  Visibility="{Binding PMBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[PMB.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
             <userControls:StateTitle Title="PMC"   Grid.Column="2"  Grid.Row="1"  TextBoxValue="{Binding RtDataValues[PMC.FsmState]}"    TextBoxColor="{Binding RtDataValues[PMC.FsmState],Converter={StaticResource PMStateConverter}}"  Visibility="{Binding PMCIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[PMC.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
             <userControls:StateTitle Title="PMD"   Grid.Column="3"  Grid.Row="1"  TextBoxValue="{Binding RtDataValues[PMD.FsmState]}"    TextBoxColor="{Binding RtDataValues[PMD.FsmState],Converter={StaticResource PMStateConverter}}"  Visibility="{Binding PMDIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[PMD.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
 
-            <userControls:StateTitle Title="TM"    Grid.Row="2"    TextBoxValue="{Binding RtDataValues[TM.FsmState]}"     TextBoxColor="{Binding RtDataValues[TM.FsmState],Converter={StaticResource TMStateConverter}}" Visibility="{Binding TMIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[TM.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
+            <userControls:StateTitle Title="TM"    Grid.Row="2"    TextBoxValue="{Binding RtDataValues[TM.FsmState]}"     TextBoxColor="{Binding RtDataValues[TM.FsmState],Converter={StaticResource TMStateConverter}}" Visibility="{Binding TMIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[TM.IsOnline],Converter={StaticResource IsOnlineConverter}}" />
+            <userControls:StateTitle Title="SETM"    Grid.Row="2"    TextBoxValue="{Binding RtDataValues[SETM.FsmState]}"     TextBoxColor="{Binding RtDataValues[SETM.FsmState],Converter={StaticResource TMStateConverter}}" Visibility="{Binding SETMIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
 
             <StackPanel Orientation="Horizontal" Grid.Column="1"  Grid.Row="2" Grid.ColumnSpan="3">
                 <Label Content="Log" Style="{StaticResource TopLable_LeftTop}" Canvas.Left="520" Width="100" Canvas.Top="76" BorderThickness="1"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="30" FontWeight="Bold"/>

+ 4 - 1
Venus/Venus_RT/Modules/SETMCycle.cs

@@ -147,6 +147,7 @@ namespace Venus_RT.Modules
                 foreach (var wafer in cj.LotWafers)
                 {
                     WaferInfo currentWafer = WaferManager.Instance.GetWafer((ModuleName)wafer.OriginStation, wafer.OriginSlot);
+                    WaferManager.Instance.UpdateWaferProcessStatus((ModuleName)wafer.OriginStation, wafer.OriginSlot, EnumWaferProcessStatus.Idle);
                     currentWafer.ProcessJob = _lstProcessJobs.Find(x => x.Sequence.Name == wafer.SequenceName);
                     if (currentWafer.ProcessJob.Sequence.Steps[0].StepParameter.ContainsValue("VPA"))
                         movingStatus[wafer.OriginSlot] = MovingStatus.WaitAlign;
@@ -154,6 +155,8 @@ namespace Venus_RT.Modules
                         movingStatus[wafer.OriginSlot] = MovingStatus.WaitProcess;
                 }
 
+
+
             }
 
             if (!_cycleWatch.IsRunning)
@@ -396,7 +399,6 @@ namespace Venus_RT.Modules
             if (_TMRobot.IsAvailable && AllPMIsAvailable() && ALLStatusIsOver() && WaferAllInVCE())
             {
                 ++CycleIndex;
-                _pastWafer += _currentWafer;
                 if (CycleIndex >= CycleNum)
                 {
                     _lstControlJobs.Find(lcj => lcj.State == EnumControlJobState.Executing).SetState(EnumControlJobState.WaitingForStart);
@@ -404,6 +406,7 @@ namespace Venus_RT.Modules
                 }
                 else
                 {
+                    _pastWafer += _currentWafer;
                     ControlJobInfo cj = _lstControlJobs.Find(lcj => lcj.State == EnumControlJobState.Executing);
                     _currentWafer = 0;
                     

+ 20 - 4
Venus/Venus_RT/Modules/TM/VenusEntity/SEMFSwapRoutine.cs

@@ -26,7 +26,7 @@ namespace Venus_RT.Modules.TM.VenusEntity
             ModulePrepare,
             OpenSlitDoor,
             MoveWafer,
-            WaitMaferMoved,
+            VCEGoto,
             CloseSlitDoor,
             NotifyDone,
         }
@@ -89,8 +89,8 @@ namespace Venus_RT.Modules.TM.VenusEntity
         public RState Monitor()
         {
             Runner.Wait(SwapStep.WaitModuleReady,               () => _vceModule.IsIdle,            _delay_60s)
-                .LoopStart(SwapStep.MoveWafer,                  loopName(),                         _actionList.Count,                  MoveWafer)
-                .LoopEnd(SwapStep.WaitMaferMoved,               NullFun,                            WaitWaferMoved)
+                .LoopStart(SwapStep.VCEGoto,                    loopName(),                         _actionList.Count,      VCEGoto,         () => _vceModule.IsIdle)
+                .LoopEnd(SwapStep.MoveWafer,                    MoveWafer,                          WaitWaferMoved)
                 .End(SwapStep.NotifyDone,                       NullFun,                            _delay_50ms);
 
             return Runner.Status;
@@ -102,7 +102,23 @@ namespace Venus_RT.Modules.TM.VenusEntity
             return "VCE Swap";
         }
 
-
+        private bool VCEGoto()
+        {
+            _currentAction = _actionList.Peek();
+            if (ModuleHelper.IsVCE(_currentAction.SourceModule) && ModuleHelper.IsTMRobot(_currentAction.DestinationModule))
+            {
+                return _vceModule.CheckToPostMessage((int)VceMSG.Goto,_currentAction.SourceModule, _currentAction.SourceSlot);
+            }
+            else if (ModuleHelper.IsTMRobot(_currentAction.SourceModule) && ModuleHelper.IsVCE(_currentAction.DestinationModule))
+            {
+                return _vceModule.CheckToPostMessage((int)VceMSG.Goto, _currentAction.DestinationModule, _currentAction.DestinationSlot);
+            }
+            else
+            {
+                LOG.Write(eEvent.ERR_TM_ROBOT, ModuleName.VCE1, $"Invalid move parameter, source:{_currentAction.SourceModule},{_currentAction.SourceSlot}, destination: {_currentAction.DestinationModule}, {_currentAction.DestinationSlot}");
+                return false;
+            }
+        }
 
         private bool VerifyWaferExistence(MoveItem item)
         {

+ 8 - 3
Venus/Venus_RT/Modules/TM/VenusEntity/SETMEntity.cs

@@ -1,4 +1,5 @@
-using Aitex.Core.RT.Device;
+using Aitex.Core.RT.DataCenter;
+using Aitex.Core.RT.Device;
 using Aitex.Core.RT.Fsm;
 using Aitex.Core.RT.Log;
 using Aitex.Core.RT.OperationCenter;
@@ -185,9 +186,13 @@ namespace Venus_RT.Modules.TM.VenusEntity
 
         protected override bool Init()
         {
+            DATA.Subscribe($"SETM.FsmState", () => ((STATE)fsm.State).ToString());
+
             OP.Subscribe("SETM.Home", (cmd, args) => { PostMsg(MSG.Home); return true; });
-            OP.Subscribe("SETM.Pick", (cmd, args) => { PostMsg(MSG.Pick, args[0], args[1], Hand.Blade1); return true; });
-            OP.Subscribe("SETM.Place", (cmd, args) => { PostMsg(MSG.Place, args[0], args[1], Hand.Blade1); return true; });
+            OP.Subscribe("SETM.Pick", (cmd, args) => { PostMsg(MSG.Pick, args); return true; });
+            OP.Subscribe("SETM.Place", (cmd, args) => { PostMsg(MSG.Place, args); return true; });
+            OP.Subscribe("SETM.PMPick", (cmd, args) => { PostMsg(MSG.PMPick, args); return true; });
+            OP.Subscribe("SETM.PMPlace", (cmd, args) => { PostMsg(MSG.PMPlace, args); return true; });
             OP.Subscribe("SETM.PumpDown", (cmd, args) => { PostMsg(MSG.Pump); return true; });
             OP.Subscribe("SETM.Vent", (cmd, args) => { PostMsg(MSG.Vent); return true; });
             return true;

+ 1 - 0
Venus/Venus_RT/Modules/VCE/VceEntity.cs

@@ -112,6 +112,7 @@ namespace Venus_RT.Modules.VCE
         protected override bool Init()
         {
             DATA.Subscribe($"{_modulename}.VCEOutDoorClosed", () => !VCEOutDoorClosed);
+            DATA.Subscribe($"{_modulename}.FsmState", () => ((VceSTATE)fsm.State).ToString());
             //DATA.Subscribe($"{_modulename}.IsRunning", () => IsIdle);
             //DATA.Subscribe($"{_modulename}.IsRunning", () => IsIdle);