Browse Source

MoveItem Add Flip;
Robot pick/place add flip;

chenkui 1 day ago
parent
commit
1416edfcd3

+ 4 - 1
Framework/Common/CommonData/MoveItem.cs

@@ -37,6 +37,8 @@ namespace MECF.Framework.Common.Schedulers
         public ModuleType DestinationType { get; set; }
         [DataMember]
         public Hand RobotHand { get; set; }
+        [DataMember]
+        public Flip RobotFlip { get; set; }
 
         public ModuleName Module
         {
@@ -59,13 +61,14 @@ namespace MECF.Framework.Common.Schedulers
 
         }
 
-        public MoveItem(ModuleName sourceModule, int sourceSlot, ModuleName destinationModule, int destinationSlot, Hand robotHand)
+        public MoveItem(ModuleName sourceModule, int sourceSlot, ModuleName destinationModule, int destinationSlot, Hand robotHand, Flip robotFlip)
         {
             this.SourceModule = sourceModule;
             this.SourceSlot = sourceSlot;
             this.DestinationModule = destinationModule;
             this.DestinationSlot = destinationSlot;
             this.RobotHand = robotHand;
+            this.RobotFlip = robotFlip;
         }
 
         public void Update(IDeviceData data)

+ 6 - 0
Framework/Common/CommonData/SorterDefines/TransferInfo.cs

@@ -38,6 +38,12 @@ namespace Aitex.Sorter.Common
         None = 3,
     }
 
+    public enum Flip
+    {
+        NoFlip=0,
+        Flip=1
+    }
+
 
 
     public enum MoveType

+ 2 - 2
PunkHPX8_MainPages/ViewModels/EfemViewModel.cs

@@ -936,7 +936,7 @@ namespace PunkHPX8_MainPages.ViewModels
             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.EfemRobot, 0, selectedHand);
+            MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex]-1, ModuleName.EfemRobot, 0, selectedHand, Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Pick}", moveItems);
         }
@@ -945,7 +945,7 @@ namespace PunkHPX8_MainPages.ViewModels
             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.EfemRobot, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand);
+            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand,Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Place}", moveItems);
         }

+ 2 - 2
PunkHPX8_RT/Devices/EFEM/EfemBase.cs

@@ -103,8 +103,8 @@ namespace PunkHPX8_RT.Devices.EFEM
         public abstract bool PickRetract(ModuleName chamber, int slot, Hand hand);
         public abstract bool PlaceExtend(ModuleName chamber, int slot, Hand hand);
         public abstract bool PlaceRetract(ModuleName chamber, int slot, Hand hand);
-        public abstract bool Pick(ModuleName station, int slot, Hand hand);
-        public abstract bool Place(ModuleName station, int slot, Hand hand);
+        public abstract bool Pick(ModuleName station, int slot, Hand hand,Flip flip);
+        public abstract bool Place(ModuleName station, int slot, Hand hand,Flip flip);
         public abstract bool Goto(ModuleName station, Hand hand,string updown="UP");
         public abstract bool Grip(Hand blade, bool isGrip);
         public abstract bool GotoMap(ModuleName mod, Hand hand,string extend="EX");

+ 2 - 2
PunkHPX8_RT/Devices/EFEM/JetEfem.cs

@@ -386,7 +386,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
-        public override bool Pick(ModuleName station, int slot, Hand hand)
+        public override bool Pick(ModuleName station, int slot, Hand hand,Flip flip= Flip.NoFlip)
         {
             if (!CheckEfemStatus())
                 return false;
@@ -409,7 +409,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
-        public override bool Place(ModuleName station, int slot, Hand hand)
+        public override bool Place(ModuleName station, int slot, Hand hand, Flip flip = Flip.NoFlip)
         {
             if (!CheckEfemStatus())
                 return false;

+ 2 - 2
PunkHPX8_RT/Devices/EFEM/SunWayEfem.cs

@@ -391,7 +391,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"System cannot support RequestMapResult");
             return false;
         }
-        public override bool Pick(ModuleName station, int slot, Hand hand)
+        public override bool Pick(ModuleName station, int slot, Hand hand, Flip flip = Flip.NoFlip)
         {
             //判断机台是否准备就绪
             if (!_isComm)
@@ -432,7 +432,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
-        public override bool Place(ModuleName station, int slot, Hand hand)
+        public override bool Place(ModuleName station, int slot, Hand hand,Flip flip=Flip.NoFlip)
         {
             //判断机台是否准备就绪
             if (!_isComm)

+ 7 - 5
PunkHPX8_RT/Devices/EFEM/SunWayRobot.cs

@@ -385,7 +385,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             return false;
         }
 
-        public override bool Pick(ModuleName station, int slot, Hand hand)
+        public override bool Pick(ModuleName station, int slot, Hand hand, Flip flip)
         {
             if (_status == RState.Running && _currentMessage != null)
             {
@@ -419,8 +419,9 @@ namespace PunkHPX8_RT.Devices.EFEM
                 LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"{station}'s number is not exist, Cannot Execute Pick Action");
                 return false;
             }
-            int stationNumber= _moduleStationNumberDictionary[strModuleWaferSize];
-            string cmd = $"PICK {stationNumber} SLOT {slot+1} ARM {_armString[hand]}\r";
+            int stationNumber= _moduleStationNumberDictionary[strModuleWaferSize]; 
+            string strFlip = flip == Flip.Flip ? " Flip" : "";
+            string cmd = $"PICK {stationNumber} SLOT {slot+1} ARM {_armString[hand]}{strFlip}\r";
             if(ModuleHelper.IsPUF(station)||ModuleHelper.IsAligner(station)||ModuleHelper.IsSRD(station))
             {
                 cmd = $"PICK {stationNumber} SLOT 1 ARM {_armString[hand]}\r";
@@ -439,7 +440,7 @@ namespace PunkHPX8_RT.Devices.EFEM
             LoadPortModule loadPortModule = Singleton<RouteManager>.Instance.EFEM.GetLoadportModule(station - ModuleName.LP1);
             return loadPortModule.LPDevice;
         }
-        public override bool Place(ModuleName station, int slot, Hand hand)
+        public override bool Place(ModuleName station, int slot, Hand hand,Flip flip)
         {
             if (_status == RState.Running && _currentMessage != null)
             {
@@ -475,7 +476,8 @@ namespace PunkHPX8_RT.Devices.EFEM
             };
             _status = RState.Running;
             int stationNumber = _moduleStationNumberDictionary[strModuleWaferSize];
-            string cmd = $"PLACE {stationNumber} SLOT {slot+1} ARM {_armString[hand]}\r";
+            string strFlip = flip == Flip.Flip ? " Flip" : "";
+            string cmd = $"PLACE {stationNumber} SLOT {slot+1} ARM {_armString[hand]}{strFlip}\r";
             if (ModuleHelper.IsPUF(station)||ModuleHelper.IsSRD(station))
             {
                 cmd = $"PLACE {stationNumber} SLOT 1 ARM {_armString[hand]}\r";

+ 8 - 0
PunkHPX8_RT/Devices/Reservoir/DIReservoirDevice.cs

@@ -15,5 +15,13 @@ namespace PunkHPX8_RT.Devices.Reservoir
         public DIReservoirDevice(string moduleName) : base(moduleName)
         {
         }
+
+        protected override void SubscribeValueAction()
+        {
+            base.SubscribeValueAction();
+            IoSubscribeUpdateVariable(DEGAS_ENABLE);
+            IoSubscribeUpdateVariable(PH_VALUE);
+            IoSubscribeUpdateVariable(PH_FLOW_VALVE);
+        }
     }
 }

+ 10 - 0
PunkHPX8_RT/Devices/Reservoir/DMReservoirDevice.cs

@@ -15,5 +15,15 @@ namespace PunkHPX8_RT.Devices.Reservoir
         public DMReservoirDevice(string moduleName) : base(moduleName)
         {
         }
+
+        protected override void SubscribeValueAction()
+        {
+            base.SubscribeValueAction();
+            IoSubscribeUpdateVariable(AN_DI_REPLEN);
+            IoSubscribeUpdateVariable(AN_FLOW);
+            IoSubscribeUpdateVariable(AN_PUMP_ENABLE);
+            IoSubscribeUpdateVariable(AN_PUMP_SPEED);
+            IoSubscribeUpdateVariable(DEGAS_ENABLE);
+        }
     }
 }

+ 8 - 1
PunkHPX8_RT/Devices/Reservoir/HSReservoirDevice.cs

@@ -16,6 +16,13 @@ namespace PunkHPX8_RT.Devices.Reservoir
         {
         }
 
-        
+        protected override void SubscribeValueAction()
+        {
+            base.SubscribeValueAction();
+            IoSubscribeUpdateVariable(PH_FLOW_VALVE);
+            IoSubscribeUpdateVariable(PH_VALUE);
+            IoSubscribeUpdateVariable(HED_FLOW);
+            IoSubscribeUpdateVariable(HED_FLOW_ENABLE);
+        }
     }
 }

+ 38 - 37
PunkHPX8_RT/Devices/Reservoir/ReservoirDevice.cs

@@ -21,32 +21,32 @@ namespace PunkHPX8_RT.Devices.Reservoir
     public class ReservoirDevice : BaseDevice, IDevice
     {
         #region 常量
-        private const string AUTO = "Auto";
-        private const string MANUAL = "Manual";
-        private const string DISABLE = "Disable";
+        protected const string AUTO = "Auto";
+        protected const string MANUAL = "Manual";
+        protected const string DISABLE = "Disable";
 
-        private const string CA_PUMP_RUNNING="CaPumpRunning";
-        private const string AN_TOWER_HIGH="AnTowerHigh";
-        private const string AN_TOWER_LOW="AnTowerLow";
-        private const string CA_LEVEL="CaLevel";
-        private const string CA_WATER_LEVEL="CaWaterLevel";
-        private const string AN_FLOW="AnFlow";
-        private const string AN_PUMP_ENABLE="AnPumpEnable";
-        private const string AN_PUMP_SPEED="AnPumpSpeed";
-        private const string CA_FLOW="CaFlow";
-        private const string CA_PUMP_ENABLE="CaPumpEnable";
-        private const string CA_PUMP_SPEED="CaPumpSpeed";
-        private const string RETURN_VALVE_OPENING="ReturnValveOpening";
-        private const string RETURN_VALVE="ReturnValve";
-        private const string RETURN_VALVE_PERCENT="ReturnValvePercent";
-        private const string CA_DI_REPLEN="CaDiReplen";
-        private const string AN_DI_REPLEN="AnDiReplen";
-        private const string SAMPLE_OUT="SampleOut";
-        private const string DEGAS_ENABLE="DegasEnable";
-        private const string HED_FLOW="HedFlow";
-        private const string HED_FLOW_ENABLE="HedFlowEnable";
-        private const string PH_FLOW_VALVE="PhFlowValve";
-        private const string PH_VALUE="PhValue";
+        protected const string CA_PUMP_RUNNING="CaPumpRunning";
+        protected const string AN_TOWER_HIGH="AnTowerHigh";
+        protected const string AN_TOWER_LOW="AnTowerLow";
+        protected const string CA_LEVEL="CaLevel";
+        protected const string CA_WATER_LEVEL="CaWaterLevel";
+        protected const string AN_FLOW="AnFlow";
+        protected const string AN_PUMP_ENABLE="AnPumpEnable";
+        protected const string AN_PUMP_SPEED="AnPumpSpeed";
+        protected const string CA_FLOW="CaFlow";
+        protected const string CA_PUMP_ENABLE="CaPumpEnable";
+        protected const string CA_PUMP_SPEED="CaPumpSpeed";
+        protected const string RETURN_VALVE_OPENING="ReturnValveOpening";
+        protected const string RETURN_VALVE="ReturnValve";
+        protected const string RETURN_VALVE_PERCENT="ReturnValvePercent";
+        protected const string CA_DI_REPLEN="CaDiReplen";
+        protected const string AN_DI_REPLEN="AnDiReplen";
+        protected const string SAMPLE_OUT="SampleOut";
+        protected const string DEGAS_ENABLE="DegasEnable";
+        protected const string HED_FLOW="HedFlow";
+        protected const string HED_FLOW_ENABLE="HedFlowEnable";
+        protected const string PH_FLOW_VALVE="PhFlowValve";
+        protected const string PH_VALUE="PhValue";
         #endregion
 
         #region 内部变量
@@ -152,23 +152,24 @@ namespace PunkHPX8_RT.Devices.Reservoir
         /// </summary>
         protected virtual void SubscribeValueAction()
         {
-            BeckhoffIoSubscribeUpdateVariable(CA_PUMP_RUNNING);
-            BeckhoffIoSubscribeUpdateVariable(AN_TOWER_HIGH);
-            BeckhoffIoSubscribeUpdateVariable(AN_TOWER_LOW);
-            BeckhoffIoSubscribeUpdateVariable(CA_LEVEL);
-            BeckhoffIoSubscribeUpdateVariable(CA_WATER_LEVEL);
-            BeckhoffIoSubscribeUpdateVariable(CA_PUMP_ENABLE);
-            BeckhoffIoSubscribeUpdateVariable(CA_PUMP_SPEED);
-            BeckhoffIoSubscribeUpdateVariable(CA_DI_REPLEN);
-            BeckhoffIoSubscribeUpdateVariable(RETURN_VALVE);
-            BeckhoffIoSubscribeUpdateVariable(RETURN_VALVE_OPENING);
-            BeckhoffIoSubscribeUpdateVariable(RETURN_VALVE_PERCENT);
+            IoSubscribeUpdateVariable(CA_PUMP_RUNNING);
+            IoSubscribeUpdateVariable(AN_TOWER_HIGH);
+            IoSubscribeUpdateVariable(AN_TOWER_LOW);
+            IoSubscribeUpdateVariable(CA_LEVEL);
+            IoSubscribeUpdateVariable(CA_WATER_LEVEL);
+            IoSubscribeUpdateVariable(CA_PUMP_ENABLE);
+            IoSubscribeUpdateVariable(CA_PUMP_SPEED);
+            IoSubscribeUpdateVariable(CA_DI_REPLEN);
+            IoSubscribeUpdateVariable(RETURN_VALVE);
+            IoSubscribeUpdateVariable(RETURN_VALVE_OPENING);
+            IoSubscribeUpdateVariable(RETURN_VALVE_PERCENT);
+            IoSubscribeUpdateVariable(SAMPLE_OUT);
         }
         /// <summary>
         /// 订阅IO变量
         /// </summary>
         /// <param name="variable"></param>
-        private void BeckhoffIoSubscribeUpdateVariable(string variable)
+        protected void IoSubscribeUpdateVariable(string variable)
         {
             _variableInitializeDic[variable] = false;
             IOModuleManager.Instance.SubscribeModuleVariable(Module, variable, UpdateVariableValue);

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

@@ -208,7 +208,7 @@ namespace PunkHPX8_RT.Modules.EFEM
 
         private bool Pick1()
         {
-            return _efem.Pick(_targetModule, _targetSlot, _hand);
+            return _efem.Pick(_targetModule, _targetSlot, _hand,Flip.NoFlip);
         }
 
         private bool Pick1Done()
@@ -229,7 +229,7 @@ namespace PunkHPX8_RT.Modules.EFEM
 
         private bool Pick2()
         {
-            return _efem.Pick(_targetModule, _targetSlot2, _hand2);
+            return _efem.Pick(_targetModule, _targetSlot2, _hand2, Flip.NoFlip);
         }
 
         private bool Pick2Done()

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

@@ -211,7 +211,7 @@ namespace PunkHPX8_RT.Modules.EFEM
 
         private bool Place1()
         {
-            return _efem.Place(_targetModule, _targetSlot, _hand);
+            return _efem.Place(_targetModule, _targetSlot, _hand, Flip.NoFlip);
         }
 
         private bool Place1Done()
@@ -246,7 +246,7 @@ namespace PunkHPX8_RT.Modules.EFEM
 
         private bool Place2()
         {
-            return _efem.Place(_targetModule, _targetSlot2, _hand2);
+            return _efem.Place(_targetModule, _targetSlot2, _hand2, Flip.NoFlip);
         }
 
         private bool Place2Done()

+ 1 - 1
PunkHPX8_RT/Modules/EFEM/EfemSwapRoutine.cs

@@ -59,7 +59,7 @@ namespace PunkHPX8_RT.Modules.EFEM
             _actionList.Clear();
             foreach (var item in (Queue<MoveItem>)objs[0])
             {
-                _actionList.Enqueue(new MoveItem(item.SourceModule, item.SourceSlot, item.DestinationModule, item.DestinationSlot, item.RobotHand));
+                _actionList.Enqueue(new MoveItem(item.SourceModule, item.SourceSlot, item.DestinationModule, item.DestinationSlot, item.RobotHand,item.RobotFlip));
             }
 
             var firtItem = _actionList.Peek();

+ 7 - 7
PunkHPX8_RT/Modules/ManualTransfer.cs

@@ -30,8 +30,8 @@ namespace PunkHPX8_RT.Modules
         SchedulerEfemRobot _efemRobot = (SchedulerEfemRobot)SchedulerManager.Instance.GetScheduler(ModuleName.EfemRobot);
 
         private Queue<MoveItem> _moveTaskQueue = new Queue<MoveItem>();
-        private MoveItem _move_item = new MoveItem(ModuleName.System, 0, ModuleName.System, 0, Hand.None);
-        private MoveItem _current_item = new MoveItem(ModuleName.System, 0, ModuleName.System, 0, Hand.None);
+        private MoveItem _move_item = new MoveItem(ModuleName.System, 0, ModuleName.System, 0, Hand.None, Flip.NoFlip);
+        private MoveItem _current_item = new MoveItem(ModuleName.System, 0, ModuleName.System, 0, Hand.None, Flip.NoFlip);
 
         private Guid _wafer_id;
         private R_TRIG _wafer_arrive_trig = new R_TRIG();
@@ -69,11 +69,11 @@ namespace PunkHPX8_RT.Modules
             
             if(ModuleHelper.IsEFEMRobot(_move_item.SourceModule))
             {
-                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, _move_item.DestinationModule, _move_item.DestinationSlot, (Hand)_move_item.SourceSlot));
+                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, _move_item.DestinationModule, _move_item.DestinationSlot, (Hand)_move_item.SourceSlot, _move_item.RobotFlip));
             }
             else if (ModuleHelper.IsEFEMRobot(_move_item.DestinationModule))
             {
-                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, _move_item.DestinationModule, _move_item.DestinationSlot, (Hand)_move_item.DestinationSlot));
+                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, _move_item.DestinationModule, _move_item.DestinationSlot, (Hand)_move_item.DestinationSlot,_move_item.RobotFlip));
             }
             else
             {
@@ -83,8 +83,8 @@ namespace PunkHPX8_RT.Modules
                     LOG.Write(eEvent.WARN_ROUTER, ModuleName.EfemRobot, "No free efem robot arm for wafer move.");
                     return RState.Failed;
                 }
-                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, ModuleName.EfemRobot, (int)hand, hand));
-                _moveTaskQueue.Enqueue(new MoveItem(ModuleName.EfemRobot, (int)hand, _move_item.DestinationModule, _move_item.DestinationSlot, hand));
+                _moveTaskQueue.Enqueue(new MoveItem(_move_item.SourceModule, _move_item.SourceSlot, ModuleName.EfemRobot, (int)hand, hand,_move_item.RobotFlip));
+                _moveTaskQueue.Enqueue(new MoveItem(ModuleName.EfemRobot, (int)hand, _move_item.DestinationModule, _move_item.DestinationSlot, hand,_move_item.RobotFlip));
             }
 
             _current_item = _moveTaskQueue.Dequeue();
@@ -299,7 +299,7 @@ namespace PunkHPX8_RT.Modules
             var wafer = WaferManager.Instance.GetWafer(mod, nSlot);
             if (!wafer.IsEmpty)
             {
-                _returnTaskQueue.Enqueue(new MoveItem(mod, nSlot, (ModuleName)wafer.OriginStation, wafer.OriginSlot, Hand.Blade1));
+                _returnTaskQueue.Enqueue(new MoveItem(mod, nSlot, (ModuleName)wafer.OriginStation, wafer.OriginSlot, Hand.Blade1, Flip.NoFlip));
             }
         }
     }

+ 4 - 4
PunkHPX8_RT/Modules/SRD/SRDAWCCycleRoutine.cs

@@ -227,7 +227,7 @@ namespace PunkHPX8_RT.Modules.SRD
         private bool PickFromSRD()
         {
             Queue<MoveItem> moveItems = new Queue<MoveItem>();
-            MoveItem moveItem = new MoveItem(_srdModuleName, 0, ModuleName.EfemRobot, 0, Hand.Blade1);
+            MoveItem moveItem = new MoveItem(_srdModuleName, 0, ModuleName.EfemRobot, 0, Hand.Blade1, Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             return _efemEntity.CheckToPostMessage<EfemEntity.STATE, EfemEntity.MSG>(eEvent.ERR_EFEM_COMMON_FAILED, "EFEM", (int)EfemEntity.MSG.Pick, moveItems);           
         }
@@ -238,7 +238,7 @@ namespace PunkHPX8_RT.Modules.SRD
         private bool PlacetoSRD()
         {
             Queue<MoveItem> moveItems = new Queue<MoveItem>();
-            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, _srdModuleName, 0, Hand.Blade1);
+            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, _srdModuleName, 0, Hand.Blade1,Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             return _efemEntity.CheckToPostMessage<EfemEntity.STATE, EfemEntity.MSG>(eEvent.ERR_EFEM_COMMON_FAILED, "EFEM", (int)EfemEntity.MSG.Place, moveItems);
         }
@@ -249,7 +249,7 @@ namespace PunkHPX8_RT.Modules.SRD
         private bool PickfromAligner()
         {
             Queue<MoveItem> moveItems = new Queue<MoveItem>();
-            MoveItem moveItem = new MoveItem(ModuleName.Aligner1, 0, ModuleName.EfemRobot, 0, Hand.Blade1);
+            MoveItem moveItem = new MoveItem(ModuleName.Aligner1, 0, ModuleName.EfemRobot, 0, Hand.Blade1, Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             return _efemEntity.CheckToPostMessage<EfemEntity.STATE, EfemEntity.MSG>(eEvent.ERR_EFEM_COMMON_FAILED, "EFEM", (int)EfemEntity.MSG.Pick, moveItems);
         }
@@ -260,7 +260,7 @@ namespace PunkHPX8_RT.Modules.SRD
         private bool PlacetoAligner()
         {
             Queue<MoveItem> moveItems = new Queue<MoveItem>();
-            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, ModuleName.Aligner1, 0, Hand.Blade1);
+            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, ModuleName.Aligner1, 0, Hand.Blade1,Flip.NoFlip);
             moveItems.Enqueue(moveItem);
             return _efemEntity.CheckToPostMessage<EfemEntity.STATE, EfemEntity.MSG>(eEvent.ERR_EFEM_COMMON_FAILED, "EFEM", (int)EfemEntity.MSG.Place, moveItems);
         }     

+ 2 - 2
PunkHPX8_RT/Schedulers/SchedulerSequenceManager.cs

@@ -99,7 +99,7 @@ namespace PunkHPX8_RT.Schedulers
             List<SchedulerSequence> schedulerSequences = new List<SchedulerSequence>();
             int index = 0;
             //DummyCassete至Aligner
-            MoveItem moveItem = new MoveItem((ModuleName)waferInfo.Station, waferInfo.Slot, ModuleName.Aligner1, 0, Aitex.Sorter.Common.Hand.Blade1);
+            MoveItem moveItem = new MoveItem((ModuleName)waferInfo.Station, waferInfo.Slot, ModuleName.Aligner1, 0, Aitex.Sorter.Common.Hand.Blade1,Aitex.Sorter.Common.Flip.NoFlip);
             SchedulerSequence secondEfemRobotSequence = CreateEfemRobotSequence(moveItem, null,sequenceRecipe.SubstrateSize, ref index);
             schedulerSequences.Add(secondEfemRobotSequence);
             //Aligner
@@ -107,7 +107,7 @@ namespace PunkHPX8_RT.Schedulers
 
             schedulerSequences.Add(alignerSequence);
             //Aligner至Puf
-            MoveItem alignerToPufMoveItem = new MoveItem(ModuleName.Aligner1, 0, pufModule, 1, Aitex.Sorter.Common.Hand.Blade1);
+            MoveItem alignerToPufMoveItem = new MoveItem(ModuleName.Aligner1, 0, pufModule, 1, Aitex.Sorter.Common.Hand.Blade1,Aitex.Sorter.Common.Flip.NoFlip);
             SchedulerSequence alignerToPufEfemRobotSequence = CreateEfemRobotSequence(alignerToPufMoveItem, null,sequenceRecipe.SubstrateSize, ref index);
             schedulerSequences.Add(alignerToPufEfemRobotSequence);
             SchedulerSequence pufSequence = CreatePufSequence(pufModule,sequenceRecipe, side,true, ref index);