Explorar el Código

add robot cycle parameter

chenkui hace 3 días
padre
commit
3576d8b86f

+ 1 - 1
Framework/Common/Common.csproj

@@ -216,6 +216,7 @@
     <Compile Include="CommonData\Reservoir\PMCounterNode.cs" />
     <Compile Include="CommonData\Reservoir\ReplenData.cs" />
     <Compile Include="CommonData\Reservoir\ReservoirData.cs" />
+    <Compile Include="CommonData\RobotCycleParameter.cs" />
     <Compile Include="CommonData\SchedulerWaferHolderModuleTime.cs" />
     <Compile Include="CommonData\SchedulerWaferHolderTime.cs" />
     <Compile Include="CommonData\SRD\SrdCommonData.cs" />
@@ -225,7 +226,6 @@
     <Compile Include="CommonData\Vpw\VpwCellCommonData.cs" />
     <Compile Include="CommonData\Vpw\VpwLotTrackData.cs" />
     <Compile Include="CommonData\Vpw\VpwMainCommonData.cs" />
-    <Compile Include="CommonData\WaferHolderMoveItem.cs" />
     <Compile Include="ControlDataContext\UserItem.cs" />
     <Compile Include="DBCore\ReservoirUsageRecorder.cs" />
     <Compile Include="DBCore\MetalUsageRecorder.cs" />

+ 19 - 0
Framework/Common/CommonData/RobotCycleParameter.cs

@@ -0,0 +1,19 @@
+using Aitex.Sorter.Common;
+using MECF.Framework.Common.Equipment;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MECF.Framework.Common.CommonData
+{
+    public class RobotCycleParameter
+    {
+        public ModuleName ModuleName { get; set; }
+
+        public Hand RobotArm { get; set; }
+
+        public Flip RobotFlip { get; set; }
+    }
+}

+ 0 - 40
Framework/Common/CommonData/WaferHolderMoveItem.cs

@@ -1,40 +0,0 @@
-using MECF.Framework.Common.Equipment;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.Serialization;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace MECF.Framework.Common.CommonData
-{
-
-    [DataContract]
-    public class WaferHolderMoveItem
-    {
-        [DataMember]
-        public ModuleName SourceModule { get; set; }
-
-        [DataMember]
-        public ModuleType SourceModuleType { get; set; }
-
-
-        [DataMember]
-        public ModuleName DestModule { get; set; }
-
-        [DataMember]
-        public ModuleType DestModuleType { get; set; }
-        /// <summary>
-        /// 构造函数
-        /// </summary>
-        /// <param name="source"></param>
-        /// <param name="destination"></param>
-        public WaferHolderMoveItem(ModuleName source,ModuleType sourceModuleType,ModuleName destination,ModuleType destModuleType) 
-        {
-            this.SourceModule = source;
-            this.DestModule = destination;
-            this.SourceModuleType = sourceModuleType;
-            this.DestModuleType = destModuleType;
-        }
-    }
-}

+ 7 - 1
PunkHPX8_MainPages/ViewModels/RobotCycleViewModel.cs

@@ -19,6 +19,8 @@ using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.Windows.Input;
 using System.Windows.Threading;
+using MECF.Framework.Common.CommonData;
+using Newtonsoft.Json;
 
 namespace PunkHPX8_MainPages.ViewModels
 {
@@ -257,7 +259,11 @@ namespace PunkHPX8_MainPages.ViewModels
             {
                 sequences.Add(SelectedDummyName.ToString());
             }
-            InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.RobotCycle}",string.Join("-",sequences), InPutCycleTimes, InPutAlignDegree);
+            List<RobotCycleParameter> parameters = new List<RobotCycleParameter>();
+            RobotCycleParameter lpParameter = new RobotCycleParameter();
+            lpParameter.ModuleName = SelectedLPName;
+            parameters.Add(lpParameter);
+            InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.RobotCycle}",JsonConvert.SerializeObject(parameters), InPutCycleTimes, InPutAlignDegree);
         }
         private void RobotCycleAbortAction(object param)
         {

+ 5 - 0
PunkHPX8_RT/Config/Layout/ToolLayoutConfiguration.xml

@@ -234,6 +234,11 @@
 			<RecirculationFlowPressure>false</RecirculationFlowPressure>
 		</Item>
 
+		<Item i:type="EFEM">
+			<Installed>True</Installed>
+			<Type>EFEM</Type>
+		</Item>
+		
 		<!-- SAFETY -->
 
 		<Item i:type="SystemSafety">

+ 26 - 32
PunkHPX8_RT/Modules/EFEM/CycleRobotCycleNewRoutine.cs

@@ -17,6 +17,9 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using MECF.Framework.Common.CommonData;
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
 
 namespace PunkHPX8_RT.Modules.EFEM
 {
@@ -40,7 +43,7 @@ namespace PunkHPX8_RT.Modules.EFEM
         /// </summary>
         private int _currentCycle;
         private RobotCycleMoveRoutine _cycleMoveRoutine;
-        private List<ModuleName> _sequences;
+        private List<RobotCycleParameter> _sequences;
         private int _alignerAngle;
         private List<EfemCycleAction> _actions;
         private int _dummySlotNumber = 25; //当前cycle中的dummy slot 数量
@@ -54,11 +57,7 @@ namespace PunkHPX8_RT.Modules.EFEM
         {
             _currentCycle = 0;
             string str = objs[0].ToString();
-            _sequences = new List<ModuleName>();
-            foreach(string item in str.Split('-'))
-            {
-                _sequences.Add((ModuleName)Enum.Parse(typeof(ModuleName), item));
-            }
+            _sequences = JsonConvert.DeserializeObject<List<RobotCycleParameter>>(str);
             if(!CheckRobotCyclePreCondiction(_sequences))
             {
                 return RState.Failed;
@@ -76,11 +75,8 @@ namespace PunkHPX8_RT.Modules.EFEM
         }
         private void GenerateCycleAction()
         {
-            if (!ModuleHelper.IsLoadPort(_sequences[0]))
-            {
-                return;
-            }
-            WaferInfo[] waferInfos = WaferManager.Instance.GetWafers(_sequences[0]);
+            ModuleName sequenceModuleName = _sequences[0].ModuleName;
+            WaferInfo[] waferInfos = WaferManager.Instance.GetWafers(sequenceModuleName);
             int count = 0;
             foreach (WaferInfo item in waferInfos)
             {
@@ -88,24 +84,24 @@ namespace PunkHPX8_RT.Modules.EFEM
                 {
                     continue;
                 }
-                _actions.AddRange(GenerateCycle(_sequences[0], item.Slot, _sequences[1], ModuleHelper.IsDummy(_sequences[1]) ? count : 0));
+                _actions.AddRange(GenerateCycle(_sequences[0], item.Slot, _sequences[1].ModuleName, ModuleHelper.IsDummy(_sequences[1].ModuleName) ? count : 0));
                 for (int i = 1; i < _sequences.Count; i++)
                 {
                  
                     if (i == _sequences.Count - 1)
                     {
-                        _actions.AddRange(GenerateCycle(_sequences[i], ModuleHelper.IsDummy(_sequences[i]) ? count : 0, _sequences[0],
+                        _actions.AddRange(GenerateCycle(_sequences[i], ModuleHelper.IsDummy(_sequences[i].ModuleName) ? count : 0, _sequences[0].ModuleName,
                             item.Slot));
                     }
                     //else (i == 1)
                     else
                     {
-                        _actions.AddRange(GenerateCycle(_sequences[i], ModuleHelper.IsDummy(_sequences[i]) ? count : 0, _sequences[i + 1],
-                            ModuleHelper.IsDummy(_sequences[i + 1]) ? count : 0));
+                        _actions.AddRange(GenerateCycle(_sequences[i], ModuleHelper.IsDummy(_sequences[i].ModuleName) ? count : 0, _sequences[i + 1].ModuleName,
+                            ModuleHelper.IsDummy(_sequences[i + 1].ModuleName) ? count : 0));
                     }
-                    if (ModuleHelper.IsDummy(_sequences[i]))
+                    if (ModuleHelper.IsDummy(_sequences[i].ModuleName))
                     {
-                        WaferInfo[] dummywaferInfos = WaferManager.Instance.GetWafers(_sequences[i]);
+                        WaferInfo[] dummywaferInfos = WaferManager.Instance.GetWafers(_sequences[i].ModuleName);
                         if (dummywaferInfos != null)
                         {
                             _dummySlotNumber = dummywaferInfos.Length;
@@ -120,10 +116,10 @@ namespace PunkHPX8_RT.Modules.EFEM
             }
         }
 
-        private List<EfemCycleAction> GenerateCycle(ModuleName source,int sourceSlot,ModuleName destModule,int destSlot)
+        private List<EfemCycleAction> GenerateCycle(RobotCycleParameter sourceParameter,int sourceSlot,ModuleName destModule,int destSlot)
         {
             List<EfemCycleAction> actions = new List<EfemCycleAction>();
-            if (source == ModuleName.Aligner1)
+            if (sourceParameter.ModuleName == ModuleName.Aligner1)
             {
                 EfemCycleAction action = new EfemCycleAction();
                 action.Action = "Align";
@@ -132,8 +128,9 @@ namespace PunkHPX8_RT.Modules.EFEM
             }
             EfemCycleAction pick = new EfemCycleAction();
             MoveItem pickMoveItem = new MoveItem();
-            pickMoveItem.SourceModule = source;
+            pickMoveItem.SourceModule = sourceParameter.ModuleName;
             pickMoveItem.SourceSlot = sourceSlot;
+            pickMoveItem.RobotHand = sourceParameter.RobotArm;
             pick.Parameter = pickMoveItem;
             pick.Action = "Pick";
             actions.Add(pick);
@@ -141,6 +138,8 @@ namespace PunkHPX8_RT.Modules.EFEM
             MoveItem placeMoveItem = new MoveItem();
             placeMoveItem.DestinationModule = destModule;
             placeMoveItem.DestinationSlot = destSlot;
+            placeMoveItem.RobotHand = sourceParameter.RobotArm;
+            placeMoveItem.RobotFlip = sourceParameter.RobotFlip;
             place.Parameter = placeMoveItem;
             place.Action = "Place";
             actions.Add(place);
@@ -201,7 +200,7 @@ namespace PunkHPX8_RT.Modules.EFEM
         {
             return _currentCycle;
         }
-        private bool CheckRobotCyclePreCondiction(List<ModuleName> lists)
+        private bool CheckRobotCyclePreCondiction(List<RobotCycleParameter> lists)
         {
             bool result = true;
             //Robot
@@ -210,14 +209,14 @@ namespace PunkHPX8_RT.Modules.EFEM
                 return false;
             }
             //LP
-            if(lists.Contains(ModuleName.LP1))
+            if(lists.FindIndex(O=>O.ModuleName.ToString()==ModuleName.LP1.ToString())!=-1)
             {
                 if (!CheckLoadPortStatus(ModuleName.LP1))
                 {
                     return false;
                 };
             }
-            else if (lists.Contains(ModuleName.LP2))
+            else if (lists.FindIndex(O => O.ModuleName.ToString() == ModuleName.LP1.ToString()) != -1)
             {
                 if (!CheckLoadPortStatus(ModuleName.LP2))
                 {
@@ -232,34 +231,29 @@ namespace PunkHPX8_RT.Modules.EFEM
                 };
             }
             //Dummy
-            if (lists.Contains(ModuleName.Dummy1))
+            if (lists.FindIndex(O => O.ModuleName.ToString() == ModuleName.Dummy1.ToString()) != -1)
             {
                 if (!CheckDummyStatus(ModuleName.Dummy1))
                 {
                     return false;
                 };
             }
-            else if(lists.Contains(ModuleName.Dummy2))
+            else if(lists.FindIndex(O => O.ModuleName.ToString() == ModuleName.Dummy2.ToString()) != -1)
             {
                 if (!CheckDummyStatus(ModuleName.Dummy2))
                 {
                     return false;
                 };
             }
-            //Puf
-            if (lists.Contains(ModuleName.PUF1) && !CheckPufStatus(ModuleName.PUF1))
-            {
-                return false ;
-            }
             //Srd
-            if (lists.Contains(ModuleName.SRD1))
+            if (lists.FindIndex(O => O.ModuleName.ToString() == ModuleName.SRD1.ToString()) != -1)
             {
                 if (!CheckSrdStatus(ModuleName.SRD1))
                 {
                     return false;
                 };
             }
-            else if(lists.Contains(ModuleName.SRD2))
+            else if(lists.FindIndex(O => O.ModuleName.ToString() == ModuleName.SRD2.ToString()) != -1)
             {
                 if (!CheckSrdStatus(ModuleName.SRD2))
                 {

+ 2 - 2
PunkHPX8_RT/Modules/EFEM/EfemEntity.cs

@@ -312,7 +312,7 @@ namespace PunkHPX8_RT.Modules
 
             OP.Subscribe($"{ModuleName.EFEM}.{EfemOperation.Home}",             (cmd, args) => { PostMsg(MSG.HomeAll); return true; });
             OP.Subscribe($"{ModuleName.EFEM}.{EfemOperation.RobotCycle}",             (cmd, args) => { 
-                PostMsg(MSG.RobotCycle,args); return true; });
+                CheckToPostMessage((int)MSG.RobotCycle,args); return true; });
             OP.Subscribe($"{ModuleName.EFEM}.{EfemOperation.ClearError}",       (cmd, args) => { PostMsg(MSG.Recover); return true; });
             OP.Subscribe($"{ModuleName.EFEM}.{EfemOperation.TurnOffBuzzer}", (cmd, args) => { PostMsg(MSG.CloseBuzzer); return true; });
             OP.Subscribe($"{ModuleName.EFEM}.Online",                           (cmd, args) => 
@@ -409,7 +409,7 @@ namespace PunkHPX8_RT.Modules
         }
         private void InitFsmMap()
         {
-            fsm = new StateMachine<EfemEntity>("EFEM", (int)STATE.Unknown, 50);
+            fsm = new StateMachine<EfemEntity>("EFEM", (int)STATE.Idle, 50);
             fsm.EnableRepeatedMsg(true);
 
             AnyStateTransition(FSM_MSG.TIMER,               fnMonitor,          FSM_STATE.SAME);

+ 1 - 0
PunkHPX8_RT/PunkHPX8_RT.csproj

@@ -76,6 +76,7 @@
     <Reference Include="Mono.Security">
       <HintPath>..\ThirdParty\Mono.Security.dll</HintPath>
     </Reference>
+    <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" />
     <Reference Include="SecsGem.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\ThirdParty\SecsGem.Core.dll</HintPath>