void MergeDivertConveyor_OnDivertPoint(MergeDivertConveyor sender, Load load) { //Test to randomly route cases on a divert point List <Direction> directions = new List <Direction>(); if (sender.LeftMode == MergeDivertConveyor.Modes.Divert) { directions.Add(Direction.Left); } if (sender.RightMode == MergeDivertConveyor.Modes.Divert) { directions.Add(Direction.Right); } if (sender.StraightMode == MergeDivertConveyor.Modes.Divert) { directions.Add(Direction.Straight); } int route = random.Next(directions.Count); if (directions[route] == Direction.Straight) { sender.RouteLoadStraight(load); } else if (directions[route] == Direction.Left) { sender.RouteLoadLeft(load); } else if (directions[route] == Direction.Right) { sender.RouteLoadRight(load); } }
public MHEControl_MergeDivert(MergeDivertSimulationInfo info, MergeDivertConveyor mergeDivert) { mergeDivertConveyor = mergeDivert; mergeDivertSimulationInfo = info; Info = info; // set this to save properties mergeDivertConveyor.divertArrival = divertArrival; mergeDivertConveyor.loadDeleted = loadDeleted; mergeDivertConveyor.releasedStraight = releasedStraight; mergeDivertConveyor.releasedLeft = releasedLeft; mergeDivertConveyor.releasedRight = releasedRight; }
public MHEControl_MergeDivert(MergeDivertATCInfo info, MergeDivertConveyor mergeDivert) { mergeDivertConveyor = mergeDivert; mergeDivertDatcomInfo = info; Info = info; // set this to save properties mergeDivertConveyor.divertArrival = divertArrival; mergeDivertConveyor.loadDeleted = loadDeleted; mergeDivertConveyor.releasedStraight = releasedStraight; mergeDivertConveyor.releasedLeft = releasedLeft; mergeDivertConveyor.releasedRight = releasedRight; casePLC = mergeDivertConveyor.Controller as MHEController_Case; //Anything with setup code in the "set" of a property except setting the value will need to be called //explicitly so that the "set" code will execute when loading from a saved configuration LeftRoutingCode = info.leftRoutingCode; RightRoutingCode = info.rightRoutingCode; StraightRoutingCode = info.straightRoutingCode; }
private void StartTransportTelegramReceived(string[] telegramFields) { //Look for the load somewhere in the model, if the load is found then change it's status, if not create it at the source location //ATCCaseLoad caseLoad = (ATCCaseLoad)Case_Load.GetCaseFromIdentification(telegramFields.GetFieldValue(TelegramFields.tuIdent)); IATCCaseLoadType caseLoad = (IATCCaseLoadType)Case_Load.GetCaseFromIdentification(telegramFields.GetFieldValue(TelegramFields.tuIdent)); if (caseLoad != null) //The load has been found so some attributes need to be changed (Cannot change the dimensions of the load however) { caseLoad.TUType = telegramFields.GetFieldValue(TelegramFields.tuType); caseLoad.Source = telegramFields.GetFieldValue(TelegramFields.source); caseLoad.Destination = telegramFields.GetFieldValue(TelegramFields.destination); caseLoad.PresetStateCode = telegramFields.GetFieldValue(TelegramFields.presetStateCode); caseLoad.Color = LoadColor(telegramFields.GetFieldValue(TelegramFields.color)); float weight; float.TryParse(telegramFields.GetFieldValue(TelegramFields.weight), out weight); caseLoad.CaseWeight = weight / 1000; //Deal with additional project specific fields foreach (string field in ProjectFields) { string fieldValue = telegramFields.GetFieldValue(field); if (fieldValue != null) { if (caseLoad.ProjectFields.ContainsKey(field)) { caseLoad.ProjectFields[field] = fieldValue; } else { caseLoad.ProjectFields.Add(field, fieldValue); } } } //The load may be at a request location and the load will need to be released if (caseLoad.LoadWaitingForWCS && caseLoad.Stopped) { //Load may be waiting on a transfer so call the mergeDivert if (caseLoad.Route.Parent.Parent is MergeDivertConveyor) { MergeDivertConveyor mergeDivert = caseLoad.Route.Parent.Parent as MergeDivertConveyor; //if (mergeDivert.divertArrival != null) //{ // mergeDivert.divertArrival(caseLoad); //} mergeDivert.ControlDivertPoint((Load)caseLoad); } caseLoad.LoadWaitingForWCS = false; caseLoad.ReleaseLoad(); } } else //The load has not been found but should one be created? Normally created through the Emulation Control Telegrams { if (Core.Assemblies.Assembly.Items.ContainsKey(telegramFields.GetFieldValue(TelegramFields.source)) && Core.Assemblies.Assembly.Items[telegramFields.GetFieldValue(TelegramFields.source)] is StraightConveyor) { caseLoad = CreateCaseLoad(TelegramTypes.StartTransportTelegram, telegramFields); StraightConveyor sourceConv = Core.Assemblies.Assembly.Items[telegramFields.GetFieldValue(TelegramFields.source)] as StraightConveyor; caseLoad.SetYaw(sourceConv.Width, sourceConv.CaseOrientation); float position = 0; if (caseLoad.Yaw == 0) { position = position + (caseLoad.Length / 2); } else { position = position + (caseLoad.Width / 2); } sourceConv.TransportSection.Route.Add((Load)caseLoad, position); } else { Log.Write(string.Format("ATC Error {0}: Cannot create load at location from StartTransportTelegram, location {1} does not exist, message ignored", Name, telegramFields.GetFieldValue(TelegramFields.source)), Color.Red); } } }