Navigation
Modellbahn
Programmierung
Material
|
|
Request/Response-Block
Ein grundlegender Block ist für die Abstraktion der Bahnhardware
zuständig. Er kommuniziert über die serielle Schnittstelle des
Powernodes und den Portextender mit drei angeschlossenen
Leistungselektroniken. Nach dem Herstellen der seriellen Verbindung wird in
jedem Schritt des Modells ein CMDGLOBAL-Befehl an die Platinen gesendet. Die
Argumente werden aus den Eingängen des Blocks zusammengestellt, seine
Ausgänge fassen die Antworten der Hardware geeignet zusammen. Eine in C
geschriebene S-function führt die Kommunikation
durch.
Request/Response Block
Bei der Programmierung ist zu beachten, daß die Ausführung des
Blocks 35 Millisekunden dauert. Diese Tatsache muß bei der
Definition der Schrittgrößen und Samplingzeiten des Modells
berücksichtigt werden. Während der Simulation liefert der Block
keine sinnvollen Daten.
Eingänge
Die verschiedenen Eingänge des Blocks nehmen Arrays entgegen, die an
die jeweiligen Aktoren weitergeleitet werden. Da der Block drei
Leistungselektroniken entspricht, ist immer ein Drittel des Arrays einer
Platine zugeordnet. Bei insgesamt 12 Werten gehen die ersten vier an
die erste Leistungselektronik, die nächsten vier an die zweite und die
letzten vier an die dritte.
- signal (12 x uint8)
- Jeder der 12 Werte entspricht genau einem Signal der Modellbahn. Die
Werte sind binär codiert, das Bit 0 entspricht Rot, 1 Gelb und 2 Grün.
Nicht in jedem Signal sind auch alle Farben vorhanden, die Blocksignale
verfügen nur über Rot und Grün, am Bahnübergang gibt es nur Rot und Gelb.
- point (12 x boolean)
- Die Werte geben die Einstellungen der Weichenantriebe an, 0 schaltet
das Hauptgleis frei, 1 läßt den Zug auf das Nebengleis abbiegen.
- speedcontroller (6 x boolean)
- Wird einer der Werte auf 1 gesetzt, aktiviert dies den
Geschwindigkeitsregler für den jeweiligen Gleisabschnitt. Null erlaubt die
Steuerung über eine feste PWM.
- motormode (6 x uint8)
- Jeder Eintrag setzt den Modus für einen der Gleistreiber. Mögliche
Werte sind 0 (aus), 1 (vorwärts), 2 (rückwärts) und 3 (bremsen).
- speed_in (6 x uint8)
- Über diesen Wert kann die Geschwindigkeit des Zuges auf einem Block
eingestellt werden. Wenn der dazugehörende Regler nicht aktiv ist,
entspricht dieser Wert dem Tastverhältnis der PWM. Anderenfalls gibt der
Wert die Geschwindigkeit an, die der Regler erreichen soll. In beiden
Fällen sind Werte von 0 bis 127 erlaubt, je größer die Zahl desto höher
das Tempo.
Ausgänge
Die Ausgänge entsprechen nach dem selben Schema den Antworten der
Leistungselektroniken.
- channel (3 x int8)
- Dieser Wert gibt den Status der seriellen Verbindungen zu den drei
Platinen an. Ein negativer Wert bedeutet, daß durch einen Fehler keine
Verbindung hergestellt werden konnte oder sie verloren gegangen ist.
Anderenfalls liegt die Zahl zwischen 0 und 3 und entspricht dem aktiven
Kanal der Leistungselektronik.
- contact (12 x uint8)
- Jeder Wert enthält das letzte Ereignis, das von dem jeweiligen
Kontakt registriert wurde. Bei einem Wert von 0 wurde der Sensor noch
nicht ausgelöst, 1 entspricht einem vorwärts fahrenden Zug, 2 rückwärts
und bei 3 wurde der Kontakt ausgelöst, ohne daß eine Richtung feststellbar
war.
- contact_seq (12 x uint8)
- Dieses Array enthält für jeden Kontakt den entsprechenden Sequence
Counter mit einer Breite von zwei Bit. Bei jedem Ereignis wird der Zähler
inkrementiert, der Benutzer kann so sehen, ob neue Daten von dem Kontakt
vorliegen.
- track_occupied (6 x boolean)
- Das System kann feststellen, ob ein Triebwagen auf den
angeschlossenen Gleisen steht. Der Wert 0 bedeutet, daß das betreffende
Gleis frei ist oder daß nur Waggons darauf stehen, anderenfalls wird 1
zurückgegeben.
- track_shutdown (6 x boolean)
- Jeder Eintrag des Arrays signalisiert, daß der Fahrstrom in einem
Block abgeschaltet werden mußte. Ursache dafür ist in der Regel ein
Kurzschluß.
- speed_newdata (6 x boolean)
- Die Geschwindigkeit der Züge und die Belegung der Gleise werden nur
in gewissen Intervallen gemessen. Wenn der dazugehörende Treiber auf Fahrt
oder auf Bremsen geschaltet ist, erfolgt eine Messung alle 0,2 Sekunden,
sonst beträgt die Länge der Intervalle 1,0 Sekunden. Ein Wert des Arrays
wird immer dann negiert, wenn die aktuell anliegenden Daten neu gemessen
wurden. Dadurch kann eine Anwendung auf frische Meßwerte reagieren.
- speed_out (6 x uint8)
- Diese Werte entsprechen den Beträgen der zuletzt gemessenen
Geschwindigkeiten auf allen Gleisen. Der mögliche Wertebereich erstreckt
sich von 0 bis 127, typischerweise werden Geschwindigkeiten bis 45
erreicht.
|