Exemplo n.º 1
0
        public static void SetTimingStages(TimingPlanData timingPlan)
        {
            List <TimingStageData> TimingStages = new List <TimingStageData>();
            TimingStageData        newTimingStage;
            byte StageNum = 1;
            //int PhaseSequenceIndex;

            //List<byte[]> PhaseSequence = new List<byte[]>(2);
            List <byte> PhaseSequence1 = new List <byte>();
            List <byte> PhaseSequence2 = new List <byte>();


            if (timingPlan.TimingRings[0] != null)
            {
                //foreach (PhaseData Phase in Ring.Phases)
                //foreach (PhaseData Phase in Ring.PhaseSequence)
                foreach (PhaseTimingData Phase in timingPlan.TimingRings[0].Phases)
                {
                    //Ring.PhaseSequence.Add(Phase.Id);
                    PhaseSequence1.Add(Phase.Id);
                }
            }


            if (timingPlan.TimingRings[1] != null)
            {
                //foreach (PhaseData Phase in Ring.Phases)
                //foreach (PhaseData Phase in Ring.PhaseSequence)
                foreach (PhaseTimingData Phase in timingPlan.TimingRings[1].Phases)
                {
                    //Ring.PhaseSequence.Add(Phase.Id);
                    PhaseSequence2.Add(Phase.Id);
                }
            }

            int MaxPhasesInRing = Math.Max(PhaseSequence1.Count, PhaseSequence2.Count);

            int[] PhaseTimes   = new int[4];
            int   PhaseCounter = 0;

            for (int index = 0; index < MaxPhasesInRing; index++)
            {
                if (StageNum > 1)
                {
                    foreach (byte PhaseNum in TimingStages[StageNum - 2].IncludedPhases)
                    {
                        //PhaseTimes[PhaseCounter] = timingPlan.TimingRings[1].Phases[PhaseNum].GreenMax;
                        PhaseCounter++;
                    }
                }
                newTimingStage = new TimingStageData(StageNum);
                newTimingStage.IncludedPhases.Add(PhaseSequence1[index]);
                newTimingStage.IncludedPhases.Add(PhaseSequence2[index]);
                TimingStages.Add(newTimingStage);
                StageNum++;
            }
        }
Exemplo n.º 2
0
        public static void SetPhaseTimes(TimingPlanData timingPlan)
        {
            bool[] IsPhaseInPreviousStage = new bool[9];

            timingPlan.TimingRings[0].Phases.Clear();
            timingPlan.TimingRings[1].Phases.Clear();
            timingPlan.TimingRings[0].PhaseSequence.Clear();
            timingPlan.TimingRings[1].PhaseSequence.Clear();

            PhaseTimingData newPhase;

            newPhase = new PhaseTimingData();
            timingPlan.TimingRings[0].Phases.Add(newPhase);  //phase 0 is dummy phase
            newPhase = new PhaseTimingData();
            timingPlan.TimingRings[1].Phases.Add(newPhase);

            for (int StageNum = 1; StageNum < timingPlan.TimingStages.Count; StageNum++)
            {
                foreach (byte phaseNum in timingPlan.TimingStages[StageNum].IncludedPhases)
                {
                    if (phaseNum < 5)
                    {
                        bool PhaseAlreadyInTimingRing = timingPlan.TimingRings[0].Phases.Exists(Phase => Phase.Id.Equals(phaseNum));
                        //byte value = Array.Find(timingPlan.TimingRings[0].Phases, element => element.Equals(phaseNum));  //see if phase # already exists in ring

                        if (PhaseAlreadyInTimingRing == false)
                        {
                            timingPlan.TimingRings[0].PhaseSequence.Add(phaseNum);
                        }

                        if (IsPhaseInPreviousStage[phaseNum] == false)
                        {
                            newPhase = new PhaseTimingData(phaseNum, timingPlan.TimingStages[StageNum].GreenMin, timingPlan.TimingStages[StageNum].GreenMax, timingPlan.TimingStages[StageNum].YellowTime, timingPlan.TimingStages[StageNum].AllRedTime);

                            timingPlan.TimingRings[0].Phases.Add(newPhase);
                            IsPhaseInPreviousStage[phaseNum] = true;
                        }
                        else
                        {
                            int PhaseIndex = timingPlan.TimingRings[0].Phases.Count - 1;

                            //for overlapping phase, also include yellow+all-red time from previous timing stage in green time calc
                            float AddedTime = timingPlan.TimingStages[StageNum - 1].YellowTime + timingPlan.TimingStages[StageNum - 1].AllRedTime + timingPlan.TimingStages[StageNum].GreenMax;
                            timingPlan.TimingRings[0].Phases[PhaseIndex].GreenMax += AddedTime;

                            IsPhaseInPreviousStage[phaseNum] = false;
                        }
                    }
                    else
                    {
                        bool PhaseAlreadyInTimingRing = timingPlan.TimingRings[1].Phases.Exists(Phase => Phase.Id.Equals(phaseNum));
                        //byte value = Array.Find(timingPlan.TimingRings[1].Phases, element => element.Equals(phaseNum));  //see if phase # already exists in ring

                        if (PhaseAlreadyInTimingRing == false)
                        {
                            timingPlan.TimingRings[1].PhaseSequence.Add(phaseNum);
                        }

                        if (IsPhaseInPreviousStage[phaseNum] == false)
                        {
                            newPhase = new PhaseTimingData(phaseNum, timingPlan.TimingStages[StageNum].GreenMin, timingPlan.TimingStages[StageNum].GreenMax, timingPlan.TimingStages[StageNum].YellowTime, timingPlan.TimingStages[StageNum].AllRedTime);

                            timingPlan.TimingRings[1].Phases.Add(newPhase);
                            IsPhaseInPreviousStage[phaseNum] = true;
                        }
                        else
                        {
                            int PhaseIndex = timingPlan.TimingRings[1].Phases.Count - 1;

                            //for overlapping phase, also include yellow+all-red time from previous timing stage in green time calc
                            float AddedTime = timingPlan.TimingStages[StageNum - 1].YellowTime + timingPlan.TimingStages[StageNum - 1].AllRedTime + timingPlan.TimingStages[StageNum].GreenMax;
                            timingPlan.TimingRings[1].Phases[PhaseIndex].GreenMax += AddedTime;

                            IsPhaseInPreviousStage[phaseNum] = false;
                        }
                    }
                }
            }
        }