Inhalt
- Zweck des Programms
- Einschränkungen
- Installation
- Konfiguration : CAN / CAN FD, Anzeige, Optionen, SDO, Verzeichnisse
- Komponenten des Hauptfensters
- Das Hauptmenü
- Statuszeilen, Zähler fuer empfangene + gesendete Telegramme
- Empfangsfenster (blau)
- Sendefenster (grün)
- Anzeigeformat für CAN und CAN FD
- Kommandofenster (schwarz)
- Meldungsfenster (gelblich)
- Das Hilfesystem
- Trigger (Starten / Stoppen der Anzeige bei bestimmten Ereignissen)
- Start (konfigurierbare Bedingungen und Aktionen)
- Stop (konfigurierbare Bedingungen und Aktionen)
- Trigger-Messages
- Trigger-Info und 'Verschiedenes' (Misc.)
- Trigger-Beispiel: Starten und Stoppen der Anzeige bei Empfang einer bestimmten CAN-Message
- Das Watch/Plot/FFT-Fenster
- Die Watch-Liste
- Numerische Ausdrücke für Watch-Liste / Plot-Fenster
- Spektrumanalysator (im "Watch-Fenster")
- Fehlermeldungen
- Das Text-Terminal-Fenster
- CANopen-Funktionalität
- CANopen OD-Browser und OD-Scanner
- EDS (Electronic Data Sheet) und DCF (Device Configuration File)
- Auslesen der EDS-Datei per 'Domain Transfer' aus Objekt 0x1021
- PDO-Mapping basierend auf den Informationen aus dem EDS-File ?
- CANopen LSS (Layer Setting Services)
- CANopen-LSS-Master im CAN-Tester
- Interpreterfunktionen zum Zugriff auf Objekte im CANopen-OD per SDO
- CANopen - Datentypen
- SDO-Fehlercodes
- Kommando-Interpreter (für Test-Scripte)
- Das Kommandoprogramm
- Numerische Ausdrücke (im Interpreter)
- Senden von CAN-Telegrammen aus dem Kommandoprogramm
- Befehlsübersicht
- Funktionen für die CAN-Bus-Fehlerstatistik
- CANopen-spezifische Kommandos
- Symbole für CANopen-Datentypen
- Utility für Firmware-Update per CAN-Bus
- Links
- Nutzungsbedingungen, Haftungsausschluß
- Letzte Änderungen
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:
-
Senden und Empfangen beliebiger
CAN-Telegramme (mit Kvaser-Hardware auch CAN FD)
-
Analyse von CAN-Netzen
-
Mitschnitt von CAN-Telegrammen als Textfile ("Log")
-
Abspielen von CAN-Logfiles im Vector-ASCII-Format (u.A.)
-
Untersuchung des Objekt-Dictionarys von CANopen-Modulen
-
Ersatz der SDO-Funktionalität von CANopen-Modulen
-
Aktualisierung der Firmware in Geräten mit 16- oder 32-Bit-CPU per CAN-Bus
Zurück zum
Seitenbeginn
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.
Zurück zum Seitenbeginn
Installation
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.
Zurück zum
Seitenbeginn
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).
Bei geeigneter CAN-Hardware kann hier auch das Senden und Empfangen von
CAN FD konfiguiert werden. Dazu muss die CAN-Bitrate für die "data phase"
für alle Knoten im CAN / CAN FD - Netzwerk identisch sein. Üblich sind
(für die "FD"-Bitrate) 1000, 2000, oder 4000 kBit/Sekunde.
Ein bei 8 MBit/Sekunde noch zuverlässig (ohne Error Frames)
funktionierendes Interface tauchte bislang nicht beim SW-Entwickler auf.
Der Abtastpunkt (sample point) liegt bei den meisten Treibern per Default
bei 80 Prozent für CAN FD, und entspricht damit den Empfehlungen von CiA.
MKT's CAN-Bus-Tester bietet bislang keine Möglichkeit, die Bit-Timing-Register
des Controllers 'direkt' einzustellen. Verwenden Sie dazu ggf. das
herstellerspezifische Konfigurationstool.
Immerhin kann bei Verwendung
bestimmter CAN-Treiber (z.B. Kvaser) das vom Treiber verwendete
Bit-Timing ausgelesen werden. Es wird dann wie im obigen Screenshot
unter 'CAN Test Settings' angezeigt.
Beispiel (mit "Kvaser Hybrid 2*CAN/LIN"):
-
Read from driver: 500 kbit/sec, FD: 2000 kbit/sec
Timing info: ts1=63, ts2=16, sjw=16, nSamp=3; FD:ts1=15, ts2=4, sjw=4
Um aus den oben gezeigten, per CAN-Treiber ausgelesenen Parametern
'ts1' (time segment 1, innerhalb eines Bits, vor dem Abtastpunkt) und
'ts2' (time segment 2, innerhalb eines Bits, nach dem Abtastpunkt)
die Dauer eines Abtastintervalls 'tq' ("time quantum") zu berechnen,
kann sowohl für CAN als auch für CAN FD der folgende Zusammenhang verwendet werden:
t_bit = ( 1 [SyncSeg] + ts1 + ts2 ) * tq = 1 / bitrate
⇒ tq = 1 / ( bitrate * (1+ts1+ts2) )
Berechnung für das o.g. Beispiel (Kvaser Hybrid):
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:
-
The bit timing shall be derived from a CAN clock running at 80 MHz
and shall meet the requirements defined in /ISO11898-1/.
In case of CAN FD with bit rate switching the bit timing configuration
shall fulfill the following requirements. Any violation of these
requirements may dramatically reduce the robustness of the communication,
or even prohibit communication at all.
- In all CANopen devices the sample point for the nominal bit rate
shall be placed at 80% of the nominal bit time.
- In all CANopen devices the sample point for the data bit rate
shall be placed to the same position of the data bit time.
The required sample point position depends on many parameters. (...)
- In all CANopen devices the time quantum length in the arbitration phase
(nominal bit timing) and in the data phase (data bit timing) shall be equal.
This is achived by using the same bit rate prescaler (BRP) in both
bit timing configurations.
- Hinweis zur gleichzeitigen Verwendung eines CAN-Interfaces durch mehrere Applikationen:
- Hier muss peinlich genau darauf geachtet werden, dass alle Programme
die gleiche Konfiguration für die CAN-Schnittstelle(n) verwenden. Andernfalls
könnten vom Hardware-Treiber Fehlermeldungen erfolgen, wie z.B. in diesem Fall
mit einem Interface von Kvaser (mit etwas missverständlichem Fehlercode bzw. Meldung):
CAN: UCAN_Init: Loaded Kvaser CANLIB32 V5.43 .
CAN: UCAN: Can't open Kvaser Ch 1: Specified device not found
Abhilfe in diesem Fall: Sowohl die Baudrate für die Arbitrierungsphase,
als auch den Haken (checkmark) zur Nutzung von CAN FD, und die Baudrate für die Datenphase
in allen das CAN-Interface nutzenden Applikationen identisch einstellen.
Hier steht alles, was -direkt oder indirekt- mit der Anzeige von CAN-Telegrammen
("frames") in den beiden Anzeigefenstern des CAN-Testers zu tun hat:
-
Identifier-Anzeige: dezimal oder hexadezimal ?
-
Kommentare im RX-Fenster anhängen ? Sehr hilfreich um Probleme in
CANopen-Netzwerken zu finden: der CAN-Tester schreibt im Kommentarfeld hinter
bestimmten CAN-Telegrammen, was diese bedeuten; bei SDO sogar welche Objekte
im CANopen-OD mit dem Telegramm addressiert werden. Die CAN-Identifier für
SDO-Kommunikation ergeben sich aus der unter "SDO-SERVER" (!) eingestellten
Knotennummer; die Namen der adressierten Objekte werden aus dem "simulierten
Objektverzeichnis für SDO-Server" gelesen.
-
Standard / Extended-Identifier durch Anhängen von ".s"/".S" oder ".x"/".X" markieren
?
Nur sinnvoll bei gemischtem Betrieb mit 11- / 29-Bit-Identifiern oder
bei gemischtem Betrieb mit "Classical CAN" und CAN FD (flexible data rate).
NNN.s sind dann Standard-Frames, NNNNN.x Extended-Frames. Kleinbuchstaben markieren den
Identifier eines "Classical CAN"-Frames, bei CAN FD werden Großbuchstaben verwendet:
.s = "Classical CAN", standard message identifier (11 bit),
.x = "Classical CAN", extended message identifier (29 bit),
.S = CAN FD mit 11-bit-Identifier (aka "FBFF", FD Base Frame Format),
.X = CAN FD mit 29-bit-Identifier (aka "FEFF", FD Extended Frame Format).
-
ASCII-Text anzeigen für folgenden CAN-IDs: Hilfreich, wenn in einem
bestimmten CAN-Kanal nur ASCII-Texte übertragen werden (z.B. im
"CAN-Terminal").
-
Time Stamps: Definiert, ob und wie Zeitstempel für CAN-Telegramme angezeigt
werden sollen.
- zeige Bus-Nr: Zeigt die CAN-Bus-Nummer (dezimal, mit Prefix '#') in einer eigenen Spalte
im RX- bzw. TX-Fenster an. Die (optionale) Bus-Nummer folgt direkt nach dem (optionalen) Zeitstempel.
- zeige Data Length Code: Zeigt die Anzahl
Datenbytes die CAN-Bus-Nummer (dezimal, in eckigen Klammern) vor dem
hexadezimalen Datenfeld an. Bei 'classic CAN' i.A. unnötig, weil dort
maximal 8 Datenbytes pro Frame möglich sind, die im hexadezimalen Datenfeld
leicht abzählbar sind.
Bei CAN FD (mit bis zu 64 Bytes im Datenfeld) empfiehlt sich diese Option,
um 'auf einen Blick' die Länge des Datenfelds zu erkennen.
- zeige FDF, BRS, ESI: zeigt die CAN-FD-spezifischen
Flags wie z.B. FDF, BRS, ESI.
-
RX-Liste, TX-Liste: Definiert, ob die empfangenen bzw gesendeten
CAN-Telegramme als durchscrollende Liste ("Historie") oder nach CAN-Identifiern
sortiert angezeigt werden sollen.
-
Rx/Tx-Fenster: Hier werden Zeichensatz, Hintergrundfarben, und die maximale
Anzahl von Textzeilen im RX- und TX-Fenster eingestellt.
-
Anzeige von Error Frames: siehe "Optionen" !
Logging
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:
-
Minimale Verzögerung zwischen zwei Sendungen (in Millisekunden)
Definiert, wieviel Zeit zwischen zwei programmgesteuerten CAN-Sendungen vergehen
muss. Dadurch wird das Kommandoprogramm gegebenenfalls 'ausgebremst' !
-
Variablenwerte beim Beenden sichern
Ist diese Option gesetzt, speichert der CAN-Tester beim Verlassen des Programmes
die Werte aller vom Kommandoprogramm definierten Interpretervariablen,
die dann beim nächsten Start wieder eingeladen werden. Diese Option wurde
irgendwann mal eingebaut, um in der Fertigung (bei MKT) automatische
Seriennummern per CAN-Bus zu vergeben... wurde aber fast nie eingesetzt.
-
Error Frames anzeigen
Wenn diese Option gesetzt ist, und ein dafür geeignetes
CAN-Interface/Treiber verwendet wird (z.B. Vector CAN XL Driver), dann werden
eventuell auftretende Error-Frames gezählt und im Meldungsfenster des
CAN-Testers angezeigt.
(Hintergrund: Im Idealfall sollten in einem CAN-Netzwerk keine Error-Frames
auftreten. Ursache für Error-Frames können z.B. EMV-Probleme, fehlender
Abschlusswiderstand, falsch konfigurierte Bit-Timing-Register, oder ein "babbling
idiot" in einem der CAN-Knoten sein)
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:
-
Programme : Damit sind die script-ähnlichen Anweisungslisten gemeint,
die in das Kommandofenster des CAN-Testers geladen werden können.
-
CANopen Object Dictionary - Dateien: Zum Testen bzw Simulieren von Geräten
mit CANopen. Dazu gehören z.B. EDS-Dateien, in denen denen der Aufbau
des Objektverzeichnisses eines CANopen-Slaves beschrieben ist.
-
CAN-Logger-Dateien: Verzeichnis, in dem (eines schönen Tages) CAN-Logfiles
abgelegt werden könnten.
-
Hilfedatei: Das Verzeichnis, in dem diese Hilfedatei stehen sollte (im
HTML-Format).
-
HTML-Browser: Verweist auf den HTML-Browser, der zum Anzeigen der Online-Hilfe
aufgerufen werden soll. Per Default steht hier meistens der komplette Pfad
zum Internet Explorer, mit dem zusätzlichen Parameter "-nohome" in der
Kommandozeile.
Signale
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.
-
(*) Dieser per MIDI-Schnittstelle steuerbare
Synthesizer ist in den gängigen Soundkarten eingebaut.
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".
Zurück zum Seitenbeginn
Komponenten des Hauptfensters
Im Hauptmenü stehen die üblichen Funktionen zum Laden und Speichern von Dateien (CAN-Tester-Scripten bzw. 'command files'),
und für die Konfiguration ("Settings") zur Verfügung.
Weitere, nicht unbedingt 'selbsterklärende' Einträge im Hauptmenü sind:
- Umschaltung zu weiteren Bedienelementen (Fenster, Registerkarten) des CAN-Testers
- Suche nach Text im Kommandoprogramm (Script)
- Starten des Kommandoprogramms am Anfang, an der Cursor-Position, oder an einem bestimmten Label,
u.v.m.
- Löschen der Message-Zähler, Löschen des Textes im Meldungs-Fenster, Aktivierung bestimmter Meldungen vom CAN-Treiber,
von höheren CAN-Protokollen, und vom Script-Interpreter
- Vorübergehendes 'Einfrieren' der Live-Anzeige im CAN-Sende- und Empfangsfenster, um dort 'in Ruhe' abzulesen
- Konfiguration und Anzeige des im CAN-Tester integrierten CANopen-SDO-Servers, -Clients, CANopen-Object-Dictionary-Browser
(remote oder lokal), CANopen LSS Master, Senden bestimmter CANopen-NMT-Telegramme, CAN-Hardware-Reset, Firmware-Update-Tool.
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:
-
Sortierung nach Identifier (sorted) oder Empfangszeitpunkt (history). Kann
auch durch Doppelklick auf "sorted" oder "history" umgeschaltet werden.
-
mit oder ohne Angabe des Empfangszeitpunktes, wahlweise "relativ" oder "absolut",
im Format "Millisekunden" oder hh:mm:ss
-
Markierung von 'standard' und 'extended' Message-Identifiern, bei geeigneter Hardware
auch die Markierung von 'CAN FD', erkennbar am Identifier-Suffix.
Siehe auch: Anzeige des Frame-Typs als Suffix nach dem Message-ID.
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:
- 0 bis 8 Datenbytes werden mit dem 'genau passenden' DLC gesendet.
- 9 bis 12 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für 'zwölf Datenbytes' gesendet.
- 13 bis 16 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '16 Datenbytes' gesendet.
- 17 bis 20 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '20 Datenbytes' gesendet.
- 21 bis 24 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '24 Datenbytes' gesendet.
- 25 bis 32 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '32 Datenbytes' gesendet.
- 33 bis 48 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '48 Datenbytes' gesendet.
- 49 bis 64 Datenbytes werden ggf. mit Nullen aufgefüllt und mit dem DLC für '64 Datenbytes' gesendet.
Ergibt sich bei der Zählung der Datenbytes ein DLC (Data Length Code) größer 8, wird das Telegramm
automatisch als "FD Base Frame" oder "FD Extended Frame" gesendet.
Der Parser für zu sendende Telegramme erkennt auch die seit August 2019 für CAN FD im
Empfangsfenster angezeigten, optionalen 'Flags' wie z.B. FDF (FD Format) und BRS (BitRate Switch).
Der CAN-Tester verwendet bei der Anzeige die (leider nicht sehr intuitiven)
Abkürzungen aus der CAN FD Spezifikation:
Die Anzeige der oben genannten CAN-FD-Flags kann im Setup unter 'Frame Display'
aktiviert werden ("zeige FDF, BRS, ESI").
Die Zeitmarke (timestamp) erfolgt optional in Millisekunden (absolut oder relativ zur vorhergehenden Anzeigezeile),
oder als 'Uhrzeit' im Format HH:MM:SS.ss (.ss sind die zwei Nachkommaziffern für die Sekunden). Die Anzeige von Zeitmarken
kann unter Settings..Display Settings..Time Stamps konfiguriert werden.
Weitere mögliche Notationen für CAN-Telegramme finden Sie in der
Beschreibung des im CAN-Tester eingebauten Kommando-Interpreters.
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:
-
Senden von CAN-Telegrammen
-
Senden von SDO-Lese- und Schreibbefehlen
-
Kommandos zur Steuerung eines automatisierten Testablaufs ('Script')
-
Kommandos zur Anzeige von Werten im Meldungsfenster
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:
- blauer Punkt: Diese Zeile wurde seit dem Start des CAN-Tester-Scripts
mindestens einmal abgearbeitet
- gelbes 'Warndreieck': Beim Abarbeiten dieser Zeile trat ein Fehler auf,
der aber nicht unbedingt zum Abbruch des Scripts führte.
Z.B. führen Fehler bei CANopen-SDO-Lesezugriffen per 'sdo.r'
nicht zum Programmabbruch, sondern liefern i.A. den Default-Wert Null.
Der Fehlercode (oder dessen Beschreibung) wird über dem Editortext
angezeigt, wenn der Mauszeiger über das Warnsymbol bewegt wird.
- rote Scheibe: Breakpoint. Setzen bzw. Löschen per Mausklick in der Sidebar.
- grüner Pfeil: Zeigt auf die nächste abzuarbeitende Zeile.
Besonders hilfreich im Single-Step-Betrieb (F8).
Beim Bewegen des Mauspfeils über den Text im Kommandofenster (das 'Test-Script') wird abhängig
davon folgendes angezeigt:
- Name einer Variablen → aktueller Wert und Datentyp der Variablen
- Name eines Labels → Zeile, in der das Label steht (Sprungziel)
Meldungsfenster
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" .
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 !
<- automatisch angezeigte Fehlermeldungen
(an dieser Stelle wurde der Bericht 'CAN-Statistik' angefordert)
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.
Siehe auch: Interpreterfunktionen für die CAN-Bus-Fehlerstatistik.
Zurück zum
Seitenbeginn
Die Verwendung des Hilfesystems (im Hauptfenster)
Um das Hilfesystem aus dem Hauptfenster des Programm zu öffnen, gibt es folgende Möglichkeiten:
-
über das Menü "Help"
-
F1: Kontextsensitive Hilfe
Steht der Cursor z.B. im Empfangsfenster und Sie drücken F1, erhalten
Sie eine Hilfestellung zum Empfangsfenster.
-
CTRL-F1: Kommandospezifische Hilfe
Steht der Cursor im Kommandofenster auf einem bestimmten Befehl und Sie
drücken CTRL-F1 (bzw. STRG-F1), erhalten Sie -mit etws Glück- Hilfe
zu dem Interpreterkommando an der aktuellen Cursorposition.
Sollte sich aus irgendwelchen Gründen (Windows 10?) der HTML-Browser nicht wie oben beschrieben
aus dem Hauptfenster starten lassen, kann das Hilfesystem notfalls manuell per 'Datei-Explorer' o.Ä.
geöffnet werden. Nach der Installation des CAN-Testers finden Sie das Hilfesystem im Unterverzeichnis
'Help'.
Trigger (Starten / Stoppen der Anzeige bei bestimmten Ereignissen)
Bei hartnäckigen Problemen, z.B. dem Auftreten sporadischer Fehler bei hoher Message-Rate
kann die in diesem Kapitel beschriebene Trigger-Funktion helfen (siehe auch
Beispiel zum Starten und Stoppen der Anzeige beim Empfang einer bestimmten
'problematischen' CAN-Message). Der Trigger wird mit dem hier gezeigten Dialog konfiguriert:

Screenshot des im CAN-Tester enthaltenen Trigger-Konfigurations-Fensters
Details zu den Registerkarten für die Start- und Stop-Bedingungen, und zu den mit dem
"Start" / "Stop"-Ereignis ausgelösten Aktionen folgen in den nächsten Unterkapiteln.
Im Bereich unterhalb der umschaltbaren Registerkarten kann das gesamte Trigger-Modul
per Checkmark 'trigger module enabled' ein- und ausgeschaltet werden. Sämtliche Aktionen,
die zum Stoppen oder Starten des Empfangsfensters führen könnten,
sind so mit einem einzigen Mausklick aktivierbar bzw. deaktivierbar.
Darüberhinaus werden die logisch UND- / ODER-verknüpften Start- und Stop-Bedingungen
in diesem Teil des Fensters angezeigt (Indikatoren, gleichzeitig auch Buttons zum manuellen
Trigger-Start/Stop).
Start (konfigurierbare Bedingungen und Aktionen)
(Siehe Screenshot in der Einleitung dieses Kapitels)
Verfügbare Bedingungen für den Trigger-START sind:
- Auftreten irgendeines Fehlers (vom CAN-Interface, z.B. Warning Level, Bus-Off, Error-Frame, usw.)
- Protokollfehler im integrierten SDO-Client (für CANopen)
- Protokollfehler im integrierten SDO-Server (für CANopen)
- Empfang einer (oder mehrerer) der unter Messages CAN-Telegramme bzw Message-Filter
- Timeout beim Empfang einer der unter Messages CAN-Telegramme bzw Message-Filter
Im unteren Teil der Registerkarte (tabsheet 'Start Conditions und Actions') werden die
Aktionen definiert, die beim Eintreten einer 'START'-Bedingung erfolgen sollen, z.B.:
Stoppen (konfigurierbare Bedingungen und Aktionen)
Die verfügbaren Bedingungen für den Trigger-STOP entsprechen der Liste
der im vorherigen Kapitel (Trigger-START).
Zum Stoppen werden üblicherweise lediglich andere Elemente aus der Liste gewählt.
Entsprechendes gilt auch für die beim Auftreten des Ereignisses auszuführenden
Aktionen (die bei STOP üblicherweise nur aus dem 'Einfrieren'
der scrollenden Anzeige im Empfangsfenster besteht).
Trigger-Messages
Da der CAN-Tester lange vor dem Erscheinen von CAN FD entwickelt wurde,
kann bislang nur auf 'normale' CAN-Telegramme mit bis zu 8 Bytes im Datenfeld getriggert werden.
Es stehen mindestens vier Eingabefelder zur Definition zur Verfügung. Welche davon als Start-, und welche als
Stop-Bedingung verwendet werden (oder welche einfach nur als 'Zähler' für bestimmte Telegramme dienen)
wird nicht auf der Registerkarte Messages', sondern unter Start Conditions bzw.
Stop Conditions definiert. Das Format entspricht der Überschrift über den Eingabefeldern. Beispiel:
CANid R L d0 d1 d2 d3 d4 d5 d6 d7 Interval/ms
Trigger message 1 0x7F0 0 8 21 73 65 6E 64 5F 73 63 [ ]
Trigger message 2 0x7F1 0 x xx xx xx xx xx xx xx xx [ ]
Trigger message 3 0x7F1 0 x xx xx xx xx xx xx xx xx [ ]
Trigger message 4 0x7F1 0 x xx xx xx xx xx xx xx xx [ ]
Darin ist:
- CANid
- CAN-Message-Identifier in hexadezimaler Form
- R
- 1 = Remote Transmission Request. Anachronismus aus der CAN-Steinzeit.
0 = Normaler CAN- (oder auch CAN FD-)Frame. Bei CAN FD wurde 'RTR' dankenwerterweise entfernt.
- L
- Länge des Datenfelds in Bytes. Bei CAN 0 bis 8, bei CAN FD 0 bis 64. 'x' = Länge ignorieren.
- d0..d7
- Bis zu acht Datenbytes. xx = Dieses Byte beim Vergleich mit den empfangenen Daten ignorieren.
- Interval/ms
- Dient bei periodisch gesendeten Messages zum Überwachen des Ausbleibens der Message.
Bei leerem Eingabefeld (oder Intervall = 0 Millisekunden) findet keine Zeitüberwachung statt.
Info, Misc (Trigger-Info und 'Verschiedenes')
Auf dieser Registerkarte kann u.A. die Anzahl der CAN-Message eingestellt werden,
die nach der Trigger-Aktion
☑ freeze message display (with a few post-trigger messages)
auch nach dem prinzipiellen Stoppen der Anzeige noch in das Empfangsfenster
übernommen werden. Dadurch ist es z.B. möglich, auch die Message, die als Trigger-Bedingung eigentlich zum Stoppen
der Anzeige geführt hat, noch im Meldungsfenster angezeigt wird.
Trigger-Beispiel: Starten und Stoppen der Anzeige bei Empfang einer bestimmten CAN-Message
In diesem bewusst einfachen Beispiel wird das gleiche Ereignis (Empfang einer CAN-Message mit einem bestimmten Identifier und Inhalt)
sowohl zum Starten und Stoppen der Anzeige verwendet. Mit Hilfe der einstellbaren Anzahl
von Post-Trigger-Messages wird so ein kurzer Schnappschuss erstellt,
der lediglich aus der 'interessanten Message' und einigen danach eintreffenden Messages besteht.
Einstellungen unter Start Conditions and Actions :
Events to START... combination: (*) OR ( ) AND
☐ ANY error
☐ SDO CLIENT error
☐ SDO SERVER error
☐ ANY reception of a CAN message
☑ Reception of SPECIAL CAN message #1 (defined on MESSAGES tab)
☐ Reception of SPECIAL CAN message #2 (defined on MESSAGES tab)
☐ Reception of SPECIAL CAN message #3 (defined on MESSAGES tab)
☐ Reception of SPECIAL CAN message #4 (defined on MESSAGES tab)
☐ Missing CAN message (reception timeout, defined on MESSAGES tab)
Reactions when STARTING ...
☑ freeze message display (with a few post-trigger messages)
☑ let message display run
☐ Beep (acoustic signal #1)
☐ Whistle (acoustic signal #2)
Einstellungen unter Stop Conditions and Actions sind in diesem Fall nicht nötig,
weil mit den oben gezeigten Aktionen beim TRIGGER-START die Anzeige sowohl gestartet, aber auch
(wenige Frames später) wieder gestoppt wird.
Definition der als Triggersignal verwendeten CAN-Message:
CANid R L d0 d1 d2 d3 d4 d5 d6 d7 Interval/ms
Trigger message 1 0x7F0 0 8 21 73 65 6E 64 5F 73 63 [ ]
Unter Info, Misc wird dann noch die Anzahl der post-trigger-Messages eingestellt:
Number of post-trigger messages after 'freeze message display': 20
Clear the TRIGGER START flag after 500 milliseconds without a RISING EDGE
Clear the TRIGGER STOP flag after 500 milliseconds without a RISING EDGE
Dann ggf. noch 'Apply' anklicken, um den Text aus einigen Editierfeldern in die Konfiguration
zu übernehmen, und vom Normalbetrieb des CAN-Testers in den 'getriggerten' Betrieb umschalten:
,------, ,------,
☑ trigger module enabled Start condition: | false | Stop condition: | false |
'------' '------'
________ ________ ________ ________
| | | | | | | |
| Apply | | Ok | | Cancel | | Help |
|________| |________| |________| |________|
Tipp: Die Indikatoren für die "Start condition" und "Stop condition" sind anklickbare Schaltflächen,
um die Trigger-Start bzw. Stop-Bedingung notfalls auch manuell zu setzen oder zu löschen.
Anlicken eines Indikators invertiert den Triggerzustand (false -> TRUE, TRUE -> false).
Nach dem Erkennen der oben definierten CAN-Message als Trigger-Signal startet der Trigger die Anzeige,
und (mit dem in diesem Beispiel verwendeten Konfiguration) stoppt wenige Messages später.
Resultat im Empfangsfenster (mit Darstellung des Datenfelds z.T. als ASCII-Strings):
+000000: #1 7F1 [08] "tOtOtOtO" ;
01514284: #1 7F0 [08] "!send_sc" ; <- Dies ist die oben definierte "Trigger-Message"
+000000: #1 7F0 [08] "reenshot" ; (Anzeige hier allerdings als Zeichenkette)
+000000: #1 7F0 [03] "!" 0D 0A ;
+000004: #1 7F1 [08] "!screens" ; <- ein (MKT-)Gerät sendet einen 'Screenshot per CAN' ...
+000000: #1 7F1 [08] "hot!:w=3" ;
+000000: #1 7F1 [08] "20 h=240" ;
+000000: #1 7F1 [07] " b=16" 0D 0A ;
+000000: #1 7F0 [05] "ack" 0D 0A ; <- Acknowledge (vom UPT-Programmiertool)
+000000: #1 7F1 [08] "ÿÿtOtOtO" ; <- die ersten 4 Pixel als Binärdaten ..
+000000: #1 7F1 [08] "tOtOtOtO" ;
Ohne die Triggerung wäre es schwierig, den Anfang des für dieses Beispiel verwendeten 'Screenshot per CAN'
mit 320 * 240 Pixeln * 16 Bit/Pixel = 153600 Bytes in über 19200 CAN-Messages zu finden. Das als Empfangsfenster
verwendete Windows-'Rich-Edit'-Control hätte darüberhinaus Probleme, 19200 Zeilen schnell scrollend
'in Echtzeit' anzuzeigen.
Das Plot-Fenster
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.
Die Watch-Liste
Zur Definition, was im Plot-Fenster dargestellt wird, dient die Registerkarte
mit dem Titel "Watch Expressions" / "Watch-Ausdrücke" im gleichen Fenster:
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:
- Nr: Zeilennummer der Tabelle = Kanalnummer für das Plot-Fenster
- Name: Frei wählbarer (aber möglichst 'aussagefähiger') Kanalname
- Expression / Ausdruck: Numerischer Ausdruck für den Interpreter.
Das zyklisch berechnete Ergebnis wird numerisch in der Spalte
'Current Value', aber auch graphisch im Plot-Fenster dargestellt.
- Scale min: Anfang des Skalenbereiches für die Anzeige im Plot-Fenster,
d.h. niedrigster im Plot-Fenster darzustellender Wert.
- Scale max: Ende des Skalenbereiches für die Anzeige im Plot-Fenster,
d.h. höchster im Plot-Fenster darzustellender Wert.
- Current Value: Sofern die periodische Auswertung nicht gestoppt ist,
wird hier der aktuelle Wert des berechneten Ausdrucks angezeigt.
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).
Mit Hilfe des im CAN-Tester integrierten Interpreters können nahezu beliebige
numerische Ausdrücke zum Berechnen der anzuzeigenden Werte definiert werden.
Die folgende Liste enthält einige übliche Beispiele, mit Links zu den
entsprechenden Kapiteln in der Beschreibung der Interpreter-Sprache.
- canrx(<Identifier>, <erstes Bit>, <Datentyp>)
- Isoliert ein Signal aus dem zuletzt empfangenen CAN-Telegramm
mit dem entsprechenden Message-Identifier.
Durch Multipikation mit einem geeigneten Faktor, und Addition
eines geeigneten Offsets kann das Ergebnis ("Rohwert") ggf.
noch in einen anwenderfreundlicheren 'physikalischen' Wert
konvertiert werden.
- can[index].nErrorFrames
- Liefert die Anzahl der seit dem letzten
"Counter-Reset" empfangenen
Error Frames auf dem angegebenen CAN-Kanal (mit Null-basiertem Index).
Diese Funktion steht nur bei geeigneten CAN-Interfaces (z.B. Kvaser)
zur Verfügung. Fehlt die Angabe von [index], wird der erste
aktive CAN-Kanal verwendet.
Unterhalb der Definitionstabelle können die wichtigsten Anzeigeparameter
eingestellt werden:
-
Update Interval (seconds)
Aktualisierungs-Intervall des Plot-Fensters in Sekunden.
Beispiel: 0.01 Sekunden = 10 Millisekunden -> die Grafik wird
alle 10 Millisekunden um ein Pixel nach links gescrollt,
und die neuesten Werte am rechten Rand des Fensters geplottet .
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).
Spektrumanalysator (im "Watch-Fenster")
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 .
Siehe auch:
-
Interpreterkommandos zum Parametrieren des
Scope-Fensters durch das Testprogramm (für automatisierte Tests,
u.s.w.)
-
Interpreterfunktion
sdo
zum Zugriff
auf ein abgesetztes Gerät per CANopen (SDO = Service Data Object)
Fehler- und Statusmeldungen
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
Zurück zum Seitenanfang
Das Text-Terminal-Fenster
Dieses Kapitel wurde in ein separates Dokument ausgelagert.
CANopen-Funktionalität
Der CAN-Tester ist als Testprogramm auf niedriger CAN-Bus-Telegramm-Ebene
konzipiert, mit einigen CANopen-Erweiterungen die für "hausinterne Tests" bei
Firma MKT verwendet werden. Möglich sind:
-
SDO-Scheibzugriffe mit 8,16,32 bit oder als "domain transfer" mit bis zu
80 Zeichen
-
SDO-Lesezugriffe mit 8,16,32 bit oder als "domain transfer" mit bis zu 80
Zeichen
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).
CANopen OD Browser / Scanner
Mit dem CANopen-OD-Browser kann das eigene oder ein 'fremdes'
CANopen-Object-Dictionary ("OD") untersucht werden.
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.
CANopen-EDS und DCF
Nach dem Auslesen eines OD's per SDO kann die so gewonnene
"CANopen-Konfiguration" (d.h. die Summe aller im CANopen-OD eines
Gerätes verfügbaren "Werte") in einer CANopen-konformen DCF-Datei
(device configuration file) abgelegt werden. Wählen Sie dazu im Fenster
des "Remote CANopen OD Browsers" die Funktion
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.
Auslesen der EDS-Datei per 'Domain Transfer' aus Objekt 0x1021
Bei neueren CANopen-Geräten von MKT Systemtechnik (z.B. der 'EA550'-Familie) kann die
komplette EDS-Datei (oder sogar eine DCF-Datei mit den 'aktuellen Werten') aus dem
Gerät selbst ausgelesen werden. Strenggenommen ist die EDS-Datei nicht, wie
der Name des Objektes "Stored EDS" vermuten lässt, im Gerät als Datei
abgelegt, sondern wird beim Auslesen durch die Firmware erst in einem 'CANopen-EDS-konformen'
Format erzeugt.
Der CAN-Tester unterstützt das Auslesen beliebiger Objekte (mit Datentyp 'domain',
was im CANopen-Fachjargon wohl 'eine große Datenmenge' bedeuten soll) wie folgt:
- Wird beim Aufruf der Funktion sdo.r( <ObjektIndex.Subindex> )
ein besonderes Objekt erkannt, welches beim Versuch des Auslesens mit einer
"großen Datenmenge" antwortet ("domain transfer" mit entsprechender Größe),
dann wird der komplette ausgelesene Inhalt nicht als Zeichenkette
an eine Interpreter-Variable zugewiesen (oder per
"print" ausgegeben), sondern als Datei gespeichert.
Als 'Rückgabewert' liefert sdo.r dann nicht die aus dem Objekt gelesene
Zeichenkette, sondern den Namen der Datei,
in der der Objekt-Inhalt (bei Objekt 0x1021 die EDS-Datei) gespeichert wurde.
Details dazu folgen im Kapitel Interpreterfunktionen
für den Zugriff auf das CANopen-OD per SDO
PDO-Mapping basierend auf den Informationen aus dem EDS-File ?
- Hinweis:
- Das grauenhaft komplizierte PDO-Mapping wird z.Z. vom CAN-Tester
nicht unterstützt. Der Grund liegt darin, dass für den
(CANopen-konformen) Schreibzugriff auf die PDO Mapping Parameter nicht einfach
der Reihe nach alle Subindizes beschrieben werden dürfen, sondern
zunächst der PDO "ungültig" gemacht werden muss, dann die Anzahl
gemappter Objekte auf Null gesetzt, anschließend die gemappten Objekte
in die passenden Subindizes geschrieben, danach die Anzahl gemappter Objekte
auf die tatsächlich vorhandene Anzahl gesetzt werden muss;
anschließend der PDO wieder "gültig" gemacht werden muss; ....
; und zu guter Letzt die Konfiguration dauerhaft abgespeichert und ein Node-Reset
ausgelöst werden muss (damit die neue Konfiguration verwendet wird).
Aus diesem Grund empfehlen wir für die Konfiguration der PDOs unbedingt
die Anschaffung eines geeigneten CANopen-Konfigurationstools (z.B. "CANopen
Configuration Manager" oder vergleichbare Produkte) .
CANopen LSS (Layer Setting Services)
Um Geräte ohne DIP-Schalter für Baudrate und Knotennummer ("Node-ID") im CANopen-Netzwerk zu finden,
und diesen ggf. automatisch einen Node-ID zuzuweisen oder/und eine neue CAN-Baudrate einzustellen,
enthält der CAN-Tester seit Februar 2024 nicht nur einen primitiven LSS-Slave, sondern auch
einen LSS-Master.
Da das LSS-"Fast Scan"-Protokoll leider keine Erkennung von bereits konfigurierten
LSS-Slaves (d.g. mit "gültiger Knotennummer"), führt der hier beschrieben Master zusätzlich
zum 'LSS Fast Scan' eine Suche nach bereits konfigurierten Slaves per NMT-"Reset Nodes"
(Broadcast an alle schon 'aktiven' Slaves durch. Slaves die bereits eine
per LSS (oder per DIP-Schalter) zugewiesene Node-ID haben, tauchen dabei in der
im folgenden Kapitel beschriebenen Ergbnis-Liste, mit dem bereits 'festen' Node-ID auf.
- Hinweis zu CANopen-Geräten von MKT Systemtechnik mit LSS und DIP-Schalter
zum Einstellen der Knotennummer:
- Module mit DIP-Schalter können nur dann per LSS umkonfiguriert werden,
wenn am DIP-Schalter die Kotennummer auf 'Null' eingestellt ist.
Mit per DIP-Schalter "fest eingestelltem" Node-ID (1..127 am DIP- bzw. Hex-Codier-Schalter)
weist das Modul jeden Versuch, ihm per LSS (DS305: "Configure node-ID protocol")
einen davon abweichenden ID zuzuweisen, mit dem LSS-Error-Code 1 = "Node-ID out of range" ab.
Ähnliches gilt für die möglicherweise per DIP-Schalter und per LSS
einstellbare CAN-Baudrate (DS305: "Configure bit timing parameters protocl"):
Auch hier sollte der DIP- bzw. HEX-Schalter für die Baudrate auf Null gesetzt
werden, so daß dem Systemintegrator 'vor Ort' auf den ersten Blick klar ist,
dass das entsprechende Modul nicht per DIP-Schalter, sondern per LSS konfiguriert wurde.
Details zum erschreckend komplexen Thema 'CANopen LSS' finden Sie in
CiA DS305 (aka 'CiA 305'),
"Layer setting services (LSS)".
CANopen-LSS-Master im CAN-Tester
Der in diesem Kapitel beschriebene LSS-Master kann aus dem Hauptmenü des CAN-Testers
unter 'Tools'..'CANopen LSS Master' geöffnet werden.

Fenster des im CAN-Tester integrierten LSS-Masters
mit zwei erkannten CANopen-Slaves.
Ob bei per LSS-Master alle noch nicht konfigurierten Slaves mit einer neuen
Knotennummer (Node-ID), oder / und mit einer neuen CAN-Baudrate parametriert werden
sollen, wird vor dem Starten des Masters im oberen Teil des Fensters eingestellt.
Der 'Classic Scan' wurde zwar ansatzweise implementiert, wurde aber mangels geeigneter Testkandidaten
(und in Anbetracht der extrem geringen Geschwindigkeit beim 'Scannen', d.h.
der Suche nach noch nicht konfigurierten LSS-Slaves) nie getestet. Da
moderne CANopen-Geräte mit LSS-Support grundsätzlich auch das 'Fast Scan'-Protokoll
unterstützen sollten, reicht der voreingestellte 'LSS Fast Scan' im Allgemeinen aus.
Bei einem erfolgreichen Suchlauf werden die vom LSS-Master erkannten noch nicht konfigurierten
Slaves, und dabei mit einer neuen Knotennummer versorgten Slaves im unteren Teil des Fensters aufgelistet (*).
Die Anzeige von CANopen Node ID erfolgt aus Platzgründen hexadezimal ohne Hex-Prefix (0x01 .. 0x7F).
Die Bedeutung der Spalten "Vendor"(-ID), "Product Code", "Revision Number", und "Serial Number"
entnehmen Sie im Bedarfsfall bitte der Spezifikation (CiA DS305). Auch diese jeweils 32 Bit langen
Bestandteile der 128-Bit "LSS-Adresse" werden hexadezimal aufgelistet.
- Tipp zum CANopen-"Vendor-ID":
- Der in der Liste hexadezimal angezeigten 'Vendor-ID' kann auf der Webseite
https://www.can-cia.org/services/canopen-vendor-id/
in das Feld 'Search' eingegeben werden. Liegt ein gültiger, und bei CiA registrierter Vendor-ID vor,
so wird z.B. als Ergebnis der Suche nach 004D4B54 folgendes angezeigt:
Vendor-ID: 004D4B54
Registered Name: MKT-Systemtechnik GmbH & Co. KG
(*) Hinweis zu bereits konfigurierten CANopen-Knoten:
Da bereits konfigurierte CANopen-Knoten nicht mehr am 'Fast Scan'-Zyklus teilnehmen,
können diesen Geräten keine neuen Node-IDs mehr zugewiesen werden. Um Node-ID Kollisionen
bei der Vergabe neuer (weiterer) Node-IDs zu vermeiden, sollte die Option
☑ also find ALREADY CONFIGURED slaves (via NMT)
verwendet werden. So werden bei der Vergabe neuer Knotennummern auch z.B. per DIP-Schalter konfigurierte Module
berücksichtigt (die möglicherweise nicht über einen LSS-Slave in der Gerätefirmware verfügen,
oder sich bei 'fast scan' nicht melden, weil sie dies gemäß CiA DS305 nicht dürfen).
Nach Beendung des 'Suchlaufs' werden im Fenster des 'LSS Masters' eine Liste mit allen erkannten
CANopen-Slaves angezeigt. Mit der Option "also find ALREADY CONFIGURED slaves.." sind in dieser Liste auch
Knoten enthalten, die bereits vor dem LSS-Suchlauf konfiguriert waren (was für den Anwender i.A. keine
Rolle spielt). Per Mausklick in die Liste mit 'Node-ID, Vendor-ID, Product Code, Revision und Serial Number'
kann nun ein bestimmtes Gerät ausgewählt werden. Mit dem nun verfügbaren "Continue"-Button wird
die Knotennummer (Node-ID) des selektierten Eintrags vom CAN-Tester übernommen, das Fenster vom "LSS Master"
wird geschlossen, und stattdessem öffnet sich das Fenster zum Auslesen und Anzeigen des
Objektverzeichnisses des selektierten Knotens.
Interpreterfunktionen zum Zugriff auf Objekte im CANopen-OD per SDO
-
Syntax:
-
sdo.r( <ObjektIndex.Subindex> [,Datentyp[,Default]] )
-
Beispiele:
-
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 .
-
BOOLEAN, BOOL
-
INTEGER8, SIGNED8, I8
-
INTEGER16, SIGNED16, I16
-
INTEGER32,SIGNED32, LONG, I32
-
UNSIGNED8, U8, BYTE
-
UNSIGNED16, U16, WORD
-
UNSIDNED32, U32, DWORD
-
FLOAT32, F32, FLOAT
-
VIS_STRING, STRING, STR
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):
- Befehlszeile aus einem Test-Script:
- print sdo.r(0x1021.0,str) ; Try to read a 'stored EDS' from this device
- Antwort vom CAN-Tester: Hier kein "Wert" sondern der Name der vom CAN-Tester erzeugten Datei 'mit dem Wert':
- C:\MKT\CAN_Tester_for_Windows\Objects\Readout_Obj1021_00.eds
Schreibzugriff per SDO:
-
Syntax:
-
sdo.w( <ObjektIndex.Subindex> , <Datentyp> , < zu schreibender
Wert > )
-
Beispiel:
-
sdo.w (0x1017.0,U16, 100 ) ; set heartbeat producer time to 100
milliseconds
-
Siehe auch : Übersicht aller Interpreterfunktionen und -Kommandos des CAN-Testers
CANopen-Datentypen
Die folgenden elementare Datentypen waren in CiA DS301 V4.0 auf Seite 9-58
definiert.
Hinweis: Nicht alle dieser Typen werden vom CAN-Tester unterstützt !
Der "Index" eines Datentyps bezieht sich auf das Object Dictionary eines
jeden CANopen-Knotens (dient nur zu Definitionszwecken, unter diesen Indizes
werden Sie bei den meisten CANopen-Knoten nichts auslesen
können !)
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:
SDO-Fehlercodes
<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
Kommando-Interpreter (für Test-Scripte)
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.). 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):
-
Variablen-Zuweisungen, z.B:
A := 10*I;
CommPar := 0x1800; // OD-index for first TPDO communication parameter
Variablen müssen nicht deklariert werden - sie "entstehen" durch eine Zuweisung.
Eine Variable kann auch auch ein Array enthalten.
Der Array-Index (oder auch 'Schlüssel') muss dann in eckigen Klammern direkt nach dem Variablennamen folgen, z.B.:
PdoCobId[CommPar] := sdo.r( (CommPar).01, U32, 0);
Als Array-Index dürfen nur Ganzzahlen verwendet werden (Wertebereich +/- 2^31).
Als Zuweisungsoperator sollte nur ':=' verwendet werden (wie in Pascal). Ein einfaches
Gleichheitszeichen wird lediglich aus Kompatibilitätsgründen noch akzeptiert.
Auf der rechten Seite des Zuweisungsoperators kann nicht nur eine einfache Konstante,
sondern ein (nahezu) beliebiger numerischer Ausdruck folgen.
-
Verzweigungen und
Schleifen:
goto
gosub ... return
repeat ... until
while ... endwhile
if <Bedingung> <Anweisung> // einzeiliges "if"
if ( Bedingung ) // mehrzeiliges "if", endet beim "endif".
<Anweisungen>...
else
<Anweisungen>...
endif
Die nach if folgenden Anweisungen werden nur ausgefuehrt, wenn <Bedingung> einen von Null verschiedenen Wert liefert.
In der mehrzeiligen Form werden die nach dem else folgenden Anweisungen ausgeführt, wenn die Bedingung nicht erfüllt ist.
-
Ausgabe-Anweisungen:
print "<Format-String>", <numerischer Parameter> ...
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' :
Wird beim Anklichen eines der unter 'Run from / scroll to Label' aufgelisteten Einträge
die 'Strg' Taste (englisch: Control) gedrückt gehalten,
dann scrollt der CAN-Tester zur entsprechenden Programmzeile,
statt das Programm (CAN-Tester-Script) an der Stelle zu starten.
Numerische Ausdrücke
Auf der rechten Seite eines Zuweisungsoperators, aber auch in der Parameterliste
beim Aufruf von Prozeduren oder Funktionen können (nahezu) beliebig komplexe
numerische Ausdrücke folgen. Eine Begrenzung ist die maximale Zeilenlänge
im Kommando-Programm bzw. Text-Editor, mit maximal 255 Zeichen pro Zeile.
Für die Auswertung numerischer Aufdrücke mit dem Interpreter des CAN-Testers gilt:
- Punkt- vor Strichrechnung, d.h. Multiplikation (*) und Division (/) vor Addition (+) und Subtraktion (-)
- Vergleichsoperatoren (==, !=, <, >, <=, >=) stehen auf der gleichen Prioritätsstufe wie Addition und Subtraktion
- Bitweises und boolesches ODER (|, ||) stehen ebenfalls auf der Prioritätsstufe von Addition und Subtraktion
- Bitweises EXKLUSIV-ODER (^) steht auch auf der Prioritätsstufe von Addition und Subtraktion
- Bitweises und boolesches UND (&, &&) stehen dagegen auf der Prioritätsstufe von Multiplikation und Division
- Der Modulo-Operator (%) steht auch auf der Prioritätsstufe von Multiplikation und Division (!)
- Das aus "C" bekannte arithmetische If-Then-Else ( Bedingung ? Wert 1 : Wert 2 )
steht im Interpreter ebenfalls auf der Prioritätsstufe von Multiplikation und Division,
denn der Interpreter kennt im Gegensatz zu "C" nur zwei Operator-Prioritäten.
- Im Zweifelsfall daher lieber ein Klammernpaar zuviel als zuwenig !
Beispiel: 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').
Der 'größte' bei der Auswertung numerischer Ausdrücke intern verwendete Datentyp ist 'double' (64-Bit-Gleitkommazahl mit
ausreichend großer Mantisse, um auch 32-Bit-Integer-Werte 'verlustfrei' speichern zu können).
Funktionen und Kommandos, die statt Gleitkomma z.B. BYTE- oder Integer-Werte erwarten,
konvertieren den Eingangswert automatisch. Darüberhinaus können wie im folgenden Beispiel
Gleitkomma-Werte mit der Funktion 'floor' abgerundet werden:
NumBytesMapped := floor( (NumBitsMapped+7)/8 );
Senden von CAN-Telegrammen aus dem Kommandoprogramm
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:
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.
-
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-Gleitkomma-Format' der EXPONENT im ersten Byte (entsprechend 'MSB');
Offizielle Details (von GM) waren bei der Erstellung dieser Beschreibung (2013-12-09) nicht bekannt.
Eine explizite Angabe der Länge des Datenfeldes ist nur in den seltensten Fällen nötig,
denn der Interpreter zählt die zu senden Datenbytes. Um für spezielle Anwendungen
(Beispiel: CANopen-PDO-Senden, mit Acht-Byte-Datenfeld im Script obwohl der momentan
getestete CANopen-Knoten weniger als acht Bytes erwartet) das Datenfeld 'abzuschneiden',
kann zwischen CAN-Message-ID und CAN-Datenfeld eine Länge (Anzahl als 'DLC' zu
sendender Datenbytes) in eckigen Klammern spezifiziert werden. Beispiel (aus dem Test-Script 'EaDIO8Text',
welches für ein Bus-Koppler-Modul bis zu 64 digitale Ausgänge per PDO ansteuern konnte):
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;
- Hinweis zum oben gezeigten Code-Fragment:
- Diese auf den ersten Blick umständliche Übergabe der Länge des zu sendenden
Datenfeldes wurde so implementiert, weil sich in CANopen DS 301 (aka "Cia 301") V4.2.0
auf Seite 135 der folgende, etwas mehrdeutige Hinweis zum komplexen Thema "RPDO Mapping" fand:
> If the CANopen device receives a PDO that is having more data bytes
> than the number of mapped data bytes is (length), then the CANopen device
> shall use the first data bytes up to the length and may be initiate (??)
> the EMCY write service, if supported.
Einerseits soll der Empfänger 'einfach' nur die Bytes im PDO auswerten,
die in seiner RPDO-Mapping-Tabelle existieren,
andererseits (mit "may be" wie "maybe" = "vielleicht" ?)
könnte der Empfänger ein 'Emergency'-Telegramm senden
(z.B. mit "EMCY Error Code" = 0x8220 = "PDO length exceeded", zu finden
in DS 301 V4.2.0 auf Seite 71).
Das hier nicht gezeigte (aber in EaDIO8Test.cts enthaltene) Unterprogramm
'GetSizeOfPDO' versucht durch Aufaddieren der Längen aller in den RPDO gemappten
Objekte die korrekte Länge des Datenfelds zu ermitteln. Das Ergebnis wird
vom Unterprogramm in der Script-Variablen 'NumBytesMapped' abgelegt. Diese wird hier
in eckigen Klammern (wie eine Byte-Array-Größe) an den Interpreter
des CAN-Testers übergeben.
Befehlsübersicht
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 mindestens einmal durchlaufenen Wiederholschleife,
mit dem Test der Abbruchbedingung am Ende der Schleife (per 'until').
until
<Abbruchbedingung>
- Sprung zum vorhergehenden
repeat
, wenn die <Abbruchbedingung> nicht erfüllt ist.
Die Bedingung ist z.B. ein numerischer Ausdruck mit einem Vergleich.
while
<Wiederholbedingung>
- Kennzeichnet den Anfang einer eventuell nie durchlaufenen Wiederholschleife,
mit dem Test der Wiederholbedingung am Anfang der Schleife.
endwhile
- Ende einer mit while begonnenen Schleife.
Springt in die entsprechende Zeile (mit dem 'while'), in der die Wiederholbedingung erneut getestet wird.
Ist die Wiederholbedingung nicht erfüllt (d.h. der numerische Ausdruck liefert den Wert Null = FALSE),
wird das Programm in der nach dem 'endwhile' folgenden Zeile fortgesetzt.
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 auch: 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 CAN-Tester-Applikation
"EaDIO8Test.cvt" (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).
-
SetButton( <ButtonNr>, <Caption>, <OnClick> )
-
Zeigt einen "Button" (graphische Schaltfläche) im klassischen Windows-Stil
am unteren Rand des vorher per OpenWindow
geöffneten Fensters an.
Parameter:
ButtonNr : Bei 1 (Eins) beginnende Zählung, "von links nach rechts".
Anhand der Button-Nummer werden die Schaltflächen von links nach rechts
automatisch an der Unterkante des Fensters angeordnet.
Eine 'pixelgenaue' Positionierung ist nicht vorgesehen.
Caption : Beschriftung, bzw. Text in der Schaltfläche.
Durch ein vorangestelltes '&' (Ampersand) wird der
danach folgende Buchstabe zum 'Hotkey'.
OnClick : Beim Betätigen der Schaltfläche auszuführender Befehl, z.B. goto.
Beispiel aus der Applikation 'EaDIO8Test.cts':
SetButton( 1,"<< &Zurück", goto DigIoTest );
SetButton( 2,"&Beenden", goto Beenden );
SetButton( 3,"&Weiter >>", goto AnalogIoTest);
-
SetValueScroller( <ScrollerNr>, <Variable>, <MinValue>, <MaxValue> [, <OnScroll>] )
-
Zeigt einen "Werte-Scroller" (graphisches Element mit 'Schieber')
am unteren Rand des vorher per OpenWindow
geöffneten Fensters an.
Ähnlich wie bei SetButton() werden auch 'Scroller' automatisch an der Unterkante des Fensters angeordnet.
Eine 'pixelgenaue' Positionierung ist auch hier nicht vorgesehen.
Werden im Fenster sowohl "Buttons" als auch "Scroller" angezeigt,
dann erscheinen die Werte-Scroller oberhalb der Zeile mit den Buttons.
Parameter:
ScrollerNr : Bei 1 (Eins) beginnende Zählung, "von oben nach unten".
Variable : Die mit diesem Scroller verbundene Variable.
MinValue : Wert für den Skalenanfang (Minimum des Scrollbereiches).
MaxValue : Wert für das Skalenende (Maximum des Scrollbereiches).
OnScroll (optional) : Beim Betätigen der Schaltfläche auszuführender Befehl, z.B. gosub <Label>.
Beispiel aus der Applikation 'EaDIO8Test.cts' (siehe auch: Screenshot eines benutzerdefinierten Fensters):
SetValueScroller( 1, PWM1Freq, 0, 10000, gosub UpdatePWM1FromScroller );
SetValueScroller( 2, PWM1Duty, 0, 100.0, gosub UpdatePWM1FromScroller );
-
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 kleinen 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)
-
Erzeugte (unter alten Windows-Versionen) diverse Töne im PC-Speaker. 'frequenz' war die Startfrequenz
in Hz, 'dauer' die Dauer des Tons in Millisekunden, und 'modulation' die
optionale Sweep-Rate in Hz/50ms . Seit Windows 7/8 nicht mehr funktionsfähig.
-
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
- floor( <x> )
- Rundet den als Argument (x) übergebenen Gleitkommawert auf den nächstkleineren Wert ab.
Entspricht der gleichnamigen Funktion in "C" : double floor(double x) .
Hinweis: Der Rückgabewert ist, wie in "C", eine 64-Bit-Gleitkommazahl -
kein Integer-Wert !
Beispiele: floor( 1.9 ) = 1.0; floor( -1.9 ) = -2.0 .
Siehe auch: int(), Numerische Ausdrücke.
- int( <x> )
- Konvertiert das Argument (x) in eine 32-Bit-Integer-Zahl.
Entspricht dem 'cast nach Integer' in "C".
Hinweis: Im Gegensatz zu floor() ist der Rückgabewert ein 32-Bit-Integer.
Wie der (int)-cast in "C" rundet int(x) -im Gegensatz zu floor(x)- nicht in Richtung
'Minus Unendlich' ab, sondern in Richtung Null. Beispiele:
int( 1.9 ) = 1; int( -1.9 ) = -1 (!).
Siehe auch: floor(), Numerische Ausdrücke.
- 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 dem Programmstart (?) vergangen sind.
CAN-Senden und Empfangen (Decodieren einzelner CAN-Signale)
-
canrx
(<Identifier>, <erstes Bit>,
<Datentyp>)
-
Isoliert ein "Signal" (Integer- oder Gleitkommawert) 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:
-
Auch Kommandozeilen die *keine* CAN-Sende-Befehle enthalten, werden mit dieser
Intervallzeit abgearbeitet. D.h., mit tx_interval=0.1 benötigt der
Interpreter ziemlich genau 2 Sekunden zum Abarbeiten eines 20 Zeilen langen
Programms.
-
Für TX-Intervalle unter 5e-3 (5 Millisekunden) sollte die Anzeige
empfangener und gesendeter Telegramme (RX+TX-Fenster) gestoppt werden.
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.
-
print (Kommando)
-
Syntax
-
print("<Format-String>", <Parameter>.. )
-
Funktion
-
Druckt Texte und Zahlen ins Meldungsfenster
oder (wenn vorhanden) in das per OpenWindow geöffnete Fenster.
Im Normalfall wird nach 'print' eine neue Zeile begonnen.
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:
-
"%ld" Dezimalzahl beliebiger Länge
-
"%5.5ld" Dezimalzahl mit genau 5 Ziffern
-
"%lX" Hex-Zahl beliebiger Länge
-
"%8b" Binärzahl mit 8 Ziffern (kein C-Standard !)
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:
- Ein Komma in der Parameterliste führt zur Ausgabe eines Leerzeichens
- Ein Semikolon emittiert kein Leerzeichen (bei der Ausgabe)
Der vom oben gezeigten Beispiel ausgegebene Text lautet daher:
Es ist jetzt 23:59:59 Uhr .
|________|___ per Komma ausgegebene Leerzeichen
-
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:
-
OpenWindow( "E/A-IP65-Test Vorbereitung",w=320,h=100)
-
CloseWindow()
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
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).
Siehe auch (Befehle für das per OpenWindow() erzeugte Fenster):
- print : "Druckt" bei geöffnetem Fenster in selbiges, statt in das Meldungsfenster
- MoveTo : Pixelgenaues Positionieren der nächsten Ausgabe
- SetButton : Anzeige eines Buttons (Schaltfläche mit Beschriftung)
- SetValueScroller : Anzeige eines 'Schiebereglers'
- SetFont : Wählt den Zeichensatz, Zeichengröße und Textattribute
- ClearScreen(0) : Löscht den in das Fenster gedruckten Text
-
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 .
-
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.
canrx (Kommando zum 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.
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):
-
wcan.id liefert den CAN-Identifier
-
wcan.len liefert die Anzahl empfangener Datenbytes (0 bis 8)
-
wcan.dat( <erstes Datenbit>, <Datentyp>)
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)
Verfügbare Befehle:
-
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)
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.
Funktionen für die CAN-Bus-Fehlerstatistik
- can[index].nErrorFrames
- Liefert die Anzahl der seit dem letzten
"Counter-Reset"
empfangenen Error Frames auf dem angegebenen CAN-Kanal (mit Null-basiertem Index).
Diese Funktion steht nur bei geeigneten CAN-Interfaces (z.B. Kvaser)
zur Verfügung. Fehlt die Angabe von [index], wird der erste
aktive CAN-Kanal verwendet.
- can[index].nRxFrames
- Liefert die Anzahl der seit dem letzten
"Counter-Reset"
vom CAN-Tester auf dem angegebenen Kanal (mit Null-basiertem Index)
empfangenen CAN- und CAN-FD-Telegramme ("Messages").
Fehlt die Angabe von [index], wird der erste aktive CAN-Kanal verwendet.
Die Summe der auf allen Kanälen empfangenen CAN-Messages
wird auch im Hauptfenster in der Statuszeile
oberhalb der Empfangsliste angezeigt.
- can[index].nTxFrames
- Liefert die Anzahl der seit dem letzten
"Counter-Reset"
per CAN-Tester gesendeten CAN / CAN-FD-Telegramme.
Die Summe aller gesendeten Telegramme
wird auch im Hauptfenster in der Statuszeile
oberhalb der Sende-Liste angezeigt.
- can.testDuration_sec
- Liefert die aktuelle Laufzeit des CAN-Tests in Sekunden, seit dem letzten
"Counter-Reset"
(d.h. Rücksetzen der Message-, Error-Frame-, und sonstiger Fehlerzähler).
Die Applikation (Test-Script) kann damit z.B. einen Fehlerzähler
in eine durchschnittliche Fehlerrate (Frequenz) umrechnen.
CANopen-spezifische Kommandos
-
obj (alias obd)
-
Diverse Befehle zum Zugriff auf das eigene (lokale)
CANopen-Objekt-Directory.
-
sdo_r, sdo_w
-
Diverse Befehle zum Zugriff auf ein entferntes (remote) CANopen-Objekt-Directory
per SDO ("Service Data Object").
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 :
-
BOOL
Ein-Bit-Variable: 0=FALSE, 1=TRUE
-
INTEGER8, I8
8-Bit Integer mit Vorzeichen
-
INTEGER16, I16
16-Bit Integer mit Vorzeichen
-
INTEGER32, I32, LONG
32-Bit Integer mit Vorzeichen
-
UNSIGNED8, U8, BYTE
8-Bit Integer ohne Vorzeichen ("Byte")
-
UNSIGNED16, U16, WORD
16-Bit Integer ohne Vorzeichen ("Word")
-
UNSIGNED32, U32, DWORD
32-Bit Integer ohne Vorzeichen ("doubleword")
-
FLOAT32, F32
32-Bit Gleitkomma (aka Fliesskomma, floating point) nach CANopen (IEEE)
-
VIS_STRING, STRING, STR
Nullterminierter ASCII- (oder ANSII?-) String. Nur von wenigen Funktionen
unterstützt, z.B. SDO-Zugriffsfunktionen
-
S16LE alias M16
16-Bit Signed Integer im Little Endian (ala "Motorola")-Format (most significant byte first)
-
S32LE alias M32
32-Bit Signed Integer im Little Endian (ala "Motorola")-Format
-
U16LE
16-Bit UNsigned Integer im Little Endian (ala "Motorola")-Format
-
U32LE
32-Bit UNsigned Integer im Little Endian (ala "Motorola")-Format
Siehe auch:
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.
Links
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
Nutzungsbedingungen, Haftungsausschluß
.. sind in der 'Index'-Datei unter Nutzungsbedingungen, Haftungsausschluß zu finden.
Neueste Änderung zuerst ! Datum im ISO 8601-Format : YYYY-MM-DD .
- 2024-04-18, V1.7x:
-
Neue graphische Steuerelemente im benutzerdefinierten Fenster, z.B. Schieberegler.
- 2020-01-24, V1.69:
-
Anzeige des momentan verwendeten CAN-Bit-Timings (besonders wichtig für CAN FD).
- 2019-12-16, V1.68:
-
Ersatz von Borland's "TIniFile" durch "TMemIniFile", um die Konfigurationsdatei
nicht mehr im Windows-Verzeichnis ablegen zu müssen.
- 2019-08-27, V1.67:
-
Support für CAN FD, bislang allerdings nur für CAN Interfaces von Kvaser.
- 2017-09-25, V1.66:
-
Inspektion von Variablenwerten durch 'Überfahren' mit der Maus,
Start des Test-Scripts auch per 'Run from Label' / 'Ab LABEL-Position fortsetzen',
Firmware-Update per CANopen (SDO)
- 2014-02-05, V1.56:
-
Diverse Änderungen beim Aufzeichnen von CAN-Messages als Vector-ASCII-Logfile.
Da aus nicht nachvollziehbaren Gründen die Zeitmarken (in CANape) nicht korrekt
wiedergegeben wurden, wird nun zusätzlich zum Datum im Datei-Header ein
(und eigentlich unnötiger) 'Begin Triggerblock' / 'End Triggerblock' in der .asc-Datei
geschrieben.
- 2013-06-14, V1.53:
-
Das Firmware-Update-Utility vergleicht nun die Software-Artikel-Nummer des Bootloaders
im zu programmierenden Gerät mit dem von der zu ladenden Firmware erwarteten Wert.
Stimmt die SW-Artikel-Nummer des Bootloaders nicht überein, wird (i.A.) der Firmware-Update verweigert.
Dadurch soll sichergestellt werden, dass der Anwender nicht eine 'falsche'
Firmware in das momentan angeschlossene Gerät lädt. Bei Geräten mit
LPC1788 hat dies nämlich den unangenehmen Effekt,
dass das Gerät danach zur Reparatur (Flashen per FlashMagic) an den Hersteller
eingeschickt werden muss.
- 2007-04-12, V1.34:
-
Firmware-Update-Utility für ARM7 (NXP LPC2xxx) aufgebohrt, u.A. auch
die Korrektur der Prüfsumme in der ARM7-Vektor-Tabelle, denn sonst startet
der IAP-Bootloader die Applikation nicht ! Details
hier .
-
2006-11-14, V1.33:
-
Dokumentation angepasst. Zahlreiche neue Funktionen im CAN-Tester, z.B.
CAN-Text-Terminal zum Debuggen, Kommentierung von CANopen-Telegrammen,
OD-Scanner, etc.
-
2005-04-07, V1.20:
-
Tool zum "Firmware-Update via CAN" eingebaut.
-
2004-09-09, V1.12:
-
Anzahl der im Tester eingebauten SDO-SERVER(!) auf 8 erhöht, um "mehr
CANopen-Slaves" zu simulieren.
-
2003-07-30, V1.07:
-
Baudrate 666.666 kBit/sec für PCAN-API2 implementiert. Wird in Auswahllisten
als "667 kBit/sec" angezeigt.
Zurück zum Seitenbeginn
- Problem:
- Vom Anwender erstellte Test-Scripte können nicht im dafür vorgesehenen Unterverzeichnis des CAN-Testers
abgespeichert werden.
- Mutmaßliche Ursache:
- Windows erlaubt keine Schreibzugriffe, wenn das Programm z.B. unter "Programme (x86)" installiert wurde.
- Abhilfe:
- Installieren Sie das Programm dort, wo Dateien in Unterverzeichnissen für den Anwender
schreibbar sind. Aus diesem Grund war die Voreinstellung des Installers auch
C:\MKT\CAN_Tester_for_Windows
statt z.B. unter
C:\Program Files (x86), C:\Programme, etc, etc, etc, etc.
Alternativ: Fragen Sie Ihren System-Administrator, in welchem Verzeichnis
Ihre 'Anwenderdaten' (passend zur verwendeten Windows-Version) abgespeichert werden
sollen (z.B. C:\Users\???\...\???\...),
und passen Sie im CAN-Tester die Einstellungen unter Verzeichnisse
entsprechend an. Ist das Programm aufgrund paranoider Sicherheitseinstellungen nicht berechtigt,
seine eigene Konfiguration in seinem eigenen Installationsverzeichnis abzuspeichern:
Der CAN-Tester speichert seine eigene Konfiguration nicht in der Windows-Registry,
sondern im Interesse einer 'portablen Applikation' in seinem eigenen Verzeichnis
unter dem Namen "MKT_CanTester.ini" ab. Details dazu im Kapitel Installation.
- Problem:
- PCAN-USB-Treiber wurde zwar installiert, MKT's CAN-Tester funktioniert aber nicht damit.
- Ursache:
- Bei der Installation des Peak-Treibers fehlt (meistens) die Interface-DLL,
z.B. PCAN_USB.DLL für die Kommunikation mit dem PCAN-USB-Dongle.
In dem Fall erhalten Sie vom CAN-Tester im Meldungsfenster z.B. die folgende Anzeige:
UCAN_Init: PCAN-Dongle LIGHT driver (PCAN_USB.DLL) not loaded !
- Abhilfe:
- Die für Ihre CAN-Hardware, und für Ihr Betriebssystem passende
Interface-DLL finden Sie hoffentlich auf der Peak-Webseite.
Kopieren Sie diese (abhängig von der Windows-Version) in das Windows-System-Verzeichnis,
oder (wesentlich einfacher) in das Unterverzeichnis, in dem der CAN-Tester installiert wurde.
Siehe auch: Hinweise zur Installation eines CAN-Interfaces unter Windows !
Zurück zum
Seitenbeginn
Zuletzt bearbeitet: 2024-02-07 (YYYY-MM-DD), Wolfgang Büscher, MKT Systemtechnik.