Tutorial:Ansteuerung von Außenanlagen-Komponenten: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→Streckenblock: Inzwischen veraltet) |
|||
| Zeile 112: | Zeile 112: | ||
*** Die KI stellt bei einer Anforderung immer vorbereitung und ueberwachung | *** Die KI stellt bei einer Anforderung immer vorbereitung und ueberwachung | ||
*** Für Fahrten von der KI zu mir müssen vorbereitung und uberwachung vorliegen | *** Für Fahrten von der KI zu mir müssen vorbereitung und uberwachung vorliegen | ||
*** | *** Empfangene setWerte können ignoriert werden, sofern sie nicht für irgendetwas nötig sind, werden von der KI aber Sinnwahrend eingesetzt. festl_aufloesung und zustrueckgabe müssen an passender Stelle gesendet werden. (z.B. zustrueckgabe als "blinde" Reaktion auf festl_aufloesung.) | ||
*** W> snt: Während sich das Signal auf 1 befindet, wird das Schicken von Zügen bei allen vier Blockmodulen verhindert. Die KI sendet das Signal nie, es wird aber über das Netzwerk übertragen. | *** W> snt: Während sich das Signal auf 1 befindet, wird das Schicken von Zügen bei allen vier Blockmodulen verhindert. Die KI sendet das Signal nie, es wird aber über das Netzwerk übertragen. | ||
Version vom 10. April 2020, 10:33 Uhr
Gleisfreimeldung
- frei (ausgehend, Wert) Egal ob Az oder Gleisstromkeis
- Wenn ein transparenter Achszähler installiert werden soll
- az_kapazitaet (int, eingehend, Wert) (größer 0 => Achszähler)
- Ereignisse (sendSignal) eingehend
- az_azb (bringt den Az in einen Zustand, in dem er nicht mehr zählt. Bei Bedarf nach einem Unter- oder Überlauf aufrufen.)
- az_azg(bool auszahlpruefung)
- Ereignisse ausgehend
- az_unterlauf
- az_ueberlauf
- az_auszaehlfail (wenn ein Azg-Kommando wegen Auszählsperre fehlschlägt)
Signale
Je nach Definition in der Bibliothek: (Derzeit konkurieren setWert und Ereignisse, das könnte sich aber ändern.)
- ...
Spezialwerte: (setWert, Ansteuerung über Ereignisse erzeugt eine Fehlermeldung.)
- net_signalhalt an einen beliebigen Signalschirm eines Signals
- Es wird ermittelt, welcher Schirm von allen Signalen mit dem selben Netzwerknamen den größten Betrag von net_signalhalt hat.
- Ist dieser Wert positiv, wird an das Nachbarstellwerk gemeldet, dass das Signal sicher in Haltstellung ist.
- Ist er negativ, 0 oder gibt es wiedersprüchliche Informationen mit dem selben Gewicht wird das Signal als nicht sicher in der Haltstellung gemeldet. (z.B. weil es Fahrt zeigt)
- net_signalhalt von einem beliebigen Signalschim eines Signals oder vom Streckenanschluss an das Script
- 0: Es ist kein Nachbar verbunden, in denen dieses Signal als SlavePrefered markiert ist.
- -1: Ein Nachbar beansprucht die Befehlsgewalt über dieses Signal und hat dieses Signal nicht sicher in Haltstellung. (z.B. weil es Fahrt zeigt)
- 1: Ein Nachbar beansprucht die Befehlsgewalt über dieses Signal und hat es sicher in Haltstellung.
Weichen und Riegel
Weichen werden über setWert angesteuert. (Ansteuerung über Ereignisse erzeugt eine Fehlermeldung.)
- Die Werte
setMoveundsetLockvon der Relaisanlage an den Antrieb/Riegel steuern, ob sich der Antrieb bzw. der Riegel in die angegebene Richtung bewegen soll- Gültige Richtungsangaben:
WEICHEN_DIRECTION_LEFT(Weiche wird nach Links umgestellt),WEICHEN_DIRECTION_RIGHT,WEICHEN_DIRECTION_IDLE(Stellstrom wird abgeschalten),RIEGEL_STATE_UNLOCKED,RIEGEL_STATE_LOCKED,RIEGEL_STATE_IDLE
- Gültige Richtungsangaben:
- Der Antrieb gibt folgenden Fehlercode als Ereignis zurück, wenn das Umstellen z.B. aufgrund von Riegelung fehlschlägt:
moveFailed - Der Riegel gibt folgenden Fehlercode als Ereignis zurück, wenn er am Riegelungspunkt feststellt, dass die Weiche falsch steht:
lockFailed - Antrieb und Riegel geben über folgenden setWert an die Relaisanlage zurück, in welche Position sich die Zunge bzw. der Riegel befinden:
directionChangedundlockChanged.- Gültige Rückgabewerte siehe setMove
- Außerdem kann
WEICHEN_DIRECTION_NOTRESPONDINGbzw.RIEGEL_STATE_NOTRESPONDINGzurückgegeben werden (Sonderzustand „Keine Rückmeldung“ je nach Antriebskonfiguration) - Für das Verhalten bei Stellstromabschaltung und Antriebstrennung siehe die zugehörigen Konfigurationsmöglichkeiten in der stwb.
- Beispiel: Wenn man von der Weiche
directionChangedWEICHEN_DIRECTION_LEFTbekommt ist sie in linker Endlage, wenn manWEICHEN_DIRECTION_RIGHTbekommt in rechter Endlage und in allen anderen Fällen ist die Weiche nicht in Endlage, kein Antrieb angebunden (je nach Konfiguration) oder der Antrieb kann aus sonstigen Gründen nicht von einer Endlage ausgehen. Ein Auswertung vonmoveFailedist nur erforderlich, wenn eine direkte Rückmeldung vom Antrieb erfolgt, etwa bei mechanischen Weichenantrieben. Bei elektrischen Weichenatrieben reicht es,directionChangedauszuwerten. Beachten Sie, dass selbst bei mechanischen Stellwerken in der Außenanlage die Zeit angehalten seien kann. Wenn während dieser Pause der Nutzer erneut einen Umstellbefehl gibt, sollte das Verhalten trotzdem irgendwie definiert sein.
- Der Antrieb und der Riegel können die Pluslage (o.Ä.) durch eine Beschriftung markieren. Dazu stehen die setWerte (string)
setLeftDesc,setRightDesc(Antrieb) bzw.setMyDirectionDescundsetOtherDirectionDesc(Riegel) zur Verfügung.
Zugnummernmeldeanlage
Ist noch komplett im Bau! Folgendes kann daher womöglich auch ein Provisorium sein:
- Alles im Streckenanschluss
- znanlage_leaving_vorhanden (W->0/1)
- znanlage_entering_vorhanden (W->0/1)
- znanlage_leaving_vormelden (E->int zugnummer)
- znanlage_leaving_vormeldung_ruecknehmen (E->int zugnummer)
- znanlage_entering_vormelden (<-E int zugnummer)
Streckenblock
Das ist inzwischen für Endgültig erklärt, aber derzeit noch schlecht dokumentiert:
- Felderblock und Erlaubnis
- Felderblock und Erlaubnis arbeiten nach dem Prinzip, dass StellSi das "Zentrale Relais" oder das Blockfeld verwaltet. StellSi kann (insb. im Netzwerkspiel) auch "plötzlich" das Blockfeld ändern, die Scripte müssen damit umgehen können und eine Anfrage zum Ändern des Zentralen Relais kann auch abgelehnt werden!
- Zentrale Relais: Werte vom Streckenanschluss an das Script:
- streckenblock_erlaubnisempfang
- 0, wenn Erlaubnisfeld im eigenen Bf rot wird, 1, wenn Erlaubnisfeld weiß wird
- streckenblock_vorblockempfang
- 1, wenn Anfangsfeld im eigenen Bf rot wird, 0, wenn Anfangsfeld weiß wird
- streckenblock_vorblockabgabe
- 1, wenn Endfeld im eigenen Bf rot wird, 0, wenn Endfeld weiß wird
- streckenblock_erlaubnisempfang
- Unverbindliche Anfragen das Zentrale Relais zu ändern: Ereignisse vom Script an den Streckenanschluss
- streckenblock_erlaubnisabgabe
- streckenblock_erlaubnisholen
- streckenblock_vorblock
- streckenblock_rueckblock
- Ausfahrsperrmelder / Selbstblock
- Der Nachbar ermittelt anhand der Gleisfreimeldung und der Haltmeldung des folgenden Signals, ob er einen Zug schicken darf
- Die KI-Gesteuerte Erlaubnisabgabe wird gesperrt, wenn zwar der nachfolgende Block frei ist, aber nicht die komplette Strecke zum Nachbarn.
- Werte vom Script an den Streckenanschluss
- streckenblock_aspm_gleis_frei
- streckenblock_aspm_signal_halt
- streckenblock_aspm_gleis_erlaubnisfrei
- Wert vom Streckenanschluss an das Script
- streckenblock_aspmempfang (Sollte i.A. nicht zu gebrauchen sein, da AspM des NachbarStw im eigenen Stw eh nicht angezeigt werden, und Netzwerkmäßig auch das passende Gegensignal fehlt. Aber zu Debugging-Zwecken habe ich es mal gelassen.)
- Ausfahrmeldung
- Der Nachbar meldet, ob seine Ausfahrt steht. Keine weiteren Effekte.
- Wert vom Streckenanschluss an das Script
- streckenblock_ausfahrmeldung
- Wert vom Script an den Streckenanschluss
- streckenblock_ausfahrmeldung
- Blockmodule mit Teilfahrstraßencharakter
- Die Namen der Päfixe stehen auf der Abschussliste, die Funktionalität wird sich vermutlich allerdings nicht mehr ändern.
- Es gibt 2 verschiedene Päfixtypen, den 4-Zeichen-Päfix ohne _ und den 5-Zeichen-Päfix mit _.
- Die verschiedenen Typen haben unterschiedliche Zwecke
- festl_ / zust
- Zugfahren von/zum Nachbar
- Teilfahrstraßen (Bahnhofsblock), vmtl. Felderblock A
- Es existieren Bedieneinrichtungen (Meldeorientiertes einstellen aktiviert)
- rvers_ / rang
- Vorrüstung Rangierfahrten von/zum Nachbar
- Es existieren Bedieneinrichtungen
- zfmfl_ / zflm
- Zugfahren von/zum Nachbar
- Zielfestlegemelder
- Automaik der Anlage, keine Bedieneinrichtungen (Meldeorientiertes einstellen deaktiviert)
- flank_ / flz
- Zustimmung zu Fahrten, die NICHT von/zum Nachbarn führen
- Flankenschutz
- festl_ / zust
- Folgender Programmablauf:
- W> = Werte vom Script an den Streckenanschluss bei nach bzw. umgekehrt bei von
- W< = Werte vom Streckenanschluss an das Script bei nach bzw. umgekehrt bei von
- E> bzw. E< = Analog für Ereignisse
- Exemplarisch hier für festl_ / zust
- W> zustanf
- W< festl_vorbereitung
- W> festl_erwartet
- W< festl_ueberwachung
- E> festl_aufloesung
- E< zustrueckgabe
- Die KI stellt bei einer Anforderung immer vorbereitung und ueberwachung
- Für Fahrten von der KI zu mir müssen vorbereitung und uberwachung vorliegen
- Empfangene setWerte können ignoriert werden, sofern sie nicht für irgendetwas nötig sind, werden von der KI aber Sinnwahrend eingesetzt. festl_aufloesung und zustrueckgabe müssen an passender Stelle gesendet werden. (z.B. zustrueckgabe als "blinde" Reaktion auf festl_aufloesung.)
- W> snt: Während sich das Signal auf 1 befindet, wird das Schicken von Zügen bei allen vier Blockmodulen verhindert. Die KI sendet das Signal nie, es wird aber über das Netzwerk übertragen.
Erweitertes Streckenfernmeldekabel für Fernsteuerung
- meta_connections: Wert, ausgehend: Anzahl an Busankoppelnden Stellen. Muss nicht zwingend sein, dass auch alle Daten senden.
- fsdata_*: Ereignis, ein- und ausgehend: Wird als Ereignis an die Gegenstelle gesendet. Dabei werden alle
- backinfo_*: Wert, ein- und ausgehend: so gesetzt, wie sie beim Sender des Ereignisses sind. Die Backinfos sollten nicht über die on_-Methoden abgefragt werden, weil sie sich wirklich nur ändern, wenn ein fsdata_ gesendet wird. Vielmehr sollten sie über getRecent-Methoden abgefragt werden, wenn ein fsdata_ ankommt. backinfo_ sind dazu gedacht, wenn ein Paket übertragen wird, das aus mehr als als einem Symbol besteht. Alle weiteren Symbole können über backinfos gesetzt werden. Bitte beachtet beim fs-Kabel auch immer, das es mehr als 2 Ankoppler geben kann. In der Praxis sind Fernsteuerkabel häufiger mal mit mehreren Endstellen belegt. Es ist garanitert, dass die Backinfos zum aktuellen fsdata passen, aber es ist nicht garantiert, dass zwei hintereinander gesendete fsdata zum selben sender gehören. Dies muss durch geeignete Techniken detektiert werden.
- token_*: Technik zum vermeiden von Datenkollisionen: Das angegebene Token wird Kabelweit exklusiv für sich reserviert. Mit setWert 1 wird die Reservierung angefordert, durch Rückgabe von Wert 1 der Erfolg der Reservierung bestätigt und mit 0 wieder gelöscht. Die anderen Anschlüsse des Kabels wirken bei dieser Funktionalität zwar mit, jedoch nur Programmintern und angeschlossene Scripte bekommen nur vom eventuellen eigenen Reservierungsversuch etwas mit.
- Falls es Bedarf gibt kann ich noch weitere Techniken implementieren, mit denen man mit Kollisionen verhindern kann. Ggf. mit mir absprechen, welche Möglichkeiten noch sinnvoll sind.
- Es ist geplant, dass die fs Zugnummernmeldeanlagen und Telefonie weiterleiten können wird.