示例#1
0
        public override void Reset()
        {
            foreach (var c in craneLoads)
            {
                c.UserDeletable = true;
                c.Deletable     = true;
                c.Dispose();
                c.Route?.Remove(c);
            }

            craneLoads.Clear();

            compartmentempty    = false;
            compartmentoccupied = false;

            base.Reset();
            Core.Environment.Invoke(() =>
            {
                Core.Environment.Invoke(() =>
                {
                    foreach (var pickConveyor in pickConveyors)
                    {
                        pickConveyor.RouteAvailable            = RouteStatuses.Blocked;
                        pickConveyor.ThisRouteStatus.Available = RouteStatuses.Blocked;
                    }
                });
            });

            CurrentHalfCycle = null;
            PalletCraneReset(new EventArgs());
        }
示例#2
0
 private void DropDropStation(PalletCraneHalfCycle halfCycle)
 {
     if (halfCycle.TuIdent != null)
     {
         Control.DropLoad(0, false, "DropDS", HBWMiniLoadJob.LHDs.LHD1);
         control.JobQueue.Last().UserData = halfCycle;
     }
     Control.StartCrane();
 }
示例#3
0
        public bool StartPalletCraneHalfCycle(PalletCraneHalfCycle halfCycle)
        {
            if (CurrentHalfCycle != null) //reject if the crane is running, there is a CurrentHalfCycle
            {
                return(false);
            }

            CurrentHalfCycle = halfCycle;
            if (halfCycle.Cycle == PalletCraneCycle.PickPS) //This will pick whatever is at the pick station
            {
                Control.Goto(halfCycle.Height, halfCycle.Length, "GotoPS");
                Control.JobQueue[0].UserData = halfCycle;
                Control.StartCrane();
                return(true);
            }

            if (halfCycle.Cycle == PalletCraneCycle.DropDS)
            {
                Control.Goto(halfCycle.Height, halfCycle.Length, "GotoDS");
                Control.JobQueue[0].UserData = halfCycle;
                Control.StartCrane();
                return(true);
            }

            if (halfCycle.Cycle == PalletCraneCycle.DropRack)
            {
                Control.Goto(halfCycle.Height, halfCycle.Length, "GotoRack");
                Control.JobQueue[0].UserData = halfCycle;
                Control.DropLoad(DepthTime(halfCycle.Depth), true, "DropRack", halfCycle.Lhd == 1 ? HBWMiniLoadJob.LHDs.LHD1 : HBWMiniLoadJob.LHDs.LHD2);
                Control.JobQueue[1].UserData = halfCycle;
                Control.StartCrane();
                return(true);
            }

            if (halfCycle.Cycle == PalletCraneCycle.PickRack)
            {
                float depth = (AisleWidth / 2) + ((RackWidth / (DepthsInRack + 1)) * halfCycle.Depth);
                holdingConveyor.LocalPosition = new Vector3(halfCycle.Length + (LHDWidth / 2), halfCycle.Height, halfCycle.RackSide == Side.Left ? depth : -depth);

                Control.Goto(halfCycle.Height, halfCycle.Length, "GotoRack");
                Control.JobQueue[0].UserData = halfCycle;

                var load = CreateLoad(halfCycle.PalletData);

                Control.PickLoad(DepthTime(halfCycle.Depth), new List <Load>()
                {
                    load
                }, true, "PickRack", halfCycle.Lhd == 1 ? HBWMiniLoadJob.LHDs.LHD1 : HBWMiniLoadJob.LHDs.LHD2);
                Control.JobQueue[1].UserData = halfCycle;
                Control.StartCrane();
                return(true);
            }

            return(false);
        }
示例#4
0
 private void PalletCraneTaskComplete(PalletCraneTaskCompleteEventArgs eventArgs)
 {
     CurrentHalfCycle = null;
     OnPalletCraneTaskComplete?.Invoke(this, eventArgs);
 }
示例#5
0
 public PalletCraneTaskCompleteEventArgs(PalletCraneHalfCycle task)
 {
     PalletCraneTask = task;
 }