Die Controller-Tools sind kleine Linux-Programme, mit denen die Controller getestet werden können. Alle Programme sprechen das serielle Device direkt an. Meistens ist das /dev/ttyS0, kann aber auch im Falle eines USB2SER-Dongles /dev/ttyUSB0 heißen. Alle Tools geben die Meldungen im Klartext aus, soweit die Meldungen dem Kommunikationsprotokoll entsprechen.
Mit diesem Tool werden alle Controller mit neuer Firmware geflasht. Das Flashen geschieht über den CAN-Bootlader der CAN-Knoten. Das CAN-Gateway kann auf diesem Wege nicht geflasht werden. Die Firmware muss im üblichen Hex-Format vorliegen.
Aufruf:
./canprog <device> <hexfile>
canprog greift nur schreibend auf das serielle Device zu.
Das Tool receive ist fast das wichtigste Tool. Es gibt alle über RS232 empfangenen Nachrichten im Klartext aus. Bei Verwendung der Tools canprog, ping, reset und setid macht es Sinn das Tool receive in einer weiteren Konsole mitlaufen zu lassen.
Aufruf:
./receive <device>
receive greift nur lesend auf das serielle Device zu.
Mit dem ping-Tool wird jede Sekunde eine PING-Message via Broadcast versendet. Alle CAN-Knoten müssen demnach mit einem PING/MSG_OK antworten.
Aufruf:
./ping <device>
ping greift nur schreibend auf das serielle Device zu.
Mit dem reset-Tool wird via Broadcast ein Reset aller CAN-Knoten veranlasst.
Aufruf:
./reset <device>
reset greift nur schreibend auf das serielle Device zu.
Mit dem qrybuf-Tool fragt alle CAN-Knoten nach den Füllständen ihrer CAN-Buffer ab.
Aufruf:
./qrybuf <device>
qrybuf greift nur schreibend auf das serielle Device zu.
Mit dem qryerr-Tool fragt alle CAN-Knoten nach den CAN-Fehlerzählern ab. Es erfolgen pro CAN-Knoten drei Antwortmeldungen.
Aufruf:
./qryerr <device>
qryerr greift nur schreibend auf das serielle Device zu.
Mit dem setid-Tool wird die Controller-ID umprogrammiert. Dabei muss beim zu programmierenden Controller der ID-Taster gedrückt gehalten werden. Alle Controller, deren ID-Taster nicht gedrückt werden, antworten mit einem SET_ID/MSG_ID_CHANGE_DISABLED. Wenn der ID-Taster gedrückt wird, die neue ID aber der alten ID ist, bleibt die gespeicherte Konfiguration erhalten und der Controller antwortet mit SET_ID/MSG_ID_NOT_CHANGED. Wird die ID geändert, wird eine vorhandene Konfiguration gelöscht und der Controller antwortet mit SET_ID/MSG_OK. Danach wird ein Reset durchgeführt.
Aufruf:
./setid <device> <id>
setid greift nur schreibend auf das serielle Device zu.
gwsim ist ein Tool, mit dem die Stellwerks-Software getestet werden kann. Dazu müssen zwei Rechner mit einem Nullmodem-Kabel verbunden werden. Auf dem einem Rechner läuft die Stellwerks-Software, auf dem anderen läuft gwsim. gwsim nimmt alle CAN-Frames entgegen und antwortet mit einem MSG_OK. Dadurch sollte die Stellwerks-Software in einem fehlerfreiem Modus funktionieren. Die eingehenden und ausgehenden CAN-Frames werden auf der Konsole mitgeloggt.
Aufruf:
./gwsim <device>
gwsim greift lesend und schreibend auf das serielle Device zu.
config programmiert eine Testkonfiguration in den Controller mit der ID 2040. Dazu gehören zwei neue Weichen, zwei alte Weichen, vier Gleisabschnitte und ein Einfahrsignal kombiniert mit einem Vorsignal, ein Vorsignal und ein Gleissperrsignal verteilt an zwei Lichtsignalmodule.
Folgende Konfiguration wird vorgesehen:
| Unitnumber | Typ | Bemerkung |
|---|---|---|
| 2020 | Weiche ohne Endabschaltung | Weichenmodul |
| 2021 | Weiche ohne Endabschaltung | Weichenmodul |
| 2019 | Weiche mit Endabschaltung | Weichenmodul |
| 2001 | Weiche mit Endabschaltung | Weichenmodul |
| 100 | Einfahrsignal | Lichtsignalmodul 3 |
| 101 | Vorsignal | Lichtsignalmodul 3 |
| 102 | Vorsignal | Lichtsignalmodul 2 |
| 103 | Gleissperrsignal | Lichtsignalmodul 2 |
| 201 | Gleisabschnitt | Gleismodul |
| 202 | Gleisabschnitt | Gleismodul |
| 203 | Gleisabschnitt | Gleismodul |
| 204 | Gleisabschnitt | Gleismodul |
Aufruf:
./config <device>
switch testet die vier Weichen des Controllers mit der ID 2040. Diese werden zweimal jeweil nach links und nach rechts geschaltet.
Aufruf:
./switch <device>
signal testet ein Einfahrsignal mit kombinierten Vorsignal am Controller mit der ID 2040. Alle Kombinationen werden rotierend und fortlaufend durchprobiert. Dazu gehört auch ein Testmuster (alle LEDs an) und alle LEDs aus.
Aufruf:
./signal <device>
rail testet das Gleismodul am Controller mit der ID 2040. Alle vier angeschlossenen Gleisabschnitte werden zyklisch ein- und wieder ausgeschaltet. Dabei wird intern ein Zähler hochgezählt. Die ersten vier Bits repräsentieren jeweils einen Gleisabschnitt. So wird der erste Gleisabschnitt mit jedem Zyklus ein- und wieder ausgemacht, der zweite Abschnitt erst mit jedem zweiten, der dritte Abschnitt mit jedem vierten Zyklus, usw. Ein Zyklus dauert zwei Sekunden.
Aufruf:
./rail <device>
occupation fragt alle zwei Sekunden die Gleisbesetztanzeige eines Gleismoduls am Controller mit der ID 2040 ab.
Aufruf:
./occupation <device>
Mit dem send-Tool können beliebige CAN-Frames gesendet werden. Es wird eine Ziel-ID übergeben, danach kommen beliebig viele Datenbytes. Die Datenbytes dürfen dezimal und hexadezimal angegeben werden. Hexadezimale Datenbytes müssen ein 0x vor dem Datenbyte haben.
Aufruf:
./send <device> <id> {bytes}
send greift nur schreibend auf das serielle Device zu.
Ausgehende Kommandos haben in etwa folgendes Ausgabe Format:
1215148970 # ID=0000:0000 len=1 stat=00 # PING # 0xbb >
1215148971 # ID=0000:0000 len=1 stat=00 # PING # 0xbb >
Zeitstempel|ID <Standard-ID>:<Extended-ID>|len=<Datenfeldlänge>|stat=<Status>|Kommando <ggf. weitere Datenbbytes>|Prüfsumme der seriellen Übertragung|Richtung
Bedeutung:
| Zeitstempel | Zeit der Sekunden seit dem 01.01.1970 |
|---|---|
| Standard-ID | Die 11-bittige CAN-Standard-ID, entspricht der Controller-ID |
| Extended-ID | Der 16-bittige Anteil der CAN-Extended-ID, entspricht der Unitnumber |
| Datenfeldlänge | Mindestens 1, da das Kommandobyte Pflicht ist. |
| Status | 0x00 bei Standard Data Frames, 0x40 bei Extended Data Frames |
| Kommando | Das eigentliche Kommando. Dazu kommen ggf. ergänzende Datenbytes. |
| Prüfsumme | Die Prüfsumme für die Übertragung über RS232 |
| Richtung | > steht für Senden, < steht für Empfangen |
Eingehende Antworten haben folgendes Format:
1215718180 # ID=07ff:0007 len=6 stat=51 # PING MSG_OK 0007:0000 # 0x00 6632 <
1215718181 # ID=07ff:0007 len=6 stat=51 # PING MSG_OK 0007:0000 # 0x00 6633 <
Zeitstempel|ID=<Std-ID>:<Ext-ID>|len=<Datenfeldlänge>|stat=<Status>|Kommando|Antwort-Code|<ggf. weitere Datenbbytes>|Prüfsumme der seriellen Übertragung|lfd. Frame-Nummer|Richtung
Bedeutung:
| Zeitstempel | Zeit der Sekunden seit dem 01.01.1970 |
|---|---|
| Standard-ID | Die 11-bittige CAN-Standard-ID, entspricht der Gateway-ID 0x7ff |
| Extended-ID | Der 16-bittige Anteil der CAN-Extended-ID, der sendenden Controller-ID |
| Datenfeldlänge | Mindestens 6, da das Kommandobyte, der Antwortcode, die Absende-ID (Controller-ID und Unitnumber) Pflicht ist. |
| Status | 0x00 bei Standard Data Frames, 0x20 bei Extended Data Frames, 0x40 steht für Empfang in Buffer 0, 0x80 in Buffer 1, die ersten drei Bits zeigen die Filterregel an, auf die das Frame passte |
| Kommando | Das eigentliche Kommando |
| Antwort-Code | Der Antwort-Code |
| <Standard-ID> | Die Controller-ID des Absenders. |
| <Extended-ID> | Die Unitnumber des Absenders |
| weitere Datenbytes | Es ist noch Platz für zwei zusätzliche Bytes. |
| Prüfsumme | Die Prüfsumme für die Übertragung über RS232 |
| Richtung | > steht für Senden, < steht für Empfangen |
Wiki: BedienungsAnleitung
Wiki: Home
Wiki: KommunikationsProtokoll