Jump to content

Tims Anlagenbausteine und Tutorial Anlagen


tim-fischertechnik

Recommended Posts

Hallo zusammen, 

in loser Folge veröffentliche ich hier Tutorial-Anlagen und Anlagenbausteine. Ihr seid gerne dazu eingeladen, Verbesserungsvorschläge zu meinen Anlagen zu geben oder auf Fehler hinzuweisen. Außerdem könnt ihr Wünsche bezüglich Anlagen mit EV-Steuerungsabläufen äußern. Ich schaue dann, ob sich der Vorschlag gut umsetzen lässt und nicht allzu spezifisch ist. Das heißt, dass sich dieser gut für die Allgemeinheit eignet.

 

Vor ein paar Tagen habe ich ja schon die Vorsignalsteuerung veröffentlicht. Heute gibt es eine neue Anlage von mir: "Geschwindigkeitssteuerung am Signal". Diese berücksichtig die Bauart-bedingte Höchstgeschwindigkeit einer Lok, sodass diese nie schneller als ihre Höchstgeschwindigkeit an einem Signal vorbeifährt/anfährt und aber auch nicht die maximal zulässige Streckenhöchstgeschwindigkeit überschreitet. 

Zitat

Vorsignalsteuerung: EA41846C-A2E8-47BE-966C-AC1810AD99F3
Geschwindigkeitssteuerung am Signal: 00CE253A-0C6A-495A-84B5-AE5028393AA0 (als Entwurf veröffentlicht)



Viele Grüße,
Tim

Link to comment
Share on other sites

  • 3 months later...

Hallo zusammen, 

ich habe rund um das Thema Zentralblock eine Demoanlage veröffentlicht. Im Gegensatz zum Selbstblock befinden sich die Signale in Grundstellung nicht auf Fahrt (Hp1), sondern auf Halt (Hp0). Sobald ein Zug eine Blockstrecke anstößt, werden alle zugehörigen Blöcke innerhalb der Zentralblocks aktiviert und im Gegensatz zum Selbstblock erneut aktiviert, wenn ein weiterer Zug die Strecke angestoßen hat. Vereinfacht gesagt, ist es dem Blocksignal im Selbstblock egal, ob ein Zug auf der Strecke kommt oder nicht. Es geht unabhängig auf Fahrt, sobald der Block davor von Zügen freigeräumt ist. Das Blocksignal im Zentralblock berücksichtig hingegen, ob ein Zug die Strecke passiert oder nicht, nachdem der Block davor geräumt wurde.

Ich habe die etwas komplexere Logik durch An- und Abmelden von Zügen an den jeweiligen Blocksignalen umgesetzt. Falls ihr Verbesserungsvorschläge habt, freue ich mich sehr.

6D8360B3-75B2-4584-9CFD-C7F9C1090E42


Viele Grüße,
Tim

Link to comment
Share on other sites

  • 5 months later...

Bahnsteigaufenthalt mit Türsteuerung und Signalabhängigkeit

Hallo zusammen,

vor längerer Zeit habe ich die automatische Türsteuerung für Bahnsteige vorgestellt. Nun habe ich die Steuerung erweitert, dass auch Signale mitberücksichtigt werden und beispielsweiße Türen schließen, wenn ein Signal auf Fahrt gestellt wird oder Züge an fahrtzeigenden Signalen für eine bestimmte Zeit wie auch bei Vorbild anhalten und nicht einfach losfahren.


In der Demo befindet sich im Hintergrund ein Haltepunkt. Dort halten alle Personenzüge an, die Türen öffnen sich und nach 50 Sekunden schließen sich die Türen wieder und der Zug fährt wieder automatisch los. Güterzüge mit dem Schlagwort "Güterzug" werden ignoriert und fahren einfach durch. Dann gibt es ganz klassisch Bahnsteige mit einer Signalabhängigkeit im Bahnhof. Hier gibt es vier verschiedene Fälle:

Bahnsteigaufenthalt.thumb.jpg.8c3e1aa2b57d891c3a540e9433f4f153.jpg

  1. Das Ausfahrtsignal ist auf Halt (Hp0) gestellt und der Durchfahrtschalter steht auf Halt.: Wenn der Zug ankommt, werden nach einer kurzen Verzögerung die Türen geöffnet und nach ca. 50 Sekunden wieder geschlossen. Der Zug fährt nicht an. Erst wenn das Ausfahrtsignal auf Fahrt (Hp1/Hp2) steht, fährt der Zug los.
     
  2. Das Ausfahrtsignal steht auf Fahrt und der Durchfahrtschalter in der Nähe zum Signal zeigt Halt.: Die Ausfahrt ist schon gestellt. Trotzdem hält der Zug an und die Türen öffnen sich. Nach ca. 50 Sekunden schließen sich die Türen und der Zug fährt nach einer kurzen Verzögerung automatisch los.
     
  3. Das Ausfahrtsignal steht auf Halt und der Durchfahrtschalter in der Nähe zum Signal zeigt Halt.: Auch hier öffnen sich zuerst die Türen. Bevor nach 50 Sekunden regulär die Türen geschlossen werden, wird die vorzeitige Ausfahrt (Hp1/Hp2) gestellt und die Türen schließen sich sofort und nicht erst 50 Sekunden nach Ankunft. Der Zug fährt automatisch los.
     
  4. Der Durchfahrtsschalter steht auf Durchfahrt und schaltet somit das Ausfahrsignal automatisch auf Fahrt. Der Zug hält nicht am Bahnsteig an, sondern fährt durch. Dieser Fall eignet sich vor allem für Güterzüge oder Schnellzüge.
     

Viel Spaß beim Ausprobieren.
 

C61E47AA-40D3-4239-B263-5AABC98A4954

Viele Grüße, 
Tim

Edited by tim-fischertechnik
Link to comment
Share on other sites

Hello @tim-fischertechnik . Remark. 

I only looked at your layout for a short time. After download the "L1 - DB 212" opens his doors. And they stay open even if you wait. They will stay open because there is no deferred instruction waiting at that time. I did'nt do anything yet. 

When we press the "Durchfahrtschalter Asig P2" it goes to green "Durchfarht" as is planned. The signal goes to "1-Hp2 langsamfahrt" , ok. But the train drives on with open doors. 
Regards, Herman

Edited by Herman
Link to comment
Share on other sites

Hello @tim-fischertechnik , I looked further because I really do like your tutorial, and the code. 
The yellow contact "GK Bahnsteig 1" does the job : opening/closing the doors and a new depart. And the steam train goes trough.

When the  "L1 - DB 212" comes a second time to the station, the same problem with the doors. Open, but stay open. ( "Halt" ) is lit.
Kind regards, Herman

Edited by Herman
removed some text / added steam train
Link to comment
Share on other sites

Hello @Herman,

vor 3 Stunden schrieb Herman:

And they stay open even if you wait. They will stay open because there is no deferred instruction waiting at that time.

There is a deferred instruction with about 50 seconds but this instruction will only be executed if the variable "vorzeitige Abfahrt" is false. The problem is that this variable was set to true so that the doors weren't close so far. I fixed the bug. The variable will be reset to false if the Signal shows Hp0.

 

vor 3 Stunden schrieb Herman:

When we press the "Durchfahrtschalter Asig P2" it goes to green "Durchfarht" as is planned. The signal goes to "1-Hp2 langsamfahrt" , ok. But the train drives on with open doors. 

Oh, that's dangerous! We all would like to use a proper operating procedure. :D I also fixed this so that the doors are closed before the train leaves the train station. Normally it is intended to switch the "Durchfahrtsschalter" to "Durchfahrt" (passage) before the train had entered the station. The train shouldn't stop. Instead the train should pass the train station and this should be used for express trains. 

I fixed the bugs in my layout and I also reloaded it again. Thanks for your hints. I'm looking forward if you could test the layout again.

Kind regards, Tim

Link to comment
Share on other sites

  • 1 month later...

Hallo liebe Community,

heute stelle ich euch eine Anlage vor, mit der sich automatisch Animationsnamen für einzelne Wagons zuweisen lassen. Oft möchte man die Türen von Wagons animieren und da die verschieden Wagons nicht einheitliche Animationsnamen besitzen, vergibt man eine Tabelle mit dem individuellen Animationsnamen. Allerdings ist die händische Zuweisung ziemlich mühselig und nicht ganz fehlerfrei. Schnell hat man sich vertippt und wenn man ganz ehrlich ist, ist man auch ziemlich faul. :) Deswegen habe ich mir überlegt, wie man die Zuweisung dieser individuellen Animationsnamen automatisieren kann und das Ergebnis möchte ich hier gerne präsentieren.

Animationsnamen automatisch bestimmen.mbp


Vorgehensweise: 
Man stellt den gewünschten Wagon oder mehrere Wagons auf das rote Programmiergleis und drückt den roten Taster. Fertig ist die Zuweisung! Sollte ein Animationsname noch nicht in dem Wortspeicher (das sind hier einfach Listen in Lua) vorhanden sein, erweitert man die Liste durch einen neuen Eintrag. Zum Beispiel so.
 

local animNamesRightDoor = {
"01 Tueren 1",
"05 Einstiegstüren rechts",
"01 Türen rechts"
-- hier neuen Animationsnamen als Text/ String ergänzen. Das Komma bitte nicht vergessen
}

 

Funktionsweise:

Und jetzt fragt ihr euch wie man prüfen kann, ob der Animationsname für ein Wagon mit dem aus dem Wortspeicher übereinstimmt. Die ganze Magie liegt in der pcall-Funktion.

local status, retval = pcall(animation, wagon, names); -- prüft ob Name aus Wortspeicher (Liste) mit dem Animationsname des Wagons übereinstimmt
print ("Status: ", status)
print ("Return Value: ", retval)
if status then
  -- passender Name wurde gefunden --> Zuweisung der Variablen
  if wagon.variables[tab] == nil then
    wagon.variables[tab] = {}
  end
  if var == "" then
    wagon.variables[tab] = names
  else
    wagon.variables[tab][var] = names
  end
end

Die pcall-Funktion ruft Funktionen im geschützten Modus auf und fängt Fehler ab. Sie gibt bei einem Fehler einen Statuscode aus, der hier in der Variable  retval abgespeichert wird. Falls also ein Animationsname in einem Wagon nicht vorhanden ist, würde normalerweise ein Fehler in der EV ausgegeben werden. Hier wird jedoch der Fehler abgefangen. Wenn der Animationsname aus dem Wortspeicher mit dem des Modells übereinstimmt, liefert pcall den Wert true an die Variable status und die Animationsnamen werden dem Wagon zugewiesen.

Gerne freue ich mich über Kritik, Wünsche und Ergänzungen, da man den Ablauf bestimmt noch weiter optimieren lassen kann. Viel Spaß beim Ausprobieren!

Viele Grüße, Tim

Link to comment
Share on other sites

Das ist ja genial!

Aber gibt es eine Möglichkeit, neue Animations-Namen automatisch zu extrahieren und entsprechend die Liste zu ergänzen ?
(bzw. hatte ich so was gelöst, indem jedes Animations-Objekt pro Animation eine Textvariable erhielt,
die dann eben für alle Objekte den gleichen Namen erhielt).

Gruß
Eggu

Link to comment
Share on other sites

vor 10 Minuten schrieb Eggu:

gibt es eine Möglichkeit, neue Animations-Namen automatisch zu extrahieren

Ja, diese Möglichkeit besteht.

Dazu müsste man die Animation einmal anstoßen.
Die EV kann auf den Start oder das Ende der Animation reagieren und den Namen der Animation bekommt man als Auslöser:

Animationsname.jpg.520f3a238072eb5d21f09394c031c166.jpg

Mein Beispiel zeigt nur, dass man den Namen zu fassen bekommt.
Selbstverständlich müsste man rausfiltern, ob es sich um eine Animation des Objekts handelt, welches gerade auf dem Prüfgleis steht.

Viele Grüße
Götz

Link to comment
Share on other sites

vor 12 Minuten schrieb Eggu:

Aber gibt es eine Möglichkeit, neue Animations-Namen automatisch zu extrahieren und entsprechend die Liste zu ergänzen ?

Interessante Frage.🤔 Aber woher weiß das Programm dann, welcher extrahierter Name dann zu welcher Animation gehört.

Nimm z.B. zum Vergleich die „Railjet-Endwagen“  von Bahnland. Da sind links und rechts anders definiert als bei den übrigen Wagen im Katalog.

VG,

Hawkeye

Link to comment
Share on other sites

vor 31 Minuten schrieb Goetz:

Ja, diese Möglichkeit besteht.

Danke für den Hinweis. @Goetz, wie kann ich prüfen, ob schonmal ein Wert in einer Liste (nicht der key, sondern der Wert selbst) vorkommt, damit ich ihn nur einmal hinzufüge? Hintergrund ist, dass ich im Ereignis "Animation startet/stoppt" den Animationsname zu greifen bekomme und ihn dann mittels table.insert in die Liste Wortspeicher hinzufüge. Das Problem ist nur, dass mehrmals der gleiche Wert in die Tabelle geschrieben wird, was ich vermeiden möchte. Ich füge mal die modifizierte Anlage hier ein.
Animationsnamen automatisch bestimmen_Alternative.mbp

Viele Grüße, Tim

Link to comment
Share on other sites

vor 20 Minuten schrieb tim-fischertechnik:

wie kann ich prüfen, ob schonmal ein Wert in einer Liste vorkommt

Auf die Schnelle fällt mir nur dieser Weg ein:

Liste = {"Eins", "Zwei", "Drei", "Vier"}
Neu = "Fünf"
Vorhanden = false

for k, v in ipairs(Liste) do
  Vorhanden = Vorhanden or v == Neu
end

if not Vorhanden then
  table.insert(Liste, Neu)
end

print(#Liste)

 

Oder du nimmst die Achsennamen als key und speicherst unter diesem Key den Wert "true".
Dann hast du auch alle Namen in der Liste, die du dann allerdings mit "in pairs()" (ohne das i vor pairs) abfragen musst.
 

Viele Grüße
Götz

Link to comment
Share on other sites

Hallo @tim-fischertechnik ,

ich finde Deine Idee auch super, zumal ich bei jeder Anlage wieder anfange, die Animationstexte einzutragen. Sicher könnte man ein Depot vorsehen, dass bereits Rollmaterial einer Epoche beinhaltet. Aber letztendlich sind die benötigten Züge meistens unterschiedlich.

Jetzt bin ich mal alle Lokomotiv- und Personenwagen-Modelle im Katalog durchgegangen. Dabei habe ich folgende Ergebnisse ermittelt:

Innenbeleuchtung: Hier gibt es derzeit 18 verschiedene Animationstexte. Die Beleuchtung von Fahrständen sind dabei nicht berücksichtigt. Diese Variablen müsste man nach Deinem Verfahren gut setzen können.

Einstiegstüren: Hier gibt es derzeit ebenfalls 18 verschiedene Animationstexte. (Die Schiebetüren vom Gütertriebwagen habe ich mal weggelassen). Sofern die Animationstexte für links/rechts nicht im Modell vertauscht sind (s. Anmerkung von @Hawkeye ), kann auch hier die Zuordnung erfolgen.

Pantograf: Bei Lokomotiven (11 Animationstexte) sehe ich ebenfalls kein Problem. Allerdings haben einige Modelle nur einen Pantografen bzw. einen AC- und einen DC-Pantografen. Im letzten Fall müsste man sich halt für einen entscheiden. Schwieriger wird es schon bei Pantografen auf Triebwagen oder Personenwagen. Hier sollen wohl nicht alle Pantografen eines Zuges ausgefahren werden.

Fahrlicht/Rücklicht: (ca. 23 Texte je Licht und Position) Hier wird es schon schwieriger, da Fahrrichtung, Drehung der Lok im Zug eine Rolle spielen. Es können die Animationstexte übernommen werden. Die spätere Steuerung muss dann auswählen, welche Animation zurückgenommen und welche abgespielt werden soll. Gleiches gilt für diese Lichter bei Steuerwagen und Personenwagen. Achtung: Es gibt auch Modelle, bei denen jede Lampe eines Spitzensignals einzeln animiert werden muss.

Ich würde also gerne Deine Tabellen vervollständigen und als Modulvariable ablegen. Ich überlege noch, wie man alle entsprechenden Objekte einer Anlage ermitteln und für diese dann das Setzen der Animationstexte durchführen kann. Die einfachste Lösung wäre wohl ein Schlagwort, bedeutet aber auch wieder manuelle Tätigkeit.

Also, Fazit: Gute Idee, die durchaus weiter ausgebaut werden sollte.

Viele Grüße,
    Wolfgang

 

 

Link to comment
Share on other sites

Hier eine Beispielanlage mit vollständiger Lösung:

Verschiedene Fahrzeuge fahren über einen Lern-Kontakt, alle Animationen werden gestoppt, kurz aktiviert und wieder zurückgesetzt.

Kommen dann die "Animation gestartet" -Ereignisse, werden die Blink -Ereignisse herausgefiltert (Text-Suche nach "Blink" bzw. "Fahrtrichtungsanzeiger",
dann nach "Rechts" bzw. Links"). Diese Namen speichert jedes Fahrzeug in einer lokalen Objekt-Variablen ab (Blinker_Rechts bzw. Blinker_links).

Via dieser Variablen wird dann vor der Rechts-Kurve rechts geblinkt.

87AACAEB-6D5D-4444-9DAC-DA9A6DD99269

Gruß
Eggu

Link to comment
Share on other sites

Die Lösung von @Eggu ist für die Blinker-Animation optimal und werde ich auch verwenden. Hier sind nicht allzu viele Schlüsselworte zu beachten. Bei den Zug-Animationstexten für Innenbeleuchtung, Stirn- und Rückleuchten, Türen haben sich allerdings die Modellbauer zu kreativ verhalten (kein Vorwurf!).

Deshalb habe ich meinen oben genannten Lösungsansatz mal umgesetzt und in der beiliegenden Anlage realisiert. Ich hoffe, dass Lese- und Tippfehler gegen 0 gehen :$.

Man kann aus den Schienenfahrzeugen beliebige Züge zusammenstellen und die Animationstexte ermitteln lassen.

Als nutzbare Lösung stelle ich mir eine Mini-Anlage vor, die nur aus einem Gleis und Gleiskontakten besteht, aber auch die EV beinhaltet. Diese ließe sich in jede andere Anlage importieren. Der Gleiskontakt zur Ermittlung der Animationstexte könnte dann z.B. in der Ausfahrt eines Schattenbahnhofs oder eines Depots verschoben werden.

Animationsnamen automatisch bestimmen pr.mbp

Viele Grüße,
    Wolfgang

 

Link to comment
Share on other sites

Hallo @tim-fischertechnik ,

Nochmal: Klasse Idee, die ich mir nun erlaubt habe weiter auszubauen.

Ich habe eine Mini-Anlage erstellt, in der alle Events für Innenbeleuchtung, Pantograf, Türen und Fahr-/Rücklicht enthalten sind. Die Liste der zu suchenden Animationstexte ist in Modulvariablen abgelegt. Muster-Gleiskontakte für die automatische Zuordnung der Animationstexte sowie als Auslöser für Animationen sind enthalten, so dass man nach Import der Anlage alles zur Verfügung hat, um dies in einer eigenen Anlage zu nutzen.

AnimationenfrBahnfahrzeuge.thumb.jpg.6eb58975584d9b056b0095f29de41992.jpg

(ID 4879AD06-54F0-4533-B9A3-A1B96EBAB35D)

Die Gleiskontakte rufen benutzerdefinierte Ereignisse auf, die auch von anderen Stellen genutzt werden können (z.B. Türen öffnen). Während alle benutzerdefinierten Ereignisse den gesamten Zugverband behandeln wird bei der Pantograf-Funktion nur ein Fahrzeug betrachtet. Die Aufruf-Variable "vorn" bedeutet in Fahrrichtung vorn bzw. bei Wert false in Fahrtrichtung hinten. Bei Fahrzeugen mit nur einem Pantograf wird dieser bei beiden Einstellungen aufgestellt oder heruntergefahren.

Bei der Fahrlichtfunktion wird beim ersten Fahrzeug in Fahrtrichtung das Spitzenlicht eingeschaltet und beim letzten das Rücklicht,

Gleiskontakte zum Ermitteln der Animationstexte sollten sinnvollerweise bei Ausfahrten aus Schattenbahnhöfen oder Depots untergebracht werden. Einmal "bearbeitete" Fahrzeuge werden dabei nicht mehr berücksichtigt.

Nicht realisiert sind Fahrlichtfunktionen für Fahrzeuge, bei denen die Lampen einzeln animiert sind sowie die Türfunktionen für den Gütertriebwagen (Güter-Schnellverkehr), da hier zwei Türen je Seite einzeln animiert sind.

Die Testanlage habe ich auch aktualisiert und hier nochmal beigefügt.

Animationsnamen automatisch bestimmen pr.mbp

Viele Grüße,
   Wolfgang

 

 

 

Link to comment
Share on other sites

Ein Nachtrag noch zu den Animationen:

Im Skript "findAnimName(...)" wird ja ermittelt, ob ein bestimmter Animationsname beim Objekt funktioniert. Falls ja, so wurde die Animation ja ausgeführt, also Türen geöffnet, Lichter eingeschaltet, etc. Deshalb sollte in dem Zweig "Animation gefunden" noch die Zeile

      wagon.animations[names]:stop(0)

eingefügt werden. In der Online gestellten Mini-Anlage ist dies korrigiert.

Viele Grüße,
    Wolfgang

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...