private string GenerateRegCApplication(ControllerModel controller)
        {
            var sb      = new StringBuilder();
            var _hplact = CCOLGeneratorSettingsProvider.Default.GetElementName("hplact");

            sb.AppendLine("void application(void)");
            sb.AppendLine("{");
            sb.AppendLine($"{ts}PreApplication();");
            sb.AppendLine();
            sb.AppendLine($"{ts}TFB_max = PRM[prmfb];");
            sb.AppendLine($"{ts}KlokPerioden();");
            sb.AppendLine($"{ts}Aanvragen();");

            var hsts = controller.HalfstarData.IsHalfstar ? ts + ts : ts;

            if (controller.HalfstarData.IsHalfstar)
            {
                sb.AppendLine($"{ts}if (IH[{_hpf}{_hplact}])");
                sb.AppendLine($"{ts}{{");
                switch (controller.Data.TypeGroentijden)
                {
                case GroentijdenTypeEnum.MaxGroentijden:
                    sb.AppendLine($"{hsts}Maxgroen_halfstar();");
                    break;

                case GroentijdenTypeEnum.VerlengGroentijden:
                    sb.AppendLine($"{hsts}Verlenggroen_halfstar();");
                    break;
                }
                sb.AppendLine($"{hsts}Wachtgroen_halfstar();");
                sb.AppendLine($"{hsts}Meetkriterium();");
                sb.AppendLine($"{hsts}Meetkriterium_halfstar();");
                sb.AppendLine($"{hsts}Meeverlengen_halfstar();");
                sb.AppendLine($"{hsts}Synchronisaties_halfstar();");
                sb.AppendLine($"{hsts}RealisatieAfhandeling_halfstar();");
                sb.AppendLine($"{hsts}Alternatief_halfstar();");
                sb.AppendLine($"{hsts}FileVerwerking_halfstar();");
                sb.AppendLine($"{hsts}DetectieStoring_halfstar();");
                sb.AppendLine($"{ts}}}");
                sb.AppendLine($"{ts}else");
                sb.AppendLine($"{ts}{{");
            }

            switch (controller.Data.TypeGroentijden)
            {
            case GroentijdenTypeEnum.MaxGroentijden:
                sb.AppendLine($"{hsts}Maxgroen();");
                break;

            case GroentijdenTypeEnum.VerlengGroentijden:
                sb.AppendLine($"{hsts}Verlenggroen();");
                break;
            }
            sb.AppendLine($"{hsts}Wachtgroen();");
            sb.AppendLine($"{hsts}Meetkriterium();");
            sb.AppendLine($"{hsts}Meeverlengen();");
            sb.AppendLine($"{hsts}Synchronisaties();");
            sb.AppendLine($"{hsts}RealisatieAfhandeling();");
            sb.AppendLine($"{hsts}FileVerwerking();");
            sb.AppendLine($"{hsts}DetectieStoring();");

            if (controller.HalfstarData.IsHalfstar)
            {
                sb.AppendLine($"{ts}}}");
            }

            if (controller.OVData.OVIngrepen.Count > 0 ||
                controller.OVData.HDIngrepen.Count > 0)
            {
                sb.AppendLine($"{ts}AfhandelingOV();");
            }
            if (controller.Data.FixatieData.FixatieMogelijk)
            {
                if (!controller.Data.MultiModuleReeksen)
                {
                    sb.AppendLine($"{ts}Fixatie(isfix, 0, FCMAX-1, SCH[schbmfix], PRML, ML);");
                }
                else
                {
                    foreach (var r in controller.MultiModuleMolens)
                    {
                        sb.AppendLine($"{ts}Fixatie(isfix, 0, FCMAX-1, SCH[schbmfix], PR{r.Reeks}, {r.Reeks});");
                    }
                }
            }
            sb.AppendLine("");
            sb.AppendLine($"{ts}PostApplication();");
            if (controller.Data.KWCType != KWCTypeEnum.Geen && controller.Data.KWCUitgebreid)
            {
                sb.AppendLine($"{ts}KwcApplication();");
            }
            sb.AppendLine("}");
            sb.AppendLine();

            return(sb.ToString());
        }
Esempio n. 2
0
        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 == PelotonKoppelingType.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);
                    }
                }
                switch (pk.Type)
                {
                case PelotonKoppelingType.DenHaag:
                    switch (pk.Richting)
                    {
                    case PelotonKoppelingRichtingEnum.Uitgaand:
                        foreach (var sg in sgWithD)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpku}{sg.Key.Naam}", 1, CCOLElementTimeTypeEnum.SCH_type, _schpku, pk.GekoppeldeSignaalGroep));
                        }
                        CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                        foreach (var d in pk.Detectoren)
                        {
                            CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.Uit);
                        }
                        break;

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

                        _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.None, _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($"{_tpelrwmax}{pk.GekoppeldeSignaalGroep}", pk.MaxTijdToepassenRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrwmax, 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));
                            }
                        }

                        if (pk.AutoIngangsSignalen)
                        {
                            CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                            foreach (var d in pk.Detectoren)
                            {
                                CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                            }
                        }
                        else
                        {
                            CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, pk.IngangsSignaalFG, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                            foreach (var d in pk.Detectoren)
                            {
                                CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, d.KoppelSignaal, $"{pk.KruisingNaam}d{d.DetectorNaam}", CCOLKoppelSignaalRichtingEnum.In);
                            }
                        }
                        break;
                    }
                    break;

                case PelotonKoppelingType.RHDHV:
                    switch (pk.Richting)
                    {
                    case PelotonKoppelingRichtingEnum.Uitgaand:
                        foreach (var sg in sgWithD)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpku}{sg.Key.Naam}", 1, CCOLElementTimeTypeEnum.SCH_type, _schpku, pk.GekoppeldeSignaalGroep));
                        }
                        CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.Uit);
                        break;

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

                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_hpelin}{pk.GekoppeldeSignaalGroep}", _hpelin, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelgrens}{pk.GekoppeldeSignaalGroep}", pk.MinimaalAantalVoertuigen,
                                                                                            CCOLElementTimeTypeEnum.TS_type, _prmpelgrens, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmpelverschuif}{pk.GekoppeldeSignaalGroep}", pk.Verschuiving,
                                                                                            CCOLElementTimeTypeEnum.TE_type, _prmpelgrens, pk.KruisingNaam, c.Data.Naam, pk.GekoppeldeSignaalGroep));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelnl}{pk.GekoppeldeSignaalGroep}", pk.TijdRetourWachtgroen, CCOLElementTimeTypeEnum.TS_type, _tpelnl, pk.GekoppeldeSignaalGroep));
                        if (pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Nooit && pk.ToepassenAanvraag != NooitAltijdAanUitEnum.Altijd)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schpela}{pk.GekoppeldeSignaalGroep}", pk.ToepassenAanvraag == NooitAltijdAanUitEnum.SchAan ? 1 : 0, CCOLElementTimeTypeEnum.SCH_type, _schpela, pk.GekoppeldeSignaalGroep));
                        }
                        if (pk.ToepassenRetourWachtgroen != NooitAltijdAanUitEnum.Nooit)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_tpelrwmax}{pk.GekoppeldeSignaalGroep}", pk.MaxTijdToepassenRetourWachtgroen, CCOLElementTimeTypeEnum.TE_type, _tpelrwmax, 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.AutoIngangsSignalen)
                        {
                            CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                        }
                        else
                        {
                            CCOLElementCollector.AddKoppelSignaal(pk.PTPKruising, 1, pk.IngangsSignaalFG, $"{pk.KruisingNaam}g{pk.GekoppeldeSignaalGroep}", CCOLKoppelSignaalRichtingEnum.In);
                        }
                        break;
                    }
                    break;
                }
            }
        }
 public void Apply(ControllerModel controller)
 {
     controller.Properties["Desc"] = _desc;
 }
        private string GenerateHstAdd(ControllerModel c)
        {
            var sb = new StringBuilder();

            sb.AppendLine(GenerateRegAddHeader(c));
            sb.AppendLine();
            sb.AppendLine("void post_init_application_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void PreApplication_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void KlokPerioden_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Aanvragen_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Maxgroen_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Wachtgroen_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Meetkriterium_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Meeverlengen_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Synchronisaties_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void Alternatief_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void RealisatieAfhandeling_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void FileVerwerking_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void DetectieStoring_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void PostApplication_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void pre_system_application_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void post_system_application_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine("void post_dump_application_halfstar_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine("");
            sb.AppendLine("}");
            sb.AppendLine();
            var b = "boolv";

            if (c.Data.CCOLVersie < Models.Enumerations.CCOLVersieEnum.CCOL100)
            {
                b = "bool";
            }
            sb.AppendLine($"{b} application1_tig_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine($"{ts}return 0;");
            sb.AppendLine("}");
            sb.AppendLine();
            sb.AppendLine($"{b} application2_tig_Add(void)");
            sb.AppendLine("{");
            sb.AppendLine($"{ts}return 0;");
            sb.AppendLine("}");
            sb.AppendLine();
            return(sb.ToString());
        }
Esempio n. 5
0
 public WaitGreenManager(ControllerManager mainmanager, ControllerModel controller) : base(mainmanager, controller)
 {
     mainmanager.InsertFunctionality(UpdateWaitGreen, ControllerFunctionalityEnum.Extension, 2);
 }
Esempio n. 6
0
        public override void CollectCCOLElements(ControllerModel c)
        {
            _myElements      = new List <CCOLElement>();
            _myBitmapInputs  = new List <CCOLIOElement>();
            _myBitmapOutputs = new List <CCOLIOElement>();

            if (!c.StarData.ToepassenStar || !c.StarData.Programmas.Any())
            {
                return;
            }

            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_schstar}", 0, CCOLElementTimeTypeEnum.SCH_type, _schstar));
            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mstarprog}", _mstarprog));
            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mstarprogwens}", _mstarprogwens));
            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_mstarprogwissel}", _mstarprogwissel));
            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_usstarprogwissel}", _usstarprogwissel));
            _myBitmapOutputs.Add(new CCOLIOElement(c.StarData.ProgrammaWisselBitmapInfo, $"{_uspf}{_usstarprogwissel}"));

            if (c.StarData.ProgrammaSturingViaParameter)
            {
                var dp  = c.StarData.Programmas.FirstOrDefault(x => x.Naam == c.StarData.DefaultProgramma);
                var iDp = dp == null ? -1 : c.StarData.Programmas.IndexOf(dp);
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstarprogdef}", iDp + 1, CCOLElementTimeTypeEnum.SCH_type, _prmstarprogdef));
            }

            if (c.StarData.IngangAlsVoorwaarde)
            {
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_isstar}", _isstar));
                _myBitmapInputs.Add(new CCOLIOElement(c.StarData.StarRegelenIngang, $"{_ispf}{_isstar}"));
            }

            foreach (var pr in c.StarData.Programmas)
            {
                _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_usstar}{pr.Naam}", _usstar, pr.Naam));
                _myBitmapOutputs.Add(new CCOLIOElement(pr, $"{_uspf}{_usstar}{pr.Naam}"));
            }

            if (c.StarData.ProgrammaTijdenInParameters)
            {
                foreach (var pr in c.StarData.Programmas)
                {
                    _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstarcyclustijd}", pr.Cyclustijd, CCOLElementTimeTypeEnum.TS_type, _prmstarcyclustijd, pr.Naam));
                    foreach (var f in pr.Fasen)
                    {
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstarstart}1{pr.Naam}{f.FaseCyclus}", f.Start1, CCOLElementTimeTypeEnum.None, _prmstarstart, "1", f.FaseCyclus, pr.Naam));
                        _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstareind}1{pr.Naam}{f.FaseCyclus}", f.Eind1, CCOLElementTimeTypeEnum.None, _prmstareind, "1", f.FaseCyclus, pr.Naam));
                        if (f.Start2.HasValue && f.Eind2.HasValue)
                        {
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstarstart}2{pr.Naam}{f.FaseCyclus}", f.Start2.Value, CCOLElementTimeTypeEnum.None, _prmstarstart, "2", f.FaseCyclus, pr.Naam));
                            _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstareind}2{pr.Naam}{f.FaseCyclus}", f.Eind2.Value, CCOLElementTimeTypeEnum.None, _prmstareind, "2", f.FaseCyclus, pr.Naam));
                        }
                    }
                }
            }

            if (c.StarData.ProgrammaSturingViaKlok)
            {
                foreach (var p in c.StarData.PeriodenData)
                {
                    var dp  = c.StarData.Programmas.FirstOrDefault(x => x.Naam == p.StarProgramma);
                    var iDp = dp == null ? -1 : c.StarData.Programmas.IndexOf(dp);
                    _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement($"{_prmstarprog}{p.Periode}", iDp + 1, CCOLElementTimeTypeEnum.None, _prmstarprog, p.Periode));
                }
            }
        }
 public void Apply(ControllerModel controller)
 {
     controller.Properties["license"] = "Copyright (c) .NET Foundation. All rights reserved." +
                                        " Licensed under the Apache License, Version 2.0. See License.txt " +
                                        "in the project root for license information.";
 }
 private void ConfigureRemoteService(ControllerModel controller, [CanBeNull] AbpControllerAssemblySetting configuration)
 {
     ConfigureApiExplorer(controller);
     ConfigureSelector(controller, configuration);
     ConfigureParameters(controller);
 }
Esempio n. 9
0
 private bool IsConventionApplicable(ControllerModel controller)
 {
     return(controller.Attributes.OfType <IUseWebApiOverloading>().Any());
 }
Esempio n. 10
0
 protected virtual void ConfigureRemoteService(ControllerModel controller, [CanBeNull] ConventionalControllerSetting configuration)
 {
     ConfigureApiExplorer(controller);
     ConfigureSelector(controller, configuration);
     ConfigureParameters(controller);
 }
Esempio n. 11
0
 /// <summary>
 /// 实现Apply
 /// </summary>
 public void Apply(ControllerModel controller) => controller.Filters.Add(new AuthorizeFilter("jwt"));
 public PrepareForGenerationRequest(ControllerModel controller)
 {
     Controller = controller;
 }
 /// <summary>
 /// 配置控制器名称
 /// </summary>
 /// <param name="controller">控制器模型</param>
 /// <param name="apiDescriptionSettings">接口描述配置</param>
 private void ConfigureControllerName(ControllerModel controller, ApiDescriptionSettingsAttribute apiDescriptionSettings)
 {
     controller.ControllerName = ConfigureControllerAndActionName(apiDescriptionSettings, controller.ControllerName, _lazyControllerSettings.AbandonControllerAffixes, _ => _);
 }
        private string GenerateRegCIncludes(ControllerModel controller)
        {
            var sb = new StringBuilder();

            sb.AppendLine("/* include files */");
            sb.AppendLine("/* ------------- */");
            sb.AppendLine($"{ts}#include \"{controller.Data.Naam}sys.h\"");
            sb.AppendLine($"{ts}#include \"fcvar.c\"    /* fasecycli                         */");
            sb.AppendLine($"{ts}#include \"kfvar.c\"    /* conflicten                        */");
            sb.AppendLine($"{ts}#include \"usvar.c\"    /* uitgangs elementen                */");
            sb.AppendLine($"{ts}#include \"dpvar.c\"    /* detectie elementen                */");
            if (controller.Data.GarantieOntruimingsTijden)
            {
                if (controller.Data.CCOLVersie >= CCOLVersieEnum.CCOL95 && controller.Data.Intergroen)
                {
                    sb.AppendLine($"{ts}#include \"tig_min.c\"   /* garantie-ontruimingstijden        */");
                }
                else
                {
                    sb.AppendLine($"{ts}#include \"to_min.c\"   /* garantie-ontruimingstijden        */");
                }
            }
            sb.AppendLine($"{ts}#include \"trg_min.c\"  /* garantie-roodtijden               */");
            sb.AppendLine($"{ts}#include \"tgg_min.c\"  /* garantie-groentijden              */");
            sb.AppendLine($"{ts}#include \"tgl_min.c\"  /* garantie-geeltijden               */");
            sb.AppendLine($"{ts}#include \"isvar.c\"    /* ingangs elementen                 */");
            if (controller.HasDSI())
            {
                sb.AppendLine($"{ts}#include \"dsivar.c\"   /* selectieve detectie               */");
            }
            sb.AppendLine($"{ts}#include \"hevar.c\"    /* hulp elementen                    */");
            sb.AppendLine($"{ts}#include \"mevar.c\"    /* geheugen elementen                */");
            sb.AppendLine($"{ts}#include \"tmvar.c\"    /* tijd elementen                    */");
            sb.AppendLine($"{ts}#include \"ctvar.c\"    /* teller elementen                  */");
            sb.AppendLine($"{ts}#include \"schvar.c\"   /* software schakelaars              */");
            if (controller.HalfstarData.IsHalfstar)
            {
                if (controller.Data.CCOLVersie >= CCOLVersieEnum.CCOL95)
                {
                    sb.AppendLine($"{ts}#include \"trigvar.c\"   /* uitgebreide signaalplan structuur */");
                }
                else
                {
                    sb.AppendLine($"{ts}#include \"tigvar.c\"   /* uitgebreide signaalplan structuur */");
                }
                sb.AppendLine($"{ts}#include \"plevar.c\"   /* uitgebreide signaalplan structuur */");
            }
            sb.AppendLine($"{ts}#include \"prmvar.c\"   /* parameters                        */");
            sb.AppendLine($"{ts}#include \"lwmlvar.c\"  /* langstwachtende modulen structuur */");
            if (controller.Data.VLOGType != VLOGTypeEnum.Geen)
            {
                sb.AppendLine($"{ts}#ifndef NO_VLOG");
                sb.AppendLine($"{ts}{ts}#include \"vlogvar.c\"  /* variabelen t.b.v. vlogfuncties                */");
                sb.AppendLine($"{ts}{ts}#include \"logvar.c\"   /* variabelen t.b.v. logging                     */");
                sb.AppendLine($"{ts}{ts}#include \"monvar.c\"   /* variabelen t.b.v. realtime monitoring         */");
                sb.AppendLine($"{ts}{ts}#include \"fbericht.h\"");
                sb.AppendLine($"{ts}#endif");
            }
            sb.AppendLine($"{ts}#include \"prsvar.c\"   /* parameters parser                 */");
            sb.AppendLine($"{ts}#include \"control.c\"  /* controller interface              */");
            sb.AppendLine($"{ts}#include \"rtappl.h\"   /* applicatie routines               */");
            sb.AppendLine($"{ts}#include \"stdfunc.h\"  /* standaard functies                */");
            sb.AppendLine($"{ts}#include \"extra_func.c\" /* extra standaard functies        */");
            if (controller.OVData.OVIngrepen.Count > 0 || controller.OVData.HDIngrepen.Count > 0)
            {
                sb.AppendLine($"{ts}#include \"ov.h\"       /* ov-afhandeling                    */");
                sb.AppendLine($"{ts}#include \"extra_func_ov.c\" /* extra standaard functies OV     */");
            }
            sb.AppendLine();
            sb.AppendLine("#if (!defined AUTOMAAT && !defined AUTOMAAT_TEST)");
            sb.AppendLine("/*    #include \"ccdump.inc\" */");
            sb.AppendLine($"{ts}#include \"keysdef.c\"     /* Definitie toetsenbord t.b.v. stuffkey  */");
            sb.AppendLine($"{ts}#if !defined (_DEBUG)");
            sb.AppendLine($"{ts}{ts}#include \"xyprintf.h\" /* Printen debuginfo                      */");
            sb.AppendLine($"{ts}#endif");
            sb.AppendLine("#endif");
            sb.AppendLine();
            sb.AppendLine($"{ts}#include \"detectie.c\"");
            sb.AppendLine($"{ts}#include \"ccolfunc.c\"");
            if (controller.InterSignaalGroep.Voorstarten.Any() || controller.InterSignaalGroep.Gelijkstarten.Any())
            {
                sb.AppendLine($"{ts}#include \"syncvar.c\"  /* synchronisatie functies           */");
            }

            if (controller.HalfstarData.IsHalfstar)
            {
                sb.AppendLine($"{ts}#include \"{controller.Data.Naam}hst.c\"");
            }
            foreach (var gen in OrderedPieceGenerators[CCOLCodeTypeEnum.RegCIncludes])
            {
                sb.Append(gen.Value.GetCode(controller, CCOLCodeTypeEnum.RegCIncludes, ts));
            }
            sb.AppendLine($"{ts}#include \"{controller.Data.Naam}reg.add\"");
            sb.AppendLine();

            return(sb.ToString());
        }
Esempio n. 15
0
 public void Apply(ControllerModel controller)
 {
     //controller.ControllerName
 }
 public void Apply(ControllerModel controller)
 {
     controller.ApiExplorer.GroupName = controller.ControllerType.Name;
 }
Esempio n. 17
0
 private bool IsUmbracoApiController(ControllerModel controller)
 => controller.Attributes.OfType <UmbracoApiControllerAttribute>().Any();
Esempio n. 18
0
 public ManualControlBoardService(ControllerModel controller)
 {
     DataRecordAlreadySet = true; //初始状态
     _controller          = controller;
 }
Esempio n. 19
0
    public void CopyConstructor_CopiesAllProperties()
    {
        // Arrange
        var controller = new ControllerModel(
            typeof(TestController).GetTypeInfo(),
            new List <object>()
        {
            new HttpGetAttribute(),
            new MyFilterAttribute(),
        });

        var selectorModel = new SelectorModel();

        selectorModel.ActionConstraints.Add(new HttpMethodActionConstraint(new string[] { "GET" }));
        controller.Selectors.Add(selectorModel);
        controller.Application    = new ApplicationModel();
        controller.ControllerName = "cool";
        controller.Filters.Add(new MyFilterAttribute());
        controller.RouteValues.Add("key", "value");
        controller.Properties.Add(new KeyValuePair <object, object>("test key", "test value"));
        controller.ControllerProperties.Add(
            new PropertyModel(typeof(TestController).GetProperty("TestProperty"), new List <object>()));

        // Act
        var controller2 = new ControllerModel(controller);

        // Assert
        foreach (var property in typeof(ControllerModel).GetProperties())
        {
            if (property.Name.Equals("Actions") ||
                property.Name.Equals("Selectors") ||
                property.Name.Equals("ApiExplorer") ||
                property.Name.Equals("ControllerProperties"))
            {
                // This test excludes other ApplicationModel objects on purpose because we deep copy them.
                continue;
            }

            var value1 = property.GetValue(controller);
            var value2 = property.GetValue(controller2);

            if (typeof(IEnumerable <object>).IsAssignableFrom(property.PropertyType))
            {
                Assert.Equal <object>((IEnumerable <object>)value1, (IEnumerable <object>)value2);

                // Ensure non-default value
                Assert.NotEmpty((IEnumerable <object>)value1);
            }
            else if (typeof(IDictionary <string, string>).IsAssignableFrom(property.PropertyType))
            {
                Assert.Equal(value1, value2);

                // Ensure non-default value
                Assert.NotEmpty((IDictionary <string, string>)value1);
            }
            else if (typeof(IDictionary <object, object>).IsAssignableFrom(property.PropertyType))
            {
                Assert.Equal(value1, value2);

                // Ensure non-default value
                Assert.NotEmpty((IDictionary <object, object>)value1);
            }
            else if (property.PropertyType.IsValueType ||
                     Nullable.GetUnderlyingType(property.PropertyType) != null)
            {
                Assert.Equal(value1, value2);

                // Ensure non-default value
                Assert.NotEqual(value1, Activator.CreateInstance(property.PropertyType));
            }
            else if (property.Name.Equals(nameof(ControllerModel.DisplayName)))
            {
                // DisplayName is re-calculated, hence reference equality wouldn't work.
                Assert.Equal(value1, value2);
            }
            else
            {
                Assert.Same(value1, value2);

                // Ensure non-default value
                Assert.NotNull(value1);
            }
        }
    }
Esempio n. 20
0
 private void SetControllerForStatics(ControllerModel c)
 {
     DefaultsProvider.Default.Controller         = c;
     TLCGenControllerModifier.Default.Controller = c;
     TLCGenModelManager.Default.Controller       = c;
 }
Esempio n. 21
0
 private bool IsConventionApplicable(ControllerModel controller)
 {
     return(controller.Attributes.OfType <IUseWebApiParameterConventions>().Any());
 }
        public static ODataControllerActionContext BuildContext(string modelPrefix, IEdmModel model, ControllerModel controller)
        {
            Assert.NotNull(model);

            // The reason why to create a context is that:
            // We don't need to call te FindEntitySet or FindSingleton before every convention.
            // So, for a controller, we try to call "FindEntitySet" or "FindSingleton" once.
            string controllerName = controller.ControllerName;
            ODataControllerActionContext context = new ODataControllerActionContext(modelPrefix, model, controller);

            IEdmEntitySet entitySet = model.EntityContainer?.FindEntitySet(controllerName);

            if (entitySet != null)
            {
                context.NavigationSource = entitySet;
            }

            IEdmSingleton singleton = model.EntityContainer?.FindSingleton(controllerName);

            if (singleton != null)
            {
                context.NavigationSource = singleton;
            }

            return(context);
        }
Esempio n. 23
0
        public override string GetCode(ControllerModel c, CCOLCodeTypeEnum type, string ts)
        {
            var sb = new StringBuilder();


            var dets = new List <Tuple <FaseCyclusModel, DetectorModel> >();

            foreach (var fc in c.Fasen.Where(x => x.SchoolIngreep != Models.Enumerations.NooitAltijdAanUitEnum.Nooit))
            {
                foreach (var d in fc.Detectoren.Where(x2 => x2.Type == Models.Enumerations.DetectorTypeEnum.KnopBinnen || x2.Type == Models.Enumerations.DetectorTypeEnum.KnopBuiten))
                {
                    dets.Add(new Tuple <FaseCyclusModel, DetectorModel>(fc, d));
                }
            }
            if (!dets.Any())
            {
                return("");
            }

            switch (type)
            {
            case CCOLCodeTypeEnum.RegCPreApplication:
                sb.AppendLine($"{ts}/* School ingreep */");
                foreach (var d in dets)
                {
                    sb.AppendLine($"{ts}RT[{_tpf}{_tdbsi}{_dpf}{d.Item2.Naam}] = !D[{_dpf}{d.Item2.Naam}];");
                }
                foreach (var d in dets)
                {
                    sb.AppendLine($"{ts}IH[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}] = D[{_dpf}{d.Item2.Naam}] && !(RT[{_tpf}{_tdbsi}{_dpf}{d.Item2.Naam}] || T[{_tpf}{_tdbsi}{_dpf}{d.Item2.Naam}]) && !(CIF_IS[{_dpf}{d.Item2.Naam}] >= CIF_DET_STORING) && (R[{_fcpf}{d.Item1.Naam}] || FG[{_fcpf}{d.Item1.Naam}] || H[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}]) || TDH[{_dpf}{d.Item2.Naam}] && !(CIF_IS[{_dpf}{d.Item2.Naam}] >= CIF_DET_STORING) && H[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}];");
                }
                break;

            case CCOLCodeTypeEnum.RegCMeetkriterium:
                sb.AppendLine($"{ts}/* School ingreep: reset BITs */");
                foreach (var fc in c.Fasen.Where(x => x.SchoolIngreep != Models.Enumerations.NooitAltijdAanUitEnum.Nooit))
                {
                    sb.AppendLine($"{ts}RW[{_fcpf}{fc.Naam}] &= ~BIT8;");
                }
                sb.AppendLine();
                sb.AppendLine($"{ts}/* School ingreep: set RW BIT8 */");
                foreach (var d in dets)
                {
                    if (d.Item1.SchoolIngreep != Models.Enumerations.NooitAltijdAanUitEnum.Altijd)
                    {
                        sb.Append($"{ts}if (SCH[{_schpf}{_schschoolingreep}{d.Item1.Naam}] && ");
                    }
                    else
                    {
                        sb.Append($"{ts}if (");
                    }
                    sb.AppendLine($"H[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}] && T[{_tpf}{_tschoolingreepmaxg}{d.Item1.Naam}]) RW[{_fcpf}{d.Item1.Naam}] |= BIT8;");
                }
                break;

            case CCOLCodeTypeEnum.RegCRealisatieAfhandeling:
                sb.AppendLine($"{ts}/* School ingreep: bijhouden max groen & vasthouden naloop tijd */");
                foreach (var fc in c.Fasen.Where(x => x.SchoolIngreep != Models.Enumerations.NooitAltijdAanUitEnum.Nooit))
                {
                    sb.AppendLine($"{ts}RT[{_tpf}{_tschoolingreepmaxg}{fc.Naam}] = SG[{_fcpf}{fc.Naam}];");
                }
                foreach (var d in dets)
                {
                    var nl = c.InterSignaalGroep.Nalopen.FirstOrDefault(x => x.Type == Models.Enumerations.NaloopTypeEnum.StartGroen && x.DetectieAfhankelijk && x.Detectoren.Any(x2 => x2.Detector == d.Item2.Naam));
                    if (nl != null)
                    {
                        sb.AppendLine($"{ts}HT[{_tpf}{_tnlsgd}{nl.FaseVan}{nl.FaseNaar}] = T[{_tpf}{_tschoolingreepmaxg}{d.Item1.Naam}] && CV[{_fcpf}{d.Item1.Naam}] && G[{_fcpf}{d.Item1.Naam}] && IH[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}];");
                    }
                }
                break;

            case CCOLCodeTypeEnum.RegCPostSystemApplication:
                sb.AppendLine($"{ts}/* School ingreep: knipperen wachtlicht */");
                foreach (var d in dets)
                {
                    if (d.Item1.SchoolIngreep != Models.Enumerations.NooitAltijdAanUitEnum.Altijd)
                    {
                        sb.Append($"{ts}if (SCH[{_schpf}{_schschoolingreep}{d.Item1.Naam}]) ");
                    }
                    sb.AppendLine($"CIF_GUS[{_uspf}{_uswt}{d.Item2.Naam}] = CIF_GUS[{_uspf}{_uswt}{d.Item2.Naam}] && !(IH[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}] && Knipper_1Hz) || G[{_fcpf}{d.Item1.Naam}] && D[{_dpf}{d.Item2.Naam}] && IH[{_hpf}{_hschoolingreep}{_dpf}{d.Item2.Naam}] && Knipper_1Hz;");
                }
                break;
            }

            return(sb.ToString());
        }
 protected override void ApplyConvention(ControllerModel controller)
 {
     controller.Filters.Add(new LocalhostFilter());
 }
Esempio n. 25
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());
        /// <summary>
        /// Creates a <see cref="ControllerModel"/> for the given <see cref="TypeInfo"/>.
        /// </summary>
        /// <param name="typeInfo">The <see cref="TypeInfo"/>.</param>
        /// <returns>A <see cref="ControllerModel"/> for the given <see cref="TypeInfo"/>.</returns>
        internal static ControllerModel CreateControllerModel(TypeInfo typeInfo)
        {
            if (typeInfo == null)
            {
                throw Error.ArgumentNull(nameof(typeInfo));
            }

            // For attribute routes on a controller, we want to support 'overriding' routes on a derived
            // class. So we need to walk up the hierarchy looking for the first class to define routes.
            //
            // Then we want to 'filter' the set of attributes, so that only the effective routes apply.
            var currentTypeInfo = typeInfo;
            var objectTypeInfo  = typeof(object).GetTypeInfo();

            IRouteTemplateProvider[] routeAttributes;

            do
            {
                routeAttributes = currentTypeInfo
                                  .GetCustomAttributes(inherit: false)
                                  .OfType <IRouteTemplateProvider>()
                                  .ToArray();

                if (routeAttributes.Length > 0)
                {
                    // Found 1 or more route attributes.
                    break;
                }

                currentTypeInfo = currentTypeInfo.BaseType.GetTypeInfo();
            }while (currentTypeInfo != objectTypeInfo);

            // CoreCLR returns IEnumerable<Attribute> from GetCustomAttributes - the OfType<object>
            // is needed to so that the result of ToArray() is object
            var attributes = typeInfo.GetCustomAttributes(inherit: true);

            // This is fairly complicated so that we maintain referential equality between items in
            // ControllerModel.Attributes and ControllerModel.Attributes[*].Attribute.
            var filteredAttributes = new List <object>();

            foreach (var attribute in attributes)
            {
                if (attribute is IRouteTemplateProvider)
                {
                    // This attribute is a route-attribute, leave it out.
                }
                else
                {
                    filteredAttributes.Add(attribute);
                }
            }

            filteredAttributes.AddRange(routeAttributes);

            attributes = filteredAttributes.ToArray();

            var controllerModel = new ControllerModel(typeInfo, attributes);

            AddRange(controllerModel.Selectors, CreateSelectors(attributes));

            controllerModel.ControllerName =
                typeInfo.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) ?
                typeInfo.Name.Substring(0, typeInfo.Name.Length - "Controller".Length) :
                typeInfo.Name;

            AddRange(controllerModel.Filters, attributes.OfType <IFilterMetadata>());

            foreach (var routeValueProvider in attributes.OfType <IRouteValueProvider>())
            {
                controllerModel.RouteValues.Add(routeValueProvider.RouteKey, routeValueProvider.RouteValue);
            }

            var apiVisibility = attributes.OfType <IApiDescriptionVisibilityProvider>().FirstOrDefault();

            if (apiVisibility != null)
            {
                controllerModel.ApiExplorer.IsVisible = !apiVisibility.IgnoreApi;
            }

            var apiGroupName = attributes.OfType <IApiDescriptionGroupNameProvider>().FirstOrDefault();

            if (apiGroupName != null)
            {
                controllerModel.ApiExplorer.GroupName = apiGroupName.GroupName;
            }

            // Controllers can implement action filter and result filter interfaces. We add
            // a special delegating filter implementation to the pipeline to handle it.
            //
            // This is needed because filters are instantiated before the controller.
            //if (typeof(IAsyncActionFilter).GetTypeInfo().IsAssignableFrom(typeInfo) ||
            //    typeof(IActionFilter).GetTypeInfo().IsAssignableFrom(typeInfo))
            //{
            //    controllerModel.Filters.Add(new ControllerActionFilter());
            //}
            //if (typeof(IAsyncResultFilter).GetTypeInfo().IsAssignableFrom(typeInfo) ||
            //    typeof(IResultFilter).GetTypeInfo().IsAssignableFrom(typeInfo))
            //{
            //    controllerModel.Filters.Add(new ControllerResultFilter());
            //}

            return(controllerModel);
        }
Esempio n. 27
0
        public void Apply(ControllerModel controller)
        {
            var featureName = GetFeatureName(controller.ControllerType);

            controller.Properties.Add("feature", featureName);
        }
Esempio n. 28
0
        public void ConvertOldVersionSoftwareDataFileToCurrentModel8001()
        {
            _databaseService = new MSAccessDatabaseAccess(@"E:\2016\6 软件优化升级\4 实际工程数据\工程数据111\连城心怡都城_文件版本5.mdb", _logRecorder, _fileService);
            IOldVersionSoftwareDBService oldVersionService   = new OldVersionSoftware8001DBService(_databaseService);
            IControllerOperation         controllerOperation = null;

            string[]        strFileInfo    = oldVersionService.GetFileVersionAndControllerType();
            ControllerModel controllerInfo = null;

            if (strFileInfo.Length > 0)
            {
                switch (strFileInfo[0])
                {
                case "8001":
                    controllerOperation = new ControllerOperation8001();
                    break;
                }
                if (controllerOperation != null)
                {
                    controllerInfo = controllerOperation.OrganizeControllerInfoFromOldVersionSoftwareDataFile(oldVersionService);
                }
                //strFileInfo[1];
            }
            Assert.That(controllerInfo.Type, Is.EqualTo(ControllerType.NT8001), "控制器类型不正确");
            Assert.That(controllerInfo.DeviceAddressLength, Is.EqualTo(7), "器件长度为7");
            Assert.That(controllerInfo.Loops.Count, Is.EqualTo(10), "回路数量不正确");
            Assert.That(controllerInfo.Loops[0].Code, Is.EqualTo("0001"), "回路名称不正确");
            Assert.That(controllerInfo.Loops[0].DeviceAmount, Is.EqualTo(46), "01回路器件数量不正确");
            Assert.That(controllerInfo.Loops[0].GetDevices <Model.DeviceInfo8001>()[0].Code, Is.EqualTo("0001001"), "器件编码不正确");

            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].Code, Is.EqualTo("0003001"), "器件编码不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].TypeCode, Is.EqualTo(4), "器件类型不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].Disable, Is.EqualTo(0), "隔离不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].SensitiveLevel, Is.EqualTo(2), "灵敏度不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].Location, Is.EqualTo("A2三层306店"), "地点不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].BuildingNo, Is.EqualTo(1), "楼号不正确");
            //区号可以为0
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].ZoneNo, Is.EqualTo(2), "区号不正确");
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].FloorNo, Is.EqualTo(3), "层号不正确");
            //房间可以为0
            Assert.That(controllerInfo.Loops[2].GetDevices <Model.DeviceInfo8001>()[0].RoomNo, Is.EqualTo(null), "房间号不正确");

            Assert.That(controllerInfo.Loops[1].Code, Is.EqualTo("0002"), "回路名称不正确");

            Assert.That(controllerInfo.StandardConfig.Count, Is.EqualTo(20), "标准组态数量为20");
            Assert.That(controllerInfo.StandardConfig[13].Code, Is.EqualTo("0014"), "标准组态编号为0014");
            Assert.That(controllerInfo.StandardConfig[13].DeviceNo4, Is.EqualTo("0007102"), "编号4的编号为0007102");
            Assert.That(controllerInfo.StandardConfig[13].LinkageNo2, Is.EqualTo("0020"), "联动组2的编号为0020");


            Assert.That(controllerInfo.MixedConfig.Count, Is.EqualTo(53), "混合组态数量为53");
            Assert.That(controllerInfo.MixedConfig[13].Code, Is.EqualTo("0014"), "混合组态编号为0014");
            Assert.That(controllerInfo.MixedConfig[13].ActionCoefficient, Is.EqualTo("1"), "编号14的动作常数为1");
            Assert.That(controllerInfo.MixedConfig[13].ActionType, Is.EqualTo(LinkageActionType.AND), "编号14的动作类型为与");
            Assert.That(controllerInfo.MixedConfig[13].DeviceTypeCodeA, Is.EqualTo(13), "编号14的类型A为13");
            Assert.That(controllerInfo.MixedConfig[29].TypeC, Is.EqualTo(LinkageType.ZoneLayer), "编号30的类型c为区层");
            Assert.That(controllerInfo.MixedConfig[29].BuildingNoC, Is.EqualTo(6), "编号30的楼号为6");
            Assert.That(controllerInfo.MixedConfig[29].ZoneNoC, Is.EqualTo(5), "编号30的区号为5");
            Assert.That(controllerInfo.MixedConfig[29].LayerNoC, Is.EqualTo(-1), "编号30的层号为-1");
            Assert.That(controllerInfo.MixedConfig[30].TypeC, Is.EqualTo(LinkageType.Address), "编号31的类型c为地址");
            Assert.That(controllerInfo.MixedConfig[30].MachineNoC, Is.EqualTo("00"), "编号31的机号为00");
            Assert.That(controllerInfo.MixedConfig[30].LoopNoC, Is.EqualTo("07"), "编号31的路号为07");
            Assert.That(controllerInfo.MixedConfig[30].DeviceCodeC, Is.EqualTo("075"), "编号31的地编号为075");

            Assert.That(controllerInfo.GeneralConfig.Count, Is.EqualTo(37), "通用组态数量为37");
            Assert.That(controllerInfo.GeneralConfig[13].Code, Is.EqualTo("0014"), "通用组态编号为0014");
            Assert.That(controllerInfo.GeneralConfig[13].ActionCoefficient, Is.EqualTo("1"), "编号14的动作常数为1");
            Assert.That(controllerInfo.GeneralConfig[13].BuildingNoA, Is.EqualTo(6), "编号14的楼号为6");
            Assert.That(controllerInfo.GeneralConfig[13].ZoneNoA, Is.EqualTo(5), "编号14的区号为5");
            Assert.That(controllerInfo.GeneralConfig[13].LayerNoA1, Is.EqualTo(0), "编号14的层号A1为0");
            Assert.That(controllerInfo.GeneralConfig[13].LayerNoA2, Is.EqualTo(0), "编号14的层号A2为0");
            Assert.That(controllerInfo.GeneralConfig[13].DeviceTypeCodeA, Is.EqualTo(13), "编号14的类型A为13");

            Assert.That(controllerInfo.GeneralConfig[13].TypeC, Is.EqualTo(LinkageType.ZoneLayer), "编号14的分类C为区层");
            Assert.That(controllerInfo.GeneralConfig[13].BuildingNoC, Is.EqualTo(6), "编号14的楼号为6");
            Assert.That(controllerInfo.GeneralConfig[13].ZoneNoC, Is.EqualTo(5), "编号14的区号C为5");
            Assert.That(controllerInfo.GeneralConfig[13].LayerNoC, Is.EqualTo(-1), "编号14的层号C为-1");
            Assert.That(controllerInfo.GeneralConfig[13].DeviceTypeCodeC, Is.EqualTo(36), "编号14的层号C为36");

            Assert.That(controllerInfo.GeneralConfig[14].TypeC, Is.EqualTo(LinkageType.Address), "编号15的分类C为地址");
            Assert.That(controllerInfo.GeneralConfig[14].MachineNoC, Is.EqualTo("00"), "编号15的机号为0");
            Assert.That(controllerInfo.GeneralConfig[14].LoopNoC, Is.EqualTo("01"), "编号15的路号为1");
            Assert.That(controllerInfo.GeneralConfig[14].DeviceCodeC, Is.EqualTo("001"), "编号15的层号C为001");
            Assert.That(controllerInfo.GeneralConfig[14].DeviceTypeCodeC, Is.EqualTo(null), "编号14的层号C为null");
        }
 public void Apply(ControllerModel controller)
 {
     controller.ControllerName = "ChangedController";
 }
        private string GenerateRegCRealisatieAfhandeling(ControllerModel c)
        {
            var sb = new StringBuilder();

            sb.AppendLine("void RealisatieAfhandeling(void)");
            sb.AppendLine("{");

            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandeling, true, false, false, true);
            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandelingModules, true, false, false, true);
            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandelingNaModules, true, false, false, true);
            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandelingModules, false, true, false, true);
            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandelingNaModules, false, true, false, true);

            var molens = new List <ModuleMolenModel> {
                c.ModuleMolen
            };

            if (c.Data.MultiModuleReeksen)
            {
                molens = c.MultiModuleMolens.Where(x => x.Modules.Any(x2 => x2.Fasen.Any())).ToList();
            }

            if (c.InterSignaalGroep.Nalopen.Any())
            {
                foreach (var m in molens)
                {
                    sb.AppendLine($"{ts}Y{m.Reeks}[{m.Reeks}] = yml_cv_pr_nl(PR{m.Reeks}, {m.Reeks}, {m.Reeks}_MAX);");
                }
            }
            else
            {
                foreach (var m in molens)
                {
                    sb.AppendLine($"{ts}Y{m.Reeks}[{m.Reeks}] = yml_cv_pr(PR{m.Reeks}, {m.Reeks}, {m.Reeks}_MAX);");
                }
            }
            sb.AppendLine();
            foreach (var m in molens)
            {
                if (!m.Modules.Any())
                {
                    continue;
                }
                foreach (var mm in m.Modules)
                {
                    var mmNaam = Regex.Replace(mm.Naam, @"ML[A-E]+", "ML");
                    if (mm.Naam == m.WachtModule)
                    {
                        sb.AppendLine($"{ts}Y{m.Reeks}[{mmNaam}] |= yml_wml(PR{m.Reeks}, {m.Reeks}_MAX);");
                    }
                    else
                    {
                        sb.AppendLine($"{ts}Y{m.Reeks}[{mmNaam}] |= FALSE;");
                    }
                }
            }
            sb.AppendLine();
            sb.AppendLine($"{ts}Modules_Add();");
            sb.AppendLine();
            foreach (var m in molens)
            {
                sb.AppendLine($"{ts}S{m.Reeks} = modules({m.Reeks}_MAX, PR{m.Reeks}, Y{m.Reeks}, &{m.Reeks});");
            }
            sb.AppendLine();
            if (!c.Data.MultiModuleReeksen)
            {
                sb.AppendLine($"{ts}for (fc = 0; fc < FCMAX; ++fc)");
                sb.AppendLine($"{ts}" + "{");
                sb.AppendLine($"{ts}{ts}YM[fc] &= ~BIT5;");
                sb.AppendLine($"{ts}{ts}YM[fc] |= SML && PG[fc] ? BIT5 : FALSE;");
                sb.AppendLine($"{ts}" + "}");
            }
            else
            {
                sb.AppendLine($"{ts}for (fc = 0; fc < FCMAX; ++fc)");
                sb.AppendLine($"{ts}" + "{");
                sb.AppendLine($"{ts}{ts}YM[fc] &= ~BIT5;");
                sb.AppendLine($"{ts}" + "}");
                foreach (var m in molens)
                {
                    if (!m.Modules.Any())
                    {
                        continue;
                    }
                    foreach (var fc in m.Modules.SelectMany(x => x.Fasen).Distinct())
                    {
                        sb.AppendLine($"{ts}YM[{_fcpf}{fc.FaseCyclus}] |= S{m.Reeks} && PG[{_fcpf}{fc.FaseCyclus}] ? BIT5 : FALSE;");
                    }
                }
            }
            sb.AppendLine();

            AddCodeTypeToStringBuilder(c, sb, CCOLCodeTypeEnum.RegCRealisatieAfhandeling, false, true, false, true);

            sb.AppendLine($"{ts}RealisatieAfhandeling_Add();");
            sb.AppendLine("}");
            sb.AppendLine();

            return(sb.ToString());
        }