lsa-planer
LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.
/ src domain rilsa constants.ts
| 1 | import type { |
| 2 | KilometersPerHour, |
| 3 | Meters, |
| 4 | MetersPerSecond, |
| 5 | Ratio, |
| 6 | Seconds, |
| 7 | VehiclesPerHour, |
| 8 | } from '../units'; |
| 9 | import type { Anlagenart, Movement, TrafficMode, UeberfahrzeitAnsatz, VehicleClass } from './types'; |
| 10 | import type { Pruefstand } from './quellen'; |
| 11 | |
| 12 | /** |
| 13 | * Zentrale Kennwerte nach RiLSA 2015 (Richtlinien fuer Lichtsignalanlagen, |
| 14 | * FGSV 321) sowie HBS 2015 fuer die Qualitaetsbewertung. |
| 15 | * |
| 16 | * WICHTIG - Umgang mit diesen Werten: |
| 17 | * |
| 18 | * 1. Dies ist die EINZIGE Quelle dieser Groessen im gesamten Programm. Im |
| 19 | * Altbestand standen dieselben Zahlen zusaetzlich hartcodiert in der |
| 20 | * Berechnung, in der Validierung und in der Simulation - mit abweichenden |
| 21 | * Werten, sodass dieselbe Anlage je nach Programmteil anders bewertet wurde. |
| 22 | * |
| 23 | * 2. Die Werte sind ueber die Vorgabenverwaltung anpassbar (frueher |
| 24 | * "Formel-Studio"), jedoch nur innerhalb der in SAFETY_FLOORS |
| 25 | * festgelegten Schranken. Sicherheitsrelevante Mindestwerte lassen sich |
| 26 | * nicht unterschreiten. |
| 27 | * |
| 28 | * 3. Korrekturen gegenueber dem Altbestand, die das Ergebnis sicherheitsrelevant |
| 29 | * veraendern, sind an der jeweiligen Stelle mit "KORREKTUR" vermerkt. |
| 30 | * |
| 31 | * Die Kennwerte sind nach bestem Wissen aus dem Regelwerk uebernommen. Vor dem |
| 32 | * produktiven Einsatz sind sie einmalig gegen die eigene Ausgabe von RiLSA 2015 |
| 33 | * abzugleichen; die Vorgabenverwaltung zeigt zu jedem Wert die hier hinterlegte |
| 34 | * Herkunft an. |
| 35 | * |
| 36 | * 4. ABSCHNITTSNUMMERN NUR NACH ABGLEICH AM ORIGINAL (Fassung 5.27.0; zuvor |
| 37 | * Befund D4). Hier standen einmal drei geratene |
| 38 | * Verweise ("Abschnitt 3.2", "Abschnitt 3.4"), und alle drei waren falsch. |
| 39 | * Solange die RiLSA nicht vorlag, galt deshalb: gar keine Nummern. Seit dem |
| 40 | * 10.09.2026 liegt die gekaufte Ausgabe vor; die Nummern in dieser Datei |
| 41 | * und in quellen.ts sind an ihr nachgeschlagen. Fuer HBS, RSA 21 und |
| 42 | * VwV-StVO liegt kein Original vor - dort bleibt es bei Regelwerk und |
| 43 | * Sachgebiet. Eine falsche Fundstelle ist schlimmer als gar keine, weil sie |
| 44 | * den Pruefer an die falsche Stelle schickt und den ganzen Wert entwertet, |
| 45 | * sobald er dort nichts findet. |
| 46 | * |
| 47 | * 5. KEIN WORTLAUT DES REGELWERKS. Die RiLSA ist urheberrechtlich geschuetzt. |
| 48 | * Genannt werden Fundstelle und Kennwert; zitiert wird hoechstens kurz und |
| 49 | * mit Quellenangabe, nie ein ganzer Abschnitt. |
| 50 | */ |
| 51 | |
| 52 | /** Gelbzeiten in Abhaengigkeit von der zulaessigen Hoechstgeschwindigkeit. */ |
| 53 | export interface YellowTimeStep { |
| 54 | /** Obergrenze der zulaessigen Hoechstgeschwindigkeit (einschliesslich). */ |
| 55 | readonly upToKmh: KilometersPerHour; |
| 56 | readonly yellow: Seconds; |
| 57 | } |
| 58 | |
| 59 | export interface RilsaDefaults { |
| 60 | /** Gelbzeitstaffel Kraftfahrzeugverkehr (RiLSA 2015, Signalzeiten). */ |
| 61 | readonly yellowBySpeed: readonly YellowTimeStep[]; |
| 62 | /** |
| 63 | * Gelbzeit fuer Radverkehr mit eigenem Signalgeber. |
| 64 | * |
| 65 | * KORREKTUR (Fassung 5.27.0, RiLSA 2015 Abschnitt 2.4): Hier standen 3 s. |
| 66 | * Die RiLSA nennt fuer gesondert signalisierten Radverkehr eine einheitliche |
| 67 | * Uebergangszeit GELB von 2 s und ROT/GELB von 1 s. Die Ueberfahrzeit des |
| 68 | * Radverkehrs haengt nicht an diesem Wert (Fall 5: tue = 1 s, siehe |
| 69 | * crossingTime.radDefault); die Gelbzeit wirkt auf den Signalzeitenplan und |
| 70 | * ueber die Uebergangszeit auf die Umlaufzeit. |
| 71 | */ |
| 72 | readonly yellowRad: Seconds; |
| 73 | /** |
| 74 | * Rot-Gelb-Zeit. |
| 75 | * KORREKTUR: Der Altbestand setzte 2 s an. RiLSA 2015 gibt 1 s vor. Zwei |
| 76 | * Sekunden verlaengern jeden Phasenuebergang und verschieben die gesamte |
| 77 | * Freigabezeitverteilung. |
| 78 | */ |
| 79 | readonly redYellow: Seconds; |
| 80 | /** Mindestfreigabezeiten je Verkehrsart (RiLSA 2015, Signalzeiten). */ |
| 81 | readonly minGreen: Readonly<Record<TrafficMode, Seconds>>; |
| 82 | /** Uebliche Obergrenze der Freigabezeit; reiner Plausibilitaetswert. */ |
| 83 | readonly maxGreen: Seconds; |
| 84 | |
| 85 | /** |
| 86 | * Raeumgeschwindigkeiten vr in m/s (RiLSA 2015, Zwischenzeitberechnung). |
| 87 | * KORREKTUR: Der Altbestand rechnete fuer Kfz mit 50 km/h = 13,9 m/s. Das ist |
| 88 | * deutlich schneller als der Regelwert und verkuerzt die Raeumzeit - und damit |
| 89 | * die Zwischenzeit - sicherheitsrelevant. |
| 90 | */ |
| 91 | readonly clearingSpeed: { |
| 92 | readonly kfzStraight: MetersPerSecond; |
| 93 | readonly kfzTurning: MetersPerSecond; |
| 94 | /** |
| 95 | * Abbiegende Kraftfahrzeuge an einer Konfliktbeziehung, die als "enger |
| 96 | * Innenradius" gekennzeichnet ist. |
| 97 | * |
| 98 | * REGELWERKSWERT (Fassung 5.27.0): RiLSA 2015, Abschnitt 2.5.2, Fall 2 - |
| 99 | * die Raeumgeschwindigkeit abbiegender Kraftfahrzeuge betraegt 7 m/s, bei |
| 100 | * einem Radius des Fahrstreifeninnenrands unter 10 m dagegen 5 m/s. Der |
| 101 | * Wert wirkt nur, wo das Merkmal an der einzelnen Beziehung gesetzt ist; |
| 102 | * ohne Merkmal gilt kfzTurning. Das Programm kennt keinen Abbiegeradius |
| 103 | * und kann die Schwelle nicht selbst pruefen - das bleibt Sache des |
| 104 | * Bearbeiters. Beleglage siehe unten bei kfzTurning und in quellen.ts |
| 105 | * ('praxis-enger-radius'; der Schluessel behaelt seinen Namen, weil an ihm |
| 106 | * die vom Anwender eingetragene Fundstelle haengt). |
| 107 | */ |
| 108 | readonly kfzTurningEngerRadius: MetersPerSecond; |
| 109 | readonly rad: MetersPerSecond; |
| 110 | readonly fuss: MetersPerSecond; |
| 111 | readonly fussReducedMobility: MetersPerSecond; |
| 112 | /** |
| 113 | * NUR NOCH RUECKFALLWERT (Fassung 5.4.0, Befund A2): Die RiLSA |
| 114 | * 2015 setzt fuer gesondert signalisierten OePNV keine feste |
| 115 | * Raeumgeschwindigkeit an, sondern vr = Vmax/3,6 (Zwischenzeitfall 3, |
| 116 | * woertlich im FGSV-Aenderungsblatt vom 29.07.2015, Originalseite 24). |
| 117 | * Dieser Wert gilt nur, wenn am Strom keine zulaessige |
| 118 | * Hoechstgeschwindigkeit hinterlegt ist - dann konservativ, siehe |
| 119 | * intergreen.ts. |
| 120 | */ |
| 121 | readonly oepnv: MetersPerSecond; |
| 122 | }; |
| 123 | |
| 124 | /** Einfahrgeschwindigkeiten ve in m/s (RiLSA 2015). */ |
| 125 | readonly enteringSpeed: Readonly<Record<TrafficMode, MetersPerSecond>>; |
| 126 | |
| 127 | /** |
| 128 | * Ueberfahrzeiten tue in s (RiLSA 2015). |
| 129 | * Fuer Kraftfahrzeuge entspricht tue der Gelbzeit. Fuer den OePNV gilt die |
| 130 | * Vmax-Staffel OEPNV_UEBERFAHRZEIT_STAFFEL; einen festen Vorgabewert gibt es |
| 131 | * seit Fassung 5.4.0 (Befund A2) nicht mehr - er stand fest auf |
| 132 | * 0 s, was nach RiLSA nur im Haltefall (Fall 4) bzw. bei Abmeldung zulaessig |
| 133 | * ist. |
| 134 | * |
| 135 | * BELEGLAGE (Fassung 5.27.0, am Original nachgeschlagen): RiLSA 2015, |
| 136 | * Abschnitt 2.5.2 setzt die Ueberfahrzeit des Kraftfahrzeugverkehrs FEST - |
| 137 | * tue = 3 s fuer geradeaus fahrende Kraftfahrzeuge "unabhaengig von der |
| 138 | * zulaessigen Hoechstgeschwindigkeit" (Fall 1) und tue = 2 s fuer abbiegende |
| 139 | * (Fall 2). Der Regelwerksansatz ist damit der FESTE; die Kopplung an die |
| 140 | * Gelbzeit ist der Ansatz dieses Programms. |
| 141 | * |
| 142 | * WAS DAS BERICHTIGT: Bis 5.26.0 stand hier, der Wortlaut zu den Faellen 1 |
| 143 | * und 2 sei "im Aenderungsblatt weggeschnitten und damit oeffentlich nicht |
| 144 | * abgleichbar"; belegt sei nur der Umkehrschluss aus den Zwischenzeitentafeln |
| 145 | * des Hamburger LSA-Leitfadens. Der Umkehrschluss war richtig - die Zahlen |
| 146 | * stimmen -, aber er ist jetzt nicht mehr noetig. |
| 147 | * |
| 148 | * WARUM DIE VORGABE TROTZDEM 'gelbzeit' BLEIBT: Die feste Ueberfahrzeit |
| 149 | * VERKUERZT die Zwischenzeit - beim Abbiegen um bis zu 3 s je Uebergang (5 s |
| 150 | * groesste Gelbzeit gegen 2 s), geradeaus oberhalb von 50 km/h um 1 bis 2 s. |
| 151 | * Die Vorgabe eines ausgelieferten Programms so zu aendern, dass jede |
| 152 | * Zwischenzeit kuerzer wird, ist die gefaehrliche Richtung; dieselbe |
| 153 | * Abwaegung wie bei SAFETY_FLOORS.maxClearingSpeedFuss. Beide Werte sind |
| 154 | * einstellbar; Richtung und Groessenordnung fuer die WIRKSAMEN Vorgaben |
| 155 | * bildet ansaetze.ts (ueberfahrzeitAnsatzRichtungSatz), damit keine Ausgabe |
| 156 | * eine Verkuerzung behauptet, die die eingetragenen Zahlen nicht hergeben |
| 157 | * (Fassung 5.5.0, Befund B5). Der Ansatz ist WAEHLBAR |
| 158 | * (Project.settings.ueberfahrzeitAnsatz): 'gelbzeit' rechnet nie kuerzer als |
| 159 | * die Regelwerte der RiLSA, 'fest' ist der Ansatz des Regelwerks - ob seine |
| 160 | * beiden WERTE die Regelwerte sind, beantwortet festeWerteNachRegelwert |
| 161 | * (ansaetze.ts), denn einstellbar sind sie von 1 bis 10 s. Der |
| 162 | * Pruefbericht nennt beide beim Namen und verlangt fuer den Regelansatz |
| 163 | * dieses Programms keine Begruendung - fuer den festen die Bestaetigung, dass |
| 164 | * er gewollt ist (checkUeberfahrzeitAnsatz in validation/engine.ts meldet |
| 165 | * allein 'fest'; wo der feste Ansatz in keine Zahl des Plans eingeht, meldet |
| 166 | * er statt der Warnung einen Hinweis). |
| 167 | * |
| 168 | * "NIE KUERZER" UND NICHT "DER LAENGERE" (Fassung 5.43.0): Hier stand |
| 169 | * "'gelbzeit' ist der laengere, 'fest' der regelkonforme", und darunter, der |
| 170 | * Bericht verlange "fuer den laengeren keine Begruendung - fuer den |
| 171 | * kuerzeren" die Bestaetigung. Bei 50 km/h geradeaus ergeben beide Ansaetze |
| 172 | * 3 s; laenger ist die Gelbzeitkopplung dort nicht, und mit festen Vorgaben |
| 173 | * ueber der groessten Gelbzeit ist sie die kuerzere - dann haette der Bericht |
| 174 | * nach dem eigenen Wortlaut den Regelansatz melden muessen, und er meldet ihn |
| 175 | * nicht. Wahr bei jeder zulaessigen Vorgabe ist nur "nie kuerzer", und auch |
| 176 | * das nur gegen die Regelwerte der RiLSA (Beleg: SAFETY_FLOORS.yellowKfz |
| 177 | * gegen crossingTime.kfzGeradeaus/kfzAbbiegend, siehe |
| 178 | * UEBERFAHRZEIT_ANSATZ_LABELS). Dieselbe Uebertreibung war am Bildschirm, im |
| 179 | * Pruefbericht und in bewertung.ts schon behoben; im Docblock des Kennwerts |
| 180 | * selbst stand sie weiter. |
| 181 | * |
| 182 | * UND DER ANSATZ IST NICHT SEINE ZAHL (Fassung 5.43.0): Danach stand hier |
| 183 | * "'fest' ist der Regelwerksansatz selbst" - richtig fuer den ANSATZ, zu |
| 184 | * stark fuer seine WERTE, denn die beiden Felder darunter sind von 1 bis 10 s |
| 185 | * einstellbar. Genau diese Verwechslung war Befund B5 der Fassung 5.5.0, und |
| 186 | * wegen ihr gibt es festeWerteNachRegelwert und festeWerteZuschreibungSatz; |
| 187 | * dieser Docblock ist die Stelle, an der der naechste Bearbeiter nachliest. |
| 188 | * Bewacht von tests/domain/ueberholteZuschreibungen.test.ts. |
| 189 | * |
| 190 | * DIE UNTERGRENZE IST SEIT 5.27.0 EINGEBAUT: RiLSA 2015, Abschnitt 2.5.2 |
| 191 | * verlangt fuer die Faelle 1 und 2 tue + tr >= tG + 1. Hier stand bis 5.26.0 |
| 192 | * das Gegenteil ("KEINE UNTERGRENZE"), weil die Regel damals nur auf einer |
| 193 | * sich selbst widersprechenden Webseite stand. Sie steht im Regelwerk; siehe |
| 194 | * UEBERFAHR_RAEUMZEIT_ZUSCHLAG und intergreen.ts. |
| 195 | */ |
| 196 | readonly crossingTime: { |
| 197 | readonly radDefault: Seconds; |
| 198 | readonly fuss: Seconds; |
| 199 | /** Nur bei Ansatz 'fest': Ueberfahrzeit geradeausfahrender Kfz. */ |
| 200 | readonly kfzGeradeaus: Seconds; |
| 201 | /** Nur bei Ansatz 'fest': Ueberfahrzeit abbiegender Kfz. */ |
| 202 | readonly kfzAbbiegend: Seconds; |
| 203 | }; |
| 204 | |
| 205 | /** Laengenzuschlag zum Raeumweg je Fahrzeugart in Metern. */ |
| 206 | readonly vehicleLength: Readonly<Record<VehicleClass, Meters>>; |
| 207 | |
| 208 | /** Umlaufzeitgrenzen (RiLSA 2015, Umlaufzeit). */ |
| 209 | readonly cycleTime: { |
| 210 | readonly min: Seconds; |
| 211 | readonly max: Seconds; |
| 212 | readonly recommendedMin: Seconds; |
| 213 | readonly recommendedMax: Seconds; |
| 214 | /** Rasterung der ermittelten Umlaufzeit. */ |
| 215 | readonly step: Seconds; |
| 216 | }; |
| 217 | |
| 218 | /** |
| 219 | * Anfahrverlustzeit je Freigabezeitbeginn in Sekunden. |
| 220 | * KORREKTUR: Der Altbestand setzte pauschal 4 s Verlustzeit je Phase an und |
| 221 | * zaehlte die Zwischenzeiten NICHT dazu. Tatsaechlich setzt sich die |
| 222 | * Verlustzeit je Umlauf aus den Anfahrverlusten und den Zwischenzeiten |
| 223 | * zusammen; beides wird jetzt getrennt und vollstaendig erfasst. |
| 224 | */ |
| 225 | readonly startUpLostTime: Seconds; |
| 226 | |
| 227 | /** Kapazitaetskennwerte (HBS 2015). */ |
| 228 | readonly capacity: { |
| 229 | /** |
| 230 | * Saettigungsverkehrsstaerke je Fahrstreifen in Fz/h. |
| 231 | * KORREKTUR (Fassung 5.4.0, Befund B3): Hier standen 1800 Fz/h |
| 232 | * unter der Ueberschrift "HBS 2015". Der Wert des HBS (2001 wie 2015) ist |
| 233 | * 2000 Kfz/h (Zeitbedarfswert 1,8 s/Kfz); BASt-Bericht V 400 (2025) |
| 234 | * bestaetigt ihn empirisch: "Saettigungsverkehrsstaerke von 2000 Kfz/h im |
| 235 | * Pkw-Verkehr ohne weitere Einfluesse". 1800 war konservativ, aber als |
| 236 | * Regelwerkswert nicht belegbar - und stand so in der Planunterlage. |
| 237 | * |
| 238 | * Der Wert gilt unter den Standardbedingungen des HBS |
| 239 | * (HBS_STANDARDBEDINGUNGEN) und bei reinem Pkw-Verkehr; den Schwerverkehr |
| 240 | * beruecksichtigt der Anpassungsfaktor fSV (rilsa/capacity.ts, |
| 241 | * schwerverkehrsfaktor). |
| 242 | */ |
| 243 | readonly saturationFlow: VehiclesPerHour; |
| 244 | /** Abminderung fuer abbiegende Stroeme. */ |
| 245 | readonly turningFactor: Ratio; |
| 246 | /** |
| 247 | * Angestrebter Auslastungsgrad x. |
| 248 | * |
| 249 | * RiLSA 2015, Abschnitt 2.6: Fuer x kann zweckmaessigerweise ein Wert |
| 250 | * zwischen 0,80 und 0,90 angesetzt werden. 0,85 liegt in der Mitte dieses |
| 251 | * Bandes; die Wahl innerhalb des Bandes trifft dieses Programm. |
| 252 | */ |
| 253 | readonly targetDegreeOfSaturation: Ratio; |
| 254 | /** |
| 255 | * Obergrenze des Auslastungsgrades fuer eine bemessbare Anlage. |
| 256 | * |
| 257 | * KORREKTUR (Fassung 5.27.0): Hier standen 0,95 - ausserhalb des Bandes, |
| 258 | * das die RiLSA 2015 in Abschnitt 2.6 fuer x nennt (0,80 bis 0,90). Der |
| 259 | * Wert steht im Nenner der HCM-Umlaufzeit und ist die Schwelle der Meldung |
| 260 | * "hoch ausgelastet"; mit 0,95 galt eine Anlage bis dahin als bemessbar, |
| 261 | * die das Regelwerk schon nicht mehr so bemessen wuerde. Jetzt das obere |
| 262 | * Ende des Bandes. Die Richtung ist die vorsichtige: laengere Umlaufzeit |
| 263 | * nach HCM, frueher greifende Meldung. |
| 264 | */ |
| 265 | readonly maxDegreeOfSaturation: Ratio; |
| 266 | /** |
| 267 | * Instationaritaetsfaktor fin des HBS 2015 fuer den Reststau bei |
| 268 | * Freigabezeitende: fin = 1 + ((q15/q) - 1) / 1,5, mit q15 als |
| 269 | * Verkehrsstaerke des hoechstbelasteten 15-min-Intervalls der |
| 270 | * Bemessungsstunde (Leyn 2016, Gl. 3-2; HBS 2015 Gl. S4-46). |
| 271 | * |
| 272 | * Der Vorgabewert 1,1 ist der vom FGSV-Dialog zum HBS 2015 (Kapitel S4) |
| 273 | * genannte Ansatz, wenn keine 15-min-Zaehldaten vorliegen: "Liegen keine |
| 274 | * so differenzierten Zaehldaten vor, sollen vier 15-Minutenintervalle |
| 275 | * verwendet werden, die nach Gl. S4-46 zu einem Instationaritaetsfaktor |
| 276 | * von 1,1 fuehren." Er entspricht q15/q = 1,15. Liegen Zaehldaten vor, |
| 277 | * ist der Wert ueber die Vorgabenverwaltung anzupassen; 1,0 bedeutet |
| 278 | * gleichmaessigen Zufluss. |
| 279 | */ |
| 280 | readonly instationaritaetsfaktor: Ratio; |
| 281 | }; |
| 282 | |
| 283 | /** Kenngroessen der Koordinierung (Gruene Welle). */ |
| 284 | readonly coordination: { |
| 285 | readonly minSpeed: KilometersPerHour; |
| 286 | readonly maxSpeed: KilometersPerHour; |
| 287 | readonly defaultSpeed: KilometersPerHour; |
| 288 | }; |
| 289 | } |
| 290 | |
| 291 | export const RILSA_DEFAULTS: RilsaDefaults = { |
| 292 | yellowBySpeed: [ |
| 293 | { upToKmh: 50, yellow: 3 }, |
| 294 | { upToKmh: 60, yellow: 4 }, |
| 295 | { upToKmh: Number.POSITIVE_INFINITY, yellow: 5 }, |
| 296 | ], |
| 297 | yellowRad: 2, |
| 298 | redYellow: 1, |
| 299 | minGreen: { |
| 300 | kfz: 5, |
| 301 | rad: 5, |
| 302 | fuss: 5, |
| 303 | // Sondersignale des OePNV kennen keine feste Mindestfreigabezeit; der Wert |
| 304 | // dient nur als Plausibilitaetsuntergrenze. Seit Fassung 5.4.0 |
| 305 | // (Befund C19) sagt das auch das Fundstellenverzeichnis: Das Vorgabenfeld |
| 306 | // steht unter 'praxis' und nicht mehr unter 'rilsa-signalzeiten' - belegt |
| 307 | // ist nur die allgemeine Mindestfreigabezeit von 5 s. |
| 308 | oepnv: 3, |
| 309 | }, |
| 310 | maxGreen: 120, |
| 311 | |
| 312 | clearingSpeed: { |
| 313 | kfzStraight: 10.0, |
| 314 | /* |
| 315 | * BELEGLAGE (Fassung 5.27.0, am Original nachgeschlagen): RiLSA 2015, |
| 316 | * Abschnitt 2.5.2, Fall 2 setzt fuer abbiegende Kraftfahrzeuge die |
| 317 | * Raeumgeschwindigkeit vr = 7 m/s an, bei einem Radius des |
| 318 | * Fahrstreifeninnenrands unter 10 m dagegen vr = 5 m/s; die Ueberfahrzeit |
| 319 | * betraegt dort tue = 2 s und die Fahrzeuglaenge lFZ = 6 m. |
| 320 | * |
| 321 | * WAS DAS BERICHTIGT: Bis 5.26.0 stand hier, Fall 2 komme im |
| 322 | * FGSV-Aenderungsblatt nur als Bildunterschrift vor, die 7,0 m/s seien |
| 323 | * allein durch den Hamburger LSA-Leitfaden gestuetzt und die 5 m/s bei |
| 324 | * Innenradius unter 10 m stuenden "auf EINER Quellenlinie" und seien "in |
| 325 | * der RiLSA 2015 nicht nachweisbar". Das war der Stand ohne Original und |
| 326 | * ist durch die gekaufte Ausgabe widerlegt: Beide Zahlen und die |
| 327 | * Radiusschwelle stehen dort. |
| 328 | * |
| 329 | * WARUM DAS MERKMAL TROTZDEM AN DER EINZELNEN BEZIEHUNG HAENGT UND NICHT |
| 330 | * VORGABE IST: Das Programm kennt den Radius des Fahrstreifeninnenrands |
| 331 | * nicht - es hat kein Feld dafuer und koennte die Schwelle nicht pruefen. |
| 332 | * Wer sie ansetzt, setzt sie an der Beziehung, und der Pruefbericht sagt, |
| 333 | * dass er es getan hat. Das ist seit 5.27.0 keine Abweichung mehr, sondern |
| 334 | * die Anwendung des Regelwerksfalls; der Bericht fuehrt sie als Hinweis |
| 335 | * (Conflict.engerRadius, Schema 12). |
| 336 | */ |
| 337 | kfzTurning: 7.0, |
| 338 | kfzTurningEngerRadius: 5.0, |
| 339 | /* |
| 340 | * KORREKTUR (Fassung 5.4.0, Befund A1): Hier standen 5,0 m/s. |
| 341 | * RiLSA 2015, Zwischenzeitfall 5 "Radfahrer raeumen" setzt 4 m/s an - |
| 342 | * woertlich belegt durch das FGSV-Aenderungsblatt vom 29.07.2015, das die |
| 343 | * Originalseite 25 wiedergibt (tue + tr = 1 + s0/4). Der zu hohe Wert |
| 344 | * verkuerzte die Zwischenzeit zulasten des raeumenden Radverkehrs um |
| 345 | * typischerweise 1 s je 20 m Raeumweg. |
| 346 | */ |
| 347 | rad: 4.0, |
| 348 | fuss: 1.2, |
| 349 | fussReducedMobility: 1.0, |
| 350 | /* |
| 351 | * KORREKTUR (Fassung 5.4.0, Befund A2): Kein Regelwert mehr, |
| 352 | * sondern Rueckfallwert ohne bekannte Vmax. Der Regelfall rechnet |
| 353 | * vr = Vmax/3,6 (RiLSA 2015, Fall 3). Die 10,0 m/s entsprechen dem |
| 354 | * bisherigen festen Ansatz und bleiben als konservative Untergrenze |
| 355 | * stehen, solange die Vmax des Stroms fehlt. |
| 356 | */ |
| 357 | oepnv: 10.0, |
| 358 | }, |
| 359 | |
| 360 | enteringSpeed: { |
| 361 | kfz: 11.1, |
| 362 | rad: 5.0, |
| 363 | fuss: 1.5, |
| 364 | /* |
| 365 | * ABGEGLICHEN (Fassung 5.27.0), UND BEWUSST GROESSER ALS DER REGELWERT: |
| 366 | * RiLSA 2015, Abschnitt 2.5.3 nennt fuer Strassenbahnen, die nicht |
| 367 | * regelmaessig von einer Haltestelle aus in den Knotenpunkt einfahren, |
| 368 | * Ve = 20 km/h - also 5,6 m/s statt der hier stehenden 11,1 m/s (40 km/h, |
| 369 | * der Wert des Kraftfahrzeugverkehrs). Bis 5.26.0 war das offen; das |
| 370 | * FGSV-Aenderungsblatt gibt die Einfahrzeiten nicht wieder. |
| 371 | * |
| 372 | * WARUM DER GROESSERE WERT BLEIBT: Die Einfahrzeit wird ABGEZOGEN |
| 373 | * (tz = tue + tr - te). Eine hoeher angesetzte Einfahrgeschwindigkeit |
| 374 | * ergibt eine kuerzere Einfahrzeit und damit eine LAENGERE Zwischenzeit - |
| 375 | * die sichere Seite. Der Regelwert von 20 km/h wuerde jede Zwischenzeit |
| 376 | * verkuerzen, an der eine einfahrende Bahn beteiligt ist. Die RiLSA selbst |
| 377 | * verlangt im selben Absatz, oertlich hoehere Einfahrgeschwindigkeiten zu |
| 378 | * beruecksichtigen; 40 km/h sind eine solche Annahme und decken den Fall |
| 379 | * mit ab, in dem die Bahn schneller einfaehrt als der Regelwert. Die |
| 380 | * Abweichung wird nicht verschwiegen: quellen.ts nennt sie unter |
| 381 | * 'rilsa-zwischenzeiten' als Verschaerfung dieses Programms - dieselbe |
| 382 | * Bauart wie bei der Raeumgeschwindigkeit der Fussgaenger. |
| 383 | * |
| 384 | * Der Haltefall (regelmaessige Einfahrt aus einer Haltestelle) wird von |
| 385 | * diesem Wert nicht beruehrt; die RiLSA rechnet ihn ueber die |
| 386 | * Anfahrbeschleunigung, und dieses Programm bildet ihn auf der RAEUMenden |
| 387 | * Seite ab (OEPNV_ANFAHRBESCHLEUNIGUNG, Fall 4). |
| 388 | */ |
| 389 | oepnv: 11.1, |
| 390 | }, |
| 391 | |
| 392 | crossingTime: { |
| 393 | radDefault: 1, |
| 394 | fuss: 0, |
| 395 | /* |
| 396 | * NEU (Fassung 5.5.0): Die beiden Werte des Ansatzes 'fest'. Sie stehen |
| 397 | * hier und nicht in der Rechnung, damit sie in der Vorgabenverwaltung |
| 398 | * sichtbar und oertlich anpassbar sind - und damit dort steht, woher sie |
| 399 | * kommen: Kopfzeilen der Zwischenzeitentafeln des Hamburger |
| 400 | * LSA-Leitfadens, Anlage A ("geradeausfahrende Kfz (schnell): vr 10 m/s, |
| 401 | * tue 3 s"; "abbiegende Kfz (langsam): vr 7 m/s, tue 2 s"), an rund |
| 402 | * zwanzig Tabellenwerten nachgerechnet. Kein Regelwerkswert - siehe die |
| 403 | * Beleglage im Kopf von RilsaDefaults.crossingTime. |
| 404 | * |
| 405 | * Bei der Vorgabe 'gelbzeit' gehen sie in keine Zahl ein; die |
| 406 | * Vorgabenverwaltung vermerkt das (settings.ts, wirkungslosigkeit). |
| 407 | */ |
| 408 | kfzGeradeaus: 3, |
| 409 | kfzAbbiegend: 2, |
| 410 | // KORREKTUR (Fassung 5.4.0, Befund A2): 'oepnv: 0' ist entfallen. |
| 411 | // Die Ueberfahrzeit des OePNV folgt der Vmax-Staffel (siehe |
| 412 | // OEPNV_UEBERFAHRZEIT_STAFFEL); 0 s gilt nur im Haltefall. |
| 413 | }, |
| 414 | |
| 415 | vehicleLength: { |
| 416 | /* |
| 417 | * KORREKTUR (Fassung 5.4.0, Befund B5): Hier standen Lkw 12 m, |
| 418 | * Bus 12 m und Lastzug 18,75 m - die zulassungsrechtlichen Hoechstlaengen |
| 419 | * nach Par. 32 StVZO, keine RiLSA-Rechenwerte. Die RiLSA rechnet mit |
| 420 | * fiktiven Laengen: 6 m fuer Kraftfahrzeuge einschliesslich Lastzuege und |
| 421 | * Linienbusse (Fall 3 woertlich: "lFZ = 6 m bei Linienbussen"; fuer Lkw |
| 422 | * und Lastzug uebereinstimmende Sekundaerquellen, u. a. der Hamburger |
| 423 | * Leitfaden fuer Lichtsignalanlagen, der Lkw mit "fiktiver Fahrzeuglaenge |
| 424 | * = 6 m" rechnet). Die alten Werte waren konservativ, standen aber als |
| 425 | * "gesichert nach RiLSA 2015" in der Planunterlage - ein Pruefer, der die |
| 426 | * Matrix nachrechnet, kam auf andere Zwischenzeiten. Wer laenger ansetzen |
| 427 | * will, tut das ueber die Vorgabenverwaltung als begruendete oertliche |
| 428 | * Verschaerfung; die Fahrzeugarten bleiben dafuer erhalten. |
| 429 | */ |
| 430 | pkw: 6, |
| 431 | lkw: 6, |
| 432 | bus: 6, |
| 433 | lastzug: 6, |
| 434 | /* |
| 435 | * KORREKTUR (Fassung 5.4.0, Befund A2): Fahrzeugart neu. RiLSA |
| 436 | * 2015, Fall 3, woertlich (FGSV-Aenderungsblatt vom 29.07.2015, |
| 437 | * Originalseite 24): "lFZ = 15 m bei Strassenbahnen, lFZ = 6 m bei |
| 438 | * Linienbussen". |
| 439 | */ |
| 440 | strassenbahn: 15, |
| 441 | rad: 0, |
| 442 | keine: 0, |
| 443 | }, |
| 444 | |
| 445 | /* |
| 446 | * KORREKTUR (Fassung 5.27.0, RiLSA 2015 Abschnitt 2.6): `recommendedMin` |
| 447 | * stand auf 60 s. Die RiLSA nennt als Richtwerte fuer die Umlaufzeit |
| 448 | * minimal 30 s und maximal 90 (120) s - eine Untergrenze von 60 s gibt es |
| 449 | * dort nicht. Sie war eine Zahl dieses Programms, und das Verzeichnis sagte |
| 450 | * das auch ("die 60 s als Untergrenze setzt dieses Programm"); nur hat sie |
| 451 | * jeden Umlauf zwischen 30 und 60 s als "ausserhalb des ueblichen Bereichs" |
| 452 | * gemeldet, den die RiLSA ausdruecklich zulaesst. Der Regelbereich ist jetzt |
| 453 | * der der RiLSA. |
| 454 | */ |
| 455 | cycleTime: { |
| 456 | min: 30, |
| 457 | max: 120, |
| 458 | recommendedMin: 30, |
| 459 | recommendedMax: 90, |
| 460 | step: 5, |
| 461 | }, |
| 462 | |
| 463 | startUpLostTime: 2, |
| 464 | |
| 465 | capacity: { |
| 466 | saturationFlow: 2000, |
| 467 | turningFactor: 0.9, |
| 468 | targetDegreeOfSaturation: 0.85, |
| 469 | maxDegreeOfSaturation: 0.9, |
| 470 | instationaritaetsfaktor: 1.1, |
| 471 | }, |
| 472 | |
| 473 | coordination: { |
| 474 | minSpeed: 30, |
| 475 | maxSpeed: 60, |
| 476 | defaultSpeed: 50, |
| 477 | }, |
| 478 | }; |
| 479 | |
| 480 | /** |
| 481 | * Kennwerte der Engstellensignalisierung nach RiLSA 2015, Abschnitt 5.2. |
| 482 | * |
| 483 | * DIES IST EIN ZWEITES RECHENVERFAHREN und keine Variante des ersten. Die |
| 484 | * RiLSA sagt in Abschnitt 5.2.1, die Ausfuehrungen gelten "primaer fuer die |
| 485 | * transportablen, das heisst voruebergehend eingesetzten Lichtsignalanlagen |
| 486 | * (Baustellenampeln) an Arbeitsstellen" - also fuer die Anlagenart |
| 487 | * `einstreifig` dieses Programms. Was daraus folgt, steht ausgeschrieben im |
| 488 | * Kopf von rilsa/engstellensignalisierung.ts; hier stehen die Zahlen. |
| 489 | * |
| 490 | * NEU (Fassung 5.27.0). Bis dahin rechnete dieses Programm die einstreifige |
| 491 | * Verkehrsfuehrung nach den Knotenpunktregeln des Abschnitts 2. |
| 492 | */ |
| 493 | export const RILSA_ENGSTELLE = { |
| 494 | /** Uebergangszeit GELB an einer Engstelle - unabhaengig von der Vzul. */ |
| 495 | gelbzeit: 4 as Seconds, |
| 496 | /** Uebergangszeit ROT/GELB. */ |
| 497 | rotGelb: 1 as Seconds, |
| 498 | /** Ueberfahrzeit tue in der Zwischenzeitformel des Abschnitts 5.2.2. */ |
| 499 | ueberfahrzeit: 4 as Seconds, |
| 500 | /** |
| 501 | * Mittlere Raeumgeschwindigkeit Vr nach der zulaessigen |
| 502 | * Hoechstgeschwindigkeit - in km/h, weil die Formel des Abschnitts mit |
| 503 | * km/h rechnet (tz = tue + sr/Vr * 3,6). Absteigend geordnet: Die erste |
| 504 | * Stufe, deren `vZulAb` erreicht ist, gilt. |
| 505 | */ |
| 506 | raeumgeschwindigkeit: [ |
| 507 | { vZulAb: 60 as KilometersPerHour, vrKmh: 50 as KilometersPerHour }, |
| 508 | { vZulAb: 50 as KilometersPerHour, vrKmh: 40 as KilometersPerHour }, |
| 509 | { vZulAb: 40 as KilometersPerHour, vrKmh: 30 as KilometersPerHour }, |
| 510 | ], |
| 511 | /** |
| 512 | * Bei schlechter Fahrbahn oder regelmaessig auftretenden |
| 513 | * landwirtschaftlichen Fahrzeugen - unabhaengig von der Vzul. |
| 514 | */ |
| 515 | vrSchlechteFahrbahn: 30 as KilometersPerHour, |
| 516 | /** |
| 517 | * Raeumgeschwindigkeit des Radverkehrs. Sie wird massgebend, wenn die |
| 518 | * Engstelle nicht so breit und uebersichtlich ist, dass sich |
| 519 | * Kraftfahrzeuge und Radfahrer unbedenklich begegnen koennen. |
| 520 | */ |
| 521 | vrRadverkehr: 18 as KilometersPerHour, |
| 522 | /** |
| 523 | * Ueberschlaegliche Saettigungsverkehrsstaerke je Fahrtrichtung. Am |
| 524 | * Knotenpunkt rechnet dieses Programm mit 2000 Kfz/h nach HBS; fuer die |
| 525 | * Engstelle nennt die RiLSA diesen kleineren Anhaltswert und verweist im |
| 526 | * Uebrigen auf das HBS. |
| 527 | */ |
| 528 | saettigungUeberschlaeglich: 1500 as VehiclesPerHour, |
| 529 | /** Beiwert vor der Zwischenzeitsumme in der Umlaufzeitformel. */ |
| 530 | umlaufzeitFaktor: 1.3, |
| 531 | /** Zuschlag in der Umlaufzeitformel. */ |
| 532 | umlaufzeitZuschlag: 4 as Seconds, |
| 533 | /** Die Umlaufzeit sollte nicht groesser sein. */ |
| 534 | maxUmlaufzeit: 300 as Seconds, |
| 535 | } as const; |
| 536 | |
| 537 | /** |
| 538 | * Kennwerte der Koordinierung nach RiLSA 2015, Abschnitt 4.4.4 - die |
| 539 | * Groessen, die das Programm bis 5.26.0 gar nicht kannte. |
| 540 | * |
| 541 | * WARUM SIE HIER STEHEN, OBWOHL SIE HEUTE NUR IN HINWEISE EINGEHEN: Dieselbe |
| 542 | * Begruendung wie bei HBS_STANDARDBEDINGUNGEN. Die Vorgabenwerte der |
| 543 | * Koordinierung (`RILSA_DEFAULTS.coordination`) sind ABSOLUTE Schranken - |
| 544 | * 30 bis 60 km/h, Vorgabe 50 - und stammen aus keinem Regelwerk. Die RiLSA |
| 545 | * gibt statt dessen eine RELATIVE Regel: 90 bis 100 Prozent der zulaessigen |
| 546 | * Hoechstgeschwindigkeit. Bei Vzul 30 km/h liegt die absolute Untergrenze des |
| 547 | * Programms damit ueber dem gesamten zulaessigen Band, bei Vzul 70 km/h die |
| 548 | * Obergrenze darunter. Wer die Koordinierung prueft, muss das lesen koennen. |
| 549 | */ |
| 550 | export const RILSA_KOORDINIERUNG = { |
| 551 | /** Kleinster Anteil der Progressionsgeschwindigkeit an Vzul (90 %). */ |
| 552 | progressionsanteilVon: 0.9, |
| 553 | /** Groesster Anteil der Progressionsgeschwindigkeit an Vzul (100 %). */ |
| 554 | progressionsanteilBis: 1.0, |
| 555 | /** Abstand, bis zu dem Gruene Wellen wirksam sind. */ |
| 556 | wirkbereichRegel: 750 as Meters, |
| 557 | /** Abstand, bis zu dem sie in besonders guenstigen Faellen noch wirksam sind. */ |
| 558 | wirkbereichGuenstig: 1000 as Meters, |
| 559 | /** |
| 560 | * Auslastungsgrad, den eine Zufahrt im Zuge einer Gruenen Welle |
| 561 | * unterschreiten muss, damit eine gute Koordinierungsqualitaet erreichbar |
| 562 | * ist. Dieselbe Zahl wie der Ziel-Auslastungsgrad, aber eine andere Aussage: |
| 563 | * dort eine Bemessungsschwelle, hier eine Bedingung der Koordinierung. |
| 564 | */ |
| 565 | auslastungsgradGrenze: 0.85 as Ratio, |
| 566 | } as const; |
| 567 | |
| 568 | /** |
| 569 | * Furtkennwerte nach RiLSA 2015, Abschnitt 3.6. |
| 570 | * |
| 571 | * WARUM SIE HIER STEHEN, OBWOHL SIE IN KEINE RECHNUNG EINGEHEN: Dieses |
| 572 | * Programm fuehrt die FurtLAENGE (als Raeumweg der Fussgaengergruppe), aber |
| 573 | * keine FurtBREITE - es hat kein Feld dafuer. Die drei Zahlen sind gleichwohl |
| 574 | * Kennwerte des Regelwerks, an denen eine Planung gemessen wird, und die |
| 575 | * Unterlage soll sagen, dass das Programm sie nicht prueft. Wer eine Furt |
| 576 | * schmaler als 3,00 m plant oder breiter als 8,00 m ohne zweiten Signalgeber, |
| 577 | * erfaehrt das nicht von hier. |
| 578 | */ |
| 579 | export const RILSA_FURT = { |
| 580 | /** Regelbreite einer Fussgaengerfurt. */ |
| 581 | regelbreite: 4.0 as Meters, |
| 582 | /** Mindestbreite einer Fussgaengerfurt. */ |
| 583 | mindestbreite: 3.0 as Meters, |
| 584 | /** Ab dieser Furtbreite sollte je Richtung ein zweiter Signalgeber stehen. */ |
| 585 | zweiterSignalgeberAb: 8.0 as Meters, |
| 586 | } as const; |
| 587 | |
| 588 | /** |
| 589 | * Zeiten der Phasenuebergaenge nach RiLSA 2015, Abschnitt 2.7 - ebenfalls |
| 590 | * Kennwerte ohne Rechenwirkung in dieser Fassung. |
| 591 | * |
| 592 | * Zeitvorsprung (2.7.5) und verzoegerter Freigabezeitbeginn (2.7.6) gehoeren |
| 593 | * zur bedingt vertraeglichen Fuehrung, die dieses Programm bewusst nicht |
| 594 | * abbildet. Die Mindestsperrzeit (2.7.3) ist eine Schranke, die eine |
| 595 | * Festzeitsteuerung mit sinnvollen Freigabezeiten nie erreicht - sie steht |
| 596 | * hier, damit die Unterlage sie nennen kann und nicht der Eindruck entsteht, |
| 597 | * das Programm habe sie uebersehen. |
| 598 | */ |
| 599 | export const RILSA_PHASENUEBERGANG = { |
| 600 | /** Kuerzeste Sperrzeit einer Signalgruppe. */ |
| 601 | mindestsperrzeit: 1 as Seconds, |
| 602 | /** Zeitvorsprung bevorrechtigter Fussgaenger und Radfahrer, von. */ |
| 603 | zeitvorsprungVon: 1 as Seconds, |
| 604 | /** Zeitvorsprung bevorrechtigter Fussgaenger und Radfahrer, bis. */ |
| 605 | zeitvorsprungBis: 2 as Seconds, |
| 606 | /** Verzoegerter Freigabezeitbeginn nicht vertraeglicher Stroeme, von. */ |
| 607 | verzoegerterBeginnVon: 2 as Seconds, |
| 608 | /** Verzoegerter Freigabezeitbeginn nicht vertraeglicher Stroeme, bis. */ |
| 609 | verzoegerterBeginnBis: 4 as Seconds, |
| 610 | } as const; |
| 611 | |
| 612 | /** |
| 613 | * Uebergangszeit gesondert signalisierter OePNV-Fahrzeuge - die Dauer des |
| 614 | * Uebergangssignals von der Freigabe- zur Sperrzeit (RiLSA 2015, |
| 615 | * Abschnitt 2.4), gestaffelt nach der betrieblich zugelassenen |
| 616 | * Hoechstgeschwindigkeit in der Knotenpunktzufahrt. |
| 617 | * |
| 618 | * NEU (Fassung 5.27.0). Bis dahin lieferte yellowTime fuer OePNV-Gruppen 0 s |
| 619 | * mit dem Vermerk "Sondersignale (Balkensignale) kennen kein Gelb", und der |
| 620 | * Pruefbericht sagte denselben Satz. Beides ist falsch: Fuer gesondert |
| 621 | * signalisierte Strassenbahnen soll beim Uebergang von der Freigabe- zur |
| 622 | * Sperrzeit ein Uebergangssignal nach Par. 51 BOStrab gezeigt werden, und die |
| 623 | * RiLSA staffelt seine Dauer. Ein Signalzeitenplan ohne diese Zeit zeichnet |
| 624 | * einen Uebergang, den es so nicht gibt. |
| 625 | * |
| 626 | * NICHT ABGEBILDET, UND ZWAR BEIDES IN DIE LAENGERE RICHTUNG: |
| 627 | * |
| 628 | * - Die drei Bedingungen, unter denen das Uebergangssignal ENTFALLEN kann |
| 629 | * (ausnahmslos zu halten, Signalwechsel im Betriebsbremsweg ausgeschlossen, |
| 630 | * Hoechstgeschwindigkeit bis 20 km/h - und zwar zusammen). Sie haengen an |
| 631 | * der Oertlichkeit und an der Betriebsvorschrift; das Programm kennt davon |
| 632 | * nur den Halt, und den je Konfliktbeziehung, nicht je Signalgruppe. |
| 633 | * - Die Erlaubnis, die Uebergangszeiten von LINIENBUSSEN mit Sondersignal |
| 634 | * denen der Kraftfahrzeuge anzupassen. Die Staffel liegt bei jeder |
| 635 | * Geschwindigkeit ueber der Kfz-Gelbzeit; wer die kuerzere ansetzen will, |
| 636 | * traegt sie ueber die Vorgabenverwaltung ein. |
| 637 | * |
| 638 | * Oberhalb 70 km/h und ohne bekannte Vmax gilt die oberste Stufe - dieselbe |
| 639 | * Regel wie bei der Ueberfahrzeit-Staffel und aus demselben Grund. |
| 640 | */ |
| 641 | export const OEPNV_UEBERGANGSZEIT_STAFFEL: readonly { |
| 642 | readonly upToKmh: KilometersPerHour; |
| 643 | readonly uebergang: Seconds; |
| 644 | }[] = [ |
| 645 | { upToKmh: 30, uebergang: 4 }, |
| 646 | { upToKmh: 40, uebergang: 5 }, |
| 647 | { upToKmh: 50, uebergang: 6 }, |
| 648 | { upToKmh: 60, uebergang: 7 }, |
| 649 | { upToKmh: 70, uebergang: 8 }, |
| 650 | ]; |
| 651 | |
| 652 | /** |
| 653 | * Zuschlag der Untergrenze fuer die Ueberfahr- und Raeumzeit des |
| 654 | * Kraftfahrzeugverkehrs: RiLSA 2015, Abschnitt 2.5.2 verlangt fuer die |
| 655 | * Faelle 1 und 2 tue + tr >= tG + 1. |
| 656 | * |
| 657 | * NEU (Fassung 5.27.0). Bis dahin war diese Schranke NICHT eingebaut, und der |
| 658 | * Kommentar bei `crossingTime` begruendete das ausfuehrlich: Die Regel habe |
| 659 | * "als woertliche Quelle nur eine Webseite, die sich im selben Text |
| 660 | * widerspricht". Das war der Stand, solange die RiLSA nicht vorlag. Sie steht |
| 661 | * dort woertlich, unmittelbar vor der Aufzaehlung der sechs Faelle, und gilt |
| 662 | * ausdruecklich nur fuer das Ueberfahren und Raeumen geradeaus fahrender |
| 663 | * (Fall 1) und abbiegender Kraftfahrzeuge (Fall 2) - nicht fuer Rad, Fuss und |
| 664 | * OePNV. Genau so ist sie eingebaut. |
| 665 | * |
| 666 | * WARUM EINE FESTE SEKUNDE UND NICHT DIE ROT-GELB-ZEIT: Die RiLSA schreibt die |
| 667 | * Zahl 1 und nicht tRG. Der Sache nach ist es die Rot-Gelb-Zeit des |
| 668 | * einfahrenden Stroms - aber das ist ein Schluss, und die Rot-Gelb-Zeit ist in |
| 669 | * diesem Programm einstellbar (bis 2 s). Wer die Schranke an sie haengte, |
| 670 | * rechnete bei 2 s Rot-Gelb mit einer Untergrenze, die im Regelwerk nicht |
| 671 | * steht. Die Zahl bleibt deshalb die des Regelwerks. |
| 672 | * |
| 673 | * RICHTUNG: Die Schranke VERLAENGERT die Zwischenzeit - die sichere Seite. Sie |
| 674 | * greift, wo der Raeumweg kurz ist: beim Ansatz "Ueberfahrzeit = Gelbzeit" |
| 675 | * unterhalb eines Raeumwegs von vr * 1 s, beim Ansatz "feste Ueberfahrzeit" |
| 676 | * deutlich frueher, weil dort tue kleiner als die Gelbzeit sein kann. |
| 677 | */ |
| 678 | export const UEBERFAHR_RAEUMZEIT_ZUSCHLAG: Seconds = 1; |
| 679 | |
| 680 | /** |
| 681 | * Ueberfahrzeit-Staffel fuer gesondert signalisierte OePNV-Fahrzeuge, die den |
| 682 | * Knotenpunkt OHNE Halt raeumen (RiLSA 2015, Zwischenzeitfall 3). |
| 683 | * |
| 684 | * Woertlich belegt durch das FGSV-Aenderungsblatt vom 29.07.2015, das die |
| 685 | * Originalseiten 23-24 wiedergibt: "Die Ueberfahrzeit betraegt bei |
| 686 | * Strassenbahnen: tue = 3 s bei Vmax <= 30 km/h, tue = 5 s bei |
| 687 | * 30 km/h < Vmax <= 50 km/h, tue = 7 s bei 50 km/h < Vmax <= 70 km/h." |
| 688 | * |
| 689 | * Massgebend ist die betrieblich zugelassene Hoechstgeschwindigkeit des |
| 690 | * Stroms. Oberhalb 70 km/h endet die Staffel; angesetzt wird dann die oberste |
| 691 | * Stufe (laengere Ueberfahrzeit = laengere Zwischenzeit, sichere Seite), und |
| 692 | * die Rechnung meldet die Ueberschreitung (LSA sollen oberhalb 70 km/h nicht |
| 693 | * betrieben werden, VwV-StVO zu Par. 37 Rn. 10). |
| 694 | * |
| 695 | * KORREKTUR (Fassung 5.4.0, Befund A2): Zuvor stand die OePNV-Ueberfahrzeit |
| 696 | * fest auf 0 s - das gilt nach dem Aenderungsblatt nur im Haltefall (Fall 4) |
| 697 | * oder "durch eine Abmeldung nach Passieren des Freigabesignals". |
| 698 | */ |
| 699 | export const OEPNV_UEBERFAHRZEIT_STAFFEL: readonly { |
| 700 | readonly upToKmh: KilometersPerHour; |
| 701 | readonly crossing: Seconds; |
| 702 | }[] = [ |
| 703 | { upToKmh: 30, crossing: 3 }, |
| 704 | { upToKmh: 50, crossing: 5 }, |
| 705 | { upToKmh: 70, crossing: 7 }, |
| 706 | ]; |
| 707 | |
| 708 | /** |
| 709 | * Anfahrbeschleunigung fuer den OePNV-Haltefall (RiLSA 2015, |
| 710 | * Zwischenzeitfall 4: "OePNV-Fahrzeuge raeumen - bei Halt vor dem |
| 711 | * Knotenpunkt"). |
| 712 | * |
| 713 | * Woertlich belegt durch das FGSV-Aenderungsblatt vom 29.07.2015 |
| 714 | * (Originalseite 24): "Der Regelwert fuer die Beschleunigung von |
| 715 | * Strassenbahnen betraegt a = 1,0 m/s2. Antriebs- und uebertragungsbedingt |
| 716 | * kann dieser Wert in einem Bereich von a = 0,7 m/s2 bis 1,5 m/s2 variieren |
| 717 | * [...]. Fuer Linienbusse betraegt der Regelwert a = 1,2 m/s2. Schwankungen |
| 718 | * koennen von a = 1,0 m/s2 bis 1,5 m/s2 auftreten." |
| 719 | * |
| 720 | * Angesetzt werden die Regelwerte. Fuer jede andere Fahrzeugart eines |
| 721 | * OePNV-Stroms gilt der kleinere Wert (1,0 m/s2) - er ergibt die laengere |
| 722 | * Anfahrzeit und liegt damit auf der sicheren Seite. |
| 723 | */ |
| 724 | export const OEPNV_ANFAHRBESCHLEUNIGUNG = { |
| 725 | /** Strassenbahn, Regelwert in m/s2. */ |
| 726 | strassenbahn: 1.0, |
| 727 | /** Linienbus, Regelwert in m/s2. */ |
| 728 | bus: 1.2, |
| 729 | } as const; |
| 730 | |
| 731 | /** |
| 732 | * Pkw-Gleichwerte des Schwerverkehrs nach HBS 2015. |
| 733 | * |
| 734 | * KORREKTUR (Fassung 5.5.0): Hier gab es nichts - die |
| 735 | * Saettigungsverkehrsstaerke wurde in plan/signalPlan.ts mit |
| 736 | * `base / (1 + Schwerverkehrsanteil)` gerechnet. Das entspricht einem |
| 737 | * Pkw-Gleichwert von 2,0, und dieser Wert ist NACHWEISLICH NICHT der des HBS: |
| 738 | * BASt-Bericht V 400 (2025), S. 68, woertlich - "Die verwendeten |
| 739 | * Pkw-Gleichwerte von 1,75 fuer Lastkraftwagen (Lkw) und Busse sowie 2,50 fuer |
| 740 | * Sattelkraftfahrzeuge und Lastzuege (Lz) wurden von AHN (1987) fuer den |
| 741 | * Geradeausverkehr bestimmt (1,90 bei unbekannter Aufteilung). [...] Im |
| 742 | * HCM 2010 (TRB, 2010) wurde an LSA ein konstanter Pkw-Gleichwert von 2,00 |
| 743 | * verwendet." Das Programm fuehrte den HCM-Wert unter der HBS-Quelle - dieselbe |
| 744 | * Fehlerklasse wie Befund B3 (1800 Fz/h als "HBS 2015"). |
| 745 | * |
| 746 | * Die Zahlen 1,5 und 2,0 des HBS gehoeren zu dessen Kapitel S5 |
| 747 | * (vorfahrtgeregelte Knotenpunkte OHNE Lichtsignalanlage) und duerfen nicht |
| 748 | * auf S4 uebertragen werden - auch das steht woertlich in derselben Fundstelle. |
| 749 | * |
| 750 | * NICHT UEBERNOMMEN: Der Aenderungsvorschlag desselben Berichts (1,7 statt |
| 751 | * 1,75 und 2,3 statt 2,50, Gl. 4-6) ist ein Forschungsergebnis von 2025 und |
| 752 | * nicht das geltende HBS 2015. |
| 753 | */ |
| 754 | export const HBS_PKW_GLEICHWERTE = { |
| 755 | /** Lkw und Busse (Gl. 2-5). */ |
| 756 | lkwUndBus: 1.75, |
| 757 | /** Lkw mit Anhaenger und Sattel-Kfz (Gl. 2-5). */ |
| 758 | lkwMitAnhaenger: 2.5, |
| 759 | /** |
| 760 | * Schwerverkehr insgesamt bei unbekannter Aufteilung (Gl. 2-6). |
| 761 | * V 400 nennt die Annahme dahinter: ein Anteil der Lkw mit Anhaenger und |
| 762 | * Sattel-Kfz am Schwerverkehr von 20 % (siehe |
| 763 | * HBS_LASTZUGANTEIL_BEI_UNBEKANNTER_AUFTEILUNG). |
| 764 | */ |
| 765 | schwerverkehrPauschal: 1.9, |
| 766 | } as const; |
| 767 | |
| 768 | /** |
| 769 | * Der Lastzuganteil AM SCHWERVERKEHR, der hinter dem Pauschalwert 1,90 steckt. |
| 770 | * |
| 771 | * NEU (Schema 13): Solange das Programm keine Aufteilung des Schwerverkehrs |
| 772 | * erfassen konnte, war der Pauschalwert eine Zahl ohne Vorgeschichte. Er hat |
| 773 | * eine, und sie ist woertlich belegt - BASt-Bericht V 400 (2025), S. 10, zu |
| 774 | * Bild 2-1 d): "Bei einem Anteil der Lkw mit Anhaenger und Sattel-Kfz |
| 775 | * (Fahrzeugklasse LkwK) am Schwerverkehr von 20 % ergibt sich der |
| 776 | * Funktionsverlauf der Gleichung (2-6)." |
| 777 | * |
| 778 | * NACHGERECHNET: 1,75 * 0,8 + 2,50 * 0,2 = 1,40 + 0,50 = 1,90 - exakt, ohne |
| 779 | * Rundung. Gl. 2-6 IST also Gl. 2-5 mit 20 % Lastzuegen am Schwerverkehr. |
| 780 | * |
| 781 | * WARUM DAS ALS KONSTANTE HIER STEHT UND NICHT NUR IM FLIESSTEXT: An dieser |
| 782 | * Zahl haengen drei Aussagen, die auseinanderlaufen wuerden, wenn jede ihre |
| 783 | * eigene 0,2 mitbraechte - der Pruefbericht (er benennt die Annahme, unter der |
| 784 | * ein Strom ohne erfasste Aufteilung gerechnet wird), der Nachweis, dass beide |
| 785 | * Gleichungen bei diesem Anteil dasselbe liefern, und die Aussage der |
| 786 | * Planunterlage. Die Erfassung der Aufteilung ist damit KEIN anderes |
| 787 | * Verfahren, sondern eine Verfeinerung derselben Gleichung: Wer 20 % eintraegt, |
| 788 | * rechnet weiter wie zuvor. |
| 789 | * |
| 790 | * KEIN VORGABENFELD (Befund C20): Der Wert ist keine Wahl des Bearbeiters, |
| 791 | * sondern die Annahme, die im Regelwerk hinter Gl. 2-6 steckt. Wer sie fuer |
| 792 | * seinen Strom nicht teilt, traegt den tatsaechlichen Lastzuganteil ein - dann |
| 793 | * rechnet das Programm nach Gl. 2-5 und die Annahme entfaellt. |
| 794 | */ |
| 795 | export const HBS_LASTZUGANTEIL_BEI_UNBEKANNTER_AUFTEILUNG = 0.2; |
| 796 | |
| 797 | /** |
| 798 | * Zeitzuschlag je Freigabezeitfenster, um den der Abfluss in die Gelbzeit |
| 799 | * hineinlaeuft (HBS 2015): tA = tF + 1 s. |
| 800 | * |
| 801 | * Belegt bei Leyn 2016 zu Gl. 2-8 ("tA,j = tF,j + 1 s"); der BASt-Bericht V 400 |
| 802 | * bestaetigt den Zuschlag empirisch "naeherungsweise". Verwendet wird er in |
| 803 | * `abflusszeit` (capacity.ts) und ueber die Abflusszeit in der Kapazitaet und |
| 804 | * der Wartezeit. |
| 805 | * |
| 806 | * HIER UND NICHT IN capacity.ts (Fassung 5.11.0): Der Zuschlag ist ein Kennwert |
| 807 | * und wird auch als solcher gefuehrt - mit Fundstelle 'hbs-kapazitaet' und |
| 808 | * Pruefstand "gesichert". Er stand trotzdem als eigene Konstante in capacity.ts |
| 809 | * und war damit der einzige Kennwert der Kapazitaetsrechnung ausserhalb dieser |
| 810 | * Datei. Wer die Herkunft im Quelltext nachschlug, fand ihn nicht dort, wo die |
| 811 | * Kennwerte stehen. Dieselbe Aufraeumung hatte der Pkw-Gleichwert 2,0 bereits |
| 812 | * erhalten (Fassung 5.5.0); diese Zeile war dabei uebersehen worden. |
| 813 | * |
| 814 | * KEIN VORGABENFELD - wie HBS_PKW_GLEICHWERTE und |
| 815 | * HBS_LASTZUGANTEIL_BEI_UNBEKANNTER_AUFTEILUNG: Waehlbar ist das |
| 816 | * Bewertungsverfahren, nicht der Wert des Regelwerks. |
| 817 | */ |
| 818 | export const HBS_ABFLUSSZUSCHLAG: Seconds = 1; |
| 819 | |
| 820 | /** |
| 821 | * Randbedingungen, unter denen der Zeitbedarfswert 1,8 s und damit die |
| 822 | * Saettigungsverkehrsstaerke von 2000 Kfz/h gelten. |
| 823 | * |
| 824 | * Woertlich (BASt V 400, S. 9): "Unter Standardbedingungen (Laengsneigung |
| 825 | * -2 % <= s <= 2 %, Kurvenradius R >= 20 m, Fahrstreifenbreite b >= 3 m) bei |
| 826 | * reinem Pkw-Verkehr gibt das HBS 2015 einen Zeitbedarfswert von 1,8 s an, der |
| 827 | * einer Saettigungsverkehrsstaerke von 2000 Kfz/h entspricht." |
| 828 | * |
| 829 | * WARUM DIESE ZAHLEN HIER STEHEN, OBWOHL SIE IN KEINE RECHNUNG EINGEHEN: Das |
| 830 | * Programm bildet die Anpassungsfaktoren f1 und f2 (Fahrstreifenbreite, |
| 831 | * Abbiegeradius, Laengsneigung) NICHT ab und rechnet damit fuer schmale |
| 832 | * Fahrstreifen, enge Abbiegeradien oder Steigungen eine zu GROSSE |
| 833 | * Saettigungsverkehrsstaerke - die unsichere Richtung. Wer die Unterlage |
| 834 | * prueft, muss lesen koennen, wofuer die 2000 Kfz/h gelten; die Zahlen |
| 835 | * erscheinen deshalb im Fundstellenverzeichnis (quellen.ts, 'hbs-kapazitaet'). |
| 836 | */ |
| 837 | export const HBS_STANDARDBEDINGUNGEN = { |
| 838 | /** Laengsneigung in Prozent, Betrag (|s| <= 2 %). */ |
| 839 | laengsneigungBis: 2, |
| 840 | /** Kleinster Kurvenradius in Metern (R >= 20 m). */ |
| 841 | kurvenradiusAb: 20 as Meters, |
| 842 | /** Kleinste Fahrstreifenbreite in Metern (b >= 3 m). */ |
| 843 | fahrstreifenbreiteAb: 3 as Meters, |
| 844 | } as const; |
| 845 | |
| 846 | /** |
| 847 | * Die drei Geraden der geometrischen Anpassungsfaktoren (BASt V 400). |
| 848 | * |
| 849 | * Woertlich: fb = -0,375 * b + 2,125 fuer b < 3,00 m; |
| 850 | * fR = -0,015 * R + 1,3 fuer R < 20 m; fs = 0,03 * s + 1,0 (s in Prozent, mit |
| 851 | * Vorzeichen, positiv fuer die Steigung). |
| 852 | * |
| 853 | * NACHGERECHNET AN DEN GRENZPUNKTEN, an denen die Standardbedingungen enden: |
| 854 | * fb(3,00 m) = -1,125 + 2,125 = 1,000. fR(20 m) = -0,30 + 1,30 = 1,000. |
| 855 | * fs(0 %) = 1,000. Die drei Geraden gehen dort stetig in den Regelfall ueber; |
| 856 | * eine Schwelle, an der der Faktor springt, gibt es nicht. |
| 857 | * |
| 858 | * DIE SCHWELLEN STEHEN NICHT HIER, sondern in HBS_STANDARDBEDINGUNGEN - es |
| 859 | * sind dieselben Zahlen, und zwei Stellen fuer dieselbe Grenze liefen |
| 860 | * auseinander. Der Achsenabschnitt von fs ist ebenfalls keine eigene Zahl: Er |
| 861 | * ist 1 und steht als Literal in der Formel, weil eine Konstante namens |
| 862 | * "eins" nichts erklaert. |
| 863 | * |
| 864 | * WAS HIER NICHT STEHT, weil es eine Entscheidung dieses Programms ist und |
| 865 | * kein Kennwert: der Deckel bei 1 und der Wegfall von fR an abbiegenden |
| 866 | * Stroemen. Beides steht mit seiner Begruendung an `geometriefaktor` in |
| 867 | * rilsa/capacity.ts. |
| 868 | */ |
| 869 | export const HBS_GEOMETRIE = { |
| 870 | breite: { steigung: -0.375, achsenabschnitt: 2.125 }, |
| 871 | radius: { steigung: -0.015, achsenabschnitt: 1.3 }, |
| 872 | neigung: { steigung: 0.03 }, |
| 873 | } as const; |
| 874 | |
| 875 | /** |
| 876 | * Was die drei Geometriefelder bewirken - eine Stelle fuer Ansicht, Hilfe und |
| 877 | * Ausdruck, aus demselben Grund wie UEBERFAHRZEIT_ANSATZ_LABELS. |
| 878 | * |
| 879 | * Der Satz muss beide Abweichungen von der geschlossenen Formel nennen, sonst |
| 880 | * sucht der Bearbeiter die Wirkung, die er erwartet, und findet sie nicht: |
| 881 | * ein Gefaelle hebt nichts, und an einem Abbieger wirkt der Radius nicht. |
| 882 | */ |
| 883 | export const STAURAUM_HINWEIS = |
| 884 | 'Der Stauraum ist die Länge, die dem Rückstau zur Verfügung steht: bis zum Ende des ' + |
| 885 | 'Aufstellstreifens, bis zur nächsten Grundstückszufahrt oder bis zum vorgelagerten ' + |
| 886 | 'Knotenpunkt. Er geht in keine Rechnung ein. Der Plan hält den mittleren Rückstau bei ' + |
| 887 | 'Freigabezeitende dagegen und warnt, wo er ihn erreicht – und weil das der MITTLERE ' + |
| 888 | 'Rückstau ist, steht in etwa der Hälfte der Umläufe mehr. Ein Stauraum, der gerade eben ' + |
| 889 | 'reicht, reicht nicht.'; |
| 890 | |
| 891 | export const GEOMETRIEFAKTOREN_HINWEIS = |
| 892 | 'Ein leeres Feld heißt Standardbedingung (Breite ab 3,00 m, Radius ab 20 m, Längsneigung ' + |
| 893 | 'zwischen −2 % und 2 %); der Faktor ist dann 1, und es wird gerechnet wie bisher. Eine ' + |
| 894 | 'schmale Zufahrt, ein enger Bogen und eine Steigung senken die ' + |
| 895 | 'Sättigungsverkehrsstärke. Zwei Fälle wirken bewusst nicht: Ein Gefälle hebt sie in diesem ' + |
| 896 | 'Programm nicht an, obwohl die Formel es täte, und an einem abbiegenden Strom bleibt der ' + |
| 897 | 'Radius ohne Wirkung, weil ihn der pauschale Abbiegerfaktor 0,90 bereits abdeckt. Beides ' + |
| 898 | 'ist im Fundstellenverzeichnis begründet.'; |
| 899 | |
| 900 | /** |
| 901 | * Grenzen der drei Geometriefelder an der Signalgruppe. |
| 902 | * |
| 903 | * KEINE REGELWERKSWERTE, sondern der Bereich, in dem eine Eingabe ueberhaupt |
| 904 | * eine Zufahrt beschreibt. Sie stehen hier und nicht in der Ansicht, weil das |
| 905 | * Feld UND der sichtbare Bereichshinweis daraus gebildet werden - dieselbe |
| 906 | * Ueberlegung wie bei den Grenzen der Phasenansicht. |
| 907 | * |
| 908 | * Die Geraden sind ausserhalb dieser Bereiche nicht mehr sinnvoll: fb waere |
| 909 | * bei 1,00 m Breite 1,75 und ergaebe eine Saettigungsverkehrsstaerke von |
| 910 | * 1143 Kfz/h - eine Zahl, die kein Fahrstreifen dieser Breite mehr traegt, |
| 911 | * weil dort kein Kraftfahrzeug mehr faehrt. |
| 912 | */ |
| 913 | export const GEOMETRIE_GRENZEN = { |
| 914 | breite: { min: 2 as Meters, max: 6 as Meters, step: 0.05 }, |
| 915 | radius: { min: 3 as Meters, max: 200 as Meters, step: 0.5 }, |
| 916 | neigung: { min: -12, max: 12, step: 0.5 }, |
| 917 | /** |
| 918 | * Stauraum (Schema 15). Die Obergrenze ist grosszuegig: An einer |
| 919 | * Ortsdurchfahrt kann der naechste Knotenpunkt einen halben Kilometer |
| 920 | * entfernt sein, und ein Stauraum, der nie erreicht wird, ist keine falsche |
| 921 | * Angabe - nur eine, die zu keiner Meldung fuehrt. |
| 922 | */ |
| 923 | stauraum: { min: 5 as Meters, max: 2000 as Meters, step: 1 }, |
| 924 | } as const; |
| 925 | |
| 926 | /** |
| 927 | * Benennung der beiden Ueberfahrzeit-Ansaetze - dieselbe am Bildschirm, im |
| 928 | * Pruefbericht und im Ausdruck (Vorbild: BEWERTUNGSVERFAHREN_LABELS). |
| 929 | * |
| 930 | * DIE BESCHRIFTUNGEN HABEN SICH MIT 5.27.0 VERTAUSCHT, und das ist keine |
| 931 | * Stilpflege. Bis dahin hiess 'fest' "Praxisansatz nach behoerdlichen |
| 932 | * Leitfaeden; der Wortlaut der RiLSA 2015 ist nicht abgleichbar" - weil der |
| 933 | * Wortlaut zu den Faellen 1 und 2 im FGSV-Aenderungsblatt weggeschnitten ist. |
| 934 | * Die gekaufte Ausgabe hat ihn: Abschnitt 2.5.2 setzt tue = 3 s fuer geradeaus |
| 935 | * fahrende Kraftfahrzeuge "unabhaengig von der zulaessigen |
| 936 | * Hoechstgeschwindigkeit" und tue = 2 s fuer abbiegende. Der REGELWERKSANSATZ |
| 937 | * ist also der feste; die Kopplung an die Gelbzeit ist der Ansatz DIESES |
| 938 | * Programms. |
| 939 | * |
| 940 | * WARUM 'gelbzeit' trotzdem die Vorgabe bleibt: Mit der Regelstaffel ist sie |
| 941 | * bei jeder zulaessigen Hoechstgeschwindigkeit ueber 50 km/h und bei jedem |
| 942 | * Abbieger die LAENGERE Ueberfahrzeit und damit die laengere Zwischenzeit. Eine |
| 943 | * Vorgabe zu aendern, die jede Zwischenzeit eines ausgelieferten Programms |
| 944 | * verkuerzt, waere die gefaehrliche Richtung; dieselbe Abwaegung wie bei der |
| 945 | * Raeumgeschwindigkeit der Fussgaenger (SAFETY_FLOORS.maxClearingSpeedFuss). |
| 946 | * Wer regelkonform rechnen will, waehlt 'fest' - und die Beschriftung sagt |
| 947 | * jetzt, dass das der Regelwerksansatz ist. |
| 948 | * |
| 949 | * "NIE KUERZER", NICHT "LAENGER" (Fassung 5.43.0): Hier stand "länger als der |
| 950 | * Regelwert". Bei 50 km/h geradeaus ergeben beide Ansaetze 3 s, und ein |
| 951 | * Bildschirmfoto der Vorgabenansicht zeigte genau diese Beschriftung neben "tü |
| 952 | * 3,00 s". Eine Tempogrenze ("oberhalb von 50 km/h länger") gehoert ebenso |
| 953 | * wenig hinein: Die Gelbzeitstaffel ist einstellbar. Bei JEDER zulaessigen |
| 954 | * Vorgabe wahr ist nur "nie kürzer" - keine Gelbzeit liegt unter |
| 955 | * SAFETY_FLOORS.yellowKfz (3 s), und die Regelwerte sind 3 s geradeaus und 2 s |
| 956 | * abbiegend. Wer die Schranke oder einen Regelwert aendert, prueft diesen Satz |
| 957 | * (tests/ui/konfliktfensterUeberfahrzeit.test.ts). |
| 958 | */ |
| 959 | export const UEBERFAHRZEIT_ANSATZ_LABELS: Readonly<Record<UeberfahrzeitAnsatz, string>> = { |
| 960 | gelbzeit: |
| 961 | 'Überfahrzeit = Gelbzeit (3/4/5 s nach zulässiger Höchstgeschwindigkeit) – Ansatz dieses ' + |
| 962 | 'Programms, nie kürzer als der Regelwert', |
| 963 | fest: |
| 964 | 'feste Überfahrzeit 3 s geradeaus / 2 s abbiegend – Regelwert nach RiLSA 2015, ' + |
| 965 | 'Abschnitt 2.5.2 (Fälle 1 und 2)', |
| 966 | }; |
| 967 | |
| 968 | /** |
| 969 | * Beschriftung des Merkmals "enger Innenradius" - eine Stelle fuer Ansicht, |
| 970 | * Pruefbericht und Ausdruck, aus demselben Grund wie |
| 971 | * UEBERFAHRZEIT_ANSATZ_LABELS. |
| 972 | * |
| 973 | * Die Klammer bleibt Teil der BESCHRIFTUNG und ist nicht Teil der Rechnung: |
| 974 | * Das Programm kennt keinen Abbiegeradius und prueft die Schwelle nicht nach. |
| 975 | * Die Schwelle selbst steht seit 5.27.0 belegt in der RiLSA (Abschnitt 2.5.2, |
| 976 | * Fall 2) - bis dahin sagte diese Zeile "in der RiLSA 2015 nicht nachweisbar", |
| 977 | * und das war der Stand ohne Original. |
| 978 | */ |
| 979 | export const ENGER_RADIUS_LABEL = |
| 980 | 'enger Innenradius – Radius des Fahrstreifeninnenrands unter 10 m ' + |
| 981 | '(RiLSA 2015, Abschnitt 2.5.2, Fall 2)'; |
| 982 | |
| 983 | /** |
| 984 | * Schranken und Regelbereiche je Anlagenart. |
| 985 | * |
| 986 | * PRUEFSTAND: Belegt ist am Knotenpunkt der zulaessige Umlaufzeitbereich von |
| 987 | * 30 bis 120 s (RiLSA 2015) und die 90 s als Obergrenze des Regelbereichs. |
| 988 | * Alles Weitere - Untergrenze des Regelbereichs, saemtliche Wartezeitschwellen, |
| 989 | * die groessten eintragbaren Wege - ist hergeleitet oder Praxis und traegt seine |
| 990 | * eigene Herkunft im Feld `herkunft` (Fassung 5.4.0, Befund B8). |
| 991 | * Die Werte fuer die einstreifige Verkehrsfuehrung sind gaenzlich |
| 992 | * NICHT belegt - Arbeitsstellen behandelt die RSA eigenstaendig, und dort steht die |
| 993 | * zumutbare Wartezeit im Vordergrund, nicht die Umlaufzeit. Die hier gesetzten |
| 994 | * 300 s Obergrenze sind aus den uebrigen Schranken hergeleitet und keine |
| 995 | * Zahl aus einem Regelwerk: Bei der groessten eintragbaren Engstelle von |
| 996 | * 1000 m ergeben sich 104 s Zwischenzeit je Richtung ((1000 m + 6 m |
| 997 | * Fahrzeuglaenge) / 10 m/s + 3 s Gelb, aufgerundet), mit zwei Uebergaengen und |
| 998 | * 20 s Freigabe je Richtung also 248 s Umlauf. Wer laenger absperrt, braucht |
| 999 | * ein anderes Verfahren (RSA_ALTERNATIVEN_ZUR_SIGNALREGELUNG), und das ist |
| 1000 | * keine Frage der Signalzeiten mehr. |
| 1001 | * |
| 1002 | * Hier standen bis 5.3.4 rund 125 s und 290 s. Beide Zahlen ergaben sich aus |
| 1003 | * keiner Rechnung dieses Programms; 125 s setzten eine Raeumgeschwindigkeit von |
| 1004 | * 8,2 m/s voraus, die es nirgends gibt. Dieselben Zahlen standen in den |
| 1005 | * Begleitunterlagen und - schlimmer - im Ausdruck. Der Ausdruck |
| 1006 | * rechnet sie jetzt ueber rilsa/engstelle.ts, statt sie zu behaupten; die |
| 1007 | * Zahlen hier sind nachgerechnet (tests/domain/engstelle.test.ts). |
| 1008 | * |
| 1009 | * Diese Werte sind vor dem Einsatz gegen die eigene Ausgabe der RSA |
| 1010 | * abzugleichen; der Pruefbericht weist sie entsprechend aus. |
| 1011 | */ |
| 1012 | /** |
| 1013 | * Herkunft EINER Schranke - Text und Pruefstand, wie sie in Ausdruck und |
| 1014 | * Pruefbericht erscheinen. |
| 1015 | * |
| 1016 | * KORREKTUR (Fassung 5.4.0, Befund B8): Bis dahin trug die ganze Anlagenart |
| 1017 | * EINE Quelle (`quelle`), und der Ausdruck schrieb sie in jede Zeile der |
| 1018 | * Tabelle "Schranken der Anlagenart" - "RiLSA 2015, gesichert" auch neben die |
| 1019 | * Wartezeitschwellen 90/120 s und "RSA 21" auch neben die Umlaufzeit von 30 bis |
| 1020 | * 300 s. Beides gibt es in den genannten Regelwerken nicht: Die RSA 21 enthaelt |
| 1021 | * weder Umlaufzeitgrenzen noch bezifferte Wartezeitschwellen fuer |
| 1022 | * signalgeregelte Engstellen, und oeffentlich belegte RiLSA-Wartezeitschwellen |
| 1023 | * existieren nicht. Ein Pruefer, der eine gedruckte Zahl im genannten Regelwerk |
| 1024 | * sucht, findet sie dort nicht - und weiss dann nicht mehr, welcher Angabe der |
| 1025 | * Unterlage er noch trauen kann. |
| 1026 | * |
| 1027 | * Deshalb traegt jede Zeile ihre eigene Herkunft. Sie steht hier und nicht im |
| 1028 | * Ausdruck, damit Ausdruck (pdf.ts) und Pruefbericht (Befund B9) dieselbe |
| 1029 | * Aussage fuehren. |
| 1030 | * |
| 1031 | * Zum Pruefstand: Fuer eine Schwelle, die dieses Programm selbst setzt, gibt es |
| 1032 | * keinen "gesicherten" Zustand - sie steht in keinem Druckwerk. Sie traegt |
| 1033 | * deshalb 'abzugleichen': abzustimmen ist sie mit der Straszenverkehrsbehoerde, |
| 1034 | * nicht am Regelwerk nachzuschlagen. Was sie ist, sagt der Text. |
| 1035 | */ |
| 1036 | export interface SchrankenHerkunft { |
| 1037 | /** Woher der Wert stammt - im Klartext, so wie er gedruckt wird. */ |
| 1038 | readonly text: string; |
| 1039 | readonly pruefstand: Pruefstand; |
| 1040 | } |
| 1041 | |
| 1042 | /** Herkunft je Zeile der Schrankentabelle einer Anlagenart. */ |
| 1043 | export interface AnlagenartHerkunft { |
| 1044 | /** Zulaessiger Bereich der Umlaufzeit (min bis max). */ |
| 1045 | readonly umlaufzeit: SchrankenHerkunft; |
| 1046 | /** Empfohlener Bereich der Umlaufzeit (recommendedMin bis recommendedMax). */ |
| 1047 | readonly regelbereich: SchrankenHerkunft; |
| 1048 | /** Groesster eintragbarer Raeumweg. */ |
| 1049 | readonly raeumweg: SchrankenHerkunft; |
| 1050 | /** Wartezeit: Warnung und Beanstandung. */ |
| 1051 | readonly wartezeit: SchrankenHerkunft; |
| 1052 | } |
| 1053 | |
| 1054 | /** |
| 1055 | * Eingabegrenze des Programms fuer den Raeumweg - bei jeder Anlagenart |
| 1056 | * dieselbe Aussage, weil es bei jeder dieselbe Groesse ist: eine Schranke des |
| 1057 | * Eingabefeldes, kein Wert eines Regelwerks. Sie gehoert trotzdem in die |
| 1058 | * Unterlage, weil sie erklaert, dass ein laengerer Weg gar nicht erfassbar |
| 1059 | * gewesen waere. |
| 1060 | */ |
| 1061 | const HERKUNFT_RAEUMWEG: SchrankenHerkunft = { |
| 1062 | text: 'Eingabegrenze dieses Programms, kein Regelwerkswert', |
| 1063 | pruefstand: 'abzugleichen', |
| 1064 | }; |
| 1065 | |
| 1066 | export interface AnlagenartGrenzen { |
| 1067 | readonly cycleTime: { |
| 1068 | readonly min: Seconds; |
| 1069 | readonly max: Seconds; |
| 1070 | readonly recommendedMin: Seconds; |
| 1071 | readonly recommendedMax: Seconds; |
| 1072 | }; |
| 1073 | /** |
| 1074 | * Groesster eintragbarer Raeumweg. |
| 1075 | * |
| 1076 | * Am Knotenpunkt ist der Raeumweg der Konfliktbereich; mehr als 500 m |
| 1077 | * deuten dort auf einen Eingabefehler hin. Bei einer einstreifigen |
| 1078 | * Verkehrsfuehrung IST der Raeumweg die Engstelle. |
| 1079 | */ |
| 1080 | readonly maxClearingDistance: Meters; |
| 1081 | /** Wartezeit, ab der gewarnt wird (Umlaufzeit abzueglich eigener Freigabe). */ |
| 1082 | readonly warteZeitWarnung: Seconds; |
| 1083 | /** Wartezeit, ab der die Planung zu beanstanden ist. */ |
| 1084 | readonly warteZeitFehler: Seconds; |
| 1085 | /** |
| 1086 | * Regelwerk, das die Anlagenart ueberhaupt behandelt. |
| 1087 | * |
| 1088 | * Nicht zu verwechseln mit `herkunft`: `quelle` sagt, in welchem Sachgebiet |
| 1089 | * des Fundstellenverzeichnisses die Anlagenart steht (RiLSA fuer Knotenpunkt |
| 1090 | * und Fussgaengerschutzanlage, RSA fuer die Arbeitsstelle); `herkunft` sagt |
| 1091 | * je Schranke, ob der ZAHLENWERT dort auch wirklich steht. Beim Knotenpunkt |
| 1092 | * faellt beides zusammen, bei der Arbeitsstelle gerade nicht. |
| 1093 | */ |
| 1094 | readonly quelle: 'rilsa-umlaufzeit' | 'rsa-arbeitsstellen'; |
| 1095 | /** Herkunft je Schranke (Fassung 5.4.0, Befund B8). */ |
| 1096 | readonly herkunft: AnlagenartHerkunft; |
| 1097 | } |
| 1098 | |
| 1099 | export const ANLAGENART_GRENZEN: Readonly<Record<Anlagenart, AnlagenartGrenzen>> = { |
| 1100 | knotenpunkt: { |
| 1101 | cycleTime: { min: 30, max: 120, recommendedMin: 30, recommendedMax: 90 }, |
| 1102 | maxClearingDistance: 500, |
| 1103 | warteZeitWarnung: 90, |
| 1104 | warteZeitFehler: 120, |
| 1105 | quelle: 'rilsa-umlaufzeit', |
| 1106 | herkunft: { |
| 1107 | // Belegt: 30 s Mindestumlauf und 120 s Hoechstumlauf am Knotenpunkt |
| 1108 | // (UDV-Veroeffentlichung, Masterarbeit mit Seitenzitat). |
| 1109 | umlaufzeit: { |
| 1110 | text: 'RiLSA 2015 – Umlaufzeit am Knotenpunkt (30 bis 120 s)', |
| 1111 | pruefstand: 'gesichert', |
| 1112 | }, |
| 1113 | /* |
| 1114 | * BERICHTIGT (Fassung 5.27.0, am Original nachgeschlagen): Der |
| 1115 | * Regelbereich ist der der RiLSA - Abschnitt 2.6 nennt als Richtwerte |
| 1116 | * minimal 30 s und maximal 90 (120) s. Hier standen 60 bis 90 s. |
| 1117 | * |
| 1118 | * Die Vorgeschichte gehoert dazu, weil sie zweimal umschlug: Bis zur |
| 1119 | * Fassung 5.5.0 (15.08.2026) hiess es "90 s als Obergrenze belegt; 60 s |
| 1120 | * als Untergrenze abzugleichen". 5.5.0 hat den RiLSA-Bezug der 60 s |
| 1121 | * gestrichen und sie als Zahl dieses Programms ausgewiesen - richtig, |
| 1122 | * soweit es ging. Was damals nicht zu sehen war: Die RiLSA nennt sehr wohl |
| 1123 | * eine Untergrenze, naemlich 30 s, dieselbe Zahl wie beim zulaessigen |
| 1124 | * Bereich. Was sie gestrichen hat, ist der frueher "normal" genannte |
| 1125 | * MITTELbereich von 50 bis 75 s. |
| 1126 | */ |
| 1127 | regelbereich: { |
| 1128 | text: |
| 1129 | 'RiLSA 2015, Abschnitt 2.6 – Richtwerte der Umlaufzeit (minimal 30 s, maximal ' + |
| 1130 | '90 (120) s); größere Umlaufzeiten als 90 s sind nach Möglichkeit zu vermeiden', |
| 1131 | pruefstand: 'gesichert', |
| 1132 | }, |
| 1133 | raeumweg: HERKUNFT_RAEUMWEG, |
| 1134 | // Bezifferte Wartezeitschranken nennt weder die RiLSA noch |
| 1135 | // das HBS in einer oeffentlich belegten Fassung. Die Zahlen sind hier aus |
| 1136 | // den Umlaufzeitgrenzen abgeleitet - 90 s ist das Ende des |
| 1137 | // Regelbereichs, 120 s die Obergrenze -, und genau das steht jetzt auch |
| 1138 | // in der Unterlage. |
| 1139 | wartezeit: { |
| 1140 | text: |
| 1141 | 'Schwelle dieses Programms, kein Regelwerkswert – aus den RiLSA-Umlaufzeitgrenzen ' + |
| 1142 | 'abgeleitet (Warnung ab dem Ende des Regelbereichs, Beanstandung ab der Obergrenze)', |
| 1143 | pruefstand: 'abzugleichen', |
| 1144 | }, |
| 1145 | }, |
| 1146 | }, |
| 1147 | /* |
| 1148 | * Fussgaengerschutzanlage: dieselben Umlaufzeiten wie am Knotenpunkt, aber |
| 1149 | * eine deutlich engere Wartezeitschranke. Wer als Fussgaenger deutlich |
| 1150 | * laenger als eine halbe Minute wartet, geht bei Rot; die Schranke steht |
| 1151 | * deshalb bei 45 s - das ist der haeufigste Grund, |
| 1152 | * warum eine Furt ihre Schutzwirkung verliert. Der Raeumweg ist die |
| 1153 | * Furtlaenge; mehr als 100 m gibt es nicht. |
| 1154 | */ |
| 1155 | fussgaengerschutzanlage: { |
| 1156 | cycleTime: { min: 30, max: 120, recommendedMin: 40, recommendedMax: 70 }, |
| 1157 | maxClearingDistance: 100, |
| 1158 | warteZeitWarnung: 45, |
| 1159 | warteZeitFehler: 90, |
| 1160 | quelle: 'rilsa-umlaufzeit', |
| 1161 | herkunft: { |
| 1162 | /* |
| 1163 | * Dieselben zulaessigen Umlaufzeiten wie am Knotenpunkt und aus derselben |
| 1164 | * Quelle: Die RiLSA staffelt die Grenzen nicht nach Anlagenart. Genau das |
| 1165 | * steht seit der Fassung 5.4.0 (Befund B-6) auch im gedruckten Text - |
| 1166 | * zuvor stand es nur hier im Kommentar und in einer Begleitunterlage, die |
| 1167 | * damit etwas zitierte, was in der Unterlage nicht zu finden war. Es |
| 1168 | * traegt zugleich einen Vorbehalt: Belegt ist die Zeile "am Knotenpunkt". |
| 1169 | */ |
| 1170 | umlaufzeit: { |
| 1171 | text: |
| 1172 | 'RiLSA 2015 – Umlaufzeit (30 bis 120 s); die RiLSA staffelt die Grenzen nicht nach ' + |
| 1173 | 'Anlagenart', |
| 1174 | pruefstand: 'gesichert', |
| 1175 | }, |
| 1176 | /* |
| 1177 | * 40 bis 70 s hat dieses Programm gesetzt: An einer Furt ist die |
| 1178 | * Wartezeit das Mass, und ein Umlauf von 90 s waere dort bereits zu lang. |
| 1179 | * In der RiLSA steht dieser Bereich nicht - und die |
| 1180 | * einzige einschlaegige Fundstelle sagt sogar das Gegenteil, naemlich |
| 1181 | * dass es hier ueberhaupt keine Vorgabe gibt. Das gehoert in die |
| 1182 | * Unterlage: Wer den Hinweis liest, soll wissen, dass er eine Zahl dieses |
| 1183 | * Programms gegen sich hat und keine Vorschrift. |
| 1184 | */ |
| 1185 | regelbereich: { |
| 1186 | text: |
| 1187 | 'Schwelle dieses Programms, kein Regelwerkswert – der Hamburger LSA-Leitfaden sagt für ' + |
| 1188 | 'Fußgängerschutzanlagen ausdrücklich, die Umlaufzeit richte sich nach den erforderlichen ' + |
| 1189 | 'Freigabezeiten und sei „an keine weiteren Vorgaben gebunden"', |
| 1190 | pruefstand: 'abzugleichen', |
| 1191 | }, |
| 1192 | raeumweg: HERKUNFT_RAEUMWEG, |
| 1193 | /* |
| 1194 | * KORREKTUR (Stand 15.08.2026): Die Zahlen bleiben - fuer |
| 1195 | * 45 s und 90 s gibt es weiterhin keinen Regelwerksbeleg. Ihre BEGRUENDUNG |
| 1196 | * war aber unvollstaendig: Der Satz "wer als Fussgaenger laenger wartet, |
| 1197 | * geht bei Rot" ist keine Erfahrung dieses Programms, sondern ein |
| 1198 | * belegter Wert - nur eben aus der EFA 2002 und nicht aus der RiLSA. Das |
| 1199 | * Forschungsinformationssystem des Bundesverkehrsministeriums gibt ihn |
| 1200 | * mit Literaturaufloesung wieder: "Wird die von Zufussgehenden weitgehend |
| 1201 | * akzeptierte Wartezeit von maximal 40 Sekunden ueberschritten, [...] |
| 1202 | * fuehrt [dies] auch zu einer Gefaehrdung, da die Rotlichtmissachtung ab |
| 1203 | * dieser Zeitdauer deutlich zunimmt." |
| 1204 | */ |
| 1205 | wartezeit: { |
| 1206 | text: |
| 1207 | 'Schwelle dieses Programms, kein Regelwerkswert – 90 s aus der ' + |
| 1208 | 'RiLSA-Umlaufzeitobergrenze abgeleitet, 45 s aus der Planungspraxis; die belegte Zahl ' + |
| 1209 | 'dahinter ist die von Zufußgehenden weitgehend akzeptierte Wartezeit von 40 s nach ' + |
| 1210 | 'EFA 2002 (darüber nimmt die Rotlichtmissachtung deutlich zu) – nicht nach RiLSA', |
| 1211 | pruefstand: 'abzugleichen', |
| 1212 | }, |
| 1213 | }, |
| 1214 | }, |
| 1215 | einstreifig: { |
| 1216 | cycleTime: { min: 30, max: 300, recommendedMin: 60, recommendedMax: 180 }, |
| 1217 | maxClearingDistance: 1000, |
| 1218 | warteZeitWarnung: 180, |
| 1219 | warteZeitFehler: 300, |
| 1220 | quelle: 'rsa-arbeitsstellen', |
| 1221 | herkunft: { |
| 1222 | /* |
| 1223 | * Die RSA 21 rechnet Baustellenampeln nach RiLSA (Teil A 3.2 Abs. 3), |
| 1224 | * nennt selbst aber keine Umlaufzeitgrenze - die einzige Zahl zur Dauer |
| 1225 | * betrifft Arbeiten kuerzerer Dauer OHNE Lichtsignalanlage (10 Minuten). |
| 1226 | * Die 300 s sind aus den uebrigen Schranken dieses Programms hergeleitet |
| 1227 | * (siehe die Rechnung im Kopfkommentar dieser Tabelle). Der Ausdruck |
| 1228 | * druckte hier "RSA 21" - und behauptete damit eine Deckung, die es |
| 1229 | * nicht gibt. |
| 1230 | */ |
| 1231 | umlaufzeit: { |
| 1232 | text: |
| 1233 | 'Schwelle dieses Programms, aus den übrigen Schranken hergeleitet – kein RSA-Wert ' + |
| 1234 | '(die RSA 21 regelt Arbeitsstellen ohne Umlaufzeitgrenze)', |
| 1235 | pruefstand: 'abzugleichen', |
| 1236 | }, |
| 1237 | regelbereich: { |
| 1238 | text: 'Schwelle dieses Programms, kein Regelwerkswert', |
| 1239 | pruefstand: 'abzugleichen', |
| 1240 | }, |
| 1241 | raeumweg: HERKUNFT_RAEUMWEG, |
| 1242 | wartezeit: { |
| 1243 | text: |
| 1244 | 'Schwelle dieses Programms, kein Regelwerkswert – die RSA 21 nennt für ' + |
| 1245 | 'signalgeregelte Engstellen keine bezifferte Wartezeitschwelle', |
| 1246 | pruefstand: 'abzugleichen', |
| 1247 | }, |
| 1248 | }, |
| 1249 | }, |
| 1250 | }; |
| 1251 | |
| 1252 | /** |
| 1253 | * Was die RSA 21 vorsieht, wenn eine Engstelle fuer eine Signalregelung zu |
| 1254 | * lang ist - dieselbe Formulierung in Pruefbericht, Assistent und Ausdruck. |
| 1255 | * |
| 1256 | * KORREKTUR (Fassung 5.4.0, Befund B7): An sieben Stellen stand |
| 1257 | * "Begleitfahrzeug oder Verkehrsposten". Die RSA 21 kennt beides nicht: |
| 1258 | * Warnposten duerfen keine Verkehrsregelung vornehmen - sie bleibt der Polizei |
| 1259 | * vorbehalten (Teil A, Abschnitt 6) -, und das Begleitfahrzeug gehoert zum |
| 1260 | * Grossraum- und Schwertransportrecht. RSA-konform sind die Umleitung |
| 1261 | * mindestens einer Fahrtrichtung (Teil B 2.3.4) und die behoerdlich |
| 1262 | * angeordnete Handschaltung der Lichtsignalanlage (Teil A 3.2 Abs. 4); daneben |
| 1263 | * die Verkehrsregelung durch die Polizei. Eine Empfehlung, die das Regelwerk |
| 1264 | * nicht kennt, ist in einer Planunterlage schlimmer als keine. |
| 1265 | */ |
| 1266 | export const RSA_ALTERNATIVEN_ZUR_SIGNALREGELUNG = |
| 1267 | 'die Umleitung mindestens einer Fahrtrichtung (RSA 21, Teil B 2.3.4), eine behördlich ' + |
| 1268 | 'angeordnete Handschaltung der Lichtsignalanlage (RSA 21, Teil A 3.2 Abs. 4) oder eine ' + |
| 1269 | 'Verkehrsregelung durch die Polizei; Warnposten dürfen keine Verkehrsregelung vornehmen ' + |
| 1270 | '(RSA 21, Teil A Abschnitt 6)'; |
| 1271 | |
| 1272 | /** |
| 1273 | * Zulaessige Hoechstgeschwindigkeit, bis zu der Lichtsignalanlagen eingerichtet |
| 1274 | * werden sollen: VwV-StVO zu Par. 37 Rn. 10 - "Ueber 70 km/h sollen |
| 1275 | * Lichtzeichenanlagen nicht eingerichtet werden." Eine Soll-Vorschrift, keine |
| 1276 | * Rechengroesse; die Gelbzeitstaffel endet aus demselben Grund offen bei |
| 1277 | * "5 s darueber". |
| 1278 | * |
| 1279 | * NEU (Fassung 5.4.0, Befund C2): Bis dahin waren 130 km/h an |
| 1280 | * Signalgruppe und Knotenpunkt eintragbar, ohne dass der Pruefbericht ein |
| 1281 | * Wort verlor. Die Feldgrenzen bleiben - die Eingabe ist moeglich, damit auch |
| 1282 | * eine Ausnahme abgebildet werden kann -, aber der Bericht nennt sie. |
| 1283 | */ |
| 1284 | export const VZUL_OBERGRENZE_LSA: KilometersPerHour = 70; |
| 1285 | |
| 1286 | /** |
| 1287 | * Anhaltswerte der RSA 21 fuer die einstreifige Verkehrsfuehrung. |
| 1288 | * |
| 1289 | * NEU (Fassung 5.4.0, Befunde C3 und C6). PRUEFSTAND: abzugleichen - |
| 1290 | * die Zahlen sind aus der Fachpraxis zur RSA 21 uebernommen und vor dem |
| 1291 | * Einsatz an der eigenen Ausgabe zu pruefen (quellen.ts, 'rsa-arbeitsstellen'). |
| 1292 | * Sie erzeugen ausschliesslich Hinweise; keine dieser Zahlen geht in eine |
| 1293 | * Signalzeit ein. |
| 1294 | */ |
| 1295 | export const RSA_EINSTREIFIG = { |
| 1296 | /** |
| 1297 | * Bis zu dieser Engstellenlaenge kann nach RSA 21 (Teil B) die Regelung nach |
| 1298 | * Par. 6 StVO bzw. mit den Zeichen 208/308 ("Vorrang des Gegenverkehrs" / |
| 1299 | * "Vorrang vor dem Gegenverkehr") genuegen - eine Lichtsignalanlage ist dann |
| 1300 | * nicht zwingend. |
| 1301 | */ |
| 1302 | kurzeEngstelleBis: 50 as Meters, |
| 1303 | /** |
| 1304 | * Richtwert der Verkehrsstaerke (beide Richtungen zusammen), ab dem eine |
| 1305 | * Signalregelung in Betracht kommt (RSA 21, Teil B: Anordnungskriterien |
| 1306 | * Verkehrsstaerke, Laenge der Engstelle, Sichtverhaeltnisse). |
| 1307 | */ |
| 1308 | verkehrsstaerkeRichtwert: 500 as VehiclesPerHour, |
| 1309 | /** |
| 1310 | * Zulaessige Hoechstgeschwindigkeit, auf die an Arbeitsstellen laengerer |
| 1311 | * Dauer in der Regel zu beschraenken ist (RSA 21, Teil C 2.3.2). |
| 1312 | */ |
| 1313 | vZulRegel: 50 as KilometersPerHour, |
| 1314 | } as const; |
| 1315 | |
| 1316 | /** |
| 1317 | * Laenge einer Engstelle, ab der die Behoerdenpraxis Abstimmungsbedarf sieht. |
| 1318 | * |
| 1319 | * BEHOERDENPRAXIS, KEIN REGELWERKSWERT: Strassenbaubehoerden (z. B. Hessen |
| 1320 | * Mobil) stellen Baustellenampeln bis rund 400 m auf, ausnahmsweise und mit |
| 1321 | * Zustimmung bis 600 m. Weder RSA noch RiLSA nennen diese Zahlen. Sie stehen |
| 1322 | * hier, weil eine Planung, die darueber liegt, in der Anordnung erklaert |
| 1323 | * werden muss - und der Bearbeiter das vorher erfahren soll, nicht erst von der |
| 1324 | * Behoerde. |
| 1325 | * |
| 1326 | * NEU (Fassung 5.4.0, Befund C5): Bis dahin schlug die erste Warnung |
| 1327 | * erst bei rund 835 m an, wo die Wartezeitschranke der Anlagenart greift. |
| 1328 | * Wer 700 m absperrte, hoerte vom Programm nichts. |
| 1329 | */ |
| 1330 | export const ENGSTELLE_PRAXIS = { |
| 1331 | /** Ab dieser Laenge (einschliesslich) ein Hinweis auf die uebliche Obergrenze. */ |
| 1332 | hinweisAb: 400 as Meters, |
| 1333 | /** Ab dieser Laenge (einschliesslich) eine Warnung: nur ausnahmsweise mit Zustimmung. */ |
| 1334 | warnungAb: 600 as Meters, |
| 1335 | } as const; |
| 1336 | |
| 1337 | /** |
| 1338 | * Laenge, die ein wartendes Fahrzeug im Rueckstau belegt - Fahrzeug und |
| 1339 | * Abstand zum vorausfahrenden. |
| 1340 | * |
| 1341 | * PRAXISWERT, KEIN REGELWERKSWERT. Weder RiLSA noch HBS nennen ihn; er ist die |
| 1342 | * uebliche Faustzahl fuer eine Pkw-Warteschlange. Ein hoeherer Schwerverkehrs- |
| 1343 | * anteil verlaengert den Rueckstau ueber diesen Wert hinaus - das Programm |
| 1344 | * bildet das nicht ab, und die Laenge faellt dort zu kurz aus. |
| 1345 | * |
| 1346 | * HIERHER GEHOBEN (Fassung 5.28.0): Bis dahin stand die Zahl als |
| 1347 | * `QUEUE_SPACING_METERS` modullokal in `simulation/simulation.ts`, ohne |
| 1348 | * Ausfuhr, ohne Eintrag in dieser Datei, ohne Quelle, ohne Pruefstand und ohne |
| 1349 | * einen einzigen Test - waehrend die Simulationsansicht die daraus gebildete |
| 1350 | * Laenge als Meterangabe anzeigte. Die Hausregel dazu ist eindeutig: Diese |
| 1351 | * Datei ist die einzige Quelle aller Kennwerte. Die Herkunft steht jetzt in |
| 1352 | * `quellen.ts` unter `praxis-stauraum-je-fahrzeug`. |
| 1353 | * |
| 1354 | * WOFUER ER NICHT GILT: Fuer die Bemessung nach HBS spielt er keine Rolle. Der |
| 1355 | * Rueckstau der Leistungsfaehigkeitsrechnung wird in Fahrzeugen gefuehrt; eine |
| 1356 | * Laenge bildet allein die Simulation, und sie ist eine Veranschaulichung, |
| 1357 | * keine Nachweisgroesse. |
| 1358 | */ |
| 1359 | export const STAURAUMBEDARF_JE_FAHRZEUG: Meters = 7; |
| 1360 | |
| 1361 | /** Benennung der Anlagenart - dieselbe am Bildschirm wie im Ausdruck. */ |
| 1362 | export const ANLAGENART_LABELS: Readonly<Record<Anlagenart, string>> = { |
| 1363 | knotenpunkt: 'Knotenpunkt (Kreuzung oder Einmündung)', |
| 1364 | fussgaengerschutzanlage: 'Fußgängerschutzanlage auf freier Strecke', |
| 1365 | einstreifig: 'Einstreifige Verkehrsführung (Arbeitsstelle oder Engstelle)', |
| 1366 | }; |
| 1367 | |
| 1368 | /** Kurzform fuer Tabellen und Statuszeile. */ |
| 1369 | export const ANLAGENART_KURZ: Readonly<Record<Anlagenart, string>> = { |
| 1370 | knotenpunkt: 'Knotenpunkt', |
| 1371 | fussgaengerschutzanlage: 'Fußgängerschutzanlage', |
| 1372 | einstreifig: 'Einstreifige Verkehrsführung', |
| 1373 | }; |
| 1374 | |
| 1375 | /** |
| 1376 | * Harte Schranken, die auch ueber die Vorgabenverwaltung nicht unterschritten |
| 1377 | * werden duerfen. |
| 1378 | * |
| 1379 | * Im Altbestand liess sich ueber das Formel-Studio jede Konstante frei |
| 1380 | * ueberschreiben - einschliesslich Gelbzeit und Mindestfreigabezeit. Eine auf |
| 1381 | * 0 s gesetzte Gelbzeit haette einen formal gueltigen, tatsaechlich aber |
| 1382 | * gefaehrlichen Signalzeitenplan erzeugt. |
| 1383 | */ |
| 1384 | export const SAFETY_FLOORS = { |
| 1385 | /** Kuerzeste zulaessige Gelbzeit fuer Kraftfahrzeugverkehr. */ |
| 1386 | yellowKfz: 3 as Seconds, |
| 1387 | /** Kuerzeste zulaessige Rot-Gelb-Zeit. */ |
| 1388 | redYellow: 1 as Seconds, |
| 1389 | /** |
| 1390 | * Laengste zulaessige Rot-Gelb-Zeit. |
| 1391 | * KORREKTUR (Fassung 5.4.0, Befund B6): Das Vorgabenfeld liess bis |
| 1392 | * 3 s zu, und 2,5 oder 3 s erzeugten nur einen Abweichungshinweis. Die |
| 1393 | * VwV-StVO zu Par. 37 (Rn. 17) ist eindeutig: Rot-Gelb "soll fuer |
| 1394 | * Kraftfahrzeugstroeme eine Sekunde dauern, darf aber nicht laenger als zwei |
| 1395 | * Sekunden sein". Eine ueberlange Rot-Gelb-Zeit beguenstigt fruehes |
| 1396 | * Einfahren vor Freigabebeginn - die unsichere Richtung. |
| 1397 | */ |
| 1398 | maxRedYellow: 2 as Seconds, |
| 1399 | /** Kuerzeste zulaessige Freigabezeit fuer Kfz, Rad und Fussgaenger. */ |
| 1400 | minGreen: 5 as Seconds, |
| 1401 | /** Hoechste ansetzbare Raeumgeschwindigkeit fuer Kraftfahrzeuge. */ |
| 1402 | maxClearingSpeedKfz: 10.0 as MetersPerSecond, |
| 1403 | /** |
| 1404 | * Hoechste ansetzbare Raeumgeschwindigkeit fuer Radverkehr. |
| 1405 | * KORREKTUR (Fassung 5.4.0, Befund A1): Bislang wurden Rad-Werte nur |
| 1406 | * gegen die Kfz-Schranke von 10 m/s geprueft - ein Wert von 8 m/s passierte |
| 1407 | * ohne jede Meldung und halbierte die Raeumzeit. Der RiLSA-Regelwert 4 m/s |
| 1408 | * ist zugleich die Obergrenze, wie bei den Fussgaengern (1,2 m/s). |
| 1409 | */ |
| 1410 | maxClearingSpeedRad: 4.0 as MetersPerSecond, |
| 1411 | /** |
| 1412 | * Hoechste ansetzbare Raeumgeschwindigkeit fuer Fussgaenger. |
| 1413 | * |
| 1414 | * BEWUSST STRENGER ALS DAS REGELWERK (Stand 15.08.2026): Der |
| 1415 | * RiLSA-Originalwortlaut zu Fall 6 ist inzwischen woertlich belegt (verdeckte |
| 1416 | * Textschicht des FGSV-Aenderungsblatts vom 29.07.2015): "Der Regelwert fuer |
| 1417 | * die Raeumgeschwindigkeit von Fussgaengern ist vr = 1,2 m/s. Variationen von |
| 1418 | * vr = 1,0 m/s bis hoechstens vr = 1,5 m/s sind moeglich." Die RiLSA laesst |
| 1419 | * also bis 1,5 m/s zu, dieses Programm nur bis 1,2 m/s. |
| 1420 | * |
| 1421 | * WARUM DIE SCHRANKE TROTZDEM BEI 1,2 m/s BLEIBT: Eine hoehere |
| 1422 | * Raeumgeschwindigkeit VERKUERZT die Zwischenzeit - die unsichere Richtung, |
| 1423 | * und zwar fuer die ungeschuetzteste Verkehrsart. Die BASt hat gemessen, dass |
| 1424 | * "mehr als 70 Prozent der Fussgaenger langsamer gehen als der [...] |
| 1425 | * Maximalwert der Raeumgeschwindigkeit von 1,5 Meter pro Sekunde" |
| 1426 | * (Forschung kompakt 01/13 zum Bericht V 217). Eine Sicherheitsschranke auf |
| 1427 | * ein neu gehobenes Zitat hin zu lockern, ginge in die gefaehrliche |
| 1428 | * Richtung. Die Abweichung wird nicht verschwiegen: Das |
| 1429 | * Fundstellenverzeichnis nennt sie als Verschaerfung dieses Programms |
| 1430 | * (quellen.ts, 'rilsa-zwischenzeiten'). Wer 1,5 m/s braucht, muss die |
| 1431 | * Schranke hier aendern und die Aenderung verantworten. |
| 1432 | */ |
| 1433 | maxClearingSpeedFuss: 1.2 as MetersPerSecond, |
| 1434 | /** |
| 1435 | * Hoechste ansetzbare Raeumgeschwindigkeit fuer gesondert signalisierten |
| 1436 | * OePNV: 70 km/h / 3,6 = 19,44 m/s. |
| 1437 | * |
| 1438 | * KORREKTUR (Fassung 5.4.0, Befund A2): Mit vr = Vmax/3,6 nach |
| 1439 | * RiLSA-Fall 3 darf eine Bahn bei Vmax 70 km/h legitim schneller raeumen |
| 1440 | * als die Kfz-Schranke von 10 m/s. Die Grenze liegt bei 70 km/h, weil |
| 1441 | * oberhalb dieser Geschwindigkeit Lichtsignalanlagen nicht betrieben werden |
| 1442 | * sollen (VwV-StVO zu Par. 37 Rn. 10) - die Ueberfahrzeit-Staffel der RiLSA |
| 1443 | * endet aus demselben Grund bei 70 km/h. Zusaetzlich gilt je Strom die |
| 1444 | * konkrete Vmax als Deckel (nicht schneller raeumen, als gefahren werden |
| 1445 | * darf) - siehe intergreen.ts; ohne bekannte Vmax bleibt es bei den |
| 1446 | * konservativen 10 m/s. |
| 1447 | */ |
| 1448 | maxClearingSpeedOepnv: 70 / 3.6, |
| 1449 | /* |
| 1450 | * EINFAHRGESCHWINDIGKEITEN - die Schranke liegt UNTEN (Fassung 5.10.0). |
| 1451 | * |
| 1452 | * tz = tue + tr - te: Die Einfahrzeit wird ABGEZOGEN. Eine niedrigere |
| 1453 | * Einfahrgeschwindigkeit verlaengert te und verkuerzt damit jede |
| 1454 | * Zwischenzeit, an der ein einfahrender Strom dieser Verkehrsart beteiligt |
| 1455 | * ist - die gefaehrliche Richtung. Bei den Raeumgeschwindigkeiten ist es |
| 1456 | * umgekehrt; deshalb steht dort der Regelwert als Ober- und hier als |
| 1457 | * Untergrenze. |
| 1458 | * |
| 1459 | * Bis 5.9.0 trugen die vier Vorgabenfelder nur Plausibilitaetsschranken |
| 1460 | * (Kfz ab 5 m/s, also weniger als die Haelfte des Regelwerts) und keine |
| 1461 | * Begruendung. Die Absenkung schaltete zugleich die Warnung |
| 1462 | * 'einfahrgeschwindigkeit-unter-regelwert' stumm, weil die Handeingabe je |
| 1463 | * Konfliktbeziehung gegen den bereits abgesenkten Kennwertsatz gemessen |
| 1464 | * wird. Nach OBEN bleibt es bei der bisherigen Plausibilitaetsschranke des |
| 1465 | * Vorgabenfeldes (Kfz und OePNV 20, Rad 8, Fussgaenger 2,5 m/s; settings.ts); |
| 1466 | * eine Sicherheitsschranke ist dort nicht noetig, weil ein hoeher |
| 1467 | * angesetzter einfahrender Strom die Zwischenzeit verlaengert. |
| 1468 | * |
| 1469 | * Die Werte sind die Regelwerte aus RILSA_DEFAULTS.enteringSpeed; ein Test |
| 1470 | * bindet beide aneinander. |
| 1471 | */ |
| 1472 | /** Kleinste ansetzbare Einfahrgeschwindigkeit fuer Kraftfahrzeuge. */ |
| 1473 | minEnteringSpeedKfz: 11.1 as MetersPerSecond, |
| 1474 | /** Kleinste ansetzbare Einfahrgeschwindigkeit fuer den Radverkehr. */ |
| 1475 | minEnteringSpeedRad: 5.0 as MetersPerSecond, |
| 1476 | /** Kleinste ansetzbare Einfahrgeschwindigkeit fuer Fussgaenger. */ |
| 1477 | minEnteringSpeedFuss: 1.5 as MetersPerSecond, |
| 1478 | /** Kleinste ansetzbare Einfahrgeschwindigkeit fuer gesondert signalisierten OePNV. */ |
| 1479 | minEnteringSpeedOepnv: 11.1 as MetersPerSecond, |
| 1480 | /** Kuerzeste ansetzbare Fahrzeuglaenge fuer Kraftfahrzeuge. */ |
| 1481 | minVehicleLengthKfz: 6 as Meters, |
| 1482 | /** |
| 1483 | * Kuerzeste ansetzbare Fahrzeuglaenge fuer Strassenbahnen - die |
| 1484 | * RiLSA-Rechenlaenge (15 m, Fall 3) ist zugleich die Untergrenze: Ein |
| 1485 | * kuerzerer Zuschlag verkuerzt den Raeumweg unzulaessig. |
| 1486 | */ |
| 1487 | minVehicleLengthStrassenbahn: 15 as Meters, |
| 1488 | /** Untere Schranke der Umlaufzeit - gilt fuer jede Anlagenart. */ |
| 1489 | minCycleTime: 30 as Seconds, |
| 1490 | /* |
| 1491 | * Die obere Schranke der Umlaufzeit steht hier NICHT. |
| 1492 | * |
| 1493 | * Sie ist keine harte Schranke im Sinne dieser Liste, sondern haengt an der |
| 1494 | * Anlagenart: 120 s am Knotenpunkt und an der Fussgaengerschutzanlage, 300 s |
| 1495 | * bei einstreifiger Verkehrsfuehrung. Sie steht deshalb in |
| 1496 | * ANLAGENART_GRENZEN, und die Vorgabenverwaltung holt sie von dort |
| 1497 | * (settings.ts, grenzeVonArt). |
| 1498 | * |
| 1499 | * Bis 5.3.4 lag hier zusaetzlich ein maxCycleTime von 120 s. Seit die |
| 1500 | * Vorgabenfelder ihre Schranken aus der Anlagenart beziehen, las es niemand |
| 1501 | * mehr - eine wirkungslose Zahl unter der Ueberschrift "harte Schranken" ist |
| 1502 | * schlimmer als keine: Wer sie aendert, glaubt etwas bewirkt zu haben. |
| 1503 | */ |
| 1504 | } as const; |
| 1505 | |
| 1506 | /** Eine Stufe einer Bewertungstafel: gilt bis EINSCHLIESSLICH `maxDelay`. */ |
| 1507 | export interface ServiceLevelStep { |
| 1508 | readonly grade: 'A' | 'B' | 'C' | 'D' | 'E' | 'F'; |
| 1509 | readonly maxDelay: Seconds; |
| 1510 | readonly label: string; |
| 1511 | } |
| 1512 | |
| 1513 | /** |
| 1514 | * Qualitaetsstufen des Verkehrsablaufs. |
| 1515 | * |
| 1516 | * Zwei Verfahren, weil beide in der Praxis vorkommen und der Altbestand sie |
| 1517 | * vermischt hat: Er trug die HCM-Grenzwerte unter der Bezeichnung |
| 1518 | * "Level of Service" und beschriftete das Ergebnis deutsch als Bewertung nach |
| 1519 | * RiLSA. Das Verfahren wird am Ergebnis mit ausgegeben. |
| 1520 | * |
| 1521 | * KORREKTUR (Fassung 5.4.0, Befund B1): Die bis dahin als "HBS 2015" |
| 1522 | * gefuehrte Kfz-Tafel (E bis 100 s, F darueber) war die Tabelle des HBS 2001. |
| 1523 | * Nach HBS 2015 endet die Kfz-Tafel bei E > 70 s ohne Obergrenze, und die |
| 1524 | * Stufe F ist keine Wartezeitstufe: Sie ist erreicht, wenn die nachgefragte |
| 1525 | * Verkehrsstaerke ueber der Kapazitaet liegt (q > C, Auslastungsgrad > 1). |
| 1526 | * Deshalb steht F fuer Kfz nicht in der Tafel, sondern wird in delay.ts an |
| 1527 | * den Auslastungsgrad gekoppelt (`kriterium: 'ueberlastung'`). |
| 1528 | * |
| 1529 | * KORREKTUR (Befund B4): Fussgaenger und Radverkehr bewertet das HBS 2015 nach |
| 1530 | * der MAXIMALEN Wartezeit (laengste Sperrzeit im Umlauf) mit eigener Tafel; |
| 1531 | * bisher liefen Radgruppen auf der Kfz-Tafel und Fussgaenger erhielten |
| 1532 | * ueber einen Unendlich-Pfad formal die Stufe F. |
| 1533 | * |
| 1534 | * Belege: HBS-2015-Kfz-Tafel samt F-Regel zitiert in Verkehrsuntersuchungen |
| 1535 | * nach HBS 2015 (z. B. Modus Consult, L 267, 2020: "Die QSV F ist erreicht, |
| 1536 | * wenn die nachgefragte Verkehrsstaerke q ueber der Kapazitaet C liegt"); |
| 1537 | * Fuss/Rad- und OePNV-Tafeln nach zwei uebereinstimmenden Sekundaerquellen |
| 1538 | * (Pruefstand: abzugleichen, siehe quellen.ts). |
| 1539 | */ |
| 1540 | export const SERVICE_LEVEL_SCALES: { |
| 1541 | readonly HBS: { |
| 1542 | /** Kfz-Verkehr, mittlere Wartezeit; F nur bei Ueberlastung (x > 1). */ |
| 1543 | readonly kfz: readonly ServiceLevelStep[]; |
| 1544 | /** Strassengebundener OePNV, mittlere Wartezeit. */ |
| 1545 | readonly oepnv: readonly ServiceLevelStep[]; |
| 1546 | /** Fussgaenger und Radverkehr, MAXIMALE Wartezeit (laengste Sperrzeit). */ |
| 1547 | readonly fussRad: readonly ServiceLevelStep[]; |
| 1548 | }; |
| 1549 | readonly HCM: { |
| 1550 | /** Highway Capacity Manual, Level of Service nach mittlerer Wartezeit. */ |
| 1551 | readonly kfz: readonly ServiceLevelStep[]; |
| 1552 | }; |
| 1553 | } = { |
| 1554 | HBS: { |
| 1555 | kfz: [ |
| 1556 | { grade: 'A', maxDelay: 20, label: 'sehr gut' }, |
| 1557 | { grade: 'B', maxDelay: 35, label: 'gut' }, |
| 1558 | { grade: 'C', maxDelay: 50, label: 'befriedigend' }, |
| 1559 | { grade: 'D', maxDelay: 70, label: 'ausreichend' }, |
| 1560 | { grade: 'E', maxDelay: Number.POSITIVE_INFINITY, label: 'mangelhaft' }, |
| 1561 | ], |
| 1562 | oepnv: [ |
| 1563 | { grade: 'A', maxDelay: 5, label: 'sehr gut' }, |
| 1564 | { grade: 'B', maxDelay: 15, label: 'gut' }, |
| 1565 | { grade: 'C', maxDelay: 25, label: 'befriedigend' }, |
| 1566 | { grade: 'D', maxDelay: 40, label: 'ausreichend' }, |
| 1567 | { grade: 'E', maxDelay: 60, label: 'mangelhaft' }, |
| 1568 | { grade: 'F', maxDelay: Number.POSITIVE_INFINITY, label: 'ungenügend' }, |
| 1569 | ], |
| 1570 | fussRad: [ |
| 1571 | { grade: 'A', maxDelay: 30, label: 'sehr gut' }, |
| 1572 | { grade: 'B', maxDelay: 40, label: 'gut' }, |
| 1573 | { grade: 'C', maxDelay: 55, label: 'befriedigend' }, |
| 1574 | { grade: 'D', maxDelay: 70, label: 'ausreichend' }, |
| 1575 | { grade: 'E', maxDelay: 85, label: 'mangelhaft' }, |
| 1576 | { grade: 'F', maxDelay: Number.POSITIVE_INFINITY, label: 'ungenügend' }, |
| 1577 | ], |
| 1578 | }, |
| 1579 | HCM: { |
| 1580 | kfz: [ |
| 1581 | { grade: 'A', maxDelay: 10, label: 'sehr gut' }, |
| 1582 | { grade: 'B', maxDelay: 20, label: 'gut' }, |
| 1583 | { grade: 'C', maxDelay: 35, label: 'befriedigend' }, |
| 1584 | { grade: 'D', maxDelay: 55, label: 'ausreichend' }, |
| 1585 | { grade: 'E', maxDelay: 80, label: 'mangelhaft' }, |
| 1586 | { grade: 'F', maxDelay: Number.POSITIVE_INFINITY, label: 'ungenügend' }, |
| 1587 | ], |
| 1588 | }, |
| 1589 | }; |
| 1590 | |
| 1591 | /** Beschriftung der Stufe F bei Ueberlastung (Kfz nach HBS 2015 / HCM 2010). */ |
| 1592 | export const SERVICE_LEVEL_F_UEBERLASTET: ServiceLevelStep = { |
| 1593 | grade: 'F', |
| 1594 | maxDelay: Number.POSITIVE_INFINITY, |
| 1595 | label: 'ungenügend (überlastet)', |
| 1596 | }; |
| 1597 | |
| 1598 | /** |
| 1599 | * Name des Bewertungsverfahrens - dieselbe Benennung am Bildschirm, im |
| 1600 | * Ausdruck, in der Tabellenausgabe und im Pruefbericht. Vor Fassung |
| 1601 | * 5.4.0 schrieb der Ausdruck "Bewertung nach HBS 2015", die Tabelle nur |
| 1602 | * "HBS" - fuer eine Rechnung, die in Wahrheit die HCM-Formel war. Die |
| 1603 | * Benennung darf deshalb nirgends mehr frei formuliert werden. |
| 1604 | */ |
| 1605 | export const BEWERTUNGSVERFAHREN_LABELS: Readonly<Record<'HBS' | 'HCM', string>> = { |
| 1606 | HBS: 'HBS 2015', |
| 1607 | HCM: 'HCM', |
| 1608 | }; |
| 1609 | |
| 1610 | /** |
| 1611 | * Woran eine Stufe gemessen wurde. Ein blosses "D" sagt nicht, ob eine |
| 1612 | * mittlere Wartezeit von 60 s (Kfz) oder eine laengste Sperrzeit von 60 s |
| 1613 | * (Fussgaenger) dahintersteht - und ein "F" nicht, ob es an der Wartezeit oder |
| 1614 | * an q > C liegt. Das Kriterium gehoert deshalb neben jede gedruckte Stufe. |
| 1615 | */ |
| 1616 | export const KRITERIUM_LABELS: Readonly< |
| 1617 | Record<'mittlere-wartezeit' | 'maximale-wartezeit' | 'ueberlastung', string> |
| 1618 | > = { |
| 1619 | 'mittlere-wartezeit': 'mittlere Wartezeit', |
| 1620 | 'maximale-wartezeit': 'maximale Wartezeit', |
| 1621 | ueberlastung: 'Überlastung (q > C)', |
| 1622 | }; |
| 1623 | |
| 1624 | /** Beschriftungen der Verkehrsarten fuer die Oberflaeche und den Ausdruck. */ |
| 1625 | export const TRAFFIC_MODE_LABELS: Readonly<Record<TrafficMode, string>> = { |
| 1626 | kfz: 'Kraftfahrzeuge', |
| 1627 | rad: 'Radverkehr', |
| 1628 | fuss: 'Fußgänger', |
| 1629 | oepnv: 'ÖPNV', |
| 1630 | }; |
| 1631 | |
| 1632 | /** Beschriftungen der Fahrbeziehungen. */ |
| 1633 | export const MOVEMENT_LABELS: Readonly<Record<Movement, string>> = { |
| 1634 | geradeaus: 'geradeaus', |
| 1635 | rechts: 'rechts abbiegend', |
| 1636 | links: 'links abbiegend', |
| 1637 | querung: 'querend', |
| 1638 | }; |
| 1639 | |
| 1640 | /** Benennung der Fahrzeugarten, ohne Laengenangabe. */ |
| 1641 | export const VEHICLE_CLASS_NAMES: Readonly<Record<VehicleClass, string>> = { |
| 1642 | pkw: 'Pkw', |
| 1643 | lkw: 'Lkw', |
| 1644 | bus: 'Bus', |
| 1645 | lastzug: 'Lastzug', |
| 1646 | strassenbahn: 'Straßenbahn', |
| 1647 | rad: 'Fahrrad', |
| 1648 | keine: 'ohne Längenzuschlag', |
| 1649 | }; |
| 1650 | |
| 1651 | /** |
| 1652 | * Fahrzeugart mit dem Laengenzuschlag, der TATSAECHLICH angesetzt wird. |
| 1653 | * |
| 1654 | * Die Zahl darf nicht fest in der Beschriftung stehen. Der Zuschlag ist ueber |
| 1655 | * die Vorgabenverwaltung einstellbar (vehicleLengthPkw bis vehicleLengthRad), |
| 1656 | * und eine feste Beschriftung widerlegt sich dann im selben Dokument selbst: |
| 1657 | * Die Signalgruppentabelle sagte "Lastzug (18,75 m)", waehrend die Tabelle mit |
| 1658 | * dem Rechenweg zwei Seiten weiter mit 22 m rechnete und die Abweichungstabelle |
| 1659 | * daneben "Angesetzt: 22 m, Regelwert: 18,75 m" auswies. Ebenso "Fahrrad (kein |
| 1660 | * Zuschlag)" bei einem eingestellten Zuschlag von 2,5 m. |
| 1661 | */ |
| 1662 | export function fahrzeugartBeschriftung( |
| 1663 | vehicleClass: VehicleClass, |
| 1664 | defaults: RilsaDefaults = RILSA_DEFAULTS, |
| 1665 | ): string { |
| 1666 | const name = VEHICLE_CLASS_NAMES[vehicleClass] as string | undefined; |
| 1667 | const zuschlag = defaults.vehicleLength[vehicleClass] as number | undefined; |
| 1668 | /* |
| 1669 | * Unbekannte Fahrzeugart (nur an der Schema-Reparatur vorbei erreichbar): |
| 1670 | * Hier stand `?? 0` und ergab "undefined (kein Zuschlag)" - waehrend die |
| 1671 | * Zwischenzeit fuer sie mit der Kfz-Rechenlaenge rechnet und der Bericht |
| 1672 | * einen Fehler fuehrt (Fassung 5.4.0, Befund C8). Genau der Widerspruch, den |
| 1673 | * dieser Docblock verbietet. Die Beschriftung nennt deshalb keine Zahl, die |
| 1674 | * sie nicht kennt (fuer Fussgaenger bleibt es bei 0 m, fuer Kraftfahrzeuge |
| 1675 | * sind es 6 m), sondern den Zustand und den Ort, an dem der Zuschlag steht. |
| 1676 | */ |
| 1677 | if (name === undefined || zuschlag === undefined) { |
| 1678 | return `unbekannte Fahrzeugart „${String(vehicleClass)}“ – Längenzuschlag siehe Prüfbericht`; |
| 1679 | } |
| 1680 | if (vehicleClass === 'keine') return name; |
| 1681 | // Ohne Zugriff auf die Anzeigeschicht: Das Dezimalkomma wird hier gesetzt. |
| 1682 | return zuschlag > 0 |
| 1683 | ? `${name} (${String(zuschlag).replace('.', ',')} m)` |
| 1684 | : `${name} (kein Zuschlag)`; |
| 1685 | } |