Interpreter für CAN-Tester

Inhalt

Siehe auch: CAN-Tester Übersicht


Das Kommandoprogramm

Das Kommandoprogramm besteht im einfachsten Fall aus einer Reihe von CAN-Messages, die gesendet werden sollen.

Das Format ist normalerweise:

<CAN-Identifier> <Datenbyte0> <Datenbyte1> ... <Datenbyte7>

Der CAN-Identifier wird normalerweise in hexadezimaler Form erwartet. Moeglich ist auch die dezimale Form, die durch ein vorgestelltes '#' gekennzeichnet werden muss. Direkt nach dem Identifier kann ein spezieller Suffix angegeben werden, um z.B. auch bei einem Identifier <= 0x3FF diesen mit 29 Bit ("extended" frame) zu codieren, oder um statt "Classic CAN" einen CAN-FD-Rahmen zu senden.

Die Datenbytes werden i.A. auch hexadezimal erwartet. Statt einfacher Zahlenwerte koennen auch beliebige Ausdrücke verwendet werden. Diese sollten in Klammern umschlossen werden, um Fehlinterpretationen auszuschliessen. Auch Variablen sind möglich (s.U.).

Statt einer CAN-Message kann eine Zeile auch eine Anweisung an den Kommando-Interpreter enthalten.

Anweisungen sind z.B. (vgl. komplette Befehlsübersicht):

Die Verzögerungszeit bei der Abarbeitung der Zeilen des Kommandoprogrammes kann im Systemmenü eingestellt werden. Sie sollte mindestens 5 ms (pro Zeile) betragen. Zusaetzliche Verzögerungen innerhalb des Kommandoprogramms koennen mit dem @delay - Befehl realisiert werden.

Zur Dokumentation des Kommandoprogrammes können Kommentare eingefügt werden. Im Anlehnung an ASSEMBER beginnen Kommentare mit einem Semikolon; C++-Freaks dürfen (seit August 2006) auch den doppelten Schrägstrich ( // ) als Anfang eines einzeiligen Kommentares verwenden.

Als 'Sprungziel' für manche Befehle dienen Label im Programmtext. Als Label-Namen werden möglichst 'sprechende' Symbole verwendet, z.B. AnalogOutputTest. Im Programmtext sind Labels an mindestens einem nachgestellten Doppelpunkt erkennbar. Labels mit zwei nachfolgenden Doppelpunkten werden bei der Aufzählung im Menü 'Run' .. 'Run from Label' bevorzugt. Solche Labels dienen als Startpunkt, wenn in einer einzelnen Applikation (*.cts-Datei) mehrere Testabläufe implementiert sind. Hier ein Beispiel aus der Applikation 'EaDIO8Test.cts' :


Senden von CAN-Telegrammen aus dem Kommando-Interpreter

Kommandozeilen mit CAN-Telegrammen (als Text) führen zum Senden der Telegramme in der Reihenfolge der Programmabarbeitung.
Beginnt eine Kommandozeile mit einer ZAHL (oder geklammerten numerischen Ausdruck), so geht der Interpreter davon aus dass es sich um ein zu sendendes CAN-Telegramm handelt.

Das Format von CAN-Telegrammen im Kommandointerpreter ist normalerweise:

<CAN-Identifier> <Datenbyte0> <Datenbyte1> ... <Datenbyte7>

Der CAN-Identifier wird normalerweise in hexadezimaler Form erwartet. Möglich ist auch die dezimale Form, die durch ein vorgestelltes '#' gekennzeichnet werden muss. Zwei einfache Beispiele:

Die Datenbytes werden i.A. hexadezimal erwartet. Statt einfacher Zahlenwerte koennen auch beliebige Ausdrücke verwendet werden. Diese sollten in Klammern umschlossen werden, um Fehlinterpretationen auszuschliessen. Auch Variablen sind möglich (s.U.).

Ohne weitere Zusätze werden CAN-Telegramme mit Identifier <= 2047 als 11-BIT-Frames gesendet. Bei IDs >= 2048 ohne Zusatz (s.U.) wird automatisch ein Telegramm mit 29-Bit-Identifier ("extended frame") gesendet.

Um definitiv unabhängig vom Zahlenwert des Identifiers 11- oder 29-Bit-Identifier zu senden, kann der Suffix ".s" (für Standard-Frames mit 11 Bit-ID) bzw. ".x" (für eXtended-Frames mit 29-Bit-ID) verwendet werden. Beispiele:

Hinweis: Bei der Anzeige im RX/TX-Fenster können 11- und 29-Bit-Identifer wahlweise nur durch die Anzahl Ziffern unterschieden werden, der Suffix ".s" oder ".x" (bzw. ".S" oder ".X" für CAN FD) ist dort optional.

Sowohl CAN-ID als auch Datenfeld kann -wie in den obigen Beispielen- als einfache Konstante angegeben werden, es sind aber auch beliebige numerische (geklammerte) Ausdrücke realisierbar.

Beispiele:
N:=123 : X:=1
Loop:
 (N).s 01 02 03 04 05 06 07 08  ; sendet mit CAN-ID 123,124,..
 (N) (X+1) (X+2) (X+3) (X+4)    ; sendet 4 variable Datenbytes
 (N) (X).w (X).l (X).mw (X).ml  ; sendet INTEL + MOTOROLA..
 N:=N+1 : X:=X+1
goto Loop

Der optionale Suffix (z.B. ".w" oder ".iw") im CAN-Datenfeld hat folgende Bedeutung:

.w oder .iw
16-Bit-Integer-Werts im Intel-Format
(least significant byte first, wie bei CANopen)

.l oder .il
32-Bit-Integerwert im Intel-Format

.if
32-Bit-'Intel Float'

.mw
16-Bit-Integer-Wert im MOTOROLA-Format
(most significant byte first, d.h. Bits 15..8 im ersten Byte, Bits 8..0 im zweiten Byte)

.ml
32-Bit-Integerwert im MOTOROLA-Format
(Bits 31..24, 23..16, 15..8 und zum Schluß 7..0 jeweils in ein Byte im CAN-Telegramm gepackt)

.mf
32-Bit-'Motorola Float'
Dieses exotische Format wird tatsächlich in der Praxis verwendet (2013-12-09) !
Vermutlich steckt beim 'Motorola-32-Bit-Fliesskomma-Format' der EXPONENT im ersten Byte (entsprechend 'MSB');
Offizielle Details (von GM) waren bei der Erstellung dieser Beschreibung (2013-12-09) nicht bekannt.


Zurück zur Kapitelübersicht


Befehlsübersicht Kommando-Interpreter

Die folgenden Kommandos und Funktionen sind im Interpreter des CAN-Testers mindestens implementiert (darüberhinaus weitere Befehle, für deren Dokumentation bislang die Zeit fehlte ;-) .
Aus Gründen der Abwärtskompatibilität darf den meisten Befehlen noch ein '@'-Zeichen (at) vorangestellt werden. In der aktuellen Version ist dies nicht mehr nötig.

Sprünge, Schleife, Steuerung des Programmablaufes

repeat
Kennzeichnet den Anfang einer Wiederholschleife
until <Bedingung>
Sprung zum vorhergehendn repeat, wenn <Bedingung> == 0.
goto <Sprungziel>
Sprung zum angegebenen Label (siehe Beispiel)
gosub <Unterprogramm>
Ruft ein Unterprogramm auf.
return
Ende eines Unterprogramms
if <Bedingung>
Die nach if folgenden Anweisungen werden nur ausgefuehrt, wenn <Bedingung> ungleich Null. Das "if"-Kommando gibt's (wie in der Programmiersprache BASIC) in einer einzeiligen Variante (bei der die Anweisung in der gleichen Zeile wie die if-Abfrage steht) und in einer mehrzeiligen Variante (mit "endif" und möglicherweise "else"). Siehe Kapitel "Verzweigungen und Schleifen".
stop
Hält das Kommandoprogramm an (wie F9).
delay(<Zeitintervall in Sekunden>)
Hält das Kommandoprogramm für eine kurze Zeit an.
OnError
Definiert, was der Interpreter beim Auftreten eines Fehlers (nicht: "Warnung", z.B. CAN-Bus-Warnung) tun soll.
ResumeError
Springt in die Zeile nach der Zeile, in der der letzte Fehler aufgetreten ist - und setzt, mit anderen Worten, die Programmausführung fort nachdem ein Fehler aufgetreten ist. Sollte nur in Verbindung mit "OnError goto ....." eingesetzt werden ! Ein Beispiel findet sich im Skript "EaDIO8Test".

Anzeige und Ausgabe

print("<Format-String>", <Parameter>.. )
Druckt Texte und Zahlen ins Meldungs-Fenster, oder (wenn geöffnet) in das per OpenWindow geöffnete Fenster.

OpenWindow, CloseWindow
Öffnet ein "benutzerdefiniertes Fenster", in das Texte mit unterschiedlichen Zeichensätzen gedruckt werden können. Siehe Demo-Applikation "EaIP65Test" (im Installationsarchiv enthalten).

MoveTo
Bewegt den 'Ausgabecursor' für alle nachfolgenden Aufrufe von print innerhalb des per OpenWindow geöffneten Fensters. Ohne Fenster (d.h. bei Ausgabe per 'print' in das Meldungs-Fenster) hat dieser Befehl keinen Effekt.
Die aktuelle Position des Ausgabecursors (Pixel-Koordinate) kann per cursor.x, cursor.y abgefragt werden. Dies kann z.B. beim periodischen Aktualisieren von Teilen eines Fensters verwendet werden. Ein Beispiel finden Sie in der "PDO-Anzeige" in der Applikation EaDIO8Test.cts (im Installationsarchiv des CAN-Testers enthalten).

SetFont( "<FontName>", <FontSize>, <FontAttributes> )
Stellt den Zeichensatz für die Textausgabe im benutzerdefinierten Fenster ein (funktioniert nicht im normalen Meldungsfenster !). Die Font-Attribute sind:
0 = normal, 1 = unterstrichen, 2 = Fett, 4 = kursiv. Diese Attribute können auch bitweise kombiniert werden (bitte sparsam einsetzen).
Beispiel: SetFont("Arial",8,1) selektiert einem mittelgroßen Zeichensatz in der Schrift "Arial", mit Unterstrich.

ClearScreen( x )
Löscht den Inhalt eines der Fenster des CAN-Testers (mit Ausnahme des Kommandofensters).
x : 0=benutzerdefiniertes Fenster, 1=RX-Fenster, 2=TX-Fenster, 3=Meldungsfenster

ClearVars()
Löscht alle 'normalen' Variablen, die seit dem Programmstart im Kommando-Fenster bzw -Script zugewiesen wurden.
Hinweis: Der CAN-Tester speichert Variablen zwischen zwei Sitzungen.
Mit der Anweisung ClearVars() am Anfang des Scripts kann die Verwendung 'alter' Werte verhindert werden.

scope.xxx
Ändert die Einstellungen des Scope-Fensters (alias "Watch/Plot-Fenster") durch das Kommandoprogramm

sound(frequenz, dauer, modulation)
Erzeugt diverse Töne im PC-Speaker. 'frequenz' ist die Startfrequenz in Hz, 'dauer' die Dauer des Tons in Millisekunden, und 'modulation' die optionale Sweep-Rate in Hz/50ms .

freeze
"Friert" Empfangs- und Sendefenster ein.
Dadurch wird viel 'Rechenleistung' eingespart, wodurch nachfolgende Zeilen im Script deutlich schneller abgearbeitet werden können (z.B. zum Senden einiger Tausend CAN-Messages pro Sekunde).

Alte Syntax:
    freeze; // stop RX- and TX message display
Neue Syntax:
    freeze := TRUE;  // stop ('freeze') RX- and TX-message display
    freeze := FALSE; // let RX- and TX-message display run again

    was_frozen := freeze; // stop RX- and TX message display and save old setting
    freeze := was_frozen; // restore old state for RX- and TX-message display
 
def_watch
Definiert Komponenten einer Watch-Struktur. Syntax: def_watch(<Kanal>) Name, Ausdruck, Min-Wert, Max-Wert. Beispiel:
@def_watch(0) "Ain1", canrx(0x181,0,U16), 0, 32768

Numerische Funktionen

isin( <argument> [,<period> [,<amplitude>]] )
Integer-Sinus wie in manchen "programmierbaren Terminals" von MKT. Kann -im Zusammenhang mit der time-Funktion- zur Erzeugung von Testsignalen verwendet werden.
table[Index]( Value0, Value1, Value2, Value3, ... ValueN )
Bettet eine kleine Tabelle (z.B. mit Integer-Konstanten) in den Programmcode ein. Beispiel:
@Lauflicht=table[X%8](0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x81)
time
Liefert die Anzahl Millisekunden, die seit Programmstart (?) vergangen sind.

CAN-Senden und Empfangen (Decodieren einzelner CAN-Signale)

canrx(<Identifier>, <erstes Bit>, <Datentyp>)
Isoliert ein "Signal" (Integer- oder Fliesskommawert) aus einem empfangenen CAN-Telegramm
@tx_interval=<neues Sendeintervall in Sekunden>
Setzt das Intervall zum Senden von CAN-Telegrammen auf den angegebenen Wert.
Fehlt dieses Kommando in der Anweisungsliste, wird das in der Konfiguration definierte Intervall verwendet.
Hinweise:

Siehe auch: "delay"-Kommando für eine einmalige Wartezeit.

can.send( <Identifier>, <Zeichenkette> )
Sendet eine Zeichenkette mit bis zu 255 Zeichen per CAN-Bus (mehrere Telegramme nacheinander, ohne Bestätigung, nicht CANopen-konform !). Optional kann nach dem Identifier mit dem Token "g="(gap) eine Verzögerungszeit (im Millisekunden) angegeben werden. z.B.:
can.send(0x7F0,g=50,"Hallo ! Dies ist ein Test für die can-String-Sendefunktion !")
Fehlt die Verzögerungszeit, wird als Default-Wert eine Pause von 20 Millisekunden zwischen zwei Telegrammen verwendet.
Hinweis: Dieser Befehl wirkt blockierend ! Erst nach dem Senden setzt der Interpreter seine Arbeit fort.

can.show_msgs_as_strings( <Identifier-Liste> )
Stellt den Anzeigemodus von bis zu 4 CAN-Telegrammen (mit den angegebenen Identifiern) auf "String" um. Empfangene und gesendete Telegramme mit diesen Identifiern werden ab diesem Zeitpunkt als (ASCII-)Zeichenketten angezeigt, nicht -wie üblich- hexadezimal. Wurde im Sommer 2005 implementiert, um einfache (langsame) "Zeichenkanäle" für Diagnosezwecke anzuzeigen. Während der Entwicklungsphase sendete ein Gerät auf einem für "Diagnosezwecke" reservierten CAN-ID (0x7F0 oder 0x7F1) Fehlermeldungen als Klartext (Strings im ASCII-Zeichensatz).
Hinweis: Nicht druckbare Zeichen werden z.T. hexadezimal angezeigt, z.B. "Hallo" 0D 0A
Siehe auch: CAN-Text-Terminal

can.reset
Setzt den CAN-Controller zurück (z.B. bei BUS-OFF, weil jemand das CAN-Kabel nicht rechtzeigtig eingesteckt hatte ;-). Hilft auch, wenn der PEAK-Treiber aus unbekennten Gründen zwar noch Telegramme sendet, aber keine mehr empfängt.

wcan <CAN-ID> <Länge> <Datenbytes>..
Wartet auf den Empfang eines bestimmten CAN-Telegramms, bevor das Kommandoprogramm fortgesetzt wird. Dabei kann sowohl für CAN-ID, Länge, und auch die Datenbytes der Wert X als "Don't Care" eingesetzt werden (für den ID 3 Ziffern, für die Länge 1 Ziffer). Beispiele:
wcan 123 8 11 22 33 44 55 66 77 88 ; Wartet auf ID=0x123 und GENAU diesen Bytes
wcan 7FF x xx xx xx xx xx xx xx xx ; wartet auf ID=0x7FF, beliebiges Datenfeld
wcan XXX 3 xx AA xx  ; w.a. beliebige ID, 3 Bytes, 0xAA im zweiten Byte

Um nach dem Empfang einer "passenden" CAN-Message auf deren Datenfeld zuzugreifen, oder um den tatsächlich verwendeten Identifier abzufragen, verwenden Sie die Interpreterfunktionen wcan.id, wcan.len, und wcan.dat .
Zum Testen der "wcan"-Funktion eignen sich die Programme Wait_Test_Server.txt und Wait_Test_Client.txt, die seit März 2006 im Installationsarchiv des CAN-Testers enthalten sind.
Hinweis: Sie verwenden WINDOWS... erwarten Sie daher vom CAN-Tester nicht, daß das Kommandoprogramm wenige Millisekunden nach Empfang des erwarteten CAN-Telegramms fortgesetzt wird ! Typische Verzögerungen liegen im Bereich von 5 bis 200 Millisekunden, je nach Rechnertakt. Manchmal läßt sich das Kommandoprogramm beschleunigen, indem die Anzeige im TX- und RX-Fenster gestoppt wird.

Sonderkommandos für CANopen

obj (alias obd)
Diverse Befehle zum Zugriff auf das eigene (lokale) CANopen-Objekt-Directory.
sdo
Diverse Befehle zum Zugriff auf ein entferntes (remote) CANopen-Objekt-Directory per SDO-Kanal.

Zurück zur Kapitelübersicht


print (Kommando)

Syntax
print("<Format-String>", <Parameter>.. )
Funktion
Druckt Texte und Zahlen ins Meldungsfenster oder (wenn geöffnet) in das per OpenWindow geöffnete Fenster.
Im Normalfall wird nach 'print' eine neue Zeile begonnen (wie in uralten Basic-Dialekten).
Um dies zu vermeiden, kann am Ende der Parameterliste (direkt vor der schließenden Klammer) ein Semikolon eingefügt werden. Beispiel:
  print("Erster Teil der Ausgabe,";); // ohne Zeilenvorschub
  print("zweiter Teil der Ausgabe."); // mit Zeilenvorschub

Beispiele für den Format-String:

Näheres siehe Handbuch eines beliebigen "C"-Compilers bei der Beschreibung des " printf"-Befehls. Die Parameter sind immer 32-Bit-Integer-Zahlen, daher die Eingabegrößen-Modifikation '%l' (kleines "L"). Beispiel:
    print( "Es ist jetzt %02ld:%02ld:%02ld Uhr .",23,59,59 ); // drei Zahlen mit je zwei Ziffern

Sind in der Parameterliste mehr auszugebende Werte vorhanden als Platzhalter im Format-String, dann wird automatisch das zum Typ der Variablen passende 'Default-Format' verwendet. Aus dem Grund kann auch komplett auf den Format-String verzichtet werden. Bespiel:
    print( "Es ist jetzt",23;":";59;":";59,"Uhr ." );

Wird print wie im oben gezeigten Beispiel ohne Format-String verwendet, gelten folgende Regel für das Trennzeichen in der Parameterliste:

Der vom oben gezeigten Beispiel ausgegebene Text lautet daher:
       Es ist jetzt 23:59:59 Uhr .
                   |________|___ per Komma ausgegebene Leerzeichen

Zurück zur Befehlsübersicht


OpenWindow, CloseWindow (Kommandos)

Syntax
OpenWindow("<Fenstertitel>", x1=<X1>, y1=<Y1>, w=<Breite>, h=<Höhe>, fc=<Vordergrundfarbe>,bc=<Hintergrundfarbe> )
Funktion
Öffnet ein benutzerdefiniertes Fenster für "bedienerfreundliche" automatisierte Testabläufe. Mit CloseWindow() wird das Fenster wieder geschlossen.

Beispiele:

Zulässige Farbwerte : red, green, blue, yellow, white, black, oder RGB-Farbmischungen als Integerwerte (z.B. 0x0000FF=Rot, 0x00FF00=Grün, 0xFF0000=Blau).

Keine weitere Dokumentation, weil dieser Befehl noch "in Arbeit" ist. Als Vorlage für eigene Programme kann das Testprogramm "EaIP65Test" dienen, in das benutzerdefinierte Fenster verwendet wird um den Bediener schrittweise durch einen halbautomatischen Testablauf zu führen.

Hinweis: Nach dem Befehl "OpenWindow" druckt das Kommando print nicht mehr in die Meldungsliste des CAN-Testers, sondern in das benutzerdefinierte Fenster.

Zurück zur Befehlsübersicht


goto, gosub (Kommando)

Syntax
goto <Label>
gosub <Label>
Funktion
Springt an eine bestimmte Programmposition im Kommandofenster.
gosub merkt sich die aktuelle Programmposition für einen späteren Rücksprung mit return.
Siehe auch:   Beispiel mit 'goto'; Labels .

Zurück zur Befehlsübersicht


return (Kommando)

Syntax
return
Funktion
Setzt die Programmausführung in der Zeile nach einem letzten "gosub"-Befehl fort.
Wird normalerweise als letzter Befehl eines Unterprogramms eingesetzt, welches von verschiedenen Stellen aufgerufen wird.

Zurück zur Befehlsübersicht


canrx (Decodieren empfangener CAN-Signale)

Syntax
canrx( <CAN-Identifier>, <erstes Bit im Datenfeld der Message>, <Datentyp> [ , < Defaultwert > ] )
Funktion
Sucht im Empfangspuffer des CAN-Testers nach der zuletzt empfangenen CAN-Message mit dem angegebenen Identifier, und isoliert ein einzelnes "Signal" aus dem Datenfeld der Message. Als Datentyp können die wichtigsten CANopen-Datentypen in symbolischer Form verwendet werden.

Beispiel: @A =  canrx(0x181, 48, I16, 1234 )

Durchsucht den Empfangspuffer nach dem zuletzt empfangenen CAN-Telegramm mit dem CAN-Identifier 0x181 (hexadezimal). Wurde ein entsprechendes Telegramm im Puffer gefunden, wird ein vorzeichenbehafteter 16-Bit-Integerwert ("I16") aus dem empfangenen Datenfeld gebildet, beginnend mit Bit 48 des CAN-Datenfeldes (Bitzählung beginnt bei 0, ein Datenfeld mit 8 Bytes enthält Bit 0 bis 63). Die 16-Bit-Zahl wird als Funktionsergebnis zurückgeliefert, und -in diesem Beispiel- an die Variable "A" zugewiesen.
Falls kein passendes CAN-Telegramm im Puffer gefunden wird, ist das Funktionsergebnis identisch mit dem Default-Wert (hier: 1234). Ist kein Defaultwert angegeben, und kein passendes Telegramm im Puffer, bricht der Interpreter die Bearbeitung mit einer Fehlermeldung ab.

Der im CAN-Tester verwendete Empfangspuffer fasst 1024 CAN-Telegramme. Dies hat zur Folge, daß bei hoher CAN-Bus-Auslastung mit vielen verschiedenen Identifiern das gewünschte Telegramm eventuell nicht mehr im Puffer vorhanden ist, wenn das Interpreterprogramm die canrx-Funktion abarbeitet. Für periodisch übertragene Signale (z.B. zyklisch gesendete Prozessdaten) eignet sich diese Funktion allerdings sehr gut, auch für den Einsatz im Watch/Plot-Fenster .

canrx.latch (Für die Verarbeitung 'eingefrorenes' CAN-Telegramm)

Zusätlich zur weiter oben beschriebenen Form bietet 'canrx' auch die Möglichkeit, ein CAN-Telegramm mit einem bestimmten Message-ID für die weitere Verarbeitung in einem eigenen Zwischenpuffer (latch) abzulegen. Dadurch wird die Konsistenz sichergestellt, wenn mehrere Signale aus einem CAN-Telegramm enthalten sind, die vom Script im CAN-Tester verabeitet werden sollen.
Mit dem folgenden Beispiel wird zunächst das zuletzt empfangene CAN-Telegramm mit Message-ID 0x1800 'eingefroren', um daraus anschließend verschiedene Signale (Bitfelder) zu isolieren. Mit der Funktion canrx.latch kann auch auf die Länge des Datenfelds (0 bis 8 Bytes), den Message-Identifier, und den Zeitstempel zugegriffen werden.
  if( canrx.update_latch( 0x1800 ) ) // try to capture the last message with this ID
     print( "Received %ld messages with ID %lX .", canrx.latch.count, canrx.latch.id );
     print( "Number of data bytes  : %ld",   canrx.latch.len );
     print( "Digital inputs  1..16 : %04lX", canrx.latch(0, U16) );
     print( "Digital inputs 17..31 : %04lX", canrx.latch(16,U16) );
  else
     print( "Nothing received yet" );
  endif;

Siehe auch: Plot-Fenster zur Darstellung des zeitlichen Verlaufs einzelner Signale in Echtzeit.

Zurück zur Befehlsübersicht


wcan.id, wcan.len, wcan.dat (Abfragefunktionen nach dem wcan-Kommando)

Diese Interpreterfunktionen können in der Zeile nach dem 'wcan'-Kommando verwendet werden, um auf das bei 'wcan' empfangene Telegramm zuzugreifen. Die folgenden Funktionskomponenten sind bislang implementiert (Stand 2006-03-31):

Zurück zur Befehlsübersicht


scope.xxx (Kommandos zum Steuern des Watch/Plot-Fensters durch den Interpreter)

Verfügbare Befehle:

Beispiel: Ausschnitt aus einem Kommandoprogramm mit Parametrierung des Scope-Fensters, inkl. Definition von vier Messkanälen :

; Prepare SCOPE/Plotter to show values from PDO :
@scope.show(2) ; REM show channel definition tab in the scope window
@scope.timing=0.005 ; REM set scope sampling interval (seconds)
; REM scope.ch[x]={ Name, Expression, ScaleMin, ScaleMax }
@scope.ch[0]={"PDO1_W0", canrx(0x181,0,I16), -32768, 32768 }
@scope.ch[1]={"PDO1_W1", canrx(0x181,16,I16), -32768, 32768 }
@scope.ch[2]={"PDO1_W2", canrx(0x181,32,I16), -32768, 32768 }
@scope.ch[3]={"PDO1_W3", canrx(0x181,48,I16), -32768, 32768 }
@scope.show(1) ; REM open the "plotter" tab in the scope window

Siehe auch: Beschreibung des Plot-Fensters zur Darstellung des zeitlichen Verlaufs einzelner Signale in Echtzeit.

Zurück zur Befehlsübersicht


Symbole für CANopen- und andere Datentypen

Einige Interpreterbefehle (und -Funktionen) benötigen als Parameter den Typ eines zu empfangenden oder zu sendenden Wertes. Dazu werden in erster Linie CANopen-kompatible Datentypen eingesetzt. Der Interpreter erwartet diese Typen in symbolischer Schreibweise (nicht als Zahlencode wie in der CANopen-Spezifikation ! ! ).

Zur Zeit unterstützt werden :

Siehe auch:


Zurück zur Übersicht

Zuletzt bearbeitet: 2019-08-28 (ISO 8601), Wolfgang Büscher