wiki:SyntaxUebersicht

Syntax-Übersicht

Die Kommunikation (Messwertabfrage, Steuerbefehle) PC <-> c't-Lab erfolgt grundsätzlich über eine serielle Schnittstelle (auch USB oder Ethernet) im Voll-Duplex-Betrieb in ASCII-Klartext, so dass eine problemlose Integration in jede Programmierumgebung möglich ist. Jeder Rechner, der einen (auch virtuellen) COM-Port besitzt, kann mit dem c't-Lab "reden".

Jedes c't-Lab-Modul besitzt eine eigene Moduladresse (0..7), die binär über drei Jumper auf der jeweiligen Platine eingestellt wird. Innerhalb eines Verbundes darf jede Moduladresse nur einmal vergeben sein.

Vom PC empfangene Module werden über den OptoBus weitergereicht, bis sie zum adressierten Modul gelangen. Dieses interpretiert den Befehl oder die Abfrage und gibt ein Ergebnis oder eine Bestätigung heraus, die wiederum von in der Kette folgenden Modulen weitergereicht wird und schließlich zur steuernden PC gelangt.

Schnittstellen-Einstellungen

c't-Lab sendet und empfängt mit 38400 Bd 8n1, liefert aber kein Echo der eingehenden Zeichen. Bei einem Terminal-Programm deshalb ggf. lokales Echo einstellen, damit man nicht "blind" tippen muss. Befehle werden erst nach dem Empfang von CR oder CR/LF verarbeitet, mehrere Befehle pro Zeile sind unzulässig. Backspace (#8) löscht letztes Zeichen aus dem Befehlszeilenpuffer. Jede von c't-Lab gesendete Messwert- oder Statusmeldung endet mit einem CR/LF. Siehe hierzu auch das Ticket zur Echo-Problematik. Mit allen Versionen ab Anfang 2008 ist die Baudrate einstellbar über Befehl SBD <timer-wert dezimal>. Der Timer-Wert muss mit der Syntax-Tabelle (Excel-Sheet 2.Seite) errechnet werden, da der Controller seine Quarzfrequenz nicht kennen kann. Unsere 16-MHz-Prozessoren liefen auch mit 18,4320 MHz noch einwandfrei, damit sollten 57600 Bd (Timer-Wert 39 dez.) problemlos machbar sein. Bei 16 MHz beträgt der 57600 Bd Timer-Wert 34, der sich ergebende Fehler von 2% kann (muss aber nicht) zu Übertragungsfehlern führen (mit dem LabVIEW-VIs COMtest und COMperformance verifizierbar). Die geänderte Baudrate wird erst mit dem nächsten Reset übernommen. Bitte beachten Sie beim Einsatz anderer Quarzfrequenzen, dass das Trigger- und Burst-Timing (ADA-IO, DDS) dann nicht mehr millisekundengenau stimmt.

Die jeweils für ein Modul zulässigen Befehle und Abfragen sind in der Syntax-Tabelle (Excel-Sheet und PDFs) einsehbar.

Befehle

Jeder vollständige Befehl ist folgendermaßen aufgebaut:

<ModulNr>:<SubkanalNr oder Mnemonik, ggf. mit Adresse>=<Wert>!<CRLF>
Beispiele für zulässige Befehle:
0:30=1.7678!
VAL 30=1.7678!
DSP=0
30=1.7678
0:VAL 20=1.234!
Mit <$optionale Prüfsumme> (siehe unten):
0:VAL 20=1.234!$45

mit Modulnummer 0..7 und "*" (Wildcard, an alle), Subkanalnummer 0..255 oder Mnemonik (Klartext-Befehl, siehe Syntax-Tabelle zu den Modulen). Mnemoniks werden vom Modul in eine SubCh-Adresse übersetzt und ggf. auch als Ergebnis damit wieder ausgegeben. Sub-Adressen hinter dem Mnemonik werden zur Basis-SubCh des Mnemoniks hinzuaddiert:

0:SCL 12=1!
ist identisch mit
0:112=1!
wenn bei diesem Modul SCL dem SubCh 100 entspricht.

Ein Befehl enthält immer die "="-Zuweisung mit nachfolgendem Wert. Mit dem abschließenden "!" erreicht man, dass das angesprochene Modul den Befehl bestätigt. Ohne "!" erfolgt keine Bestätigung (besserer Durchsatz!). Bei weiteren Befehlen an das gleiche Modul kann die Moduladresse inkl. ":" weggelassen werden.

Abfragen

Jede vollständige Abfrage (Messwerte, Register, Parameter) ist folgendermaßen aufgebaut:

<ModulNr>:<SubkanalNr oder Mnemonik>?<$optionale Prüfsumme><CRLF>
Beispiele für zulässige Abfragen:
0:30?
VAL 30?
30
DSP
OPT 17?
7:VAL 0?

mit Modulnummer 0..7 und "*" (Wildcard, an alle), Subkanalnummer 0..255 oder Mnemonik (Klartext-Befehl, siehe Syntax-Tabelle zu den Modulen).

Eine Abfrage enthält niemals das "="-Zeichen. Das abschließende "?" ist optional, es muss aber folgen, wenn eine Prüfsumme mitgeliefert wird.

Ergebnisse

Statusmeldungen und Messergebnisse der Module folgen dem obigen Aufbau, sind aber durch ein vorangestelltes "#" gekennzeichnet:

#<ModulNr>:<SubkanalNr>=<Wert><CRLF>
zum Beispiel:
#0:10=2.675678
#7:3=512

Am PC vom c't-Lab eintreffende Meldungen können daher leicht nach ihrem Absender unterschieden werden.

Prüfsumme

Zur Erhöhung der Betriebssicherheit wurde die Möglichkeit einer simplen Prüfsummen-Übertragung (8-Bit-XOR) geschaffen: Ein $<HEXbyte> mit der XOR-Summe über den gesamten Befehlsstring (bis zum letzten Zeichen vor dem "$"), also z.B.

0:VAL 20=1.234!$45

fordert das jeweilige Modul auf, die Prüfsumme gegen die errechnete zu checken und im Fehlerfall mit dem Fehlercode 7 abzubrechen. Ein echtes CRC-16 würde den Controller leider arg lange beschäftigen und wurde deshalb verworfen. Die XOR-Prüfsummenberechnung unter LabVIEW erledigt das VI XOR8.vi. Ohne "$" erfolgt wie früher keine Prüfsummenberechnung. Wir empfehlen, bei kritischen Anwendungen (z.B. DCG als Netzteil) auf jeden Fall diese Prüfsumme mit zu übergeben, damit ggf. keine gefährlichen Betriebszustände eintreten können. In neue Demo- und Abgleich-VIs wurde die Prüfsummenberechnung bereits integriert.

Mit dem jetzigen Stand (Sept. 2008) errechnen die Module selbst keine Prüfsumme.

LabScript

Für das FPGA-Modul wurde die c't-lab-Syntax um eine Scripting-Möglichkeit erweitert, sie dazu auch unter LabScript.

Last modified 8 years ago Last modified on Nov 5, 2008, 5:10:16 PM