/// <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(); } } }
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); } }
//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); } }
//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); } }
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); } }
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)); } } } }
public BeltSorterDivertArgs(BeltSorterDivert sender, Load load, DivertRoute direction) { _sender = sender; _load = load; _direction = direction; }
public AngleDivertArgs(AngledDivert sender, Load load, DivertRoute direction) { _sender = sender; _load = load; _direction = direction; }