Der CAN-Tester ist als Testprogramm auf niedriger CAN-Bus-Telegramm-Ebene konzipiert, mit einigen Erweiterungen die für "hausinterne Tests" bei Firma MKT verwendet werden. Möglich sind:
Dieses Programm wird vom Entwickler (MKT Systemtechnik) kostenlos bereitgestellt,
ohne Anspruch auf Vollständigkeit, Fehlerfreiheit, und Funktionstüchtigkeit
für einen bestimmten Zweck. Sowohl die Software als auch die Dokumentation
kann fehlerhaft oder unvollständig sein.
Wir (MKT Sytemtechnik) sind nicht in der Lage, die Funktion dieser Software
in allen Kombinationen aus CAN-Interface, Treiber-Version, Betriebssystem,
u.v.A. zu testen. Für die Installation und Betrieb eines CAN-Bus-Interfaces gelten
die Nutzungsbedingungen, der Haftungsausschluss, das Lizensierungsmodell,
marken-, gebrauchsmuster- oder patentrechtlicher Schutz, des entsprechenden
Herstellers. In dieser Beschreibung werden eventuell vorhandene Schutzrechte
nicht besonders gekennzeichnet.
ACHTUNG: MKT ÜBERNIMMT KEINE HAFTUNG FUER SCHÄDEN, DIE DURCH DEN
GEBRAUCH DIESER SOFTWARE ENTSTEHEN; WEDER AN SOFT- NOCH HARDWARE !
Diese Software ist in der Lage, ein CAN-Netzwerk störend zu beeinflussen.
Der Einsatz dieser Software ist daher naturgemäß mit Risiken verbunden.
Das Risiko liegt komplett bei Ihnen. Sie übernehmen die volle Verantwortung.
Unabhängig davon ist der Einsatz für 'High-Risk'-Aktivitäten, in denen
Fehlfunktionen oder Bedienfehler zu Personen-, Materialschäden,
oder zu Verdienstausfall / Maschinenstillstand führen könnten,
ausdrücklich untersagt.
Die Modifikation oder Weitergabe dieser Software an Dritte ist ausdrücklich untersagt.
Durch die Verwendung dieser Software stimmen Sie den Nutzungsbedingungen
und dem Haftungsausschluss zu.
Installieren Sie zunächst ein CAN-Interface auf Ihrem PC. Dazu können Sie verschiedene Interfaces verschiedener Hersteller verwenden. Eine übersicht finden Sie in den
Hinweisen zur Installation eines CAN-Interfaces unter Windows.
Beachten Sie: Die CAN-Interfaces und die dazugehörigen Softwaretreiber sind keine Produkte der Firma MKT; sie müssen ggf. extra vom jeweiligen Hersteller bezogen werden !
Hinweise und Tips zur Installation einiger CAN-Interfaces und der dazugehoerigen Softwaretreiber (VxD, SYS, DLL) finden Sie in der Datei can_inst.doc (Word 97-Format).
Um Ärger mit nicht schreibbaren Verzeichnissen zu vermeiden, empfehlen wir
die Installation des CAN-Testers außerhalb des Windows-"Programm"-Verzeichnisses.
Statt der Installation unter
"C:\Programme\MKT\CAN_Tester_for_Windows"
(bzw. C:\Program Files, C:\Program Files (x86), C:\Archivos de programa,
C:\Programmes, C:\Programmi, C:\Arquivos de Programas,
C:\Program, C:\Programmer, C:\Programfiler, etc, etc, etc),
installieren Sie die den CAN-Tester z.B. unter
"C:\MKT\CAN_Tester_for_Windows"
(oder wo-auch-immer Sie als Anwender Schreibrechte haben).
Nur so wird sichergestellt, dass die im Verzeichnis des CAN-Testers enthaltenen
Applikationen (CAN-Tester-Scripte mit der Erweiterung *.cts) nicht nur gelesen,
sondern nach eventuellen Modifikationen auch ohne Administratorprivilegien
wieder abgespeichert werden können.
Entsprechendes gilt auch für die Konfiguration des CAN-Bus-Testers,
die nicht mehr unter 'Windows\MKT_CanTester.ini', sondern im
o.g. Installationsverzeichnis (zusammen mit der ausführbaren Datei WinCan1.exe) abgelegt wird.
Durch den konsequenten Verzicht auf Einträge in der Windows-Registry
und durch die Ablage der Konfiguration im Verzeichnis der Anwendung
wird diese 'portabel', d.h. Sie können den CAN-Tester auf einer beliebigen
Partition der Festplatte, aber auch auf einem Wechseldatenträger
(z.B. USB Memory Stick) installieren, und durch einfaches Umkopieren des
Ordners inklusive aller Unterverzeichnis eine Installation auf einen anderen
PC 'übernehmen' (portieren), inklusive aller von Ihnen entwickelten
Applikationen.
Beim ersten Programmstart muss noch das geeignete CAN-Interface ausgewählt werden. Die Konfiguration (CAN-I/O-Adresse, IRQ, Baudrate etc) erfolgt im Menue Settings...CAN Interface Setup. Im daraufhin erscheinenden Dialogfenster können Sie "Ihr" CAN-Interface anwählen und ggf erforderliche Parameter, z.B. I/O-Adressen, Netzwerknamen etc eingeben. Bei Verwendung des PCCAN-Interfaces der Firma ESD muss vorher der NTCAN-Treiber installiert werden.
Erst danach können die Parameter für den CAN-Bus eingestellt werden
(Baudrate, etc). Dies erfolgt im Hauptmenü des CAN-Testers unter
Settings...CAN settings for user (d.h. CAN-Einstellungen für
den Anwender).
Die Konfigurationsdaten des CAN-Testers werden seit Dezember 2019 nur noch
im Verzeichnis des CAN-Testers, d.h. in dem Verzeichnis, in dem auch die
Datei WinCan1.exe steht, abgelegt. Das Programm bzw. dessen Anwender muss
die Berechtigung für Schreib- und Lesezugriffe (bzw. 'Vollzugriff')
für das Verzeichnis des CAN-Testers haben, andernfalls können Änderungen
an der Konfiguration nicht dauerhaft gespeichert werden.
Aus dem Grund empfiehlt es sich, wie im Kapitel Installation beschrieben,
das Programm nicht unter C:\Programme (o.Ä.) zu installieren.
Wählen Sie hier die Datenrate (für "Classical CAN", bzw. die
Arbitrierungsphase bei CAN FD), und (für CAN-FD) ggf. auch die 'schnelle' Datenrate.
CAN FD (Flexible Datarate) kann per Option abgeschaltet werden, selbst wenn das
verwendete CAN-Interface prinzipiell auch für 'FD' geeignet ist.
Wurde als CAN-Interface ein mehrkanaliges Gerät
ausgewählt, dann kann der zweite Kanal unter "CAN2" konfiguriert werden.
Abhängig von der verwendeten Hardware werden in der Gruppe "CAN1"
bzw. "CAN2" auch die entsprechenden Kanalnamen des CAN-Treibers
angezeigt, z.B. "Kvaser Hybrid 2xCAN/LIN #0 (Channel 0)".
Ferner können auf dem Register "CAN" symbolische Namen für bestimmte CAN-Message-Identifier eingestellt werden (dies war nötig, um bestimmte Logfiles im Vektor-ASCII-Format abzuspielen, in denen statt numerischer CAN-IDs nur symbolische Namen standen).
Arbitrierung mit 500 kbit/sec : tq = 1/(500kHz * (1+63+16)) = 25 ns
"Fast Data" mit 2000 kbit/sec : tq_FD = 1/(2MHz * (1+15+4)) = 25 ns
Das 'time quantum' sollte laut CiA-Empfehlung für CAN FD den gleichen Wert
für die Arbitrierungs- und Datenphase haben (hier: tq = tq_FD = 25 ns). Zitat:
Hier steht alles, was -direkt oder indirekt- mit der Anzeige von CAN-Telegrammen ("frames") in den beiden Anzeigefenstern des CAN-Testers zu tun hat:
Im CAN-Tester ist ein *simpler* CAN-Logger eingebaut, mit dem man Telegramme (u.A. im Vector-ASCII-Format) abspeichern kann. Hat nichts mit MKT's CAN-Logger zu tun ! Log-Dateien im Vektor-ASCII-Format, und im PCAN-Explorer-Format ("Hex Format Files", *.log) können mit dem CAN-Tester auch abgespielt werden (im Menü "Datei").
Hier wird "Verschiedenes" eingestellt, wofür auf den anderen Tabs kein Platz mehr war:
Nur für CANopen ! Auf dieser Registerkarte werden Knotennummern und Timeout-Zeiten für den im CAN-Tester integrierten CANopen-SDO-Client und -Server eingestellt, und -wenn nötig- Client bzw Server ein- und ausgeschaltet (d.h. aktiv/passiv gemacht). Mit den Buttons "Externes OD zeigen" / "Lokales OD zeigen" können die CANopen-Objekt-Verzeichnisse angezeigt bzw (beim "Lokalen OD") sogar editiert werden. Damit kann z.B. ein kompletter CANopen-Knoten simuliert werden.
Hier werden verschiedene Unterverzeichnisse definiert, auf die der CAN-Tester zugreifen kann:
Damit sind AKUSTISCHE Signale gemeint, keine CAN-Signale. Mit den Optionen auf dieser Registerkarte können alle aktustischen Signale (die meistens vom Kommandoprogramm erzeugt werden) auf einen Schlag ausgeschaltet werden, damit schlagartig "Ruhe im Schiff" herrscht.
Beim CAN-Tester für Windows können aktustische Signale entweder
mit dem PC-Speaker oder mit dem MIDI-Synthesizer(*)
erzeugt werden.
Zur Erzeugung von Tönen mit dem internen PC-Lautsprecher (ohne die
Soundkarte) muss das Programm leider direkt auf die I/O-Ports im PC zugreifen,
was -speziell unter Windows XP und Vista- Probleme bereiten kann. Aus dem
Grund ist under Windows XP (etc) davon abzuraten, die Option "internal
PC-Speaker" zu verwenden. Verwenden Sie stattdessem lieber die Soundkarte
(mit integriertem, per MIDI steuerbaren Synthesizer). Damit Sie die Töne
vom Synthesizer hören können, benötigen Sie natürlich
einen externen Lautsprecher. Ferner muss in der Lautstärke-Einstellung
(in der Windows-Taskleiste) der Regler für den "SW-Synthesizer" (o.ä.)
aufgedreht sein, und die Option "Ton AUS" (die bei den meisten Soundkarten
existiert) darf für den Synthesizer *nicht* gesetzt sein.
Akustische Signale eignen sich gut zum schnellen Testen von CAN-E/A-Modulen. Z.B. könnte das Test-Script jedesmal einen Ton mit einer bestimmten Frequenz ausgeben, wenn sich der Zustand der digitalen Eingänge des Moduls ändert. Verwenden Sie dazu das Interpreterkommando "sound".
In der Kopfzeilen von Sende- und Empfangsfenster werden Zähler für empfangene und gesendete Telegramme angezeigt, ferner diverse Statusinformationen (u.A. ob die Anzeigen aktiv sind, ob die Listen "historisch" oder "sortiert nach CAN-Identifier" arbeiten, etc).
Im Empfangsfenster werden normalerweise alle empfangenen CAN-Telegramme aufgelistet. Dabei sind verschiedene Anzeigeoptionen möglich, die im Menü "Settings" eingestellt werden können:
Im Sendefenster werden normalerweise alle vom Programm gesendeten CAN-Telegramme angezeigt. Dazu gehören auch die vom eingebauten SDO-Server und -Client gesendeten Telegramme !
Zum Senden "eigener" Telegramme durch den User dient das Kommandofenster, in dem CAN-Telegramme als Textzeilen eingegeben werden können.
Im einfachsten Fall (ohne Zeitmarken) wird ein CAN-Telegramm folgendermaßen notiert:
<Identifier> <Byte0> <Byte1> .. <Byte7> (für "Classical" CAN)
<Identifier> <Byte0> <Byte1> .. <Byte63> (für CAN FD)
Direkt nach dem Identifier kann ein spezieller ID-Suffix
angegeben werden, um z.B. auch bei einem Identifier <= 0x3FF diesen mit 29 Bit ("extended" frame) zu codieren,
oder um auch 'kurze' Frames (mit bis zu 8 Datenbytes) als "FD Base Frame" oder "FD Extended Frame" zu senden.
Messages mit Identifier-Wert >= 0x400 werden automatisch als "extended frame" verschickt.
Ein Längencode (DLC) wird beim Senden (wie auch beim Empfang) normalerweise nicht angegeben
(die Anzahl zu sendender Datenbytes ergibt sich aus deren Zählung). Bei CAN FD wird
bis zur nächsten 'gültigen' DLC aufgerundet, und die überzähligen Bytes mit Nullen angefüllt:
Timestamp Bus ID Flag [Len] Data field (hexadecimal)
00067888: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067902: #1 155 ESI [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067913: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067925: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067936: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067948: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067959: #1 155 BRS [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067972: #1 155 ESI [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
00067983: #1 155 ESI [64] 04 03 02 01 08 07 06 05 0C 0B 0A 09 10 0F 0E 0D 14 13 12 11 18 17 16 15 1C 1B 1A 19 20 1F 1E 1D 24 23 22 21 28 27 26 25 2C 2B 2A 29 30 2F 2E 2D 34 33 32 31 38 37 36 35 3C 3B 3A 39 40 3F 3E 3D
Das Kommandofenster dient zur Eingabe von Befehlen an den CAN-Tester, die von einem speziellen Interpreter abgearbeitet werden können. Dazu gehören unter anderem:
Um ein einzelnes Kommando aufzuführen (z.B. CAN-Telegramm senden),
drücken Sie F2 während der blinkende Cursor in der Zeile des
auszuführenden Kommandos steht.
Weitere Shortcuts (Tastaturkürzel) zum Starten, Stoppen, und Debuggen des
Scripts (im Kommandofenster des CAN-Testers) finden Sie im Hauptmenü unter 'Run'.
Am linken Rand des Editorfensters (in der 'Sidebar') werden Zeilennummern
und spezielle Symbole für die Programmentwicklung und Fehlersuche angezeigt.
Hier einige der in der Sidebar verwendeten Symbole:
Im Meldungsfenster werden u.A. Fehler wie
"CAN-Bus-Off" angezeigt, aber auch Meldungen
aus dem interpretiertem Kommandoprogramm (siehe print).
Werden (mit einem geeigneten CAN-Interface) Error-Frames detektiert, dann
werden diese vom CAN-Tester gezählt und optional im Meldungsfenster
angezeigt. Um das Überfluten des Meldungsfensters bei massivem Auftreten
von Error-Frames zu vermeiden, wird eine neue Meldung (mit dem "Zählerstand")
unterdrückt, wenn die vorhergehende Error-Frame-Meldung vor weniger als einer Sekunde erfolgte.
Fehler- und CAN-Telegramm-Zähler können im Hauptmenü unter
"Meldungen" / "Rücksetzen der Message-Zähler", bzw "Messages" / "Clear Message Counters"
zurückgesetzt werden. Dadurch wird auch für die 'Statistik' eine neue Messung begonnen.
Auch ohne spezielles Test-Script im Kommandofenster kann eine einfache
CAN-Statistik als 'Bericht' im Meldungsfenster angezeigt werden.
Wählen Sie dazu im Hauptmenü unter Meldungen die Funktion Bericht 'CAN-Statistik' erzeugen.
Abhängig vom verwendeten CAN-Interface (und der Anzahl geöffneter CAN-Kanäle)
kann dieser 'Bericht' unterschiedlich ausführlich ausfallen. Hier ein Beispiel,
in dem der Bericht nach etwa 20 Sekunden Laufzeit angefordert wurde:
Loaded CAN test command file from "C:\cbproj\CanTest\programs\MktStandardSignals1.cts" .
<- automatisch angezeigte Fehlermeldungen
Loaded CANopen OD for SDO server from "C:\cbproj\CanTest\Objects\lenze_tha100_hbg22_sim.dic" .
CAN: UCAN_Init: Loaded Kvaser CANLIB32 V5.27 .
CAN: t=8938: ERROR FRAME RECEIVED (#7) on CAN1 !
CAN: t=17069: ERROR FRAME RECEIVED (#419) on CAN1 !
(an dieser Stelle wurde der Bericht 'CAN-Statistik' angefordert)
Siehe auch: Interpreterfunktionen für die CAN-Bus-Fehlerstatistik.
CAN bus statistics after 20.0 seconds test duration:
CAN1 Status : no status flags, 4491 frames received, 0 sent, 746 error frames.
CAN2 Status : no status flags, 0 frames received, 0 sent, 0 error frames.
dient zur Darstellung des zeitlichen Verlaufs einzelner Signale oder Variablen. Zum Öffnen dieses Fensters dient die Funktion "View ... Plot Window" im Hauptmenü des CAN-Testers.
Die vertikalen Striche sind Zeitmarken, die i.A. den Beginn einer Sekunde
markieren, bei langsamen
Abtastintervallen alle 15 oder 60
Sekunden. Eine Beschriftung ist (noch) nicht vorgesehen.
In dieser Tabelle wird neben der Definition des darzustellenden Wertes (als Interpreter-Ausdruck, engl. expression) auch der Skalenbereich für das Plot-Fenster sowie der aktuelle Wert in numerischer Form (current value) dargestellt. Zu den Spalten in der Definitionstabelle zählen:
Der Kanalname wird eventuell in einer zukünftigen Version eine größere Rolle spielen, wenn das Plotfenster durch eine Legende ergänzt wird (in der dann der Kanalname in der Farbe des dazugehörigen Graphen angezeigt wird).
Unterhalb der Definitionstabelle können die wichtigsten Anzeigeparameter eingestellt werden:
Hinweis: Nach der Eingabe neuer Definitionen in der Tabelle "Watch Expressions" muss der Button "Apply" (="übernehmen") angeklickt werden. Sobald in der Tabelle editiert wird, stoppt die periodische Aktualisierung der numerischen Anzeige (current values).
Seit 2006 kann auf der Registerkarte "Spectrum Analyzer" das Spektrum eines der 15 Eingangskanäle des Watch-Fensters dargestellt werden. Diese Funktion eignet sich z.B. zur Analyse von Störungen von analogen Eingangsmodulen (z.B "E/A-Modul mit DMS-Eingang"). Die maximal darstellbare Frequenz ist (frei nach Shannon) die halbe Abtastrate. Bei einem "Update Interval" (s.O.) von 10 Millisekunden sind dies z.B. 0.5 / 10ms = 50 Hz .
Die Amplituden werden auf einer logarithmischen Skala angezeigt, wobei "0
dB" dem Maximum des aktiven Kanals entspricht, welches auf der Registerkarte
"Watch Expressions" in der Spalte "Scale Max" definiert wurde. Die im
Spektrumanalysator dargestellten Dezibel-Werte sind daher normalerweise
negativ, solange das Signal unterhalb des Skalenendbereiches bleibt.
Für Signale, die von einem 16-Bit A/D-Wandler stammen, reicht ein
Amplitudenbereich von -100 bis 0 dB .
Hinweis: Der Spektrumanalysator basiert auf einer privaten Entwicklung von
W.B., sie darf von MKT bis auf Widerruf nur für nicht-kommerziellen
Einsatz verwendet werden. In zukünftigen Versionen des CAN-Testers
könnte dieser Analysator demnach wieder "verschwunden" sein !
Siehe auch:
sdo
zum Zugriff
auf ein abgesetztes Gerät per CANopen (SDO = Service Data Object)
Die Statusflags des CAN-Treibers werden intern als 16-Bit-Parameter verwaltet.
Wenn sich der Zustand dieses Parameters aendert, wird dies automatisch im Meldungsfenster als Hex-Zahl angezeigt. Diese Hex-Zahl kann eine Kombination der folgenden Bitmasken sein:
0x0001 : CAN-Hardware-Fehler oder "anderer Fehler"
0x0002 : Ueberlauf des CAN-Empfangspuffers
0x0004 : Ueberlauf des CAN-Sendepuffers
0x0008 : Problem mit dem CAN-Interrupt (IRQ-Nummer falsch ?)
0x0040 : CAN-Bus-Warnung, mindestens ein Fehlerzaehler zu hoch
0x0080 : CAN-Bus-OFF, Grund z.B. falsche Baudrate
Siehe auch: CANopen-SDO-Fehlercodes
Der CAN-Tester kann dabei sowohl als Client oder Server arbeiten. Um eine sinnvolle SDO-Server-Funktionalität zu ermöglichen, verfügt der CAN-Tester über ein eigenes CANopen-Object-Dictionary, dessen Einträge editiert werden können. Die Beschreibung eines CANopen-ODs kann aus EDS-Dateien importiert werden; danach können auch "Werte" per SDO aus einem CANopen-Device gelesen und in Form einer DCF-Datei (Device Configuration File) exportiert werden. Diese Funktion ist zum Testen komplexerer CANopen-Geräte extrem hilfreich; auch im Zusammenhang mit professionellen CANopen-Konfigurationstools (wie z.B. den CANopen Configuration Manager).
Zum Nutzen der SDO-Client-Funktionalität (d.h. zum "Anstossen" von Schreib-
und Lesezugriffen) dienen spezielle Befehle des Kommandointerpreters
(sdo.read und sdo.write).
Darüberhinaus bietet der CAN-Tester die Möglichkeit, auch ohne EDS-Datei 'alle' Objekte in einem unbekannten CANopen-Slave zu finden. Dazu im Hauptmenü des CAN-Testers die Funktion Tools ... Scan remote OD into the browser aufrufen. Dabei werden der Reihe nach alle möglichen Objekt-Indizes (0x0000...0xFFFF) 'ausprobiert', was sehr lange dauern kann. Um das Einscannen zu beschleunigen, kann der gescannte Index-Bereich daher vor dem Start eingegrenzt werden. Details zum OD-Scanner finden Sie in einer gesonderten Datei.
Öffnen des OD-Browsers für ein externes OD (per SDO) : Im Hauptmenü des CAN-Testers per Tools...Open Remote CANopen OD Browser .
Öffnen des OD-Browsers für das eigene OD (des CANopen-Testers) : Im Hauptmenü des CAN-Testers per Tools... Local CANopen OD Browser .
Die Spalten in der Tabelle haben folgende Bedeutung:
Object
Hier stehen Objekt-Index und -Subindex in hexadezimaler Form.
Name
Der Name des Objektes; stammt i.A. aus dem EDS-File. Bei aus einem 'unbekannten' CANopen-Slave eingelesenen ODs versucht der CAN-Tester, den Namen der wichtigsten Objekte zu 'erraten' (was im Falle der Objekte im Kommunikationsprofil meistens auch passt).
Data Type
Datentyp nach CANopen, allerdings nicht als numerischer Code, sondern als Klartext.
Access
Zugriffsrechte aus dem EDS-File (wenn vorhanden bzw geladen).
Display
Definiert, wie der CAN-Tester die Daten anzeigen soll: hex = Hexadezimal, dec = Dezimal, asc = ASCII (Text) .
Value
Aktueller Wert.
Ähnlich wie beim Befehl sdo.r (Lesezugriff per SDO auf ein bestimmtes Objekt) wird auch hier
bei 'sehr großen Objekten' (Fachchinesch : 'DOMAIN') nicht der Inhalt, sondern der Name einer Datei angezeigt,
in der der CAN-Bus-Tester den Inhalt abgespeichert hat. Sehr praktisch beispielsweise beim
Auslesen einer "EDS-Datei" aus dem Gerät selbst (Objekt 0x1021, z.B. bei MKT's CANopen-Buskoppler).
Size
Größe der Objektdaten, gemessen in BYTES. Beim Datentyp "Visible String" ist dies nicht die maximale Stringlänge, sondern die aktuelle. Leider gibt es keine Möglichkeit, die maximale Länge eines Objektes per SDO-Lesezugriff zu ermitteln !
Counters
Zählerstand für Lesezugriffe (links) und Schreibzugriffe (rechts). Traten beim Zugriff per SDO Fehler auf, werden auch diese gezählt; in der Spalte "Counters" steht dann z.B. ERR=3 (d.h. beim Schreib- oder Lesezugriff sind drei Fehler aufgetreten). Ursache ist oftmals ein Schreibzugriff, den der Prüfling aus irgendwelchen Gründen abgewiesen hat (z.B. Versuch den Inhalt eines "Read Only"-Objektes zu überschreiben.
Mit dem Funktionen 'Load' bzw 'Save' kann eine elektronische Beschreibung des ODs aus einer Datei importiert oder in einer Datei gespeichert werden. Zu den unterstützten Dateiformaten zählt auch das für CANopen übliche EDS-Format (electronic datasheet, oder auch electronic device specification).
Mit der Funktion 'Read' werden alle Werte neu per SDO eingelesen, und sofort in der Tabelle angezeigt. Dieser Vorgang kann, je nach Umfang des ODs, einige Sekunden dauern.
Werte (in der Tabellenspalte 'Value') können auch editiert werden. Beim
Abschluss der Eingabe mit der ENTER-Taste kann der Wert dann per SDO in das
abgesetzte CANopen-Gerät geschrieben werden. In vielen Fällen ist
es aber einfacher, dies mit den im folgenden Kapitel beschriebenen
Interpreter-Kommandos zu erledigen.
Save , wählen als Dateityp "Device Configuration File (*.dcf)", und dann den Namen der Zieldatei (und ggf. das Ziel-Verzeichnis). Anschließend kann die so erzeugte Datei z.B. mit einer anderen Konfiguration (d.h. einem anderen DCF) verglichen werden. Dazu eignen sich Datei-Vergleichs-Utilities wie die im glorreichen(!) Total Commander integrierte Funktion Files ... Compare by Content . Voneinander abweichende Werte (und Parameter) werden beim Total Commander in der Vergleichsliste rot markiert; mit den Buttons "Previous Difference" und "Next Difference" kann man sehr schnell alle Unterschiede in den beiden miteinander verglichenen (Text-)Dateien finden.
Die Spezifikation von EDS und DCF finden Sie übrigends in CiA (CAN in Automation) DS 306. Bei der Erstellung des CAN-Testers diente Draft Standard 306 V1.3 (vom 1. Januar 2005) als Grundlage für das Format der importierten und exportierten EDS- und DCF-Dateien. Das für unsere Zwecke unnötig komplexe, auf XML basierende "XDD"-Format wird nicht unterstützt.
Die Strukturen von EDS und DCF sind nahezu identisch; der Unterschied ist lediglich das Vorhandensein der Einträge mit dem Schlüssel "ParameterValue" . Einige Beispieldateien (EDS und DCF) finden Sie im Unterverzeichnis "Objects" . Die Datei MKTview2_DCF_Import_Test.dcf kann z.B. zu Testzwecken in MKT's "MKT-View II / CANopen" geladen und wieder ausgelesen werden.
Fenster des im CAN-Tester integrierten LSS-Masters
mit zwei erkannten CANopen-Slaves.
print sdo.r(0x1008.0) ; show device name (as "visible string")
I := 1 ; Read all 32bit floating point variables (object 0x4008)
N := sdo.r(0x4008.0) ; how many variables do we have FOR THIS TYPE ?
repeat
print "AppVar4008.%02lX = %lg (FLT32)",I,sdo.r(0x4008.I,F32);
I := I+1;
until(I>N)
Das letzte Beispiel stammt aus dem Test-Script
"CanopenTerminalTest.cts",
mit dem in einer Schleife alle Subindizes von Objekt 0x4008 gelesen werden.
In diesem Fall muss der Datentyp (hier : FLT32 = 32-Bit floating point) als
Argument beim Aufruf der sdo.read-Funktion übergeben werden, weil der
Interpreter andernfalls einen 32-Bit-Integer-Typ verwenden würde. Grund:
Beim Lesezugriff per SDO erfährt der SDO-Client zwar, wie viele Bytes
gelesen wurden, nicht aber den Datentyp. Per Default geht der Interpreter
immer von Integer-Typen aus. Als Datentyp können die CANopen-Datentyp-Codes,
oder besser (lesbarer) die folgenden symbolischen Konstanten verwendet werden,
ggf. auch abgekürzt. Alle Symbole in einer Zeile der folgenden Auflistung
entsprechen dem gleichen CANopen-Datentyp .
Bei 'sehr großen Objekten' (CANopen-Fachchinesisch : 'DOMAIN') liefert die Funktion sdo.r() nicht den Inhalt,
sondern den Namen einer Datei, in der der CAN-Bus-Tester den Inhalt abgespeichert hat.
Der Dateiname wird automatisch aus dem Objekt-Index und -Subindex erzeugt, mit dem Vorsatz 'Readout_Obj'
um zu verdeutlichen, daß es sich bei dieser Datei um einen aus einem CANopen-Objekt ausgelesenen Wert handelt.
Beispiel zum Auslesen einer "EDS-Datei" aus dem Gerät selbst (Objekt 0x1021, funktioniert z.B. mit MKT's CANopen-Buskoppler):
sdo.w (0x1017.0,U16, 100 ) ; set heartbeat producer time to 100
milliseconds
Siehe auch : Übersicht aller Interpreterfunktionen und -Kommandos des CAN-Testers
Name | Index | Size in bits | Remarks |
BOOLEAN | 0x01 | ?? | we use 8 bits for this ! |
INTEGER8 | 0x02 | 8 | |
INTEGER16 | 0x03 | 16 | |
INTEGER32 | 0x04 | 32 | |
UNSIGNED8 | 0x05 | 8 | |
UNSIGNED16 | 0x06 | 16 | |
UNSIGNED32 | 0x07 | 32 | |
REAL32 | 0x08 | 32 | floating point, not fully supported |
VISIBLE_STRING | 0x09 | X | not supported |
OCTET_STRING | 0x0A | X | not supported |
UNICODE_STRING | 0x0B | X | not supported |
TIME_OF_DAY | 0x0C | not supported | |
TIME_DIFFER | 0x0D | not supported | |
BIT_STRING | 0x0E | not supported | |
DOMAIN | 0x0F | not supported | |
INTEGER24 | 0x10 | not supported | |
REAL64 | 0x11 | not supported | |
.... | 0x12..0x16 | other exotic types, not supported | |
reserved | 0x17 | ||
.... | 0x18..0x1B | very exotic types, not supported | |
reserved | 0x1C..0x1F | ||
PDO_COMM_PAR | 0x20 | 8 + x | |
PDO_MAPPING | 0x21 | 8 + n*32 | |
SDO_PARAMETER | 0x22 | 8 + x | |
IDENTITY | 0x23 | 8 + 4*32 |
Siehe auch:
<noch keine deutsche Übersetzung verfügbar>
The table below shows some error codes that may occur during SDO upload or
download.
Most of these error codes are taken from CANopen DS301 V4.
Some of these errors may also be caused by external devices on the CAN bus.
For a more sophisticated explanation of these errors you should check the
CiA literature or other CAN protocol descriptions.
SDO Error Code | Meaning |
0x05030000 | TOGGLE-BIT NOT ALTERNATED |
0x05040000 | SDO-PROTOCOL TIMED OUT |
0x05040001 | COMMAND SPECIFIER NOT VALID OR UNKNOWN |
0x05040002 | INVALID BLOCK SIZE |
0x05040003 | INVALID SEQUENCE NUMBER |
0x05040004 | CRC ERROR |
0x05040005 | OUT OF MEMORY |
0x06010000 | UNSUPPORTED ACCESS TO AN OBJECT |
0x06010001 | ATTEMPT TO READ A WRITE-ONLY OBJECT |
0x06010002 | ATTEMPT TO WRITE A READ-ONLY OBJECT |
0x06010047 | UNSUPPORTED ACCESS, INTERNAL INCOMPATIBLE |
0x06020000 | OBJECT DOES NOT EXIST IN DICTIONARY |
0x06040041 | OBJECT CANNOT BE MAPPED TO THE PDO |
0x06040042 | MAPPED OBJECTS WOULD EXCEED PDO LENGTH |
0x06040043 | GENERAL PARAMETER INCOMPATIBILITY |
0x06040047 | GENERAL INTERNAL INCOMPATIBILITY |
0x06060000 | ACCESS FAILED DUE TO HARDWARE ERROR |
0x0606002F | ACCESS FAILED DUE TO CAN ERROR |
0x06070010 | DATA TYPES DO NOT MATCH |
0x06070010 | LENGTH OF PARAM DOES NOT MATCH |
0x06070012 | LENGTH OF PARAM TOO HIGH |
0x06070013 | LENGTH OF PARAM TOO LOW |
0x06090011 | SUBINDEX DOES NOT EXIST |
0x06090030 | VALUE RANGE EXCEEDED |
0x06090031 | VALUE RANGE TOO HIGH |
0x06090032 | VALUE RANGE TOO LOW |
0x06090036 | MAXIMUM VALUE IS LESS THAN MINIMUM VALUE |
0x08000000 | GENERAL ERROR |
0x08000020 | DATA CANNOT BE TRANSFERRED TO APPLICATION |
0x08000021 | .. due to local control |
0x08000022 | .. due to device state |
0x08000023 | OBJECT DIRECTORY GENERATION FAILS |
Siehe auch: Fehlercodes des CAN-Testers
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.). Details und Beispiele
zum Senden von CAN-Messages per Script folgen später.
Statt einer zu sendenden CAN-Message kann eine Zeile auch eine Anweisung an den Kommando-Interpreter enthalten.
Anweisungen sind z.B. (vgl. komplette Befehlsübersicht):
A := 10*I;
CommPar := 0x1800; // OD-index for first TPDO communication parameter
PdoCobId[CommPar] := sdo.r( (CommPar).01, U32, 0);
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' :
Percentage := 100 * ( ( AbsValue - MinValue ) / ( MaxValue - MinValue ) );
Bei der Auswertung eines numerischen Ausdrucks werden die meisten Operationen (Teilschritte) mit dem Datentyp der Operanden durchgeführt. Dies gilt auch für die Division: Haben z.B. sowohl Zähler (hier: A) und Nenner (hier: B) den Datentyp integer, dann hat auch der Quotient aus A / B den Typ integer (nicht Gleitkomma). Beispiele :
print 2+3/4; // Liefert das Ergebnis 2 (denn int / int liefert int)
print 2+3/4.0; // Liefert das Ergebnis 2.7500 (denn int / double liefert double, wie im Nenner)
print 2+3.0/4; // Liefert das Ergebnis 2.7500 (denn double / int liefert double, wie im Zähler)
Wegen "Punkt vor Strichrechnung" wird im zweiten und dritten Beispiel auch die
nach der Division folgende Addition als Gleitkommawert berechnet (64-bit 'double').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:
07FF 01 02 03 04 05 06 07 08 ; hexadezimaler ID
#2047 01 02 03 04 05 06 07 08 ; dezimal geschriebener ID
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:
07FF.s 01 02 03 04 05 06 07 08 ; senden mit 11-Bit-ID
07FF.x 01 02 03 04 05 06 07 08 ; senden mit 29-Bit-ID
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.
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:
CommPar := 0x1400; // find the number of bytes to send in the device's first RPDO..
gosub GetSizeOfPDO; // [in] CommPar, [out] NumBytesMapped
P1 := 0x200+NodeId; // Identifier for TPDO1 Master -> I/O-module (DS401:0x200+N)
DigIoLoop: ; digital-I/O per PDO ansteuern :
D := table[N%8](0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80) ; Lauflichtmuster
(P1) [NumBytesMapped] (D) (D) (D) (D) (D) (D) (D) (D) ; bis zu 64 digitale Outputs PER PDO ansteuern
N := (N+1)%256;
delay(0.01);
goto DigIoLoop;
Sprünge, Schleife, Steuerung des Programmablaufes
repeat
until
<Abbruchbedingung>
repeat
, wenn die <Abbruchbedingung> nicht erfüllt ist.while
<Wiederholbedingung>
endwhile
goto
<Sprungziel>
gosub
<Unterprogramm>
return
if
<Bedingung>
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 auch: Kapitel
"Verzweigungen und Schleifen".
stop
delay
(<Zeitintervall in Sekunden>)
OnError
ResumeError
Anzeige und Ausgabe
print
("<Format-String>",
<Parameter>.. )
OpenWindow, CloseWindow
MoveTo
SetButton( <ButtonNr>, <Caption>, <OnClick> )
SetButton( 1,"<< &Zurück", goto DigIoTest );
SetButton( 2,"&Beenden", goto Beenden );
SetButton( 3,"&Weiter >>", goto AnalogIoTest);
SetValueScroller( <ScrollerNr>, <Variable>, <MinValue>, <MaxValue> [, <OnScroll>] )
SetValueScroller( 1, PWM1Freq, 0, 10000, gosub UpdatePWM1FromScroller );
SetValueScroller( 2, PWM1Duty, 0, 100.0, gosub UpdatePWM1FromScroller );
SetFont( "<FontName>", <FontSize>, <FontAttributes> )
ClearScreen( x )
ClearVars()
scope.xxx
sound
(frequenz, dauer, modulation)
freeze
def_watch
def_watch(0) "Ain1", canrx(0x181,0,U16), 0, 32768
Numerische Funktionen
CAN-Senden und Empfangen (Decodieren einzelner CAN-Signale)
canrx
(<Identifier>, <erstes Bit>,
<Datentyp>)
tx_interval
=<neues Sendeintervall
in Sekunden>
Siehe auch: "delay"-Kommando für eine einmalige
Wartezeit.
can.send( <Identifier>, <Zeichenkette> )
can.send(0x7F0,g=50,"Hallo ! Dies ist ein Test für die
can-String-Sendefunktion !")
can.show_msgs_as_strings( <Identifier-Liste> )
can.reset
wcan <CAN-ID> <Länge>
<Datenbytes>..
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
wcan.id
,
wcan.len
, und
wcan.dat
. print("Erster Teil der Ausgabe,";); // ohne Zeilenvorschub
print("zweiter Teil der Ausgabe."); // mit Zeilenvorschub
Beispiele für den Format-String:
Details finden Sie im 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 Regeln für das Trennzeichen in der Parameterliste:
Es ist jetzt 23:59:59 Uhr .
|________|___ per Komma ausgegebene Leerzeichen
Beispiele:
Zulässige Farbwerte : red, green, blue, yellow, white, black, oder RGB-Farbmischungen als Integerwerte (z.B. 0x0000FF=Rot, 0x00FF00=Grün, 0xFF0000=Blau).
Nach dem Öffnen eines Fensters per OpenWindow() können dort z.B.
Steuerelemente wie z.B. Buttons angezeigt werden,
um einfache 'graphische Benutzeroberflächen' für interaktive
Testabläufe zu realisieren. Ein Beispiel dafür finden Sie im Test-Script
EaDIO8Test.cvt (ursprünglich für ein E/A-Modul mit CANopen
und 8 digitalen Ein/Ausgängen vorgesehen). Das per Script geöffnete Fenster
enthalt einige Buttons (Schaltflächen im klassischen Windows-Stil),
um den Bediener schrittweise durch einen halbautomatischen Testablauf zu führen.
Nach dem Befehl "OpenWindow" druckt das Kommando
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.
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 .
Siehe auch: Plot-Fenster zur Darstellung
des zeitlichen Verlaufs einzelner Signale in Echtzeit.
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):
Verfügbare Befehle:
Beispiel: Ausschnitt aus einem Kommandoprogramm mit Parametrierung des
Scope-Fensters, inkl. Definition von vier Messkanälen :
Siehe auch: Beschreibung des
Plot-Fensters zur Darstellung des
zeitlichen Verlaufs einzelner Signale in Echtzeit.
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:
print
nicht mehr in die Meldungsliste
des CAN-Testers, sondern in das benutzerdefinierte Fenster.
Screenshot aus EaDIO8Test.cvt mit einem per 'OpenWindow()' erzeugten Fenster
mit Schiebereglern (hier zum interaktiven Steuern von Pulsweitenmodulatoren)
und Schaltflächen (hier für die Nagivation innerhalb des per Script gesteuerten Ablaufs).
goto, gosub (Kommando)
goto
<Label>
gosub
<Label>
gosub
merkt sich die aktuelle Programmposition für einen
späteren Rücksprung mit return
.
Siehe auch: Beispiel mit 'goto'; Labels .
return (Kommando)
return
gosub
"-Befehl fort.
Wird normalerweise als letzter Befehl eines Unterprogramms eingesetzt, welches
von verschiedenen Stellen aufgerufen wird.
canrx (Kommando zum Decodieren empfangener CAN-Signale)
canrx
( <CAN-Identifier>, <erstes Bit im Datenfeld
der Message>, <Datentyp> [ , < Defaultwert > ] )
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.
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;
wcan.id, wcan.len,
wcan.dat (Abfragefunktionen nach dem wcan-Kommando)
greift auf das Datenfeld der zuvor empfangenen Message zu, ähnlich wie
beim canrx-Kommando.
Die Bitzählung beginnt bei 0 (NULL); der Datentyp wird in der
hier definierten symbolischen Form
übergeben.
scope.xxx
(Kommandos zum Steuern des Watch/Plot-Fensters durch den Interpreter)
scope.show(0)
Schließt das Watch/Plot-Fenster (ehemals "Oszilloskopfenster")
scope.show(1)
Öffnet das Watch/Plot-Fenster und schaltet auf die Registerkarte "Plotter"
um
scope.show(2)
Öffnet das Watch/Plot-Fenster und schaltet auf die Registerkarte
"Kanaldefinitionen" (watches) um
scope.ch[N]={ <Name>, <Expression>, <ScaleMin>,
<ScaleMax> }
Ändert die Definitionen für Kanal Nummer N (N: 0..14). Diese werden
auch in der Kanaldefinitionstabelle angezeigt.
Die gleichen Daten (mit einer etwas anderen Syntax) können auch per
"def_watch"-Kommando gesetzt werden.
scope.run
Startet das "Oszilloskop" (und die Aktualisierung des Watch-Fensters)
scope.stop
Stoppt das "Oszilloskop" (und die Aktualisierung des Watch-Fensters)
; 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
Funktionen für die CAN-Bus-Fehlerstatistik
Die Summe der auf allen Kanälen empfangenen CAN-Messages
wird auch im Hauptfenster in der Statuszeile
oberhalb der Empfangsliste angezeigt.
Die Summe aller gesendeten Telegramme
wird auch im Hauptfenster in der Statuszeile
oberhalb der Sende-Liste angezeigt.
CANopen-spezifische Kommandos
obj (alias obd)
Diverse Befehle zum Zugriff auf das eigene (lokale)
CANopen-Objekt-Directory.
sdo_r, sdo_w
Symbole für CANopen- und andere Datentypen
Ein-Bit-Variable: 0=FALSE, 1=TRUE
8-Bit Integer mit Vorzeichen
16-Bit Integer mit Vorzeichen
32-Bit Integer mit Vorzeichen
8-Bit Integer ohne Vorzeichen ("Byte")
16-Bit Integer ohne Vorzeichen ("Word")
32-Bit Integer ohne Vorzeichen ("doubleword")
32-Bit Gleitkomma (aka Fliesskomma, floating point) nach CANopen (IEEE)
Nullterminierter ASCII- (oder ANSII?-) String. Nur von wenigen Funktionen
unterstützt, z.B. SDO-Zugriffsfunktionen
16-Bit Signed Integer im Little Endian (ala "Motorola")-Format (most significant byte first)
32-Bit Signed Integer im Little Endian (ala "Motorola")-Format
16-Bit UNsigned Integer im Little Endian (ala "Motorola")-Format
32-Bit UNsigned Integer im Little Endian (ala "Motorola")-Format
Utility für Firmware-Update per CAN-Bus
Die Beschreibung des Utilities für Firmware-Update per CAN-Bus wurde in ein separates Dokument ausgelagert.
Dateien:
alte Anleitungen für DOS-CAN-Tester
Internet:
Inhalt der 'MKT-CD' (mittlerweile online verfügbar; enthält u.A. den Installer für MKT's CAN-Tester)
Homepage von MKT Systemtechnik
Hard- und Softwareprodukte von MKT, mit Download-Bereich (in dem der CAN-Tester anno 2010 allerdings nicht zu finden war)
CAN in Automation (CiA)
Hier gibt's alle Informationen zum Thema CANopen..
Zurück zum Seitenbeginn
Neueste Änderung zuerst ! Datum im ISO 8601-Format : YYYY-MM-DD .
Zuletzt bearbeitet: 2024-02-07 (YYYY-MM-DD), W.B.