{"id":178,"date":"2026-02-15T18:22:44","date_gmt":"2026-02-15T17:22:44","guid":{"rendered":"https:\/\/behrisch.de\/blog\/?p=178"},"modified":"2026-02-15T18:22:44","modified_gmt":"2026-02-15T17:22:44","slug":"besser-spaet-als-nie","status":"publish","type":"post","link":"https:\/\/behrisch.de\/blog\/2026\/02\/besser-spaet-als-nie\/","title":{"rendered":"Besser sp\u00e4t als nie"},"content":{"rendered":"<div class=\"shariff shariff-align-left shariff-widget-align-left\"><ul class=\"shariff-buttons theme-round orientation-horizontal buttonsize-medium\"><li class=\"shariff-button mastodon shariff-nocustomcolor\" style=\"background-color:#563ACC\"><a href=\"https:\/\/s2f.kytta.dev\/?text=Besser%20sp%C3%A4t%20als%20nie https%3A%2F%2Fbehrisch.de%2Fblog%2F2026%2F02%2Fbesser-spaet-als-nie%2F\" title=\"Bei Mastodon teilen\" aria-label=\"Bei Mastodon teilen\" role=\"button\" rel=\"noopener nofollow\" class=\"shariff-link\" style=\"; background-color:#6364FF; color:#fff\" target=\"_blank\"><span class=\"shariff-icon\" style=\"\"><svg width=\"75\" height=\"79\" viewBox=\"0 0 75 79\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M37.813-.025C32.462-.058 27.114.13 21.79.598c-8.544.621-17.214 5.58-20.203 13.931C-1.12 23.318.408 32.622.465 41.65c.375 7.316.943 14.78 3.392 21.73 4.365 9.465 14.781 14.537 24.782 15.385 7.64.698 15.761-.213 22.517-4.026a54.1 54.1 0 0 0 .01-6.232c-6.855 1.316-14.101 2.609-21.049 1.074-3.883-.88-6.876-4.237-7.25-8.215-1.53-3.988 3.78-.43 5.584-.883 9.048 1.224 18.282.776 27.303-.462 7.044-.837 14.26-4.788 16.65-11.833 2.263-6.135 1.215-12.79 1.698-19.177.06-3.84.09-7.692-.262-11.52C72.596 7.844 63.223.981 53.834.684a219.453 219.453 0 0 0-16.022-.71zm11.294 12.882c5.5-.067 10.801 4.143 11.67 9.653.338 1.48.471 3 .471 4.515v21.088h-8.357c-.07-7.588.153-15.182-.131-22.765-.587-4.368-7.04-5.747-9.672-2.397-2.422 3.04-1.47 7.155-1.67 10.735v6.392h-8.307c-.146-4.996.359-10.045-.404-15.002-1.108-4.218-7.809-5.565-10.094-1.666-1.685 3.046-.712 6.634-.976 9.936v14.767h-8.354c.109-8.165-.238-16.344.215-24.5.674-5.346 5.095-10.389 10.676-10.627 4.902-.739 10.103 2.038 12.053 6.631.375 1.435 1.76 1.932 1.994.084 1.844-3.704 5.501-6.739 9.785-6.771.367-.044.735-.068 1.101-.073z\"\/><defs><linearGradient id=\"paint0_linear_549_34\" x1=\"37.0692\" y1=\"0\" x2=\"37.0692\" y2=\"79\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#6364FF\"\/><stop offset=\"1\" stop-color=\"#563ACC\"\/><\/linearGradient><\/defs><\/svg><\/span><\/a><\/li><li class=\"shariff-button facebook shariff-nocustomcolor\" style=\"background-color:#4273c8\"><a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fbehrisch.de%2Fblog%2F2026%2F02%2Fbesser-spaet-als-nie%2F\" title=\"Bei Facebook teilen\" aria-label=\"Bei Facebook teilen\" role=\"button\" rel=\"nofollow\" class=\"shariff-link\" style=\"; background-color:#3b5998; color:#fff\" target=\"_blank\"><span class=\"shariff-icon\" style=\"\"><svg width=\"32px\" height=\"20px\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 18 32\"><path fill=\"#3b5998\" d=\"M17.1 0.2v4.7h-2.8q-1.5 0-2.1 0.6t-0.5 1.9v3.4h5.2l-0.7 5.3h-4.5v13.6h-5.5v-13.6h-4.5v-5.3h4.5v-3.9q0-3.3 1.9-5.2t5-1.8q2.6 0 4.1 0.2z\"\/><\/svg><\/span><\/a><\/li><li class=\"shariff-button linkedin shariff-nocustomcolor\" style=\"background-color:#1488bf\"><a href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=https%3A%2F%2Fbehrisch.de%2Fblog%2F2026%2F02%2Fbesser-spaet-als-nie%2F\" title=\"Bei LinkedIn teilen\" aria-label=\"Bei LinkedIn teilen\" role=\"button\" rel=\"noopener nofollow\" class=\"shariff-link\" style=\"; background-color:#0077b5; color:#fff\" target=\"_blank\"><span class=\"shariff-icon\" style=\"\"><svg width=\"32px\" height=\"20px\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 27 32\"><path fill=\"#0077b5\" d=\"M6.2 11.2v17.7h-5.9v-17.7h5.9zM6.6 5.7q0 1.3-0.9 2.2t-2.4 0.9h0q-1.5 0-2.4-0.9t-0.9-2.2 0.9-2.2 2.4-0.9 2.4 0.9 0.9 2.2zM27.4 18.7v10.1h-5.9v-9.5q0-1.9-0.7-2.9t-2.3-1.1q-1.1 0-1.9 0.6t-1.2 1.5q-0.2 0.5-0.2 1.4v9.9h-5.9q0-7.1 0-11.6t0-5.3l0-0.9h5.9v2.6h0q0.4-0.6 0.7-1t1-0.9 1.6-0.8 2-0.3q3 0 4.9 2t1.9 6z\"\/><\/svg><\/span><\/a><\/li><li class=\"shariff-button info shariff-nocustomcolor\" style=\"background-color:#eee\"><a href=\"http:\/\/ct.de\/-2467514\" title=\"Weitere Informationen\" aria-label=\"Weitere Informationen\" role=\"button\" rel=\"noopener \" class=\"shariff-link\" style=\"; background-color:#fff; color:#fff\" target=\"_blank\"><span class=\"shariff-icon\" style=\"\"><svg width=\"32px\" height=\"20px\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 11 32\"><path fill=\"#999\" d=\"M11.4 24v2.3q0 0.5-0.3 0.8t-0.8 0.4h-9.1q-0.5 0-0.8-0.4t-0.4-0.8v-2.3q0-0.5 0.4-0.8t0.8-0.4h1.1v-6.8h-1.1q-0.5 0-0.8-0.4t-0.4-0.8v-2.3q0-0.5 0.4-0.8t0.8-0.4h6.8q0.5 0 0.8 0.4t0.4 0.8v10.3h1.1q0.5 0 0.8 0.4t0.3 0.8zM9.2 3.4v3.4q0 0.5-0.4 0.8t-0.8 0.4h-4.6q-0.4 0-0.8-0.4t-0.4-0.8v-3.4q0-0.4 0.4-0.8t0.8-0.4h4.6q0.5 0 0.8 0.4t0.4 0.8z\"\/><\/svg><\/span><\/a><\/li><\/ul><\/div>\n<p>Das sch\u00f6ne an einer Forschungseinrichtung ist ja, dass man sich auch mal mit v\u00f6llig abseitigen Themen besch\u00e4ftigen kann, Sachen die in der realen Welt praktisch nie vorkommen, aber eben doch interessant zu modellieren sind, wie zum Beispiel: Zugversp\u00e4tungen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"618\" src=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop-1024x618.png\" alt=\"\" class=\"wp-image-197\" srcset=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop-1024x618.png 1024w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop-300x181.png 300w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop-768x463.png 768w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/TrainStop.png 1323w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>In SUMO sind Z\u00fcge erst einmal ganz normale Fahrzeuge und man kann ihnen Halte (in SUMO hei\u00dfen sie <code>stop<\/code>) in ihrer Route mitgeben. Nat\u00fcrlich kann SUMO auch <a href=\"https:\/\/de.wikipedia.org\/wiki\/Sicherung_von_Zugfahrten#Fahren_im_festen_Raumabstand\">Fahren im Block<\/a> und \u00e4hnliche Bahnbesonderheiten simulieren, das ist f\u00fcr das Anhalten in diesem Artikel aber nicht so wichtig. Nehmen wir also an, wir haben schon eine Haltestelle mit dem sch\u00f6nen Namen &#8222;Halt&#8220; definiert und m\u00f6chten, dass unser Zug dort h\u00e4lt. In netedit sieht das im einfachsten Fall wie oben im Bild aus, in SUMO&#8217;s XML so:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;routes&gt;\n    &lt;trip id=\"Zug\" type=\"DEFAULT_RAILTYPE\" depart=\"0\" from=\"E0\" to=\"E1\"&gt;\n        &lt;stop trainStop=\"Halt\" duration=\"60\"\/&gt;\n    &lt;\/trip&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>Wie man leicht erraten kann, h\u00e4lt dieser Zug dann in der Simulation eine Minute am angegebenen Halt.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Wie man den Zug und alles weitere in SUMO&#8217;s netedit definiert beschreibe ich hier nicht n\u00e4her und beschr\u00e4nke mich auch im Folgenden auf die XML-Dateien. Nat\u00fcrlich kann man das auch alles in netedit klicken. Insgesamt ben\u00f6tigt man immer ein Netz, eine Routendatei (wie oben), eine Additional-Datei (f\u00fcr den Halt) und eine sumocfg, die alles zusammenf\u00fchrt. Ich habe Netz, Halt und initiale Route in netedit erstellt und einmal die sumocfg gespeichert und dann mit XML weitergemacht. Die finalen Dateien finden sich auch am Ende des Artikels zum Download.<\/p>\n<\/blockquote>\n\n\n\n<p>Wenn man das nicht nur anschauen m\u00f6chte, wertet man das am besten aus indem man stopinfo-output aktiviert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sumo -c train.sumocfg --stop-output stops.xml<\/code><\/pre>\n\n\n\n<p>was folgende Ausgabe in der Datei <code>stops.xml<\/code> erzeugt (unwesentliche Attribute habe ich zugunsten der Lesbarkeit weggelassen und es sei sumo auch verziehen, dass es <code>busStop<\/code> schreibt, auch wenn es ein Zug ist):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;stops&gt;\n    &lt;stopinfo id=\"Zug\" ... started=\"39.00\" ended=\"99.00\" busStop=\"Halt\" ...\/&gt;\n&lt;\/stops&gt;<\/code><\/pre>\n\n\n\n<p>Der Zug hat also tats\u00e4chlich von Sekunde 39 bis Sekunde 99 gehalten. Um Versp\u00e4tungen zu ermitteln, m\u00fcssten wir jedoch wissen, wann er denn h\u00e4tte losfahren sollen, wir brauchen also einen Fahrplan. Dazu nutzen wir in der Routendatei das Attribut <code>until<\/code> an Stelle von <code>duration<\/code> um deutlich zu machen, dass es eine geplante Abfahrtzeit gibt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;routes&gt;\n    &lt;trip id=\"Zug\" type=\"DEFAULT_RAILTYPE\" depart=\"0.00\" from=\"E0\" to=\"E1\"&gt;\n        &lt;stop trainStop=\"Halt\" until=\"120.00\"\/&gt;\n    &lt;\/trip&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>Jetzt enth\u00e4lt der stop output auch mehr Informationen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;stops&gt;\n    &lt;stopinfo id=\"Zug\" ... started=\"39.00\" ended=\"120.00\" delay=\"0.00\" busStop=\"Halt\" ...\/&gt;\n&lt;\/stops&gt;<\/code><\/pre>\n\n\n\n<p>Keine Versp\u00e4tung (<code>delay<\/code>), alles super. Jetzt lassen wir unseren Zug mal extra langsam fahren, um eine Versp\u00e4tung zu provozieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;routes&gt;\n    &lt;vType id=\"langsam\" vClass=\"rail\" maxSpeed=\"1\"\/&gt;\n    &lt;trip id=\"Zug\" type=\"langsam\" depart=\"0\" from=\"E0\" to=\"E1\"&gt;\n        &lt;stop trainStop=\"Halt\" until=\"120\"\/&gt;\n    &lt;\/trip&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>Der stop output sieht jetzt so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;stops&gt;\n    &lt;stopinfo id=\"Zug\" ... started=\"163.00\" ended=\"164.00\" delay=\"44.00\" busStop=\"Halt\" ...\/&gt;\n&lt;\/stops&gt;<\/code><\/pre>\n\n\n\n<p>Die Versp\u00e4tung ist jetzt schon mal abgebildet, aber wir w\u00fcrden nat\u00fcrlich gerne wissen woran es lag. Ist der Zug schon zu sp\u00e4t angekommen oder ist er genau hier einfach nur l\u00e4nger stehengeblieben? Dazu m\u00fcssen wir allerdings auch die geplante Ankunftszeit wissen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;routes&gt;\n    &lt;vType id=\"langsam\" vClass=\"rail\" maxSpeed=\"1\"\/&gt;\n    &lt;trip id=\"Zug\" type=\"langsam\" depart=\"0\" from=\"E0\" to=\"E1\"&gt;\n        &lt;stop trainStop=\"Halt\" arrival=\"60\" until=\"120\"\/&gt;\n    &lt;\/trip&gt;\n&lt;\/routes&gt;<\/code><\/pre>\n\n\n\n<p>generiert folgende Ausgabe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;stops&gt;\n    &lt;stopinfo id=\"Zug\" ... started=\"163.00\" ended=\"164.00\" delay=\"44.00\" arrivalDelay=\"103.00\" busStop=\"Halt\" ...\/&gt;\n&lt;\/stops&gt;<\/code><\/pre>\n\n\n\n<p>Wir sehen also, dass der Zug tats\u00e4chlich schon viel zu sp\u00e4t angekommen ist und sogar durch einen k\u00fcrzeren Halt etwas Zeit gut gemacht hat. Jetzt wollen wir das mal mit ein paar mehr Z\u00fcgen ausprobieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;routes>\n    &lt;vType id=\"default\" vClass=\"rail\"\/>\n    &lt;vType id=\"langsam\" vClass=\"rail\" maxSpeed=\"1\"\/>\n    &lt;vTypeDistribution id=\"mix\" vTypes=\"langsam default\"\/>\n    &lt;flow id=\"Zug\" type=\"mix\" begin=\"0\" end=\"3600\" period=\"300\" from=\"E0\" to=\"E1\">\n        &lt;stop trainStop=\"Halt\" until=\"120\"\/>\n    &lt;\/flow>\n&lt;\/routes><\/code><\/pre>\n\n\n\n<p>Jetzt f\u00e4hrt also alle f\u00fcnf Minuten ein Zug (und er ist mit 50% Wahrscheinlichkeit langsam) und man kann sehen, wie die Versp\u00e4tung von Zug.1 und Zug.2 vor allem auf die nachfolgenden wirkt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2-1024x658.png\" alt=\"\" class=\"wp-image-203\" srcset=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2-1024x658.png 1024w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2-300x193.png 300w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2-768x494.png 768w, https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/flow_stops-2.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Dieses Bild wurde \u00fcbrigens mit dem folgenden Aufruf erzeugt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$SUMO_HOME\/tools\/visualization\/plotXMLAttributes.py -x id,type -y delay --join-x \\\n --join \"\\n\" --barplot flow_stops.xml<\/code><\/pre>\n\n\n\n<p>und hier noch die Dateien des Szenarios zum herunterladen.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-0cb28558-4cdc-428a-bea3-22d881dee906\" href=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/train_delay.zip\">train_delay<\/a><a href=\"https:\/\/behrisch.de\/blog\/wp-content\/uploads\/2026\/02\/train_delay.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-0cb28558-4cdc-428a-bea3-22d881dee906\">Herunterladen<\/a><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<p>SUMO unterst\u00fctzt f\u00fcr Halte die Attribute <code>until<\/code> und <code>arrival<\/code>. Damit lassen sich Fahrpl\u00e4ne f\u00fcr Fahrzeuge abbilden und die Versp\u00e4tungen sowohl bei Ankunft als auch bei Abfahrt auswerten.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das sch\u00f6ne an einer Forschungseinrichtung ist ja, dass man sich auch mal mit v\u00f6llig abseitigen Themen besch\u00e4ftigen kann, Sachen die in der realen Welt praktisch nie vorkommen, aber eben doch interessant zu modellieren sind, wie zum Beispiel: Zugversp\u00e4tungen. In SUMO &hellip; <a href=\"https:\/\/behrisch.de\/blog\/2026\/02\/besser-spaet-als-nie\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,1,3],"tags":[],"class_list":["post-178","post","type-post","status-publish","format-standard","hentry","category-oss","category-uncategorized","category-verkehr"],"_links":{"self":[{"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":5,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/posts\/178\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/behrisch.de\/blog\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}