Ejemplo n.º 1
0
#pragma warning restore 0649

        public override void CollectCCOLElements(ControllerModel c)
        {
            _myElements      = new List <CCOLElement>();
            _myBitmapOutputs = new List <CCOLIOElement>();

            foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Uitgaand && x.Detectoren.Any()))
            {
                CCOLElementCollector.AddKoppelSignaal(1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                foreach (var d in pk.Detectoren)
                {
                    CCOLElementCollector.AddKoppelSignaal(1, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.Uit);
                }
            }
            foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
            {
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelmeet}{pk.GekoppeldeSignaalGroep}", pk.Meetperiode,
                                                                                    CCOLElementTimeTypeEnum.TE_type, _tpelmeet, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelmaxhiaat}{pk.GekoppeldeSignaalGroep}", pk.MaximaalHiaat,
                                                                                    CCOLElementTimeTypeEnum.TE_type, _tpelmaxhiaat, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelgrens}{pk.GekoppeldeSignaalGroep}", pk.MinimaalAantalVoertuigen,
                                                                                    CCOLElementTimeTypeEnum.TE_type, _prmpelgrens, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mpelvtg}{pk.GekoppeldeSignaalGroep}", _mpelvtg, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpelin}{pk.GekoppeldeSignaalGroep}", _hpelin, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mpelin}{pk.GekoppeldeSignaalGroep}", _mpelin, pk.GekoppeldeSignaalGroep));
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_uspelin}{pk.GekoppeldeSignaalGroep}", _uspelin, pk.GekoppeldeSignaalGroep));

                if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                {
                    _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelrw}{pk.GekoppeldeSignaalGroep}", pk.TijdRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrw, pk.GekoppeldeSignaalGroep));
                    _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelstartrw}{pk.GekoppeldeSignaalGroep}", pk.TijdTotRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelstartrw, pk.GekoppeldeSignaalGroep));
                    if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                    {
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelrw}{pk.GekoppeldeSignaalGroep}", pk.ToepassenRetourWachtgroen == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelrw, pk.GekoppeldeSignaalGroep));
                    }
                    if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Altijd && pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                    {
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelmk}{pk.GekoppeldeSignaalGroep}", pk.ToepassenMeetkriterium == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelmk, pk.GekoppeldeSignaalGroep));
                    }
                }

                if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                {
                    _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpela}{pk.GekoppeldeSignaalGroep}", pk.TijdTotAanvraag, CCOLElementTimeTypeEnum.TE_type, _tpela, pk.GekoppeldeSignaalGroep));
                    if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                    {
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpela}{pk.GekoppeldeSignaalGroep}", pk.ToepassenAanvraag == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpela, pk.GekoppeldeSignaalGroep));
                    }
                }
                _myBitmapOutputs.Add(new CCOLIOElement(pk.InkomendVerklikking, $"{_uspf}{_uspelin}{pk.GekoppeldeSignaalGroep}"));

                if (pk.AutoIngangsSignalen)
                {
                    CCOLElementCollector.AddKoppelSignaal(1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                    foreach (var d in pk.Detectoren)
                    {
                        CCOLElementCollector.AddKoppelSignaal(1, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                    }
                }
                else
                {
                    CCOLElementCollector.AddKoppelSignaal(1, pk.IngangsSignaalFG, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                    foreach (var d in pk.Detectoren)
                    {
                        CCOLElementCollector.AddKoppelSignaal(1, d.KoppelSignaal, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                    }
                }
            }
        }
        public override void CollectCCOLElements(ControllerModel c)
        {
            _myElements      = new List <CCOLElement>();
            _myBitmapOutputs = new List <CCOLIOElement>();

            foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen)
            {
                if (!pk.Detectoren.Any() && (pk.Type == PelotonKoppelingTypeEnum.DenHaag || pk.Richting == PelotonKoppelingRichtingEnum.Uitgaand))
                {
                    continue;
                }
                var sgWithD = new Dictionary <FaseCyclusModel, List <string> >();
                foreach (var d in pk.Detectoren)
                {
                    var sg = c.Fasen.FirstOrDefault(x => x.Detectoren.Any(x2 => x2.Naam == d.DetectorNaam));
                    if (sg != null)
                    {
                        if (!sgWithD.ContainsKey(sg))
                        {
                            sgWithD.Add(sg, new List <string>());
                        }
                        sgWithD[sg].Add(d.DetectorNaam);
                    }
                }
                if (!pk.IsIntern)
                {
                    var signals = ((IHaveKoppelSignalen)pk).UpdateKoppelSignalen();
                    foreach (var s in signals)
                    {
                        CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, s.Count, s.Name, s.Richting);
                    }
                }
                switch (pk.Type)
                {
                case PelotonKoppelingTypeEnum.DenHaag:
                    switch (pk.Richting)
                    {
                    case PelotonKoppelingRichtingEnum.Uitgaand:
                        // schakelaar voor elke fase met detectie die mee doet aan de koppeling
                        if (pk.IsIntern)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpku}{pk.KoppelingNaam}", _hpku, pk.KoppelingNaam));
                        }
                        foreach (var sg in sgWithD)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpku}{pk.KoppelingNaam}{sg.Key.Naam}", 1, CCOLElementTimeTypeEnum.SCH_type, _schpku, pk.KoppelingNaam, sg.Key.Naam));
                            foreach (var d in sg.Value)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpkud}{d}{pk.KoppelingNaam}", _hpkud, d, pk.KoppelingNaam));
                            }
                        }
                        break;

                    case PelotonKoppelingRichtingEnum.Inkomend:
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_uspf}{_uspelin}{pk.KoppelingNaam}", _uspelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myBitmapOutputs.Add(new CCOLIOElement(pk.InkomendVerklikking, $"{_uspf}{_uspelin}{pk.KoppelingNaam}"));

                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelmeet}{pk.KoppelingNaam}", pk.Meetperiode,
                                                                                            CCOLElementTimeTypeEnum.TE_type, _tpelmeet, pk.KoppelingNaam, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelmaxhiaat}{pk.KoppelingNaam}", pk.MaximaalHiaat,
                                                                                            CCOLElementTimeTypeEnum.TE_type, _tpelmaxhiaat, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelgrens}{pk.KoppelingNaam}", pk.MinimaalAantalVoertuigen,
                                                                                            CCOLElementTimeTypeEnum.None, _prmpelgrens, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mpelvtg}{pk.KoppelingNaam}", _mpelvtg, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpelin}{pk.KoppelingNaam}", _hpelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpeltegenh}{pk.KoppelingNaam}", _hpeltegenh, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mpelin}{pk.KoppelingNaam}", _mpelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_uspelin}{pk.KoppelingNaam}", _uspelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));

                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelrw}{pk.KoppelingNaam}", pk.TijdRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrw, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelrwmax}{pk.KoppelingNaam}", pk.MaxTijdToepassenRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrwmax, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelstartrw}{pk.KoppelingNaam}", pk.TijdTotRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelstartrw, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelrw}{pk.KoppelingNaam}", pk.ToepassenRetourWachtgroen == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelrw, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            }
                            if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Altijd && pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelmk}{pk.KoppelingNaam}", pk.ToepassenMeetkriterium == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelmk, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            }
                        }

                        if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpela}{pk.KoppelingNaam}", pk.TijdTotAanvraag, CCOLElementTimeTypeEnum.TE_type, _tpela, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpela}{pk.KoppelingNaam}", pk.ToepassenAanvraag == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpela, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            }
                        }
                        break;
                    }
                    break;

                case PelotonKoppelingTypeEnum.RHDHV:
                    switch (pk.Richting)
                    {
                    case PelotonKoppelingRichtingEnum.Uitgaand:
                        // schakelaar voor elke fase met detectie die mee doet aan de koppeling
                        if (pk.IsIntern)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpku}{pk.KoppelingNaam}", _hpku, pk.KoppelingNaam));
                        }
                        foreach (var sg in sgWithD)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpku}{pk.KoppelingNaam}{sg.Key.Naam}", 1, CCOLElementTimeTypeEnum.SCH_type, _schpku, pk.KoppelingNaam, sg.Key.Naam));
                        }
                        break;

                    case PelotonKoppelingRichtingEnum.Inkomend:
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_uspelin}{pk.KoppelingNaam}", _uspelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myBitmapOutputs.Add(new CCOLIOElement(pk.InkomendVerklikking, $"{_uspf}{_uspelin}{pk.KoppelingNaam}"));

                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpelin}{pk.KoppelingNaam}", _hpelin, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpeltegenh}{pk.KoppelingNaam}", _hpeltegenh, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelgrens}{pk.KoppelingNaam}", pk.MinimaalAantalVoertuigen,
                                                                                            CCOLElementTimeTypeEnum.TS_type, _prmpelgrens, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelverschuif}{pk.KoppelingNaam}", pk.Verschuiving,
                                                                                            CCOLElementTimeTypeEnum.TS_type, _prmpelverschuif, pk.KoppelingNaam, pk.KoppelingNaam, c.Data.Naam, pk.KoppelingNaam));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelnl}{pk.KoppelingNaam}", pk.TijdRetourWachtgroen, CCOLElementTimeTypeEnum.TS_type, _tpelnl, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit && pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpela}{pk.KoppelingNaam}", pk.ToepassenAanvraag == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpela, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                        }
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelrwmax}{pk.KoppelingNaam}", pk.MaxTijdToepassenRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrwmax, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelrw}{pk.KoppelingNaam}", pk.ToepassenRetourWachtgroen == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelrw, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            }
                            if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Altijd && pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                            {
                                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpelmk}{pk.KoppelingNaam}", pk.ToepassenMeetkriterium == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpelmk, pk.KoppelingNaam, pk.GekoppeldeSignaalGroep));
                            }
                        }
                        break;
                    }
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        public override string GetCode(ControllerModel c, CCOLCodeTypeEnum type, string ts)
        {
            var sb = new StringBuilder();

            switch (type)
            {
            case CCOLCodeTypeEnum.RegCPreApplication:
                var f = false;
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Uitgaand && x.Detectoren.Any()))
                {
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Uitgaand && x.Detectoren.Any()))
                    {
                        if (f)
                        {
                            sb.AppendLine();
                        }
                        sb.AppendLine($"{ts}/* Uitgaande peloton koppeling naar {pk.KruisingNaam} */");
                        var ipl = CCOLElementCollector.GetKoppelSignaalCount($"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                        sb.AppendLine($"{ts}IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = SG[{_fcpf}{pk.GekoppeldeSignaalGroep}] || FG[{_fcpf}{pk.GekoppeldeSignaalGroep}];");
                        foreach (var d in pk.Detectoren)
                        {
                            ipl = CCOLElementCollector.GetKoppelSignaalCount($"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.Uit);
                            sb.AppendLine($"{ts}IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = G[{_fcpf}{pk.GekoppeldeSignaalGroep}] && ED[{_dpf}{d.DetectorNaam}];");
                        }
                        f = true;
                    }
                }
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                {
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                    {
                        if (f)
                        {
                            sb.AppendLine();
                        }
                        sb.AppendLine($"{ts}/* Inkomende peloton koppeling van {pk.KruisingNaam} */");
                        var isg = CCOLElementCollector.GetKoppelSignaalCount($"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                        sb.Append($"{ts}IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] = proc_pel_in_V1({_hpf}{pk.PTPKruising}{_hiks}{isg:00}, {_tpf}{_tpelmeet}{pk.GekoppeldeSignaalGroep}, {_tpf}{_tpelmaxhiaat}{pk.GekoppeldeSignaalGroep}, {_prmpf}{_prmpelgrens}{pk.GekoppeldeSignaalGroep}, {_mpf}{_mpelvtg}{pk.GekoppeldeSignaalGroep}, {_mpf}{_mpelin}{pk.GekoppeldeSignaalGroep}, ");
                        foreach (var d in pk.Detectoren)
                        {
                            var id = CCOLElementCollector.GetKoppelSignaalCount($"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                            sb.Append($"{_hpf}{pk.PTPKruising}{_hiks}{id:00}, ");
                        }
                        sb.AppendLine("END);");
                        f = true;
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCMeetkriterium:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                {
                    var ff = false;
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                    {
                        if (ff)
                        {
                            sb.AppendLine();
                        }
                        sb.AppendLine($"{ts}/* Inkomende peloton koppeling van {pk.KruisingNaam} */");
                        if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* timer resetten om aanvraag te zetten */");
                            sb.AppendLine($"{ts}RT[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}] = IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}];");
                        }
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* timer resetten om gebied open te houden */");
                            sb.AppendLine($"{ts}RT[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}] = IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}];");
                            sb.AppendLine();
                        }
                        if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* zet aanvraag als timer is afgelopen */");
                            sb.Append($"{ts}if (ET[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}]");
                            if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.Append($" && SCH[{_schpf}{_schpela}{pk.GekoppeldeSignaalGroep}]");
                            }
                            sb.AppendLine($") A[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                            sb.AppendLine();
                        }
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* start vasthoud timer bij einde timer en als de timer nog niet loopt */");
                            sb.AppendLine($"{ts}RT[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}] = ET[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}];");
                            sb.AppendLine();
                        }
                        sb.AppendLine($"{ts}MK[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                        sb.AppendLine();
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit && pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* zet meetkriterium als de vasthoudperiode loopt */");
                            sb.Append($"{ts}if (T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                            if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.Append($" && SCH[{_schpf}{_schpelmk}{pk.GekoppeldeSignaalGroep}]");
                            }
                            sb.AppendLine(")");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}MK[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT2 | BIT12;");
                            sb.AppendLine($"{ts}}}");
                            sb.AppendLine();
                        }
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* houd groen vast als de vasthoudperiode loopt,");
                            sb.AppendLine($"{ts}   de maximale wachttijd nog niet bereikt is,");
                            sb.AppendLine($"{ts}   tenzij de timer al loopt (besluit wordt niet teruggenomen) */");
                            sb.Append($"{ts}if (T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.Append($" && SCH[{_schpf}{_schpelrw}{pk.GekoppeldeSignaalGroep}]");
                            }
                            sb.AppendLine($"/*&& !CIF_GUS[usmaxwto]*/)");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                            sb.AppendLine($"{ts}{ts}PP[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                            sb.AppendLine($"{ts}{ts}PAR[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                            sb.AppendLine($"{ts}}}");
                            sb.AppendLine($"{ts}else");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}PP[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                            sb.AppendLine($"{ts}}}");
                            sb.Append($"{ts}if (!(T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.Append($" && SCH[{_schpf}{_schpelrw}{pk.GekoppeldeSignaalGroep}]");
                            }
                            sb.AppendLine($"))");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                            sb.AppendLine($"{ts}}}");
                        }
                        ff = true;
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCPostApplication:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                {
                    sb.AppendLine("/* Verklikken inkomende pelotons */");
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Detectoren.Any()))
                    {
                        sb.AppendLine($"{ts}CIF_GUS[{_uspf}{_uspelin}{pk.GekoppeldeSignaalGroep}] = IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}];");
                    }
                }
                return(sb.ToString());
            }

            return(sb.ToString());
        }
Ejemplo n.º 4
0
        public override string GetCode(ControllerModel c, CCOLCodeTypeEnum type, string ts)
        {
            var sb = new StringBuilder();
            var ff = false;

            switch (type)
            {
            case CCOLCodeTypeEnum.RegCTop:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                {
                    var first = true;
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                    {
                        if (pk.Type == PelotonKoppelingType.RHDHV)
                        {
                            if (first)
                            {
                                sb.AppendLine($"#define MAX_VK_ARRAY 10");
                                first = false;
                            }
                            sb.AppendLine($"/* Variabelen tbv vrije koppeling met {pk.KruisingNaam} */");
                            sb.AppendLine($"int iaTime{pk.KruisingNaam}[MAX_VK_ARRAY];");
                            sb.AppendLine($"int iaStatus{pk.KruisingNaam}[MAX_VK_ARRAY];");
                            sb.AppendLine($"int iSizeOfArray{pk.KruisingNaam};");
                            sb.AppendLine($"int iCount{pk.KruisingNaam};");
                            sb.AppendLine($"int iCounterVkop;");
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"int iOldRW{pk.KruisingNaam};");
                                sb.AppendLine($"bool bSingleRW{pk.KruisingNaam};");
                            }
                        }
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCPreApplication:
                var f = false;
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend && x.Type == PelotonKoppelingType.RHDHV))
                {
                    sb.AppendLine($"{ts}/* Vrije koppelingen */");
                    sb.AppendLine($"{ts}/* ================= */");
                    sb.AppendLine($"{ts}if (TS) iCounterVkop = CIF_KLOK[CIF_MINUUT] * 60 + CIF_KLOK[CIF_SECONDE];");
                    f = true;
                }
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Uitgaand && x.Detectoren.Any()))
                {
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Uitgaand && x.Detectoren.Any()))
                    {
                        var sgWithD = new Dictionary <FaseCyclusModel, List <string> >();
                        foreach (var d in pk.Detectoren)
                        {
                            var sg = c.Fasen.FirstOrDefault(x => x.Detectoren.Any(x2 => x2.Naam == d.DetectorNaam));
                            if (sg != null)
                            {
                                if (!sgWithD.ContainsKey(sg))
                                {
                                    sgWithD.Add(sg, new List <string>());
                                }
                                sgWithD[sg].Add(d.DetectorNaam);
                            }
                        }
                        if (!sgWithD.Any())
                        {
                            continue;
                        }


                        if (pk.Type == PelotonKoppelingType.DenHaag)
                        {
                            if (f)
                            {
                                sb.AppendLine();
                            }
                            var ipl = CCOLElementCollector.GetKoppelSignaalCount(pk.PTPKruising, c, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                            sb.AppendLine($"{ts}/* Uitgaande peloton koppeling naar {pk.KruisingNaam} */");
                            foreach (var sg in sgWithD)
                            {
                                sb.AppendLine($"{ts}IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = SCH[{_schpf}{_schpku}{sg.Key.Naam}] && (SG[{_fcpf}{pk.GekoppeldeSignaalGroep}] || FG[{_fcpf}{pk.GekoppeldeSignaalGroep}]);");
                                foreach (var d in sg.Value)
                                {
                                    ipl = CCOLElementCollector.GetKoppelSignaalCount(pk.PTPKruising, c, $"{pk.KruisingNaam}d{d}", CCOLKoppelSignaalRichtingEnum.Uit);
                                    sb.AppendLine($"{ts}if (G[{_fcpf}{sg.Key.Naam}] && ED[{_dpf}{d}]) IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = !IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}];");
                                }
                            }
                        }
                        else     // RHDHV
                        {
                            var ipl = CCOLElementCollector.GetKoppelSignaalCount(pk.PTPKruising, c, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                            sb.AppendLine($"{ts}/* Uitgaande vrije koppeling {c.Data.Naam} => {pk.KruisingNaam} */");
                            var st = $"IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = ";
                            sb.Append($"{ts}IH[{_hpf}{pk.PTPKruising}{_huks}{ipl:00}] = ");

                            var firstsg = true;
                            foreach (var sg in sgWithD)
                            {
                                if (!firstsg)
                                {
                                    sb.AppendLine(" || ");
                                    sb.Append($"{ts}{"".PadRight(st.Length)}");
                                }
                                firstsg = false;
                                sb.Append($"SCH[{_schpf}{_schpku}{sg.Key.Naam}] && G[fc{sg.Key.Naam}] && (");
                                var firstd = true;
                                foreach (var d in sg.Value)
                                {
                                    if (!firstd)
                                    {
                                        sb.Append(" || ");
                                    }
                                    firstd = false;
                                    sb.Append($"TDH[{_dpf}{d}] && (CIF_IS[{_dpf}{d}] < CIF_DET_STORING)");
                                }
                                sb.Append(")");
                            }
                            sb.AppendLine(";");
                        }
                        f = true;
                    }
                }
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                {
                    if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x =>
                                                                        x.Richting == PelotonKoppelingRichtingEnum.Inkomend &&
                                                                        x.Type == PelotonKoppelingType.DenHaag &&
                                                                        x.Detectoren.Any()))
                    {
                        foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                        {
                            sb.AppendLine($"{ts}/* Afzetten hulpelementen inkomende peloton koppelingen */");
                            if (pk.Type == PelotonKoppelingType.DenHaag && pk.Detectoren.Any())
                            {
                                sb.AppendLine($"{ts}IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] = FALSE;");
                            }
                        }
                    }

                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                    {
                        var isg = CCOLElementCollector.GetKoppelSignaalCount(pk.PTPKruising, c, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);

                        if (f)
                        {
                            sb.AppendLine();
                        }
                        if (pk.Type == PelotonKoppelingType.DenHaag && pk.Detectoren.Any())
                        {
                            sb.AppendLine($"{ts}/* Inkomende peloton koppeling van {pk.KruisingNaam} */");
                            sb.Append($"{ts}IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] |= proc_pel_in_V1({_hpf}{pk.PTPKruising}{_hiks}{isg:00}, {_tpf}{_tpelmeet}{pk.GekoppeldeSignaalGroep}, {_tpf}{_tpelmaxhiaat}{pk.GekoppeldeSignaalGroep}, {_prmpf}{_prmpelgrens}{pk.GekoppeldeSignaalGroep}, {_mpf}{_mpelvtg}{pk.GekoppeldeSignaalGroep}, {_mpf}{_mpelin}{pk.GekoppeldeSignaalGroep}, ");
                            foreach (var d in pk.Detectoren)
                            {
                                var id = CCOLElementCollector.GetKoppelSignaalCount(pk.PTPKruising, c, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                                sb.Append($"{_hpf}{pk.PTPKruising}{_hiks}{id:00}, ");
                            }
                            sb.AppendLine("END);");
                        }
                        else if (pk.Type == PelotonKoppelingType.RHDHV)
                        {
                            sb.AppendLine($"{ts}/* Inkomende vrije koppeling van {pk.KruisingNaam} */");
                            sb.AppendLine($"{ts}if (iSizeOfArray{pk.KruisingNaam} > 0)");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}if ((iaTime{pk.KruisingNaam}[0] <= iCounterVkop) &&");
                            sb.AppendLine($"{ts}{ts}    (abs(iaTime{pk.KruisingNaam}[0] - iCounterVkop) < 1800))   /* tbv overgang 3600sec. */");
                            sb.AppendLine($"{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}/* hertarten naloop */");
                            sb.AppendLine($"{ts}{ts}{ts}if (iaStatus{pk.KruisingNaam}[0] == 1) RT[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] = TRUE;  /* Verkeer onderweg */");
                            sb.AppendLine($"{ts}{ts}{ts}else                                   RT[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] = FALSE; /* Geen verkeer */");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}{ts}{ts}for (iCount{pk.KruisingNaam} = 1; iCount{pk.KruisingNaam} < iSizeOfArray{pk.KruisingNaam} && iCount{pk.KruisingNaam} < MAX_VK_ARRAY; iCount{pk.KruisingNaam}++)");
                            sb.AppendLine($"{ts}{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}{ts}iaTime{pk.KruisingNaam}[iCount{pk.KruisingNaam} - 1] = iaTime{pk.KruisingNaam}[iCount{pk.KruisingNaam}];");
                            sb.AppendLine($"{ts}{ts}{ts}{ts}iaTime{pk.KruisingNaam}[iCount{pk.KruisingNaam}] = 0;");
                            sb.AppendLine($"{ts}{ts}{ts}{ts}iaStatus{pk.KruisingNaam}[iCount{pk.KruisingNaam} - 1] = iaStatus{pk.KruisingNaam}[iCount{pk.KruisingNaam}];");
                            sb.AppendLine($"{ts}{ts}{ts}{ts}iaStatus{pk.KruisingNaam}[iCount{pk.KruisingNaam}] = 0;");
                            sb.AppendLine($"{ts}{ts}{ts}}}");
                            sb.AppendLine($"{ts}{ts}{ts}iSizeOfArray{pk.KruisingNaam}--;");
                            sb.AppendLine($"{ts}{ts}}}");
                            sb.AppendLine($"{ts}}}");
                            sb.AppendLine($"{ts}else");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}iaTime{pk.KruisingNaam}[0] = iaStatus{pk.KruisingNaam}[0] = 0;");
                            sb.AppendLine($"{ts}}}");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}/* starttijd noteren bij start hulpelement alleen wanneer het peloton het */");
                            sb.AppendLine($"{ts}/* TXD-moment of maximumgroen nog kan halen, anders krijgt starttijd status 0 */");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}if (SH[{_hpf}{pk.PTPKruising}{_hiks}{isg:00}] && (iSizeOfArray{pk.KruisingNaam} < (MAX_VK_ARRAY - 2)))");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}iaTime{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] = (CIF_KLOK[CIF_MINUUT] * 60 + CIF_KLOK[CIF_SECONDE] + PRM[{_prmpf}{_prmpelverschuif}{pk.GekoppeldeSignaalGroep}]) % 3600;");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}{ts}if ((TVG_max[{_fcpf}{pk.GekoppeldeSignaalGroep}] - TVG_timer[{_fcpf}{pk.GekoppeldeSignaalGroep}]) < (PRM[{_prmpf}{_prmpelverschuif}{pk.GekoppeldeSignaalGroep}] + T_max[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}]) * 10)");
                            sb.AppendLine($"{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}iaStatus{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] = 0;");
                            sb.AppendLine($"{ts}{ts}{ts}iSizeOfArray{pk.KruisingNaam}++;");
                            sb.AppendLine($"{ts}{ts}}}");
                            sb.AppendLine($"{ts}{ts}else");
                            sb.AppendLine($"{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}iaStatus{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] = 1;");
                            sb.AppendLine($"{ts}{ts}{ts}iSizeOfArray{pk.KruisingNaam}++;");
                            sb.AppendLine($"{ts}{ts}}}");
                            sb.AppendLine($"{ts}}}");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}/* eindtijd noteren bij eind hulpelement alleen als er nog een starttijd is */");
                            sb.AppendLine($"{ts}/* en het verschil meer is dan x, anders krijgt starttijd status 0 */");
                            sb.AppendLine($"{ts}if (EH[{_hpf}{pk.PTPKruising}{_hiks}{isg:00}] && iSizeOfArray{pk.KruisingNaam} < (MAX_VK_ARRAY - 1))");
                            sb.AppendLine($"{ts}{{");
                            sb.AppendLine($"{ts}{ts}iaTime{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] = (CIF_KLOK[CIF_MINUUT] * 60 + CIF_KLOK[CIF_SECONDE] + PRM[{_prmpf}{_prmpelverschuif}{pk.GekoppeldeSignaalGroep}]) % 3600;");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}{ts}if (iSizeOfArray{pk.KruisingNaam} > 0)");
                            sb.AppendLine($"{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}if (abs(iaTime{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] - iaTime{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam} - 1]) < PRM[{_prmpf}{_prmpelgrens}{pk.GekoppeldeSignaalGroep}])");
                            sb.AppendLine($"{ts}{ts}{ts}{{");
                            sb.AppendLine($"{ts}{ts}{ts}{ts}iaStatus{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam} - 1] = 0;");
                            sb.AppendLine($"{ts}{ts}{ts}}}");
                            sb.AppendLine($"{ts}{ts}}}");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}{ts}iaStatus{pk.KruisingNaam}[iSizeOfArray{pk.KruisingNaam}] = 0;");
                            sb.AppendLine($"{ts}{ts}iSizeOfArray{pk.KruisingNaam}++;");
                            sb.AppendLine($"{ts}}}");
                        }
                        f = true;
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCAanvragen:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                {
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                    {
                        if (pk.Type == PelotonKoppelingType.RHDHV && pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* Inkomende peloton koppeling voor {pk.GekoppeldeSignaalGroep} van kruising {pk.KruisingNaam} */");
                            sb.Append($"{ts}if (SH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}]");
                            if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.Append($" && SCH[{_schpf}{_schpela}{pk.GekoppeldeSignaalGroep}]");
                            }
                            sb.AppendLine($") A[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                            sb.AppendLine();
                        }
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCMeetkriterium:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                {
                    ff = false;
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                    {
                        if (ff)
                        {
                            sb.AppendLine();
                        }
                        if (pk.Type == PelotonKoppelingType.DenHaag && pk.Detectoren.Any())
                        {
                            sb.AppendLine($"{ts}/* Inkomende peloton koppeling voor {pk.GekoppeldeSignaalGroep} van kruising {pk.KruisingNaam} */");
                            if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* timer resetten om aanvraag te zetten */");
                                sb.AppendLine($"{ts}RT[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}] = IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}];");
                            }
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* timer resetten maximale tijd toepassen RW vanaf SG */");
                                sb.AppendLine($"{ts}RT[{_tpf}{_tpelrwmax}{pk.GekoppeldeSignaalGroep}] = SG[{_fcpf}{pk.GekoppeldeSignaalGroep}];");
                                sb.AppendLine($"{ts}/* timer resetten om gebied open te houden */");
                                sb.AppendLine($"{ts}RT[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}] = IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}];");
                                sb.AppendLine();
                            }
                            if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* zet aanvraag als timer is afgelopen */");
                                sb.Append($"{ts}if (ET[{_tpf}{_tpela}{pk.GekoppeldeSignaalGroep}]");
                                if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                                {
                                    sb.Append($" && SCH[{_schpf}{_schpela}{pk.GekoppeldeSignaalGroep}]");
                                }
                                sb.AppendLine($") A[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                                sb.AppendLine();
                            }
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* start vasthoud timer bij einde timer en als de timer nog niet loopt */");
                                sb.AppendLine($"{ts}RT[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}] = ET[{_tpf}{_tpelstartrw}{pk.GekoppeldeSignaalGroep}] && !T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}];");
                                sb.AppendLine();
                            }
                            sb.AppendLine($"{ts}MK[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                            sb.AppendLine();
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit && pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* zet meetkriterium als de vasthoudperiode loopt */");
                                sb.Append($"{ts}if (T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                                if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Altijd)
                                {
                                    sb.Append($" && SCH[{_schpf}{_schpelmk}{pk.GekoppeldeSignaalGroep}]");
                                }
                                sb.AppendLine(")");
                                sb.AppendLine($"{ts}{{");
                                sb.AppendLine($"{ts}{ts}MK[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT2 | BIT12;");
                                sb.AppendLine($"{ts}}}");
                                sb.AppendLine();
                            }
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                            {
                                sb.AppendLine($"{ts}/* houd groen vast als de vasthoudperiode loopt,");
                                sb.AppendLine($"{ts}   de maximale wachttijd nog niet bereikt is,");
                                sb.AppendLine($"{ts}   tenzij de timer al loopt (besluit wordt niet teruggenomen) */");
                                sb.Append($"{ts}if (T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                                if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                                {
                                    sb.Append($" && SCH[{_schpf}{_schpelrw}{pk.GekoppeldeSignaalGroep}]");
                                }
                                sb.AppendLine($" && T[{_tpf}{_tpelrwmax}{pk.GekoppeldeSignaalGroep}])");
                                sb.AppendLine($"{ts}{{");
                                sb.AppendLine($"{ts}{ts}RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                                sb.AppendLine($"{ts}{ts}PP[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                                sb.AppendLine($"{ts}{ts}PAR[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT12;");
                                sb.AppendLine($"{ts}}}");
                                sb.AppendLine($"{ts}else");
                                sb.AppendLine($"{ts}{{");
                                sb.AppendLine($"{ts}{ts}PP[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                                sb.AppendLine($"{ts}}}");
                                sb.Append($"{ts}if (!(T[{_tpf}{_tpelrw}{pk.GekoppeldeSignaalGroep}]");
                                if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                                {
                                    sb.Append($" && SCH[{_schpf}{_schpelrw}{pk.GekoppeldeSignaalGroep}]");
                                }
                                sb.AppendLine($"))");
                                sb.AppendLine($"{ts}{{");
                                sb.AppendLine($"{ts}{ts}RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT12;");
                                sb.AppendLine($"{ts}}}");
                            }
                        }
                        else if (pk.Type == PelotonKoppelingType.RHDHV)
                        {
                            sb.AppendLine($"{ts}/* Extra verlengen tbv vrije koppeling */");
                            if (pk.ToepassenMeetkriterium != NooitAltijdAanUitEnum.Nooit)
                            {
                                if (pk.ToepassenMeetkriterium == NooitAltijdAanUitEnum.Altijd)
                                {
                                    sb.AppendLine($"{ts}meetkriterium_exp((count){_fcpf}{pk.GekoppeldeSignaalGroep}, (bool)(T_max[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] > 0 && T[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}]));");
                                }
                                else
                                {
                                    sb.AppendLine($"{ts}meetkriterium_exp((count){_fcpf}{pk.GekoppeldeSignaalGroep}, (bool)(SCH[{_schpf}{_schpelmk}{pk.GekoppeldeSignaalGroep}] && T_max[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] > 0 && T[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}]));");
                                }
                            }
                        }
                        ff = true;
                    }
                }
                return(sb.ToString());

            case CCOLCodeTypeEnum.RegCWachtgroen:
                if (c.PelotonKoppelingenData.PelotonKoppelingen.Any(x => x.Type == PelotonKoppelingType.RHDHV && x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                {
                    foreach (var pk in c.PelotonKoppelingenData.PelotonKoppelingen.Where(x => x.Type == PelotonKoppelingType.RHDHV && x.Richting == PelotonKoppelingRichtingEnum.Inkomend))
                    {
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            sb.AppendLine($"{ts}/* Vasthouden {_fcpf}{pk.GekoppeldeSignaalGroep} */");
                            sb.AppendLine($"{ts}IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] = T_max[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] > 0 && T[{_tpf}{_tpelnl}{pk.GekoppeldeSignaalGroep}] &&");
                            if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Altijd)
                            {
                                sb.AppendLine($"{ts}SCH[{_schpf}{_schpelrw}{pk.GekoppeldeSignaalGroep}];");
                            }
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}/* Bewaken RW duur */");
                            sb.AppendLine($"{ts}RT[{_tpf}{_tpelrwmax}{pk.GekoppeldeSignaalGroep}] = SH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && bSingleRW{pk.KruisingNaam};");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}/* RW opzetten */");
                            sb.AppendLine($"{ts}if (bSingleRW{pk.KruisingNaam} && IH[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}] && !fkaa({_fcpf}{pk.GekoppeldeSignaalGroep}) && !Z[{_fcpf}{pk.GekoppeldeSignaalGroep}] && (T[{_tpf}{_tpelrwmax}{pk.GekoppeldeSignaalGroep}] || RT[{_tpf}{_tpelrwmax}{pk.GekoppeldeSignaalGroep}])" +
                                          $"{(!c.HalfstarData.IsHalfstar ? "" : $" && (!IH[{_hpf}{_hplact}] || TOTXB_PL[{_fcpf}{pk.GekoppeldeSignaalGroep}] == 0 && TOTXD_PL[{_fcpf}{pk.GekoppeldeSignaalGroep}] > 0)")}" +
                                          $") RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] |= BIT14;");
                            sb.AppendLine($"{ts}else if (!H[{_hpf}{_hpelin}{pk.GekoppeldeSignaalGroep}]) RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] &= ~BIT14;");
                            sb.AppendLine($"");
                            sb.AppendLine($"{ts}/* Bewaken eenmalig opzetten RW */");
                            sb.AppendLine($"{ts}if (!(RW[{_fcpf}{pk.GekoppeldeSignaalGroep}] & BIT14) && (iOldRW{pk.KruisingNaam} & BIT14)/* && SCH[schvki05eenkeerRW]*/) bSingleRW{pk.KruisingNaam} = FALSE;");
                            sb.AppendLine($"{ts}if (EG[{_fcpf}{pk.GekoppeldeSignaalGroep}]) bSingleRW{pk.KruisingNaam} = TRUE;");
                            sb.AppendLine($"{ts}iOldRW{pk.KruisingNaam} = RW[{_fcpf}{pk.GekoppeldeSignaalGroep}];");
                        }
                    }
                }
                return(sb.ToString());