Пример #1
0
        /// <summary>
        /// Can be called from a controller of project script
        /// </summary>
        /// <param name="route"></param>
        public void RouteLoad(DivertRoute route)
        {
            SelectedRoute = route;

            //Check that the route is available before releasing the load, can switch route if default route is opposite and is available
            if (RouteBlockedBehaviour == RouteBlocked.Route_To_Default && !LoadisWaiting)
            {
                if (route == DivertRoute.Divert && divertSection.NextRouteStatus.Available != RouteStatuses.Available && DefaultRoute == DivertRoute.Straight && NextRouteStatus.Available == RouteStatuses.Available)
                {
                    SelectedRoute = DivertRoute.Straight;
                }
                else if (route == DivertRoute.Straight && NextRouteStatus.Available != RouteStatuses.Available && DefaultRoute == DivertRoute.Divert && divertSection.NextRouteStatus.Available == RouteStatuses.Available)
                {
                    SelectedRoute = DivertRoute.Divert;
                }
                else if (NextRouteStatus.Available != RouteStatuses.Available && divertSection.NextRouteStatus.Available != RouteStatuses.Available) //Neither route is available
                {
                    LoadisWaiting = true;                                                                                                            //The load cannot be routed so need to wait for route available changes to take effect
                    return;
                }
            }
            else if (RouteBlockedBehaviour == RouteBlocked.Wait_Until_Route_Available)
            {
                SelectedRoute = route;
                if ((route == DivertRoute.Divert && divertSection.NextRouteStatus.Available != RouteStatuses.Available) || (route == DivertRoute.Straight && NextRouteStatus.Available != RouteStatuses.Available))
                {
                    LoadisWaiting = true;
                    return;
                }
            }

            LoadisWaiting             = false;
            ThisRouteStatus.Available = RouteStatuses.Available; //This will release the load
            TransportSection.Route.Motor.Start();
            LoadInDivert = true;

            if (NextRouteStatus != null && route == DivertRoute.Straight && NextRouteStatus.Available == RouteStatuses.Available)
            {
                if (SelectedRoute == DivertRoute.Straight && StraigthReleaseDelay > 0)
                {
                    ReleaseDelayTimer.Timeout = StraigthReleaseDelay;
                    ReleaseDelayTimer.Reset();
                    ReleaseDelayTimer.Start();
                }
            }
            else if (divertSection.NextRouteStatus != null && route == DivertRoute.Divert && divertSection.NextRouteStatus.Available == RouteStatuses.Available)
            {
                if (SelectedRoute == DivertRoute.Divert && DivertReleaseDelay > 0)
                {
                    ReleaseDelayTimer.Timeout = DivertReleaseDelay;
                    ReleaseDelayTimer.Reset();
                    ReleaseDelayTimer.Start();
                }
            }
        }
Пример #2
0
 public void RouteLoad(DivertRoute direction, Load load)
 {
     if (direction == DivertRoute.Divert &&
         NextDivertRouteStatus.Available == RouteStatuses.Available &&
         divertSection.RouteAvailable == RouteStatuses.Available &&
         !apDivert.Active && divertSection.TransportSection.Route.Loads.Count <= 1)
     {
         RouteDivert(load);
     }
     else
     {
         RouteStraight(load);
     }
 }
Пример #3
0
        //Load has arrived at divert point
        void divertConveyor_OnDivertPointArrivedControl(object sender, BeltSorterDivertArgs e)
        {
            Case_Load caseload = e._load as Case_Load;

            if (casePLC.DivertSet(caseload.SSCCBarcode, DivertRoutes))
            {
                selectedRoute = DivertRoute.Divert;
                divertConveyor.RouteLoad(DivertRoute.Divert, e._load);
            }
            else
            {
                selectedRoute = DivertRoute.Straight;
                divertConveyor.RouteLoad(DivertRoute.Straight, e._load);
            }
        }
Пример #4
0
        //Load has arrived at divert point
        void divertConveyor_OnDivertPointArrivedControl(object sender, AngleDivertArgs e)
        {
            Case_Load caseload = e._load as Case_Load;

            if (casePLC.DivertSet(caseload.SSCCBarcode, DivertRoutes))
            {
                selectedRoute = DivertRoute.Divert;
                divertConveyor.RouteLoad(DivertRoute.Divert);
            }
            else if (casePLC.DivertSet(caseload.SSCCBarcode, StraightRoutes))
            {
                selectedRoute = DivertRoute.Straight;
                divertConveyor.RouteLoad(DivertRoute.Straight);
            }
            else
            {
                selectedRoute = divertConveyor.DefaultRoute;
                divertConveyor.RouteLoad(divertConveyor.DefaultRoute);
            }
        }
Пример #5
0
        void angledDivertConveyor_OnDivertArrivalController(object sender, AngleDivertArgs e)
        {
            List <DivertRoute> validRoutes = new List <DivertRoute>();
            List <DivertRoute> directions  = new List <DivertRoute>();

            directions.Add(DivertRoute.Straight);
            directions.Add(DivertRoute.Divert);

            DivertRoute divertDirection = DivertRoute.None;

            if (Distribution == RouteDistribution.Random)
            {
                divertDirection = directions[random.Next(0, 2)];
            }
            else if (Distribution == RouteDistribution.RoundRobin)
            {
                if (lastRouting != DivertRoute.Straight)
                {
                    divertDirection = DivertRoute.Straight;
                }
                else
                {
                    divertDirection = DivertRoute.Divert;
                }
            }
            lastRouting = divertDirection;

            if (divertDirection != DivertRoute.None)
            {
                validRoutes.Add(divertDirection); //A list of loads, sometimes either route will be valid and the divert

                //can decide which is the best.
                //angledDivertConveyor.RouteLoad(e._load, validRoutes);
                angledDivertConveyor.RouteLoad(divertDirection);
            }
        }
Пример #6
0
        private void RouteWaitingLoad()
        {
            if (PreviousLoadWaitingStatus != null && PreviousLoadWaitingStatus.LoadWaiting && !LoadInDivert)
            {
                if (ControlType == ControlTypes.Local)
                {
                    if (LocalControlStratergy != AngledDivertLocalControl.None)
                    {
                        SelectedRoute = SelectRoute();
                    }
                    else
                    {
                        SelectedRoute = DefaultRoute;
                    }

                    if (SelectedRoute != DivertRoute.None)
                    {
                        RouteLoad(SelectedRoute);
                    }
                }
                else if (ControlType == ControlTypes.Controller)
                {
                    if (OnDivertPointArrivedControl != null) //Controller handles load arrival at entry point the controller will call RouteLoad
                    {
                        OnDivertPointArrivedControl(this, new AngleDivertArgs(this, PreviousLoadWaitingStatus.WaitingLoad, DivertRoute.None));
                    }
                }
                else if (ControlType == ControlTypes.Project_Script)
                {
                    if (OnDivertPointArrivedRoutingScript != null) //Routing script will call RouteLoad
                    {
                        OnDivertPointArrivedRoutingScript(this, new AngleDivertArgs(this, PreviousLoadWaitingStatus.WaitingLoad, DivertRoute.None));
                    }
                }
            }
        }
Пример #7
0
 public BeltSorterDivertArgs(BeltSorterDivert sender, Load load, DivertRoute direction)
 {
     _sender    = sender;
     _load      = load;
     _direction = direction;
 }
Пример #8
0
 public AngleDivertArgs(AngledDivert sender, Load load, DivertRoute direction)
 {
     _sender    = sender;
     _load      = load;
     _direction = direction;
 }