コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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);
                }
            }
        }