telican tutorial - hcanIngo/openHCAN GitHub Wiki
Hinweis: Neuer als das telican-Tutorial ist das Inbetriebname-Howto
Mit telican werden saemtliche administrative Arbeiten verrichtet. Dazu gehoeren:
-
zur Diagnose HCAN Frames auf dem Bus mitschneiden
-
Boards anpingen, d.h. Test-Frames schicken
-
neuen Modulen bzw. Boards eine HCAN Adresse zuweisen
-
Board-Firmware updaten/aktualisieren
-
fuer Spezial-Faelle: den EEPROM per Hand editieren
-
Konfigurationen auf die Boards spielen
-
Konfigurationen auf dem Board direkt editieren
-
Konfigurationen auf den Rechner sichern
Im Folgenden wird davon ausgegangen, dass bereits eine funktionierende HCAN Software Installation auf einem Linux-PC existiert.
Mit dem Parameter "--help" werden die Optionen angezeigt:
$ telican --help
telican options:
-h [ --help ] : shows the available options
-a [ --ip-address ] arg : IP adress of hcand (default 127.0.0.1)
-d [ --dump ] : dump mode; dump all messages
-n [ --numeric ] : in dump mode, print frame data as numbers
-p [ --ping ] arg : sends ping frames to the given destination
-c [ --connect ] arg : connect to given destination
--ignore-type : ignore the remote type if device does not answer
-e [ --exec ] arg : execute the given command(s)
-s [ --src ] arg : use given hcan source address
-r [ --read ] arg : read commands from given file
--syslog : syslog mode; logs all syslog messages on the bus
$
Wie bereits erwaehnt, kommuniziert telican (wie alle anderen Prozesse auch) mit hcand. Sofern hcand nicht auf dem selben Rechner laeuft, muss dessen IP Addresse explizit angegeben werden. Das geschieht mit der Option --ip-address
Sofern telican den hcanaddressd nicht erreichen kann (er muss auf der gleichen Maschine wie hcand laufen), so ist man gezwungen, eine explizite Quell-Adresse anzugeben, die telican fuer die Kommunikation verwenden soll. Beispiel:
$ telican -s 900 -p 310
sending ping packets from 900 to 310...
[1] 16 msec [2] 20 msec [3] 14 msec [4] 18 msec [5] 22 msec $
Da waeren zuerst einmal der sogenannte "Dump" Modus zu nennen. Im Dump Modus verhaelt sich telican passiv und zeigt alle HCAN Frames an, die er von hcand bekommt. (Normalerweise ist das gleichbedeutend mit allen Frames, die auf dem pysikalischen CAN Bus laufen, kann aber natuerlich im Stoerungsfalle anders sein.)
telican interpretiert alle HCAN Frames und gibt die Frame-Namen und die Paramter im Klartext aus. Sofern man nur die rohen Zahlen sehen moechte, helfen die Optionen -n, --numeric. Beispiel:
$ telican -d
0900 -> 0310 :SFP HMS PING_REQUEST
0310 -> 0900 :SFP HMS PING_REPLAY
0900 -> 0310 :SFP HMS PING_REQUEST
0310 -> 0900 :SFP HMS PING_REPLAY
0900 -> 0310 :SFP HMS PING_REQUEST
0310 -> 0900 :SFP HMS PING_REPLAY
0900 -> 0310 :SFP HMS PING_REQUEST
0310 -> 0900 :SFP HMS PING_REPLAY
0900 -> 0310 :SFP HMS PING_REQUEST
0310 -> 0900 :SFP HMS PING_REPLAY
0310 -> 0040 :SYSLOG [ 0x04 0x6b 0x65 0x79 0x5f 0x64 0x6f 0x77 ]
0310 -> 0040 :SYSLOG [ 0x6e 0x20 0x33 0x0a 0x0a ]
0310 -> 0035 :SFP HES HEIZUNG_DETAILS_REQUEST id:10
0310 -> 0035 :SFP HES HEIZUNG_TIST_REQUEST id:10
0310 -> 0040 :SYSLOG [ 0x04 0x6b 0x65 0x79 0x5f 0x64 0x6f 0x77 ]
0310 -> 0040 :SYSLOG [ 0x6e 0x20 0x32 0x0a 0x0a ]
0033 -> 0033 :SFP RTS TIME_INFO level:0 day_of_week:4 hour:13 minute:5 second:0
0033 -> 0033 :SFP RTS DATE_INFO level:0 day_of_month:17 month_of_year:8 year:6
$ telican -d -n
0900 -> 0310 :1 [ 0x01 0x01 ]
0310 -> 0900 :1 [ 0x01 0x02 ]
0900 -> 0310 :1 [ 0x01 0x01 ]
0310 -> 0900 :1 [ 0x01 0x02 ]
0310 -> 0040 :3 [ 0x04 0x6b 0x65 0x79 0x5f 0x64 0x6f 0x77 ]
0310 -> 0040 :3 [ 0x6e 0x20 0x33 0x0a 0x0a ]
0310 -> 0035 :1 [ 0x05 0x32 0x0a ]
0310 -> 0035 :1 [ 0x05 0x3b 0x0a ]
0310 -> 0035 :1 [ 0x05 0x32 0x0a ]
0310 -> 0035 :1 [ 0x05 0x3b 0x0a ]
$
Man sieht den Unterschied: -n bewirkt, dass telican nichts mehr interpretiert.
Um festzustellen, ob ein Board (d.h. eine Platine eines Controller-1612 Moduls oder eines Bedienfeldes) ueber den CAN Bus erreichbar ist und prinzipiell funktioniert, kann man das Board "anpingen". Dabei werden besondere "ping" Pakete gesendet, die das Board beantwortet. Werden alle Pakete (es werden je 5 Stueck gesendet) beantwortet und liegen die Zeiten zwischen Versand und Empfang nicht zu sehr auseinander, so ist der Bus funktionsfaehig und nicht stark ausgelastet. Beispiel:
$ telican -p 310
sending ping packets from 512 to 310...
[1] 16 msec [2] 20 msec [3] 14 msec [4] 18 msec [5] 22 msec $
Ping-Zeiten im Bereich bis 50 msec sind normal. Tip: Falls die Ping Pakete nicht beantwortet werden, parallel dazu in einem Fenster telican -d laufen lassen, und schauen, ob sie denn sichtbar sind, oder ob das Board irgendwelche anderen Infos sendet.
hcan-discover ist ein auf telican basierendes (Shell-)Script, das einen schnellen Ueberblick ueber angeschlosse und erreichbare Boards/Module liefert. Dazu wird es einfach aufgerufen; es laeuft ein paar Sekunden und meldet dann die gefundenen Boards:
$ hcan-discover
0137:
Typ: Versuchsboard1 v02
Up: 5 days, 22:37
0301:
Typ: Controllerboard-1612 v01
Up: 10 days, 21:55
0305:
Typ: USV Controller (Hardware: Controllerboard-1612 v01)
Up: 14 days, 17:23
0310:
Typ: Userpanel-v01
Up: 38 days, 18:40
$
Den Typ der Boards kann das Script (bzw. telican) aus der Board-Typ-ID ziehen. Sofern kein zu neues Board am Bus haengt, kann telican alle Board-Typen einwandfrei identifizieren. Zu jedem Board fragt das Script dann noch die Uptime, d.h. die Zeit, seit der das Board ununterbrochen laeuft, ab.
Der haeufigste Einsatzzweck von telican ist die direkte Kommunikation mit einem Board. Dazu wird der Parameter -c, --connect verwendet. telican pingt das Board kurz an; wenn es antwortet, geht es davon aus, dass Befehle und Anfragen angenommen werden und bietet eine Eingabeaufforderung:
$ telican -c 305
> show system
Board : USV Controller (Hardware: Controllerboard-1612 v01)
MCU : AVR Atmega32
Build #: 1
> show state
application is active.
> show uptime
14 days, 17:35
> help
send `<d0>` `<d1>` ... sends this raw frame to peer
show system prints info about peer
show uptime prints the uptime
show time prints the time/date
show address get the stored hcan address
show state bootloader, booting, app
show ee `<address>` shows a eeprom value
dump ee `<address>` dumps a eeprom range
set ee `<address>` `<value>` save value to eeprom
set address `<hcan-address>` save a new hcan address
bootloader boot into bootloader
loadapp load the application
reset generated a reset
flash `<filename>`
show usvstate
reset-usvstats
> quit
$
Mit dem Befehl "help" bekommt man immer eine Uebersicht, welche Befehle das Board, mit dem man verbunden ist, annimmt. telican verwendet je nach Board-Typ-ID einen passenden Treiber, um alle Features des Boards verwenden zu koennen. Sofern telican ein Board noch nicht kennt, passiert folgendes:
$ telican -c 299
warning: unknown board type id 255, using generic atmega32 driver...
> help
send `<d0>` `<d1>` ... sends this raw frame to peer
show system prints info about peer
show uptime prints the uptime
show time prints the time/date
show address get the stored hcan address
show state bootloader, booting, app
show ee `<address>` shows a eeprom value
dump ee `<address>` dumps a eeprom range
set ee `<address>` `<value>` save value to eeprom
set address `<hcan-address>` save a new hcan address
bootloader boot into bootloader
loadapp load the application
reset generated a reset
flash `<filename>`
> show system
Board : unknown
MCU : AVR Atmega32
Build #: 1
> quit
$
Man sieht: In einem solchen Falle erkennt er den MCU-Typ (Microcontroller) und stellt einen Minimal-Befehlssatz zur Verfuegung.
Weitere Tips finden sich im Inbetriebnahme-Howto.
