예제 #1
0
 public override void AlwaysPushing(UnitloadList currentListIn)
 {
     foreach (Unitload unit in currentListIn)
     {
         Processor ProcessorToRelease = (Processor)unit.Location;
         if (unit.Station.InQueue.IsAvailable == false)
         {
             this.Manager.JobManager.BlockedUnitloads.Add(unit);
             ProcessorToRelease.ChangeBlocked(this.Manager.Time, true);
         }    //block
         else
         {
             //double transferTime = this.Manager.LayoutManager.Layout.DistanceMatrix[(Station)ProcessorToRelease.Parent, unit.Station];
             double transferTime = 1;
             unit.Station.InQueue.Reserved++;
             unit.InTransfer = true;
             this.Manager.LayoutManager.Layout.UnitloadsOnMover.Add(unit);
             ProcessorToRelease.Release(this.Manager.Time, unit);
             //operation and processor will be selected when the unitload is in inqueue of its station.
             this.Manager.TriggerStationControllerAlgorithm((Station)ProcessorToRelease.Parent);
             this.Manager.EventCalendar.ScheduleEnterQueueEvent(this.Manager.Time + transferTime, unit.Station.InQueue, unit);
         }    //go
     }
     currentListIn.Clear();
 }
예제 #2
0
        public void Execute()
        {
            UnitloadList unitloads = this.Manager.JobManager.UnitloadsToDecide;

            this.PreOperation(unitloads);

            foreach (Unitload unitload in unitloads)
            {
                OperationList operations     = new OperationList();
                StationList   processCells   = new StationList();
                Station       currentStation = unitload.Station;
                this.SelectOperation(unitload, operations, processCells); //IE486f18
            }
            unitloads.Clear();
            this.PostOperation();
        }