Programmiertool für CAN-Displays
Stand: 2024-12-06 (YYYY-MM-DD)
Online verfügbar unter www.mkt-sys.de/MKT-CD/upt/help/progt_49.htm.
Inhalt
-
Programmiertool für CAN-Displays
- Einleitung
- Installation
- Das Hauptfenster
-
LCD-Simulator und geräteabhängige LCD-Auswahl
- Geräteauswahl und LCD-Einstellungen (Auflösung, Farbmodell, Quer/Hochformat)
- Kommunikations-Kanäle
- SDO-Kanäle
- PDO-Kanäle
- Generische CAN-Signal-Kanäle ("CANdb")
Kanal für LIN-Bus-Signale(wird nicht mehr aktiv unterstützt)Kanal für openABK-Variablen und -Mailboxen (Client-Seite)(wird nicht mehr aktiv unterstützt)
- Applikations-Variablen
- Eigenschaften von Anzeige-Variablen
- Auffinden aller Referenzen (Bezüge) einer Variable
- Variablen mit Verknüpfung per CAN-Datenbank (*.dbc, *.arxml)
- Variablen mit Anbindung an CANopen
- Variablen mit Anbindung an 'openABK'
- Data-Breakpoints (Überwachung bestimmter Schreibzugriffe auf eine bestimmte Variable)
- Einstellungen (Registerkarte und Dialoge im Programmiertool)
- Einstellungen im rechten Teil der Registerkarte 'Einstellungen'
- Einstellungen im linken Teil der Registerkarte 'Einstellungen'
- Erweiterte CAN-Bus Parameter (einstellbar per Dialog)
- Allgemeine Terminal-Optionen
- Optionales Setup (früher nur per System-Setup am Gerät konfigurierbar)
- Kontrolle der unterstützten Grafikfunktionen (supported graphic functions)
- Einfügen einer Datei-Beschreibung
- Simulation der Speicherkarte (im PC, als Ersatz für die Speicherkarte im 'echten Gerät')
- Kontrolle der in einer Applikation verwendeten 'externen' Dateien
- Einstellungen im rechten Teil der Registerkarte 'Einstellungen'
- Anlegen eines Text-Arrays (veraltet, für Geräte ohne Script)
- Definition von Anzeigeseiten (Referenz)
- Einleitung zu den programmierbaren Anzeigeseiten mit
Übersicht der verfügbaren Anzeige-Elemente - Kopf einer Seitendefinition
- Manuelle Definition von Anzeige-Elementen
- Eigenschaften einer Anzeige-Zeile
- Der Format-String mit Backslash-Sequenzen und HTML-ähnlichen 'tags'
- Editierfelder (auf programmierten Anzeigeseiten)
- Buttons (graphische Schaltflächen, z.T. mit Touch-Funktion)
- Tabellen (als graphische Anzeige- und Bedienelemente)
- Icons (Bitmap-Grafiken)
- Verwendung von Anzeige-Zeilen als Menü
- Balkendiagramme (optional)
- Y(t)- und X/Y-Diagramme (optional)
- Mehrzeilige Text-Panels (für die Script-Sprache)
- Grafik-Panels (zur Anzeige von per Script erzeugten Canvas-Grafiken)
- Einfügen anderer graphischer Elemente auf einer Anzeigeseite
- Überlappende und bewegte Grafik
- Touchscreen-Unterstützung (für bestimmte Terminals)
- Mehrsprachige Applikationen (und deren Realisierung)
- Einleitung zu den programmierbaren Anzeigeseiten mit
-
Der "einfache" Editor für Anzeigeseiten
- Die Toolbar des graphischen Seiten-Editors
- Dialog für alphanumerische Anzeigeelemente
- Einfügen und Bearbeiten von Polygonen
- Einfügen eines Zeigerinstruments (Analog-Instrument)
-
Übersicht Event Definitionen
- Das Event-Definitions-Fenster
- Die Event-Definitions-Sprache
- Globale und Lokale Events
- Global Event Catalog
- Eine Alternative zu 'Events' : Die Script-Sprache (nur für Geräte mit 32-bit CPU)
- Assistenten
- Assistent zum Erstellen einfacher Anwendungen
- Dialog zur Auswahl von Variablen auf einer Anzeigeseite
- Dialog zum 'Verlinken' von Menüs
- Assistent 'Alle Seiten prüfen und korrigieren'
- Katalog zur Auswahl von 'globalen' Event-Definitionen (veraltet)
-
Anzeige-Seiten-Übersicht ("all pages")
-
Importieren von Bildern (Symbole, Bitmaps, Icons)
- Reservieren von Speicher für Icons (und andere Spezialfunktionen)
- Flexible Speicheraufteilung
- Ermitteln des Flash-Speicher-Bedarfs im Zielsystem
- Benutzerdefinierte Zeichensätze
- Debugging
- Watch-Fenster
- Fenster zum Testen von Kommandos
- Abspielen von CAN-Logfiles für den Display-Simulator (CAN Logfile Player)
- CAN Message Generator / Bus Simulator
- Wireshark-kompatible 'Packet Capture'-Funktion
- CANopen-Konfiguration
- CANopen SYNC - Konfiguration
- CANopen NMT - Konfiguration
- Geräte mit 'CANopen V4' (dies sind die meisten Terminals mit 32-Bit CPU)
- Das CANopen Object Dictionary (OD)
- PDO-Mapping per Programmiertool (nur für Geräte mit CANopen V4)
- EDS-Dateien (electronic device specification)
- EDS/DCF-Generator zur Übernahme der CANopen-Konfiguration in SPS-Programme (z.B. CoDeSys)
- Übertragung der Applikation ins das Zielsystem
- Übertragen der Applikation per Speicherkarte
- Übertragung der Applikation per CAN, RS232, Ethernet
- Firmware-Update
- Screen Snapshot per CAN (oder HTTP?)
- Übertragen anderer Dateien (File Transfer Utility)
- Das CAN-Interface im/am PC
- USB-nach-Seriell-Adapter (Virtual COM Ports)
- Fernsteuerung (für Geräte ohne eigene Tastatur)
- Übertragen anderer Dateien (mit dem File Transfer Utility)
- Das System-Menü im Terminal
- Display-, Audio-, CAN-Bus-, und andere Einstellungen
- Netzwerk-Konfiguration (TCP/IP, UDP, etc)
- Ein- und Ausschalten des Gerätes; automatisches 'Aufwecken' z.B. per CAN
- Freischaltung von Sonderfunktionen
- Storage Directory (unter 'System Menu' / 'Diagnostics' abrufbar)
- Fernbedienung des System-Menüs per Terminalprogramm (für Geräte ohne Tastatur)
- Die Fehler-Anzeige-Seite ("Fehler & Meldungen")
- Sprung zur Fehlerursache per Mausklick
- Fehlerklassen und weitere angezeigte Meldungen (CAN, CANopen, ..)
- Anzeige der Trace-Historie unter 'Fehler & Meldungen'
- Einleitung
-
Der Display-Kommando-Interpreter
- Numerische Ausdrücke (expressions)
-
Interpreter-Funktionen
- Alphabetisch sortierte Übersicht der Interpreterfunktionen
- Funktionen zum Abfragen der Tastatur
- Arithmetische und andere Funktionen
- Konvertierungsfunktionen 'val' (value) und 'eval' (evaluate)
- CANopen-spezifische Funktionen
- Generische CAN-Funktionen: CAN-Status-Abfrage, CAN-Empfang, CAN-Senden
- String-Funktionen
- String-Ausdrücke (String Expressions)
- Funktionen zur Abfrage der Echtzeituhr (real time clock)
- Timer-Funktionen und -Kommandos
- Bit-Abzähl-Funktion ("nbit")
- Funktionen zum Zugriff auf nichtflüchtige Werte (nv[0..31])
- Funktionen zum Lesen der digitalen und analogen Eingänge (onboard)
- Funktionen zur Abfrage des Drehknopfes (rotary encoder, rot.xxx)
- Funktionen zur Abfrage eines analogen Joysticks (optional ! )
- Interpreter-Kommandos
- Übersicht Interpreter-Kommandos
- Grafik-Kommandos
- Kommandos zum Starten / Stoppen von Timern
- Page-Scan-Modus (pscan)
- Das Zuweisungs-Kommando (assign, @)
- Ansteuern digitaler Ausgänge (on-board, optional)
- "System"-Funktionen und -Kommandos des Interpreters (Audio, Indikatoren, Shutdown, Reboot, Spannungen, Temperaturen, ...)
- Weitere spezielle Interpreter-Kommandos
-
Der Script-Editor / Compiler / Debugger (nur für bestimmte Geräte mit 32-Bit-CPU)
-
Anhang
- Verschlüsselung der CVT/UPT-Datei (Applikation)
- Handbücher zu den programmierbaren Terminals (PDF-Format)
- Boot-Screen (optional beim Einschalten angezeigte Bitmap-Grafik)
- SDO-Fehlercodes
- CANopen-Objekte im Terminal (nur für Geräte mit CANopen)
- SDO-Fehlercodes (nur für Geräte mit CANopen)
- Oft gestellte Fragen (FAQ; separates Dokument)
- Troubleshooting
- Glossar
- Kontaktaufnahme mit dem Autor
- Versionshistorie der UPT-Familie
Programmiertool für CAN-Terminals
Einleitung
Diese Datei ist Teil des Online-Hilfesystems für Programmiertools
für UPT (User Programmable Terminals mit CANopen)
und für Geräte ohne CANopen (wie z.B. MKT-View II, III, IV).
Der ursprüngliche Zweck und die Designziele für die ersten Geräte waren:
- vom CAN-Bus empfangene Signale skalieren und in numerischer Form auf dem Display anzeigen
- zwischen mehreren programmierbaren Anzeigeseiten umschalten (z.B. 'Motor', 'Getriebe', 'Bremsen'), per Tasten steuerbar
- Senden spezieller ("programmierbarer") CAN-Telegramme, ausgelöst durch den Bediener
- schnelles Booten (wenige Sekunden zwischen Einschalten und Anzeige der ersten programmierten Seite)
- geringer Preis (die ersten Geräte arbeiteten mit 8-Bit-CPU und einem LCD mit 128 * 64 Pixeln)
- graphische Anzeige- und Steuerelemente wie Bitmaps, Schaltflächen, Balkendiagramme, Tabellen
- ein im Programmiertool integrierter Simulator zum Entwickeln von Applikationen ohne 'echte' Hardware
- eine Script-Sprache, mit der die Anzeige- und Steuerelemente miteinander, und mit der 'Außenwelt' verknüpft werden können
- Unterstützung für größere und farbige Displays (z.B. TFTs mit bis zu 800 * 480 Pixeln)
Das Programmiertool eignet sich auch (noch) für ältere Geräte wie z.B. UPT-515 oder MKT-View "Plus", deren Firmware allerdings seit 2008 nicht mehr weiterentwickelt wird. Hinweise in der Dokumentation wie z.B. 'nur für Geräte mit 32-Bit-CPU' sollen andeuten, daß eine bestimmte Funktion auf älteren Geräten (mit 8-Bit-CPU wie beim UPT-515, bzw 16-Bit-CPU beim MKT-View) nicht verfügbar ist.
Beispiel eines anwenderprogrammierbaren CAN-Displays : MKT-View III (mit 2*CAN und Ethernet).
Eine Liste mit weiteren vom Programmiertool unterstützten Geräten finden Sie in der Feature-Matrix.
Für den schnellen Einstieg empfiehlt sich z.B. die
Präsentation des Programmiertools,
in der zahlreiche Verweise in die vorliegende Online-Hilfe enthalten sind.
Einige der in diesem Handbuch beschriebenen Funktionen sind erst seit
2024-12-06
verfügbar ( = Kompilationsdatum im ISO-Format, gilt für Firmware und Programmiertool) .
Hinweis: Änderungen in der Dokumentation werden immer erst am
englischsprachigen "Master" vorgenommen, und später ins Deutsche übersetzt.
Schlagwortverzeichnis ("A bis Z") und Hinweise zum Hilfesystem
Eine schnelle Übersicht der wichtigsten Funktionen finden Sie im alphabetisch sortierten Schlagwortverzeichnis.Ein druckbares Handbuch finden Sie im Verzeichnis "DOKU" ( leider etwas veraltet), ebenso eine druckbare Beschreibung des im Terminal vorhandenen Systemmenüs, und eine Beschreibung der Besonderheiten von Terminals mit CAN-Datenbank-Import (statt CANopen).
Tip: Wenn Sie Firefox als Browser verwenden,
wird dieses Dokument beim Öffnen der Hilfe aus dem Programmiertool
automatisch an die passende Stelle gescrollt, was die Verwendung sehr
erleichtert. Das gleiche funktionierte auch mit IE6. Seit IE7 funktioniert
dies nicht mehr... es liegt an Ihnen, einen geeigneten Browser zu installieren.
Der Aufruf des HTML-Browsers ist frei definierbar (unabhängig vom "Standardbrowser").
Rufen Sie dazu im Hauptmenü des Programmiertools den Eintrag "Hilfe" auf,
und wählen dort die Funktion "Kommandozeile für HTML-Browser" auf.
(Beispiel zum Aufruf des beim Autor unter "P:\Iron_Browser" installierten Browsers)
Kontext-und Kommando-spezifische Hilfsfunktion
Kontext-sensitive Hilfe:
-
Drücken Sie F1 wenn Sie Hilfe zu einer Komponente des Programmiertools
bzw der Benutzeroberfläche benötigen,
z.B. wozu das "display property"-Fenster dient. Bevor Sie F1 drücken,
klicken Sie auf ein Steuerelement (um den "Eingabefokus" darauf zu setzen).
Entsprechendes gilt für das Hauptmenü des Programmiertools:
Offnen Sie das Menü (per Maus oder Tastatur), und drücken Sie F1 um Hilfe zum momentan selektierten Menüpunkt zu erhalten. Eigene Hilfeseiten existieren allerdings nur für die 'nichttrivialen' Funktionen - erwarten Sie z.B. keine Hilfe zum Menü 'Datei / Beenden'.
Hilfe zu bestimmten Interpreterkommandos:
-
Drücken Sie F2 wenn Sie Hilfe zu einem der
Interpreter-Kommandos des UPT's
brauchen.
Bei einfachen Editierfeldern platzieren Sie den blinkenden Cursor auf dem Kommando, zu dem Sie Hilfe brauchen, und drücken dann F2.
Bei "Tabellen", klicken Sie in die Zelle mit dem Kommando, lassen den Mauszeiger dort stehen, und drücken dann F2.
Das Programmiertool versucht dann, den Inhalt des Eingabefeldes zu analysieren (an der Stelle wo der Cursor steht), und eine dazu passende Hilfeseite aufzurufen.
Hinweise zur "spezifischen Hilfsfunktion":
- Dies funktioniert nur, wenn das Hauptfenster(!) des Programmiertools den Fokus hat. Sie erkennen dies (bei den meisten PCs) am blaugefärbten Fenstertitel.
- Das Programmiertool öffnet die Hilfeseiten im auf dem PC installierten HTML-Browser (z.B. Firefox) in einem neuen Tab (Registerkarte), und versucht den Browser zum Sprung in das passende Kapitel zu motivieren (per Textmarke). Leider sind manche Browser (z.B. Internet Explorer 7) nicht in der Lage, per Kommandozeile an die gewünsche Stelle im geladenen Dokument zu springen. Siehe Tipp in der Einleitung.
Weitere Informationen (Beispielprogramme, Übersetzungen in andere Sprachen, Links zu Gerätebeschreibungen, Druckbares etc) finden Sie im Index oder auf der MKT-Website.
Warenzeichen, Haftungsausschluß, Juristisches..
In dieser Beschreibung verwendete Namen oder Logos sind möglichwerweise Warenzeichen oder eingetragene Warenzeichen
ihrer jeweiligen Eigner, auch wenn sie in dieser Beschreibung nicht entsprechend gekennzeichnet sind.
Entsprechendes kann für copyright-geschütztes Material zutreffen.
Ein fehlendes ®(r) oder ©(c) erlaubt daher keinen Rückschluss auf ein
eventuell vorhandenes Warenzeichen / Trademark, Copyright, oder dergleichen.
Sollten Sie Inhaber eines Trademarks oder Copyrights eines der in dieser Beschreibung verwendeten Namens sein,
der in der folgenden Auflistung fehlt, bitten wir (MKT Systemtechnik) um einen Hinweis per E-Mail an info@mkt-sys.de.
CANdb® is registered trademark of Vector Informatik GmbH.
NTCAN API is copyright (c) by ESD electronic system design GmbH.
PCAN Dongle and the PCAN API is copyright (c) by PEAK-Service GmbH.
Microsoft, Windows, Win95, WinNT, WinXP® are registered trademarks of Microsoft Corporation.
The Hershey fonts are a collection of vector fonts developed circa 1967 (!)
by Dr. Allen Vincent Hershey while working at the U.S. National Bureau of Standards.
Die Software wird mit den begleitenden Materialien (Dokumentation, Hilfesystem, PDF-Dateien)
"wie sie ist" ("as-is") und ohne jede Gewährleistung für Funktion, Kompatibilität, Korrektheit oder
Fehlerfreiheit zur Verfügung gestellt.
Für jedweden direkten oder indirekten Schaden - insbesondere Schaden an anderer Software,
Schaden an Hardware, Schaden durch Nutzungsausfall und Schaden durch Funktionsuntüchtigkeit
der Software, kann der Autor nicht haftbar gemacht werden. Ausschließlich der Benutzer haftet
für die Folgen der Benutzung dieser Software.
Diese Software wurde mit größter Sorgfalt entwickelt, jedoch können Fehler niemals
ausgeschlossen werden. Es kann daher keine Gewähr für die Sicherheit Ihrer Daten übernommen werden.
Das Programmiertool wird vom Hersteller (MKT Systemtechnik) kostenlos zur Verfügung gestellt.
Für die dazugehörige Hardware gelten die Bedingungen des Kaufvertrages
(siehe Kontakt / Impressum / ABGs auf der
Website des Herstellers).
THERE ARE NO OTHER WARRANTIES, EITHER EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE,
WITH RESPECT TO THE SOFTWARE, THE ACCOMPANYING
WRITTEN MATERIALS, AND ANY ACCOMPANYING HARDWARE.
MKT Systemtechnik
Haßkamptraße 75-77
32257 Bünde (Germany)
Phone: 05223/493933-0
Fax: 05223/493933-20
Nutzungsbedingungen, Hinweise
Diese Soft- und dazugehörige Hardware kann ein CAN-Netzwerk steuern oder beeinflussen. Ähnliches gilt für den Einsatz im lokalen Netzwerk (Ethernet, Ethercat, und ähnlichen zukünftig unterstützten Bussystemem). Der Einsatz kann daher zu schweren Schäden führen. Aus diesem Grund dürfen nur Personen, die die möglichen Konsequenzen des Einsatzes dieses Produktes verstanden haben, es verwenden.
Die Haftung des Herstellers ist auf die Hardware beschränkt, sie bezieht sich nicht auf die Folgen seines Einsatzes in einem CAN-Netzwerk. Weder MKT Systemtechnik noch deren Beschäftigte oder Partner können für den unsachgemäßen Gebrauch dieses Produktes haftbar gemacht werden.
Aktivitäten mit hohem Gefahrenpotential
Die Software ist nicht fehlertolerant und wurde nicht entworfen, hergestellt oder dafür vorgesehen, sie zum Gebrauch oder Weiterverkauf als Online-Steuerung in sicherheitskritischen Umgebungen einzusetzen, wie sie etwa für ausfallsichere Systeme erforderlich sind, wie sie zur Kontrolle von Kernkraftwerken, zur Flugnavigation oder in Kommunikationssystemen des Luftverkehrs, medizinischen Geräten, oder Waffensystemen zum Einsatz kommen, in denen der Ausfall der Software direkt zum Tode, Körperverletzungen, oder anderen ernsthaften Schädigungen der Umwelt ("Aktivitäten mit hohem Gefahrenpotential") führen könnte. MKT Systemtechnik schließt jegliche Art einer ausdrücklichen oder implizierten Garantie zur Eignung von Aktivitäten mit hohem Gefahrenpotential aus.
Wenn Sie mit den obigen Einschränkungen nicht einverstanden sind,
de-installieren Sie die Software und senden die Hardware UMGEHEND an den
Lieferanten zurück. Der Kaufpreis, den Sie für das Gerät bezahlt
haben, wird Ihnen dann erstattet. Kunden von MKT Systemtechnik wenden sich
bitte per Email an den Hersteller, info@mkt-sys.de .
Installation des Programmiertools
Laden Sie sich das zur Hardware passende Programmiertool von MKT Systemtechnik herunter. Als Anwender von Geräten mit Parametrierung der CAN-Kommunikation per "CAN-Datenbank" benötigen Sie den Installer namens 'InstallCANdbTerminal.exe'. Als Anwender von Geräten mit CANopen V4 benötigen Sie den Installer 'InstallUptTool2.exe'. Als Anwender von Geräten mit 'sehr altem CANopen' (V3, z.B. UPT515) verwenden Sie den Installer 'InstallUptTool1.exe'.Den Grund, warum es mittlerweile drei verschiedene Programmiertools gibt, finden Sie (bei Interesse..) hier .
Bei Problemen mit dem Aufruf des HTML-Browsers (z.B. Firefox, Chrome / Iron, oder im äußersten Notfall "Internet Explorer")
nicht korrekt, können Sie die Kommandozeile zum Aufruf des Browsers (mit Übergabe der zu öffnenden Datei)
wie hier beschrieben ändern. Als Browser für das Hilfesystem
des Programmiertools kann so auch ein Programm verwendet werden, welches momentan nicht als "Standard-Browser"
eingerichtet ist.
Hinweis für Nutzer von Windows Vista / 7 / 8 / 10
Beispiel: Update des CAN-Terminal Programming Tools
- Programm starten (rechte Maustaste > Als Administrator ausführen)
- Menüpunkt Hilfe / Auf Updates prüfen (per Browser)
-
Wählen Sie im Browser-Fenster den Link in der Zeile
Please download update here,
wenn eine entsprechende Aufforderung angezeigt wird.
Abhängig vom Browser wählen Sie z.B. "Speichern unter". - Schließen Sie das Programmiertool bevor Sie das heruntergeladene Update (z.B. 'InstallCANdbTerminal.exe') starten !
-
Installieren Sie das Update aus dem Download-Ordner Ihrer
lokalen Festplatte (rechte Maustaste > Als Administrator ausführen) !
-
Folgen Sie den Anweisungen. Danach starten Sie das CAN-Terminal
Programming Tool neu,
Sie arbeiten nun mit der aktuellsten Version.
Durch eine geänderte Methode zum Speichern der Konfigurationsdatei (seit Dezember 2019
wieder im Verzeichnis der Applikation) sollte ein Betrieb mit Administratorrechten
nicht mehr nötig sein. Der folgende Tipp ist nur nötig, wenn Sie das Programmiertool
unter Windows 7/8/10 im Windows-"Programm"-Verzeichnis installiert haben.
Grund für die Notwendigkeit eines (lokalen) Administrator-Accounts unter Windows 7/8/10:
Im Gegensatz zu früheren Windows-Versionen ist es aus schwer
nachvollziehbaren Gründen einer Anwendung nicht mehr erlaubt, Dateien
in "ihrem eigenen" Verzeichnis auf der Festplatte zu beschreiben. Die
'Anzeigeprogramme', die bei der Installation des Programmiertools als Beispiele
mitgeliefert werden, werden vom Installationsscript traditionell in
ein Unterverzeichnis des Programmiertools kopiert (statt, wie Microsoft es
gerne hätte, irgendwo unter "Dokumente und Einstellungen", "Eigene Dateien", "Alle Benutzer", "Documents", "Public Documents"
oder ähnlichem Unfug).
Um den unter "Windows Vista" vorprogrammierten Ärger mit 'Vorhängeschlössern' () oder (unter späteren Windows-Versionen) nicht schreibbaren Dateien im "Programm"-Verzeichnis zu vermeiden:
Installieren Sie das Programm nicht im vom Microsoft vorgesehenen Verzeichnis ("Programme", "Program Files", oder wo auch immer).
Stattdessem installieren Sie das Programm dort, wo Sie später uneingeschränkte Schreibrechte haben,
d.h. außerhalb des von Microsoft diktierten Verzeichnisses für 'Programme'.
Beispiel (auf einem 'deutschen' PC):
- Statt der Installation unter
- "C:\Programme\MKT\xyz", (alias "C:\Program Files\MKT\xyz", oder was auch immer..),
- installieren Sie die MKT-Software z.B. unter
- "C:\MKT\UPT_ProgTool2" (für Geräte mit CANopen)
"C:\MKT\CANdbTerminalProgTool" (für Geräte mit Konfiguration per CAN-Datenbank)
Nach der Installation finden Sie die mitgelieferten Beispielprogramme dann in den folgenden Verzeichnissen (unabhängig von der verwendeten Windows-Version .. XP,7,8,10..):
c:\MKT\CANdbTerminalProgTool\programs | (enthält weitere Unterverzeichnisse für verschiedene Displays) |
c:\MKT\CANdbTerminalProgTool\programs\script_demos | (Beispiele für Geräte mit Script-Sprache) |
c:\MKT\CANdbTerminalProgTool\programs\MKTview2 | (Beispiele für MKT-View II / III, z.g.T. ohne Scripte) |
c:\MKT\CANdbTerminalProgTool\programs\MKTview4 | (Beispiele für MKT-View IV, z.g.T. mit Scripten) |
Falls Sie den 'neuen Regeln' von Microsoft folgen, und "Ihre Dateien" in dem von Microsoft dafür vorgesehenen Verzeichnis ablegen wollen, können Sie die Verzeichnisse (Dateipfade) nach der Installation des Programmiertools auf dessen Registerkarte 'Settings' ändern. Ob dafür z.B. das Verzeichnis "C:\Dokumente und Einstellungen\All Users\Oder auch nicht\Anwendungsdaten\Irgendwer\Irgendwo\Irgendwas\..." zu verwenden wäre, klären Sie ggf. mit dem System-Administrator.
Weitere Informationen zu den vom Programmiertool verwendeten Verzeichnissen (Directories) finden Sie auf der Registerkarte Einstellungen (des Programmiertools).
Nach der Installation: Überprüfen ob ein Firmware-Update nötig ist
Da nach der Installation eines neuen Programmiertools i.A. auch neue Funktionen verfügbar sind, muss in vielen Fällen auch die Geräte-Firmware aktualisiert werden, um auch dort die neuen Funktionen nutzen zu können (andernfalls würden z.B. im Simulator auf dem PC Funktionen verfügbar sein, die in Geräten mit alter Firmware nicht funktionieren).- Tipp:
- Beim Aufruf der Funktion 'Auf Update prüfen (per Browser)' im Menü 'Hilfe'
wird Ihnen auch ein Auszug aus der Versionshistorie mit den letzten Änderungen
angezeigt. Diese Änderungen beziehen sich nicht nur auf das Programmiertool,
sondern auch auf die Geräte-Firmware.
Falls der Aufruf des Browsers aus dem Hilfe-Menü nicht funktioniert, können Sie die entsprechende Webseite über den folgenden Link auch 'von hier' erreichen:
www.mkt-sys.de/check4update/ctptwin1.htm
-
Beispiel:
-
MKT-View III with CANdb + Logger ISO-Date: 2013-07-22 16:24:00 Software: art11392 V0.2.4-1 (...) Compiled: Jul 24 2013 (RV) (...) press ENTER to quit
- Bedeutung:
-
'ISO-Date' ist das aktuelle Datum und Uhrzeit im ISO-Format. Dies hat nichts mit dem Kompilationsdatum der Firmware zu tun !
'Software' ist die Identifikation der Geräte-Firmware, mit Software-Artikel-Nummer von MKT, und der Versionsnummer.
'Compiled' ist das Kompilationsdatum der Geräte-Firmware. Details dazu im folgenden Unterkapitel.
Details zum Durchführen eines Firmware-Updates finden Sie nach der Installation des Programmiertools in dessen Unterverzeichnis 'firmware' in der Datei fwupdate.htm . Im gleichen Verzeichnis finden Sie auch die Firmware-Dateien für die wichtigsten programmierbaren Displays von MKT.
Wurde das Programmiertool wie im vorhergehenden Kapitel empfohlen installiert, finden Sie die Gerätefirmware im Verzeichnis
c:\MKT\CANdbTerminalProgTool\firmware | (für Geräte mit 'DBC', z.B. MKT-View II / III / IV) |
c:\MKT\UPT_ProgTool2\firmware | (für Geräte mit CANopen, z.B. UPT128, UPT800 ) |
In einigen Fällen sind für die gleiche Hardware sowohl eine 'DBC' (CANdb)- als auch CANopen-Firmware-Variante verfügbar - siehe Feature-Matrix.
(Links zur Feature-Matrix - Klicken Sie auf ein Bild, um zu erfahren ob für das Gerät eine "CANdb" oder "CANopen"-Firmware verfügbar ist)
Details zum Firmware-Kompilations-Datum
Das Kompilationsdatum wird beim Übersetzen der Geräte-Firmware (und des Programmiertools) automatisch eingefügt. In den 'Terminal-Konstanten' wird dieses Datum im ISO-Format angezeigt (s.U.). Das Programmiertool benötigt diese Information, um z.B. Funktionen, die im Zielsystem nicht implementiert sind, bei der Erstellung des Anzeigeprogramms nicht zur Auswahl anzubieten. Es kann anhand des Kompilationsdatums erkennen, ob die Geräte-Firmware 'neuer' oder 'älter' als das Programmiertool ist.Beispiel:
Am 27. November 2009 wurde die Syntax für viele graphische Anzeige-Elemente (z.B. Bargraphen und Buttons) erweitert. Die Breite und Höhe eines Anzeige-Elements wird seitdem in zwei eigenen Spalten ("W" = Breite in Pixel und "H" = Höhe in Pixel) in der Definitionstabelle eingegeben. Bei Geräten mit älterer Firmware (z.B. "MKT-View Plus") existiert diese Möglichkeit nicht.
Aus dem Grund zeigt das Programmiertool die Spalten "W" und "H" nur dann an, wenn das Kompilationsdatum der Firmware im zu programmierenden Gerät größer oder gleich 20091127 (ISO8601-Format, YYYY-MM-DD) ist.
Ursprünglich wurde das Programmiertool immer per Kommunikationskanal (CAN, RS-232) direkt mit dem zu programmierenden Gerät verbunden, und hatte dadurch die Möglichkeit, z.B. per CAN das Kompilationsdatum aus dem angeschlossenen Gerät abzufragen.
Bei der mittlerweile üblichen Übertragung "per Datei" auf einer Speicherkarte besteht diese Möglichkeit nicht mehr, da keine Daten vom Gerät zum PC übertragen werden können !
Da die Übertragung "per Datei" nur in Richtung Programmiertool -> Anzeigegerät erfolgen kann, muss das Programmiertool notfalls manuell über den Firmwarestand des zu programmierenden Gerätes informiert werden (das Firmware-Kompilationsdatum kann beim Aufruf des Systemmenüs im Gerät ausgelesen werden). Details zum Systemmenü finden Sie in Dokument Nr. 85115.
- Beispiel: "Altes" MKT-View (MKT-View "Plus"), Firmware #11089 .
-
Kompilationsdatum 2008-12-02 (Anzeige "Compiled: Dec 2 2008" in der
grauenhaften Notation des C-Compilers)
Im Programmiertool darf dann unter "Settings"..."Terminal constants"..."Firmware compilation date" allerhöchstens der Wert 20081202 stehen.
Per Mausklick auf das Kompilationsdatum (numerischer Wert im ISO-8601-Format) kann dies gegebenenfalls korrigiert werden.
Anderfalls könnte Ihnen das Programmiertool beim Erstellen der Konfiguration Funktionen anbieten, die in der verwendeten Firmware noch nicht existieren ! -
Ob für Ihr Gerät eine neuere (aktuellere) Firmware verfügbar ist, erfahren Sie im einfachsten Fall über das Menü "Hilfe" .. "Check for Update", oder notfalls (falls Ihr Internet-Browser nicht kooperiert) in der Datei readme.txt im Unterverzeichnis "firmware" nach der Installation des aktuellen Programmiertools .
Bekannte Probleme mit älterer Firmware sind z.g.T. in den Release Notes beschrieben.
Siehe auch:
Firmware-Update, Software-Versions-Historie (Online-Link) .
Programmstart mit und ohne 'Disclaimer'
Nach der Installation startet das Programmiertool zunächst mit der Anzeige eines 'Disclaimers' (Haftungsausschluss und Nutzungsbedingungen).In diesem Dialogfenster kann der Benutzer des Programmiertools bereits seine Sprache, und den selbsteingeschätzten Kenntnisstand auswählen (alias 'Benutzerprofil', Neuling / fortgeschrittener Anwender / Experte):
Anzeige des "Disclaimers" beim Start des Programmiertools
Entfernen der Anzeige des 'Disclaimers' beim Programmstart
Wenn Sie den Haftungsausschluß akzeptieren, und sich über die möglichen Konsequenzen des Einsatzes dieser Software im Klaren sind, können Sie die Anzeige des "Disclaimers" beim Programmstart entfernen.Wählen Sie dazu im Hauptmenü den Eintrag "Werkzeuge"..."Warnhinweis beim Programmstart entfernen".
Sie werden dann nach einem Passwort gefragt. Geben Sie den Text
i agree
("ich akzeptiere") ein, und klicken auf OK. Sie werden dann beim nächsten Programmstart nicht mehr vom "Disclaimer"-Bildschirm begrüßt. Bei Eingabe eines falschen Passwortes wird der Disclaimer wieder aktiv.
Das gleiche Dialogfenster wird auch für die Passwort-Eingabe in anderen Situationen verwendet, z.B. beim Firmware-Update.
Das Hauptfenster
Das Hauptfenster des Programmiertools erscheint (nach dem Entfernen des 'Disclaimers') direkt nach Programmstart.Abhängig vom gewählten Anwenderprofil ("Neuling"/"fortgeschrittener Anwender"/"Experte") könnten einige Elemente der Benutzeroberfläche vorübergehend verborgen sein.
Es enthält außer dem Hauptmenü verschiedene Seiten ("Registerkarten" bzw tab sheets), mit folgendem Inhalt:
- Definition von Kommunikationskanälen
- weitere optionale Registerkarten, je nach unterstützten Kommunikationsprotokollen, hier z.B. CANopen oder CANdb
- Definition von Variablen die mit Kommunikationskanälen verbunden sein könnten
- Definition von Anzeigeseiten die später vom UPT (etc) angezeigt werden sollen
- Import von Icons (kleinen Grafikbildern)
- Anzeige einer Übersicht aller von Ihnen programmierten Anzeigeseiten
- Anzeigen und Ändern einiger Systemparameter (general settings) des Terminals und des Programmiertools
- Anzeige von Fehlermeldungen in einer Fehlerhistorie (evtl. auch andere Meldungen)
Am unteren Rand des Hauptfensters sehen Sie die Statuszeile, in der wichtige Systemzustände und die letzte Fehlermeldung angezeigt wird.
Zurück zur Übersicht
Das Hauptmenü des Programmiertools
Das Hauptmenü des Programmiertools enthält die üblichen Funktionen zum Laden und Speichern von Dateien, zum Editieren, für die Programmübertragung, und zum Einstellen von Optionen des Programmiertools. Hier nur eine kurze Übersicht:- Datei
- Applikation (*.upt bzw *.cvt) aus Datei laden, als Datei speichern, Paßwortschutz für die Applikation einstellen
- Assistent
- Assistenten zum Erstellen einfacher Anwendungen, Dialog zum Verlinken der Menüs im Terminal, Dialog zum Ersetzen von Variablen
- Bearbeiten
- Enthält eine globale Suchfunktion zur Textsuche auf allen Event-Definitionen, allen Anzeigeseiten, und in allen Quelltextzeilen der Script-Sprache; eine Funktion zum Erzeugen einer neuen Anzeigeseite; und andere Funktionen zum Bearbeiten der programmierbaren Anzeigeseiten. Viele weitere Funktionen zum "Bearbeiten" sind in Popup-Menüs enthalten, die durch Anklicken verschiedener Steuerelemente mit der rechten Maustaste geöffnet werden können !
- Transfer
- Übertragen der Applikation ins Terminal, Firmware-Update, Auswahl der seriellen Schnittstelle
- Ansicht
-
Umschalten zu verschiedenen Fenstern des Programmiertools:
LCD-Simulator, Überwachte Ausdrücke, Test-Kommando-Fenster, Datei-Referenzen. - Optionen
-
Dient zum Ändern verschiedener Einstellungen des Programmiertools, Abfrage der unterstützte
Grafik-Funktionen, Speicheraufteilung (im Terminal), und einiger Optionen die das Erscheinungsbild
der Benutzeroberfläche des Programmiertool beeinflussen:
- Benutzerprofil "Neuling" :
- Kann nur einfache numerische Anzeigen konfigurieren,
verwendet fast ausschliesslich den graphischen Editor,
und sieht (im Programmiertool) nur die elementaren Registerkarten zur Erstellung einer sehr einfachen Anzeigekonfiguration.
- Benutzerprofil "fortgeschrittener Anfänger" :
- Kann prinzipiell zu allen Registerkarten umschalten (inkl. Script),
sieht aber beim Start des Programmiertools den graphischen Editor
statt der tabellarischen Anzeige-Definitionen (dessen Registerkarten ihm aber,
im Gegensatz zum 'Neuling', alle zur Verfügung stehen).
- Benutzerprofil "Experte" :
- Der Experte möchte in erster Linie nicht Anzeige-Elemente per Maus im graphischen Editor
hin- und herschieben, sondern ist das Arbeiten mit Tabellen, Pixel-Koordinaten,
Quelltexten (Script) und den kreativen Möglichkeiten des Format-Strings gewohnt.
Dem Experten werden daher beim Start des Programmiertools alle Registerkarten angezeigt.
- Interne und externe Hilfsprogramme aufrufen, die z.T. zusätzlich zum Programmiertool installiert werden können, z.B. Font-Editor, CAN-Logger-Utility, CAN Bus Simulator, usw.
- Icon
-
Grafik-Import aus Bitmap-Dateien
- Run, Stop, Reset
-
Die auf dem PC simulierte Applikation starten, stoppen, und das Programm zurücksetzen.
Hinweis: Nur bei gestoppter Simulation kann die Applikation editiert werden.
Die Funktion 'Reset' (im Hauptmenü des Programmiertools) simuliert einen Power-On-Reset (bzw. 'Kaltstart') des simulierten Zielsystem. 'Run' setzt die Programmausführung an der Stelle fort, an dem sie per 'Stop' (oder durch Auflaufen auf einen Haltepunkt) unterbrochen wurde.
- Hilfe
- Hilfeseiten zu verschiedenen Themengebieten aufrufen. Setzt einen installierten HTML-Browser voraus, funktioniert aber ohne Internet-Zugang
zurück zur Beschreibung des Hauptfensters
Die Statuszeile des Hauptfensters
Am unteren Rand des Hauptfensters befindet sich die Statuszeile, in der einige Informationen über den aktuellen Systemzustand und die letzte Meldung angezeigt wird, in bestimmten Situationen auch eine Übertragungs-Fortschritts-Anzeige (bei "Transfer in progress" etc).
Durch Anklicken des "Simulator"-Buttons kann das Fenster des LCD-Simulators geöffnet werden (falls es noch nicht sichtbar ist).
Das zweite Panel von links (hier mit der Aufschrift "Running") zeigt den aktuellen Zustand des Programmiertools bzw des eingebauten Firmware-Simulators. Mögliche Anzeigen sind:
- Running: Die Applikation läuft grade (d.h. sie wird vom Firmware-Simulator abgearbeitet)
- Stopped: Die Applikation wurde angehalten (z.B. beim Verschieben von Anzeigeelementen im LCD-Simulator, aber auch nach Auslösen eines Programm- oder Daten-Haltepunktes)
- Transfer: Es findet momentan eine Program-Übertragung statt.
Das rechte Feld in der Statuszeile zeigt -wenn vorhanden- die letzte Fehler-
oder Systemmeldung an, z.B. die erfolreiche Initialisierung des CAN-Interfaces.
Das rechte Feld in der Statuszeile dient auch für die Anzeige von
Informationen des 'Wortes' (oder Teil eines numerischen Ausdrucks)
unter dem Mauszeiger, wenn dieser wie hier beschrieben
in einer der Definitionstabellen (z.B. Definition von Anzeigezeilen) bewegt wird.
Die Anzeige von Fehlermeldungen hat in der Statuszeile Priorität
vor der Anzeige von 'Informationen' zum Objekt unter dem Mauszeiger.
Um von der Anzeige des letzten Fehlers wieder zurück zur Mauszeiger-Info-Anzeige
umzuschalten klicken Sie einmal in das rechte Feld der Statuszeile.
Ein Doppelklick auf eine Fehlermeldung in der Statuszeile
schaltet auf die Registerkarte Fehler und Meldungen um.
Zu Testzwecken kann mit Hilfe der Statuszeile auch eine Kommandozeile an
den in der UPT-Firmware enthaltenen Kommando-Interpreter gesendet werden.
Geben Sie dazu das Kommando in das Meldungsfeld (rechts) ein, und beenden die Eingabe mit der Eingabetaste.
Zurück zur Beschreibung des
Hauptfensters
LCD-Simulator und geräteabhängige LCD-Auswahl
Das Fenster des LCD-Simulators zeigt den Inhalt des LC-Displays des Terminals an, den Sie sehen würden, wenn Sie Ihre Anwendung bereits in das Terminal geladen hätten.
In den meisten Fällen zeigt dieses Fenster die aktuelle Seite der UPT-Applikation an.
Solange das Simulatorfenster den "Eingabefokus" hat (meistens erkennbar am blauen Fenstertitel), werden alle Tastatureingaben von der PC-Tastatur zum Terminal-Simulator durchgereicht.
Dies ermöglicht es, die Funktion Ihrer Anwendung zu testen, incl. der Navigation durch Menüs, der benutzerdefinierten Event-Handler und so weiter.
Das Fenster des LCD-Simulators kann unabhängig vom Hauptfenster bewegt und vergrößert werden. Es kann zu Vorführungen auch zum "Full-Screen" maximiert werden. Das Panel unterhalb des simulierten Displays zeigt den Zustand eventuell vorhandener Leuchtdioden, digitaler Ein- und Ausgänge an. Wenn diese Anzeigen nicht benötigt werden, oder der Platz auf dem PC-Bildschirm knapp wird, können Sie das untere Panel im Menü des Simulators auch abschalten.
Durch Klick in das Simulator-Fenster mit der linken Maustaste können Sie (im Modus "Editieren") einzelne Textzeilen selektieren und verschieben. Das Hauptfenster des Programmiertools schaltet dann automatisch zur Registerkarte Anzeige-Definition ("Seite N") um, auf der Sie alle Eigenschaften der grade selektierten Anzeige-Zeile sehen und einstellen können.
Zum Verschieben einer Anzeigezeile auf dem simulierten LCD halten Sie die linke Maustaste gedrückt, während Sie die Maus langsam verschieben (dies funktioniert bei "normalen" Anzeigeelementen, bei denen die X/Y-Position in der Anzeige-Definitions-Tabelle einstellbar ist).
Bei der Simulation von Geräten mit Touchscreen dient die linke Maustaste als Ersatz für den "Finger" (bzw. Touch-Pen) auf der Sensorfläche. Ob das simulierte Gerät über einen Touchscreen verfügt, kann im Dialogfenster für die unterstützten Grafik-Funktionen eingestellt werden.
Durck Klick in das Simulator-Fenster mit der rechten Maustaste wird ein Popup-Menü geöffnet, welches Ihnen Funktionen zum Einfügen verschiedener Anzeigeelemente bietet, und wo z.B. die Simulation des Drehknopfes durch das Mausrad konfiguriert werden kann. Die Option 'Immer im Vordergrund' (stay on top) ist hilfreich, wenn nur ein einziger Monitor am PC angeschlossen ist, und der Platz auf dem Bildschirm bei der Programmentwicklung knapp wird - speziell beim Debuggen im Script-Editor. So bleibt der Simulator sichtbar, auch wenn das Hauptfenster maximiert ist und den (Windows-)Fokus hat.
Bei vielen überlappenden Grafik-Elementen kann es
schwierig sein, per Mausklick das gewünschte Element zu 'erwischen'.
Daher kann die Selektion alternativ auch per Maus-Scrollrad(!) erfolgen,
während der Eingabefokus in der Definitionstabelle (im Hauptfenster) liegt.
Um nicht nur das aktuell selektierte Element, sondern alle auf der aktuellen
Seite befindlichen Anzeige-Elemente (bzw. deren rechteckige Flächen) zu markieren,
drücken Sie die Control-Taste (bzw. 'Strg' auf einer deutschen Tastatur).
Die rechteckigen Bereiche werden dann transparent mit verschiedenen Farben
markiert, mit der Nummer der Definitionszeile jeweils in der oberen linken Ecke
der Farbmarkierung:
Anzeige im LCD-Simulator mit mehreren transparent markierten Elementen.
Der Simulator kann dies 'immer', 'nie', oder bei gedrückter Strg-Taste anzeigen.
Unabhängig von den oben gezeigten transparenten Markierungen versucht das
Programmiertool beim Mausklick in den LCD Simulator (bei gestoppter Simulation)
die Definition des angeklickten Grafikelements auf der aktuellen Seite zu
finden, und schaltet bei Erfolg auf die entsprechende Registerkarte um.
Dies wird meistens die Tabelle unter Anzeigezeilen-Definitionen sein,
gelegentlich (z.B. beim Zeichnen mehrere Icons per Kommandozeile) aber auch
die Tabelle unter Weitere Kommandos.
In beiden Fällen wird der Teil der Kommandozeile oder des Format-Strings,
mit dem der angeklickte Grafikbereich gezeichnet wurde, in der Definitionstabelle
grün markiert.
Sie können den Inhalt des simulierten LCDs in die Windows-Zwischenablage (clipboard) kopieren. Klicken Sie dazu auf den 'Menü'-Button des Simulators, und wählen die Funktion Bild in Zwischenablage kopieren. So können "Schnappschüsse" aus dem LCD-Simulator in eigene Dokumente übernommen werden, z.B. für Handbücher und Beschreibungen für den Bediener. Bei bestimmten Geräten (mit aktivem CAN-Bus) können Bildschirm-Schnappschüsse vom echten Terminal als Bitmap-Datei ausgelesen werden - siehe Beschreibung "Snapshot via CAN" .
Falls die Einstellungen des LCD-Simulators nicht mit dem Zielgerät übereinstimmen, rufen Sie den Dialog zum Einstellen des LCD-Simulators auf (dazu gehören die Dimensionen des LC-Displays und das Farbmodell).
- Tip zum "Rahmen" bzw. Hintergrundbild des LCD-Simulators:
-
Um Schaltflächen oder andere Grafikobjekte genau neben den Funktionstasten
des Terminals auszurichten, schalten Sie das passende
Hintergrundbild im LCD-Simulator ein (im Menü des Simulators).
Im Unterverzeichnis backgrounds ("Hintergründe", s.U.)
finden Sie das zu einigen Front-Panels passende Bild.
Andernfalls (z.B. bei kundenspezifischen Tastaturen):
Bei kundenspezifischen Tastaturen wird i.A. nur die Oberfläche anders bedruckt, die Position der Tasten aber nicht geändert. Daher eignen sich die Hintergrundbilder der Standard-Tastaturen normalerweise auch für kundenspezifische Tastaturen. Zur Not können Sie sich einen eigenen Simulator-"Rahmen" per Malprogramm als Bitmap-Datei erstellen. Beachten Sie dabei, daß der schwarz umrahmte Bereich des LCDs exakt der Größe des simulierten Displays (in Pixeln) entsprechen muß. Alles innerhalb des LCD-Rahmens bleibt weiß.
Für ein selbst erzeugtes Hintergrundbild (lcdsim_XYZ.bmp) muss auch die dazu passende Beschreibungsdatei (lcdsim_XYZ.txt) angelegt werden. Darin sind u.A. die Koordinaten der per Maus anklickbaren Tasten enthalten. Ein gutes Beispiel finden Sie in der Beschreibungsdatei des Hintergrundbilds für das MKT-View II .
Anno 2013 enthielt der Installer für das Programmiertool die folgenden 'Standard'-Hintergrundbilder, und einige wenige anwenderspezifische Designs:
lcdsim_128_64.bmp, u.A. für UPT 515 (128*64 Pixel) |
lcdsim_128_160.bmp, u.A. für HBG 18 (128*160 Pixel) |
lcdsim_abe167.bmp, für 'ABE' handheld (128*64 Pixel) |
lcdsim_320_240.bmp, für alte MKT-Views, 320*240 Pixel |
lcdsim_scandi320.bmp, für OEM design (320*240) |
lcdsim_mktview_2.bmp, für MKT-View II/III, 480*272 Pixel |
lcdsim_dt85.bmp, für DT85, 320*240 Pixel |
Platz für ein weiteres Design.. | lcdsim_no_background.bmp : Wählen Sie diese Datei wenn kein Hintergrundbild angezeigt werden soll. |
Zurück zur Übersicht
Geräteauswahl und LCD-Einstellungen (Auflösung, Farbmodell, Quer/Hochformat)
Das UPT-Programmiertool unterstützt sehr unterschiedliche Displays. Normalerweise erkennt das Tool den Typ des angeschlossenen Displays selbst, wenn ein Programm zwischen PC und Display übertragen wird. Alle nötigen Informationen über das Display werden dann aus dem angeschlossenen Gerät gelesen und in der UPT-Programdatei mit abgelegt. Wenn Sie eine UPT-Programmdatei von der Festplatte laden, werden die LCD-Einstellungen daher i.A. automatisch angepaßt.
Wenn Sie allerdings keine Möglichkeit haben, das Programmiertool direkt mit dem Zielsystem (target) zu verbinden, müssen Sie den Typ des verwendeten Displays selbst einstellen (sonst könnte die Anzeige im LCD-Simulator stark von dem abweichen, was Sie später auf den echten Terminal sehen..). Um dies zu tun, starten Sie den folgenden Einstelldialog (aus dem Hauptmenü unter "Optionen"..."Geräteauswahl / LCD-Eigenschaften"):
Einige Beispiele:
- HBG35_CM3:
- Handbediengerät mit 3.5" TFT-Bildschirm, 240 * 320 Pixel (Hochformat), TFT mit 65535 Farben (16 Bit/Pixel),
21-Tasten mit "Nussecken"-Cursorblock. "CM3" steht für die CPU-Familie "ARM Cortex-M3", in diesem Fall ein LPC1788.
- MKT-View II, Landscape (Querformat)
- Gerät für den Einsatz im KFz, Bildschirm mit 480 * 272 Pixel, TFT mit 256 Farben (8 Bit/Pixel),
Touchscreen.
Dieses Gerät wurde vom MKT-View III mit schnellerer CPU abgelöst.
- MKT-View II, Portrait (Hochformat)
- Bildschirm mit 272 * 480 Pixel, sonst wie oben (identisches Gerät, nur um 90° oder 270° verdrehte Einbaulage).
Siehe auch: Auswahl der Drehrichtung für den 'Portrait-Modus' im Geräte-Setup.
- MKT-View III, Landscape (Querformat) und Portrait (Hochformat)
- Bildschirm mit 480 * 272 bzw 272 * 480 Pixel, 4.3"-TFT mit 65535 Farben (16 Bit/Pixel).
Nachfolger vom MKT-View II mit deutlich schnellerer CPU (Cortex-M3).
- MKT-View IV, Landscape (Querformat) und Portrait (Hochformat)
- Bildschirm mit 800 * 480 bzw 480 * 800 Pixel, 7"-TFT mit 65535 Farben (16 Bit/Pixel).
Funktionalität ähnlich wie MKT-View II/III, aber schnellere CPU (Cortex-M4F mit Hardware-Fliesskommaheinheit).
- MKT-View V, Landscape (Querformat) und Portrait (Hochformat)
- Nachfolger vom MKT-View III mit wesentlich schnellerer CPU und
mindestens einem CAN-FD-fähigem CAN-Interface.
- UPT 320 "Color":
- Gerät für den Einbau im Schaltschrank, mit 5.7" - Bildschirm mit 320 * 240 Pixel, TFT mit 65536 Farben (16 bit / pixel),
Touchscreen, Drehknopf, ARM CPU, Tastatur mit 6 (?) Funktionstasten.
Ersatz für das nicht mehr produzierbare "UPT 167 Color". Firmware verfügbar für CAN / CANdb (#11352) und für CANopen (#11353) .
- UPT 800:
- 7" - Anzeige-Panel mit 800 * 480 Pixel ("WXGA"), TFT mit 65536 Farben (16
bit / pixel), Touchscreen, ARM CPU, aber weder Drehknopf noch Tastatur.
Für Einbau in Schaltschrank. Bislang (2011-11) nur als Prototyp mit "CANdb"-verfügbar. Firmware #11372 (für Controller Typ LPC2478).
- UPT515:
- Altes Gerät mit monochromen (grünlichem) LCD-Bildschirm, 128 * 64 Pixel, 8-Bit-CPU (8051-Derivat).
- UPT 167 "monochrom":
- Altes Gerät mit Monochrom-LCD (schwarz/weiß), 320 * 240 Pixel, 16-Bit-CPU (C167).
- UPT 167 "Color":
- Altes Gerät mit 5.7"-Passiv(!)-Farb-LCD, 320 * 240 Pixel, 4 Bit/Pixel (16 Farben).
Wird nicht mehr produziert (2009); Ersatz durch MKT-View III oder "UPT 320 Color". - MKT-View, MKT-View "+", CANdb oder CANopen:
- Historisches Gerät für den Einbau im KFZ. Monochromer Bildschirm
(schwarz/weiß), 320 * 240 Pixel, 16-Bit-CPU (C167). Optionaler CAN-Logger
(beim MKT-View "Plus").
- MKT-View "+", CANdb oder CANopen, Hochformat (bzw "Portrait Mode")
- Wie oben, allerdings 240 Pixel (Breite) * 320 Pixel (Höhe) .
Eine aktuelle Liste verfügbarer Anzeigegeräte finden Sie nur auf der MKT-Webseite.
Siehe auch: Feature matrix (für verschiedene
Terminals), General settings (tab),
Unterstützte Grafikfunktionen
(Dialog), Inhaltsübersicht
Kommunikations-Kanäle
Die Registerkarte "Channels" dient zur Definition der Kommunikationskanäle, die das Terminal benötigt um mit anderen Geräten im CANopen-Netzwerk zu arbeiten (aus diesem Grund fehlt diese Seite im Programmiertool für Geräte mit "CANdb-Parametrierung")Es gibt verschiedene Arten von Kommunikationskanälen:
-
SDO-Kanal (Service Data Object)
eine "langsame" device-to-device - Verbindung nach CANopen, mit der der Zugriff auf das sogenannte object dictionary eines Gerätes möglich ist. Viele verschiedene Objekte können auf diese Weise durch einen einzigen SDO-Kanal angesprochen werden ! -
PDO-Kanal (Process Data Object)
ein "schneller" Kommunikations-Kanal mit dem Prozeßdaten (z.B.digitale Eingänge, analoge Sensordaten usw) im CANopen-Netzwerk transportiert werden. - 'Signale' die in einer CAN-Datenbank (z.B. *.dbc- oder *.arxml-Datei) definiert sind, ohne spezielles Übertragungsprotokoll. Details zu Variablen, die (über ihre Kanalnummer) mit CAN-Signalen verknüpft sind, finden Sie hier. Derartige Kanäle stehen nur im Programmiertool für Terminals mit CANdb-Funktionalität zur Verfügung, an dieser Stelle wird nicht weiter darauf eingegangen.
- Kanal für LIN-Bus-Signale
Bei Geräten mit einem optionalen LIN-Bus-Monitor dient Kanalnummer 31 als Kennung für Variablen, die mit (jeweils einem) LIN-Bus-Signal verbunden sind. Der Aufbau der 'Datenbits' im LIN-Bus-Frame werden intern wie beim CAN-Bus beschrieben. Bis auf die Kanalnummer ähnelt die Definition eines LIN-Signals daher einem per CAN-DBC beschriebenenen CAN-Bus-Signal (geplant: Ersatz der DBC-Datei durch eine LDF-Datei). - Kanal für openABK-Variablen und -Mailboxen (Client-Seite)
Variablen, die der optionale openABK-Client im Terminal aktiv von einem abgesetzten openABK-Server anfordern (d.h. z.B. per DAQ-Liste auslesen) soll, erhalten in der Variablen-Definitions-Tabelle Kanalnummer 32. Details zum Thema openABK finden Sie in einem separaten Dokument.
Bei Variablen wird der Typ eines Kommunikationskanals indirekt durch die Kanalnummer festgelegt (falls die Variable über einen Kommunikationskanal mit der "Außenwelt" kommuniziert).
Hinweis: Das Terminal sollten an PDO-Kanäln nur "lauschen". Es kann keine Sendung eines PDO-Telegramms von einem anderen Gerät anfordern (denn dies könnte schwere Probleme hervorrufen, den CAN-Identifier dürfen immer nur von einem einzigen Netzknoten gesendet werden ...)
Sie müssen (außer bei "CANdb") wenigstens einen Kommunikationskanal für jedes Gerät definieren, mit dem das Terminal kommunizieren soll. Die Kanäle werden später benötigt um Werte aus anderen Geräten in Variablen des Terminal-Programms zu übertragen.
Siehe auch:
- Variablen an SDO-Kanälen
- Variablen an PDO-Kanälen.
- crx-Funktion (z.B. zum Empfangen von "Signal-losen" Telegrammen mit Null Bytes Datenlänge)
Zurück zur Übersicht
SDO-Kanäle
- Hinweis:
- SDO-Kanäle werden nur von bestimmten Terminals unterstützt - siehe "Feature Matrix" .
SDO-Kanäle bieten eine vielseitige aber relativ langsame Punkt-zu-Punkt (device-to-device) -Verbindung mit der Daten aus dem Objektverzeichnis (object dictionary) eines CANopen-Gerätes ausgetauscht werden können.
Sie müssen die CAN-Identifier aller benötigten SDO-Kanäle definieren, über die das Terminal später (als Client) kommunizieren soll. Sie können dazu -wenn vorhanden- ein CANopen-Konfigurationstool verwenden, oder die folgende SDO-Kanal-Definitionstabelle:
Sie können die benötigten CAN-Identifier in der Beschreibung des Gerätes finden, welches einen bestimmten SDO-Kanal bietet, oder im CANopen Draft Standard 301 (CiA "DS301"). Die meisten E/A-Module (I/O-devices) verwenden den sogenannten (und kaum ins Deutsche übersetzbaren :) "pre-defined connection set" mit den folgenden CAN-Identifiern (die in DS301 sinnigerweise "COB-IDs" genannt werden).
SDO(server->client) : CAN-Identifier = (1408+node-ID) = 1409...1535
SDO(client->server) : CAN-Identifier = (1536+node-ID) = 1537..1663
Alle hier gezeigten CAN-Identifier sind dezimal notiert. Der "client->server"-ID wird vom Client (in diesem Fall das UPT) zum Server (zum Beispiel ein I/O-Modul) gesendet wird um die Übertragung zu starten (initiate a transfer, hier "request"). Der "server->client"-ID wird im Antworttelegramm vom Server zum Client verwendet. Falls Sie die hexadezimale Notation bevorzugen, können Sie dies unter "ID format" einstellen.
Tip: Wenn Sie in der oben abgebildeten Tabelle alle Zellen löschen, und nur die Server Node ID's eingeben (d.h. Knotennummer der SDO-Server, die der im Terminal eingebaute SDO-Client ansprechen soll). Klicken Sie danach auf "Apply" (Anwenden), und das Programmiertool ergänzt die CAN-IDENTIFIER (COB-Id's) so daß diese dem "predefined connection set" entsprechen.
- Vorsicht, Falle !
-
Ein SDO-Kanal ist immer nur eine "Punkt-zu-Punkt"-Verbindung zwischen genau
zwei Partnern. Sie müssen sicherstellen, daß sie nur SDO-Verbindungen
verwenden die noch nicht von anderen Geräten "in Beschlag" genommen
sind. Wenn ein einfaches E/A-Modul beispielsweise nur einen einzigen SDO-Kanal
bietet und dieser bereits von einem anderen Gerät (z.B. PLC, SPS,
Antriebsregler etc) belegt ist, dann dürfen Sie diesen SDO-Kanal
nicht für das TERMINAL verwenden !
Grund: Dies würde schwere Kollisionen und Protokollverstöße im CANopen-Netzwerk verursachen, auch auf Bus-Ebene, weil ein bestimmter CAN-Identifier immer nur von einem einzigen Knoten gesendet werden darf - und das ist beim im Fachchinesisch 'default SDO' genannten Kanal immer der CANopen-Master. Nur wenige CANopen-Slaves verfügen über mehr als einen SDO-Kanal, um per SDO auch von anderen Knoten per SDO ansprechbar zu sein).
Im alten UPT515 musste immer eine Variable
über einen SDO-Kanal mit einem anderen Gerät im Netzwerk verbunden
sein.
Beim "MKT-View mit CANopen" und anderen (neueren) UPT's mit 16- oder 32-Bit-CPU
können direkte SDO-Lesezugriffe auch direkt per Interpreterfunktion
sdo(<index>.<subindex>,
<Datentyp>) durchgeführt werden, ohne Verwendung einer Variablen.
Siehe auch:
- Variablen an SDO-Kanälen
- das CANopen-Objekt-Dictionary (ohne das bei CANopen eigenlich "gar nichts" funktioniert...)
- Index und Subindex
- Nutzung der SDO-Kanäle in der Script-Sprache (cop.sdo, cop.sdo2)
- EDS-Dateien (electronic device specification)
- Besonderheiten bei Geräten mit 'CANopen V4' (dies sind die meisten Geräte mit CANopen und 32-Bit CPU) .
PDO-Kanäle
- Hinweis:
- PDO-Kanäle werden nur von bestimmten Terminals unterstützt - siehe "Feature Matrix" .
PDO-Kanäle stellen einen "schnellen" Übertragungskanal für Prozeßdaten mit hoher Priorität dar, z.B. für digitale Eingänge, analoge Sensordaten usw. Ein PDO-Telegram kann verschiedene Werte enthalten (falls das sendende Gerät "variables PDO-mapping" bietet). Weitere Informationen sind dem CANopen-Standard zu entnehmen, der von der CiA veröffentlicht wurde.
Im Gegensatz zur SDO-Kommunikation stellt ein einzelner PDO-Kanal immer eine Einbahnstraße dar, d.h. die Übertragungsrichtung ist im Betrieb nicht umschaltbar !
Die folgende Tabelle im Programmiertool dient zur Definition aller PDO-Kanäle ("RX" und "TX", aus der Sicht des Terminals):
Definieren Sie für jeden verwendeten PDO-Kanal:
-
den CAN-Identifier für das PDO-Telegramm
(auch "COB-ID" genannt).
Mit dem Button 'Default-IDs' können Sie die Identifier -passend zur Node-ID des Terminals- auf die in DS 301 definierten Defaultwerte setzen.
Mit dem Button 'Kommunikation..', oder per Doppelklick in die Spalte 'CAN-ID' kann ein spezieller Dialog zum Einstellen der PDO-Kommunikations-Parameter geöffnet werden. - die Übertragungsrichtung (transmit, receive oder "passiv")
-
die Übertragungsart (transmission
type) wie im CANopen-Standard beschrieben.
Auch für diesen Parameter erleichtert der Dialog zum Einstellen der PDO-Kommunikations-Parameter die Auswahl aus den etwas 'kryptischen' Übertragungsarten für Prozessdaten-Telegramme. - den Übertragungs-Zyklus (transmission cycle) ,
- und möglicherweise- einge Flags zum Aktivieren "spezieller" PDO-Funktionen .
Im (alten) UPT515 sollte eine Variable verwendet werden, um Werte aus einem PDO-Kanal aufzunehmen, bzw um Werte in zu sendenden PDO-Kanal einzusetzen.
Im (neueren) UPT II (z.B. UPT128, UPT320, UPT800) existieren spezielle Variablen im CANopen-Objektverzeichnis, deren einziger Zweck es ist in PDOs gemappt zu werden. Diese speziellen Variablen werden durch ihren CANopen-Index und -Subindex adressiert. Da diese Variablen immer exisiteren, sind sie auch in der EDS-Datei beschrieben, und sind daher auch für CANopen-Konfigurationstools transparent. Näheres dazu im Dokument zu CANopen "V4" .
Äußerste Vorsicht ist geboten, wenn Sie PDO-Telegramme in ein Ihnen unbekanntes Netzwerk senden wollen ! Das Senden falscher Identifier kann katastrophale Folgen haben, darum konnte das UPT ursprünglich auch keine PDOs senden sondern nur empfangen (diese Einschränkung mußte aufgehoben werden, weil jemand das Anzeigeterminal auch als Steuerungszentrale einsetzen wollte). Üblicherweise wird zur Konfiguration eines CANopen-Netzwerk ein entsprechendes Konfigurationstool eingesetzt, mit dem -unter anderem - auch alle Prozessdatenkanäle definiert werden. Bei Geräten mit CANopen V4 (siehe Feature Matrix) werden die PDOs daher ausschliesslich über die dafür im CANopen-Kommunikationsprofil vorgesehenden Objekte konfiguriert, so daß die PDO-Parameter auch für das Konfigurationstool zugänglich sind. Weitere Informationen dazu finden Sie in einem gesonderten Dokument.
In einem CAN-Netz ist es nicht zulässig, daß mehrere Geräte
("Knoten") Telegramme mit dem gleichen CAN-Identifier senden. Auch aus diesem
Grunde sollte das Terminal ursprünglich nur an PDO-Kanälen "lauschen"
aber selber keine PDOs senden.
PDO-Kanal-Definitionen können notfalls auch zur Laufzeit
mit dem UPT-Interpreter beeinflußt werden. Siehe
PDO-Funktionen.
Siehe auch:
- Variablen (des Interpreters)
- Variablen an PDO-Kanälen
- Kanalnummer einer Variablen (wodurch auch der Typ des Kommunikationskanals festgelegt wird)
- Fest im CANopen-Objektverzeichnis des Terminals verankerte Variablen (nur für Terminals mit "CANopen V4"), auf die mit der Funktion obd(<index>.<subindex>) zugegriffen werden kann
- Kopplung von Display-Variablen mit Objekten im CANopen-Objektverzeichnis des Terminals
- Weitere Besonderheiten bei Geräten mit 'CANopen V4' (dies sind die meisten Geräte mit CANopen und 32-Bit CPU)
PDO-CAN-Identifier
Sie müssen die CAN-Identifiers aller verwendeten PDO-Kanäle (die das Terminal empfangen oder senden soll) definieren. Die Identifier-Werte finden Sie in der Beschreibung des Gerätes, das ein bestimmtes PDO-Telegramm sendet, oder im CANopen Draft Standard 301 (CiA "DS301"). Die meisten I/O-Geräte verwenden ein sogenanntes "pre-defined connection set" mit den folgenden Definitionen für PDO-CAN-Identifier (die in DS301 "COB-IDs" genannt werden):PDO1(tx) : CAN-Identifier = (384+node-ID)10 = 385...511
PDO1(rx) : CAN-Identifier = (512+node-ID)10 = 513...639
PDO2(tx) : CAN-Identifier = (640+node-ID)10 = 641...767
PDO2(rx) : CAN-Identifier = (768+node-ID)10 = 769...895
Die hier gezeigten CAN-Identifier sind dezimal notiert. Beachten Sie, daß "tx/rx" (Senden/Empfangen) in dieser Tabelle aus der Sicht des Gerätes zu sehen sind, die den PDO zur Verfügung stellt (dies ist nicht das Terminal ! Das Terminal ist nur der "Nutzer" !). Ein "tx"-PDO wird z.B. von einem I/O-device gesendet und vom UPT empfangen. Zulässige node-IDs (Knotennummern) sind 1..127. Einfache Geräte wie I/O-Module verwenden oft einen DIP-Schalter um den Node-ID einzustellen.
- Beispiel:
-
Sie wollen den Zustand der digitalen Eingänge eines E/A-Moduls empfangen.
Das Modul verwendet PDO1(tx) um Prozeßdaten zu senden, in denen die
Zustände der digitalen Eingänge enthalten sind. Der Node-ID des
E/A-Moduls möge "1" sein, der resultierende CAN-Identifier ist daher
(384+1)=385(decimal).
Um diesen PDO mit dem Terminal zu empfangen, wollen Sie beispielsweise(!) den ersten PDO-Kanal des UPTs verwenden. Geben Sie den Wert "385" in der Spalte "CAN-ID of PDO" ein. Das UPT wird nun in der Lage sein, ein PDO-Telegramm mit diesem Identifier zu empfangen, und Sie können ein paar Variablen definieren die von Teilen des PDO-Telegramms (als Eingangswert) "gespeist" werden.
- Hinweis:
- Wird die 'Knotennummer' (node-ID) eines CANopen-Gerätes
geändert, dann ändern sich auch die CAN-Identifier für die Prozessdatenkommunikation.
(Dies ist in CANopen CiA "DS301" als 'predefined connection set' spezifiziert; s.O.).
Sollte die Applikation für einen oder mehrere PDOs vom 'predefined connection set'
abweichende CAN-Identifier erfordern, setzten Sie bitte erst
die neue Node-ID im Gerät und im Programmiertool (wodurch die meisten CAN-IDs wieder
auf Defaultwerte gesetzt werden, nicht nur für die PDOs), und ändern danach
die CAN-Identifier für die Prozessdatenkommunikation auf der Registerkarte 'Kanäle' (Channels),
Unterregister 'PDO', wie im oben gezeigten Screenshot.
Dies ist z.B. immer dann nötig, wenn mehrere CANopen-Slaves miteinander Daten per PDO austauschen sollen, ohne Umweg über den CANopen-Master. Dies wird in der CANopen-Fachliteratur auch als 'PDO-Linking' bezeichnet.
Bei Terminals mit CANopen V4 (seit April 2005,
siehe Feature-Matrix) können die PDO-Parameter
nicht per Interpreter modifiziert werden, sondern ausschliesslich durch die
entsprechenden Objekte im CANopen-Object-Dictionary !
DO-Übertragungsrichtung (transmission direction)
Alle Geräte mit CANopen können PDOs nicht nur empfangen, sondern auch senden. Aus diesem Grund müssen Sie nun auch definieren, ob ein PDO aus Sicht des Terminals empfangen(1), gesendet(2) wird oder passiv bleibt(0). Bei Geräten mit CANopen V4 ist die Sende- oder Empfangrichtung aller PDO-Kanäle dagegen fest vorgegeben (wie bei einem "normalen" CANopen-Gerät). Siehe Feature-Matrix !Hinweis: "Transmit" und "Receive" muß aus Sicht des Terminals gesehen werden !
PDO-Übertragungsart (transmission type)
Geräte mit CANopen-Protokoll unterstützten die meisten sogenannten "PDO transmission types".
Der PDO transmission type wird durch einen numerischen Wert definiert. Die
Werte stammen aus CiA DS301.
Weitere Informationen finden Sie im CANopen Standard 'CiA 301', ehemals "DS 301",
in der Beschreibung der Objekte 1400h-15FFh (PDO Communication Parameter), "Description of transmission type".
Hier ein Auszug aus DS 301 V4.0:
PDO Transmission Type |
Cyclic |
Acyclic |
Synchronous |
Asynchronous |
RTR only |
0 | X | X | |||
1-240 | X | X | |||
241-251 reserved | |||||
252 | X | X | |||
253 | X | X | |||
254 | X | ||||
255 | X |
Beschreibung einiger PDO-"transmission types", wurde aus verschiedenen Gründen nicht aus dem Englischen übersetzt:
- A transmission type of zero means that the message shall be transmitted synchronously with the SYNC object but not periodically (?????).
- A value between 1 and 240 means that the PDO is transferred synchronously and cyclically, the transmission type indicating the number of SYNC which are necessary to trigger PDO transmissions/receptions.
- The transmission types 252 and 253 mean that the PDO is only transmitted on remote transmission request. The UPT treats both 252 and 253 exactly the same way.
- Transmission type 254 is "manufacturer specific" (which is not defined yet).
- Transmission type 255 is "defined in the decive profile" (which does not exist here).
- For transmission types 254 and 255 you can use a PDO's Event Timer for cyclic (but not sync-related) transmissions. See transmission cycle .
PDO Transmission Cycle (Übertragungszyklus)
Der 'PDO transmission cycle' (CANopen-Bezeichnung) wird für zyklische PDO-Übertragungen ohne SYNC-Objekt verwendet.Dies funktioniert ähnlich wie der in CANopen DS301 V4.0 beschriebene "Event Timer", siehe Beschreibung von Objekt 0x1400, Subindex 5.
Hinweis: Seit September 2001 kann der Übertragungszyklus eines PDOs
auch per UPT-Interpreter während der "Laufzeit" umprogrammiert werden.
Siehe
PDO-Funktionen.
NUR FÜR UPT515: Spezielle Flags in PDO-Kanal-Definitionen
Diese "Flags" wurden für "sehr spezielle PDOs mit festem Inhalt" implementiert.Nur der letzte PDO-Kanal kann als "System-Zustands-PDO" betrieben werden, indem der FLAG-Wert auf "1" gesetzt wird.
Der "System-Zustands-PDO" hat den folgenden Inhalt:
- Byte[0] = UPT run mode (1 = Normalbetrieb, etc)
- Byte[1] = digitale Onboard-Eingänge
- Byte[2] = Nummer der aktuell angezeigten Display-Seite
- Byte[3] = Key-Matrix[0], die "ersten" 8 Tasten aus Sicht des Tastaturtreibers.
- Byte[4] = Key-Matrix[1], die "nächsten" 8 Tasten aus Sicht des Tastaturtreibers.
Hinweis: Frühe Mustergeräte vom Typ 'UPT128' wurden mit einer Folientastatur mit der Aufschrift 'UPT515' ausgeliefert. In der Tat wird im UPT128 aber eine leistungsfähige 32-Bit-CPU verwendet, statt (wie beim "echten", alten UPT515) ein 8051-kompatibler 8-Bit-Controller.
PDO Mapping
Bei CANopen bedeutet 'PDO mapping' im Wesentlichen die Definition des 'Inhalts eines PDO-Telegramms' (CAN-Datenfeld mit Prozessdaten).Die Beschreibung dieses recht komplexen Themas finden Sie in einem eigenen Dokument.
Applikations-Variablen (Display-Variablen)
Die Registerkarte "Variablen" des Programmiertools dient zur Definition aller Variablen, die im Terminal verwendet werden sollen.Alle Variablen haben bestimmte Eigenschaften, die in einer Definitionstabelle eingestellt werden können.
Die meisten Variablen Ihres Anzeigeprogramms werden wohl mit einem Kommunikationskanal verbunden sein, sie können allerdings auch als rein "interne" Variablen zur Aufnahme von Hilfs- und Zwischenwerten verwendet werden.
Hinweise:
-
Auf alle "Display-Variablen" kann per Interpreter zugegriffen werden,
denn eine Variable kann als Teil eines
numerischen Ausdrucks verwendet werden.
-
Der Name einer Variablen muß immer mit einem Großbuchstaben
beginnen, und er durfte bei alten Geräten nicht mehr als 8 Buchstaben umfassen.
Bei Geräten mit CANdb-Funktionalität sind mindestens zu 16 Zeichen zulässig
(abzulesen unter "General Settings", Konstante
"max var name length").
-
Für Script-Variablen gilt diese Beschränkung nicht !
Script-Variablen werden nicht auf der Registerkarte 'Variablen', sondern im Script-Quelltext deklariert.
-
Variablen, deren Werte (ohne CANopen) vom CAN-Bus empfangen werden sollen,
enthalten in der Tabellenspalte 'Signaldefinition' alle Informationen,
die das Gerät später zum Decodieren der CAN-Daten benötig. Die Spezifikation
dieser 'Signaldefinition' (für CAN) finden Sie hier.
-
Um einer Display-Variablen während der Laufzeit "programmgesteuert" einen neuen
Wert zuzuweisen, verwenden Sie das Assign-Kommando
("@"). Sinnvoll ist dies i.A. nur bei Variablen, die ihren Wert nicht
von einem Kommunikationskanal erhalten.
-
Display-Variablen können zur Laufzeit am Gerät inspiziert werden.
Wählen Sie dazu im System-Menu, Untermenü "Diagnostics",
die Funktion "Display Variables". Mit den Cursortasten, Drehknopf
oder Joystick können Sie die Liste von Display-Variablen durchscrollen.
-
Um den Wert eines CANopen-Objektes auf dem Bildschirm anzuzeigen, ist es
nicht nötig, dieses Objekt mit einer Variablen zu verbinden.
Die Anzeige kann auf das Objekt (im 'eigenen' CANopen-Objektverzeichnis)
auch direkt per
CANopen index and -subindex
( obd(index.subindex) ) ansprechen.
Verwandte Themen:
- Auswahl von Variablen für Anzeigeseiten (mit einem speziellen Dialogfenster)
- Kommunikationskanäle
- Variablen an SDO-Kanälen
- Variablen an PDO-Kanälen
- Kopplung von Variablen mit Objekten im eigenen CANopen-OD des Terminals
- Variablen mit Verknüpfung per CAN-Datenbank (z.B. im "MKT-View")
- Index und Subindex a la CANopen
- Variable als Teil eines numerischen Ausdrucks für den Interpreter
- per Interpreter adressierbare Komponenten einer Variablen
- CANopen-Variablen mit festem Datentyp und festem Objekt-Index (nur für Terminals mit CANopen V4)
- Inspizieren von Variablen per Internet Browser (für Geräte mit Ethernet-Port)
- Auslesen von Variablen per openABK-Server (für Geräte mit Ethernet-Port)
- Auffinden aller Referenzen einer Variable (in allen Event-Abfragen, auf allen Anzeigeseiten, usw.)
- Data-Breakpoints (Überwachung bestimmter Schreibzugriffe auf eine bestimmte Variable)
Eigenschaften von Anzeige-Variablen
Anzeige-Variablen können in der folgenden Tabelle definiert werden (am linken Rand der Registerkarte "Variablen", bzw. "Variables" im unten gezeigten Screenshot).Script-Variablen werden dagegen ausschliesslich im Script-Quelltext deklariert.
Netzwerk-Variablen sind eine Untermenge der Anzeige-Variablen, deren Definition z.B. aus einer DBC-Datei ("CANdb") importiert wurde, oder auf die (bei Geräten mit CANopen) per SDO 'von außen' zugegriffen werden kann.
(Beispiel einer Tabelle mit Variablendeklarationen; hier mit CANopen)
Eigenschaften einer Variablen sind:
- Name : Bei kleinen Systemen (z.B. UPT515) bis zu 8 Zeichen, sonst 16 Zeichen
-
OD-Index (Object Dictionary Index) : Nur für CANopen. Damit kann die Variable
mit dem 'eigenen' CANopen-Objektverzeichnis des Terminals verbunden werden.
Details hier . -
Kanal : Damit wird definiert,
ob und wie diese Variable mit der Außenwelt verbunden ist :
0...4 = SDO-Client (CANopen), 5...9 = SDO-Server (CANopen), 10..19 = PDO (CANopen),
30 = per Datenbank (*.dbc, "CANdb") definiertes CAN-Signal (kein CANopen)
31 = mit einem LIN-Bus-Signal verbundene Variable
32 = per openABK-CLIENT aktiv von einem externen Server anzufordernde Variable
33 = reserviert für openABK-Sonderfunktionen
34...99 = reserviert für zukünftige Kommunikationskanäle
100...149 = reserviert für Geräte mit mehr als 5 CANopen SDO clients
150...199 = reserviert für Geräte mit mehr als 5 RPDOs (Receive-PDOs)
200...249 = reserviert für Geräte mit mehr als 5 RPDOs (Receive-PDOs)
250...254 = reserviert für zukünftige, "exotische" Kanaltypen
255 = diese Variable ist nicht mit der Aussenwelt verbunden (sie existiert nur "intern") - Channel-params (Kanalparameter): PDO / SDO / CANdb_signal_definition (abhängig vom Kanaltyp; bei nicht verbundenen Variablen ohne Funktion)
- Update Time (bzw "Zykluszeit" bei CAN-Signalen)
- Data Type (Datentyp): Nur für 'interne' Variablen frei wählbar !
- Unit (Einheit) : Nur für 'CANdb'; dort ist die physikalische Einheit in der Datenbank definiert
- Access Rights (Zugriffsrechte): 0=nur Lesen, 1=Lesen/Schreiben, 3=nur Schreiben
- Flags: Wird, wenn nötig, automatisch vom Programmiertool ausgefüllt
-
Value Table (Wertetabelle): Wird i.A. für CAN-Signale aus Datenbanken übernommen,
um 'besondere' Werte nicht numerisch, sondern als Zeichenkette anzuzeigen.
Syntax:<decimal value 1>=<display string 1>,<decimal value 2>=<display string 2>, ..
Beispiel:255=SNA,0=off,1=idle,2=normal,3=max dry,4=max reheat,5=combat
Stimmt der CAN-Rohwert mit einem der hier definierten Werte überein, dann kann anstelle der üblichen numerischen Anzeige die entsprechende Zeichenkette angezeigt werden (z.B. "SNA" = "Signal Not Available" statt 255 oder "off" statt 0).
Setzen Sie dazu die Basis in der Definition des Anzeige-Elements statt auf '10' (für dezimal) auf Null (=Anzeige wenn möglich aus Tabelle, sonst dezimal).
Wertetabellen können notfalls auch im Programmiertool selbst (statt in der CAN-Datenbank) editiert werden. Klicken Sie dazu doppelt in die entsprechende Zelle in der Spalte 'Value Table'. Dadurch wird ein übersichtlicheres Editorfenster geöffnet, in dem je ein Wertepaar pro Zeile angezeigt wird (links der dezimale Wert, rechts der entsprechende Text für die Anzeige).
- Default Value: Anfangswert, falls der Wert nicht per Kommunikationskanal gesetzt wird.
- min, max: Grenzwerte (limits), um den Wert für die Anzeige und beim Editieren zu begrenzen
- factor, divisor, offset: Skalierungsparemeter (scaling) zur Umrechnung des per CAN(db) übertragenen Rohwertes in einen physikalischen Wert.
- DAQ-Kanalnummer (DAQ = data acquisition unit; optional; Details hier )
- Während der Laufzeit kann eine Variable gültig oder ungültig sein. Dies kann per Interpreter oder Script per <Variablenname>.va ("valid") abgefragt werden.
Während der Simulation (im Programmiertool) können in einer zusätzlichen Spalte der Tabelle
auch die aktuellen Werte aller Variablen angezeigt werden. Setzen Sie dazu die Option
Zeige aktuelle Werte in der Tabelle (letzte Spalte) im Kontext-Menü auf der Registerkarte Variablen.
Alternativ kann der aktuelle Wert (wie in anderen Tabellen) auch per
Mausbewegung über der Zelle mit dem Variablennamen inspiziert werden.
Viele Eigenschaften einer Variable können auf dem "property"-Panel
eingestellt werden:
Auf einige der hier gezeigten Variablen-Komponenten kann auch während
der Laufzeit des Terminals per Interpreter
oder per Script zugegriffen werden.
Aktualisierungszeit von Display-Variablen ('Update-Time' oder auch 'Sendezyklus')
Die Aktualisierungszeit einer Variablen definiert, wie oft die Variable durch ihren "Eingangskanal" aktualisiert werden soll. Dies funktioniert i.A. nur bei Variablen, die aktiv per Kommunikationskanal von einem externen Gerät angefordert werden.Beispiel:
Eine Variable ist per SDO mit dem Analogeingang eines E/A-Moduls verbunden, und die Aktualisierungszeit ist auf "500" gesetzt.
In diesem Fall wird das Terminal (nach Möglichkeit!) alle 500 Millisekunden ein Anforderungstelegramm ("read request") per SDO SDO an das E/A-Modul senden. Sobald das E/A-Modul darauf antworted (mit einem "read response"-Telegram), wird der neue Wert aus dem Antworttelegramm übernommen und in einen 32-Bit-Wert für die Variable konvertiert.
- Nur für Variablen die per importierter Datenbank (*.dbc) mit CAN-"Signalen" verbunden sind:
-
Hier bedeutet 'update time' eher 'Übertragungszyklus'. Manche CAN-Rahmen ("Messages")
könnten nur APERIODISCH (oder "sehr selten") übertragen werden.
Bei (aus Sicht des Displays) zu sendenden CAN-Signalen definiert der Wert in der Spalte 'Upd-Time' den Sendezyklus (für periodisch gesendete CAN-Telegramme).
Der Sendezyklus kann notfalls auch per Kommando während der Laufzeit geändert werden, z.B.:
(Quelle: Beispielprogramm ?/programs/CdbSendT.cvt, Seite 4)ThreeSines1.cy := 0; // Turn off the periodic transmission ThreeSines1.cy := 300; // Periodically transmit every 300 ms
Datentyp einer Variablen
Der Datentyp einer Variablen definiert das interne Speicherformat und den zulässigen Wertebereich (falls es eine numerische Variable ist). Das UPT515 unterstützte seinerzeit nur numerische Datentypen nach dem CANopen-Standard, aber keine Fließkommazahlen. Fast alle Werte wurden beim UPT515 intern in 32-Bit-Integerzahlen umgewandelt (dies ist das Format für alle Variablen und numerischen Ausdrücke im UPT-Interpreter). Alle neueren Geräte mit 16- oder 32-Bit-CPU (MKT-View II,III,IV) unterstützen Fließkommawerte.Die Datentypen in der Variablen-Deklarations-Tabelle des Programmiertools verwenden (aus historischen Gründen) die im CANopen-Standard spezifizierten Datentypen, selbst wenn das Terminal kein CANopen (sondern z.B. per "CAN-Datenbank definierte Signale") verwendet:
Indicator / Type Name |
Code (dezimal, frei nach CANopen) |
Beschreibung des Datentyps |
Hinweise |
UNKNOWN | 0 | unknown | |
BOOL | 1 | BOOLEAN | |
I8 | 2 | 8 bit SIGNED integer (MIT Vorzeichenbit) | |
I16 | 3 | 16 bit SIGNED integer (MIT Vorzeichenbit) | |
I32 | 4 | 32 bit SIGNED integer (MIT Vorzeichenbit) | |
U8 | 5 | 8 bit UNSIGNED integer (OHNE Vorzeichenbit) | |
U16 | 6 | 16 bit UNSIGNED integer (OHNE Vorzeichenbit) | |
U32 | 7 | 32 bit UNSIGNED integer (OHNE Vorzeichenbit) | |
F32 | 8 | 32 bit floating point (Fliesskommazahl) | vom UPT515 nicht unterstützt |
STR | 9 | "visible" string ("druckbare" Zeichenkette) | |
OCT | 10 | Octet string ( eine CANopen-Spezialität ! ) | noch nicht unterstützt |
Wenn eine Variable mit einem "CAN-Signal" verbunden ist, wird ihr Typ im Programmiertool nur als 'S' (signed) oder 'U' (unsigned) statt der oben aufgelisteten Codes angezeigt. Intern wird der Wert aber in den am besten geeigneten Typ umgewandelt, z.B. von 'S' in einen Fließkommawert, wenn das CAN-Signal mit einen entsprechenden Skalierungsfaktor definiert ist.
Die noch exotischeren CANopen-Datentypen (wie z.B. 0x0C, "time
of day") werden bislang weder von den programmierbaren Terminals, noch vom
Programmiertool unterstützt.
Tipp: Der Datentyp einer Variablen kann ggf. auch während der Laufzeit mit der
Variablen-Komponente "ty" (type) abgefragt
werden. Um aus dem numerischen Code einen Indikator zu machen, verwenden
Sie die Funktion type2str() (type-to-string).
Ähnliches gilt in der Script-Sprache für jede Variable, deren Typ bei der Erstellung
der Applikation noch unbekannt ist ("anytype").
Zugriffsrechte einer Variablen
Die Eigenschaft "Zugriffsrechte" einer Variablen ("access rights" nach CANopen) definieren, ob sie per Zugriffskanal gelesen und/oder modifiziert werden darf.- Beispiel:
- Eine Variable ist dem Analogausgang eines E/A-Moduls per SDO verbunden, und Sie wollen den den Spannungswert des Ausgangs mit dem Terminal einstellen. Nach dem Ändern des Wertes der entsprechenden Variablen (durch Editieren in einem Eingabefeld oder durch Zuweisen eines neuen Wertes mit dem assign-Kommando), wird das Terminal einen Schreibbefehl ("write request"-Telegramm) per SDO zum E/A-Modul senden, damit dieses den neuen Wert auf dem D/A-Wandler ausgibt. Zu diesem Zweck muß die Variable mindestens SCHREIBBAR sein.
Eine Variable mit "read-only"-Zugriff wird niemals per Kommunikationskanal an ein externes Gerät gesendet (selbst wenn der Kanal dazu in der Lage wäre).
Eine Variable mit "write-only"-Zugriff wird niemals per Kommunikationskanal von einem externen Gerät ausgelesen.
Die Zugriffsrechte einer Variablen werden i.A. als numerische Werte nach CANopen-Standard codiert.
- Zulässige Werte sind (bei CANopen):
-
0 = Read Only
1 = Read/Write
2 = Write Only
Bei Variablen, die mit CAN-Signalen verbunden sind, zeigt die Spalte "Access" lediglich an, ob das Signal aus Sicht des Terminals empfangen oder gesendet wird (Empfang ist dabei der Normalfall, Senden wird erst mit einer neuen Firmware ab November oder Dezember 2009 möglich sein) :
- Mögliche Werte in der Spalte "Access" für Variablen, die mit je einem CAN-Signal verbunden sind:
-
RX = Das Terminal empfängt dieses Signal (und alle anderen Signale,
die im gleichen CAN-Telegramm enthalten sind !)
TX = Das Terminal sendet dieses Signal (und, zwangsläufig, alle anderen Signale die im gleichen CAN-Telegramm enthalten sind !)
Im Gegensatz zu CANopen sind kombinierte Schreib-/Lesezugriffe vollkommen unmöglich,
da in der CAN-Datenbasis (CANdb-Datei) keine Protokolle definiert sind, die für derartige Zugriffe nötig wären !
Diese Werte sehen Sie auch in der Combo-Liste auf dem "property"-Panel einer Variablen im Programmiertool.
Auffinden aller Referenzen (Bezüge) einer Variable
In komplexen Anzeigeprogrammen stellt sich gelegentlich die Frage, wo (bzw. ob) eine Variable verwendet wird.Eine Möglichkeit um dies herauszufinden ist die Suche nach dem Variablennamen per Texteditor in der Programmdatei (*.upt oder *.cvt).
Alternativ kann auch das Programmiertool nach allen Referenzen (d.h. "Verwendungen" oder "Bezügen") einer Anzeige-Variablen suchen. Diese Funktion kann über das Kontext-Menü der Variablen-Deklarations-Tabelle aufgerufen werden:
- Klicken Sie auf die zu suchende Variable in der Variablen-Definitions-Tabelle (z.B. "Tank1Level", s.U.),
- Klicken Sie auf den 'Menü'-Button oberhalb der Tabelle, oder klicken Sie mit der rechten Maustaste erneut in die Tabelle.
(Screenshot des Kontext-Menüs in der Variablen-Deklarations-Tabelle)
Das Programmiertool sucht dann nach dem ausgewählten Variablennamen, und zwar in ...
- allen globalen Event-Definitions, sowohl in den 'Events', als auch in den dazugehörigen 'Reaktionen';
- allen lokalen Event-Definitionen, auf allen Anzeigeseiten;
- allen Display-Definitions-Zeilen, ebenfalls auf allen Seiten;
- allen Quelltext-Zeilen im Script-Editor (wo Display-Variablen das Schlüsselwort 'display.' vorangestellt werden muss);
- allen Definitionszeilen des CAN-Simulators (mit Signaldefinitionen und 'Conditional Actions').
(Screenshot der Ergebnisanzeige der 'Suche nach Variablen-Referenzen")
Im Gegensatz zur Variablen-Suche werden bei der Textsuche auch Zeichenketten in Anführungszeichen, d.h. String-Konstanten, durchsucht.
Per Mausklick in eine der Ergebniszeilen im oben gezeigten Anzeigefenster schaltet das Programmiertool zu der
Registerkarte / Tabelle / Quelltextzeile um, in der die Variable (bzw. der gesuchte Text) gefunden wurde.
Lediglich Text in Anführungszeichen, d.h. Zeichenkonstanten, sind von der Suche ausgeschlossen.
Diese Funktion bietet eine schnelle Übersicht über alle 'Verwendungen' (Referenzen, Bezüge, Verweise,..) auf
eine bestimmte Variable. So können z.B. verwaiste (nicht mehr verwendete) Variablen erkannt werden.
Um das modale Fenster zu schließen, klicken Sie abschließend auf 'Ok' oder 'Cancel'.
Die Suchergebnisse werden neben dem oben gezeigten Fenster auch auf der Registerkarte 'Fehler'
( → 'Fehler und Meldungen') angezeigt. Von dort können sie z.B. per Copy and Paste in eigene Dokumentationen
übernommen werden. Per Doppel- oder Rechtsklick auf ein Suchergebnis
unter 'Fehler & Meldungen' kann ebenfalls zur Fundstelle (Display-Seite,
Script-Quelltext, etc) umgeschaltet werden.
Durch Umschalten zwischen den Registerkarten 'Script' und 'Fehler' kann bequem
zwischen Quelltext und der Liste aller Fundstellen (als 'Navigationshilfe')
gewechselt werden.
Eine ähnliche 'globale Suche' (d.h. auf allen Seiten, in Definitionen von Anzeige-Elementen, Ereignissen, usw.)
kann auch aus anderen Kontext-Menüs aufgerufen werden, z.B. aus der Display-Definitions-Tabelle,
der Event-Definitions-Tabelle, und aus dem CAN-Simulator.
Zurück zur Übersicht 'Applikations-Variablen'
Siehe auch: Deklaration von Script-Variablen .
Variablen mit Verknüpfung per CAN-Datenbank
Nur für bestimmte Terminals mit der Fähigkeit
CAN-Signale zu empfangen !
NICHT FUER TERMINALS MIT CANopen-kompatiblen Protokollen !
Details zu Variablen, die mit CAN-Signalen gekoppelt sind,
finden Sie in einer externen Datei (bitte diesem Link folgen).
Wenn eine Display-Variable per Kommunikationskanal ohne CANopen mit einem CAN - Signal verbunden ist, stehen in der Spalte "message/signal definition" in der Variablendefinitionstabelle alle Informationen, die das Terminal später (zur Laufzeit) benötigt um dieses Signal zu empfangen und den Wert aus dem empfangenen CAN-Telegramm zu isolieren. Dies ist recht kompliziert und hat nichts mit CANopen zu tun (wo die Telegrammstruktur i.A. genau festgelegt ist) ! In der Variablendefinitionstabelle wird in der Spalte "Signaldefinition" das folgende Format für CAN-Signale verwendet:
<Bus-Nummer>,<CAN-Identifier>,<Position des LSBits>,<Anzahl Datenbits>,<INTEL-/MOTOROLA-Flag>,<Signaltyp>
Darin ist
- Bus-Nummer
-
1 oder 2, falls das Gerät zwei physikalische CAN-Interfaces hat (wie z.B. beim MKT-View II/III/IV);
evtl. auch 3 oder 4, falls das Gerät CAN-via-UDP oder LIN unterstützt.
Beim MKT-View II / III / IV sind "CAN1" und "CAN2" am entsprechend beschrifteten Adapterkabel verfügbar.
Die oben genannten "Bus-Nummern" werden normalerweise schon beim Import einer CAN-Datenbank festgelegt, denn bereits vor der Auswahl des Dateinamens wird auf der Registerkarte "CAN" der entsprechende Bus ("CAN1" bis "CAN4") ausgewählt. Notfalls (wenn die CAN-Datenbank nicht mehr verfügbar ist) kann die Bus-Nummer auch nachträglich noch auf der Registerkarte "Variablen" editiert werden.
- CAN-Identifier bzw. LIN-Frame-Identifier
-
= 3- oder 8-ziffriger hexadezimaler Wert, je nach Verwendung von 11- oder
29-bit-Identifiern. Bei LIN muss der Frame-Identifier zwischen 0 und 63 liegen.
- Position des LSBits
-
Komplizierter als Sie vielleicht vermuten ! Die Bedeutung dieses Signalparameters
wird in einem anderen Dokument erklärt.
Bei CAN und LIN werden die Datenbits von 0 bis 63 numeriert, da in beiden Fällen maximal 8 Datenbytes per 'Frame' möglich sind.
- Anzahl Datenbits
-
.. wird ebenfalls im o.g. Dokument erläutert.
Übliche Werte sind z.B. 8 (beim Datentyp "Byte"), 16 ("Integer, kurz"), 32 ("Integer, lang").
- Flag INTEL- / MOTOROLA-Format
-
..einer der Gründe warum die Verarbeitung von CAN-Signalen so kompliziert
ist... Details hier.
- Signaltyp
- U = Unsigned (Signal wird auf dem CAN-Bus als vorzeichenlose Ganzzahl übertragen)
S = Signed (Signal wird auf dem CAN-Bus als vorzeichenbehaftete Ganzzahl übertragen)
F = Float (Signal wird auf dem CAN-Bus als 32-Bit-Fliesskommawert übertragen)
D = Double (Signal wird auf dem CAN-Bus als 64-Bit-Fliesskommawert übertragen)
Zusätzlich könnten bei bestimmten Signalen noch weitere Definitionen hinzukommen, z.B. bei GEMULTIPLEXTEN Signalen (je nach Inhalt der CAN-Datenbasis) .
Versuchen Sie nicht, die Definition eines CAN-Signals hier (in der Variablendefinitionstabelle des UPTs) selbst zu ändern ! Es ist zwar möglich, alle nötigen Informationen auf der Registerkarte 'Variablen' direkt einzugeben; wir raten aber dringend davon ab. Sinnvollerweise verwendet man einen externen CANdb-Editor (CAN Database Editor), mit dem zunächst alle Messages und Signale im (nicht-CANopen-)Netzwerk beschrieben werden. Nach dem Erstellen der Datenbank importieren Sie die CANdb-Datei (*.dbc) dann im Programmiertool, wie in diesem separaten Dokument beschrieben. Dies erfolgt auf der Registerkarte CAN (nicht auf der Registerkarte Variablen !) :
( Anzeige einer CAN-Datenbasis; weitere Details
hier )
Das Importieren der Datenbasis wird im bereits erwähnten externen Dokument genauer beschrieben.
Siehe auch:
- Prinzipieller Ablauf zur Erstellung eines Anzeigeprogramms mit CAN-Signalen
- Signal-Ausfall-Überwachung für CAN-Signale (timeout monitor)
- CAN Message Layout (Anzeigefenster, auch für Variablen mit CAN-Anbindung verfügbar)
- Übersicht Applikations- und Anzeige-Variablen
- CAN Message Generator / Bus Simulator
Variablen mit CANopen-Anbindung
Die in diesem Unterkapitel beschriebenen Funktionen stehen nur in der CANopen-Variante von Firmware und Programmiertool zur Verfügung !Im PKW wird üblicherweise kein CANopen, sondern per Datenbank (*.dbc, *.arxml) definierte 'Container' wie CAN-Messages mit vom Hersteller des Steuergerätes selbstdefinierten Identifiern verwendet.
Bei Nutzfahrzeugen, Lastkraftwagen, und in der Automatisierungstechnik ist dagegen CANopen recht verbreitet.
Variablen an SDO-Kanälen
- Hinweis:
- SDO-Kanäle werden nur von bestimmten Terminals unterstützt - siehe "Feature Matrix" .
Eine Variable kann per SDO-Kanal mit irgendeinem "Objekt" in einem anderen Gerät im CANopen-Netzwerk verbunden werden.
Diese "Objekte" eines CANopen-konformen Geräts sind im sogenannten "Objektverzeichnis" (object dictionary) enthalten. Jedes Objekt innerhalb eines CANopen-Dictionaries wird durch seinen Objekt-Index und -Subindex characterisiert .
Diese Parameter werden auf dem folgenden Panel definiert, welches im Programmiertool angezeigt wird wenn die aktuell bearbeitete Variable mit einem SDO-Kanal verbunden ist:
Um eine Variable mit einem Objekt eines CANopen-konformen Gerätes zu verbinden, müssen Sie folgendes definieren:
- die SDO-Kanalnummer (die das UPT mit einem bestimmten Gerät verbindet)
- den Index und Subindex des zu verbindenden Objekts (a la CANopen)
- den Datentyp des Objekts (z.B. "INTEGER 16")
- die Zugriffsrechte (z.B. "read only")
Hinweis: Bei manchen Geräten besteht (seit Juli 2004) die Möglichkeit, auch ohne Verknüpfung mit einer Variablen, einzelne Werte per SDO-Kanal zu lesen und zu schreiben. Dazu dient die Interpreterfunktion "sdo".
- Das CANopen-Objekt-Dictionary (ohne das bei CANopen eigenlich "gar nichts" funktioniert...) ,
- Index und Subindex ,
- EDS-Dateien (electronic device specification) ,
- Besonderheiten bei Geräten mit 'CANopen V4' (dies sind die meisten Geräte mit CANopen und 32-Bit CPU) .
Variablen an PDO-Kanälen
- Hinweis:
- PDO-Kanäle werden nur von bestimmten Terminals unterstützt - siehe "Feature Matrix" .
Der Eingangswert einer Variablen kann mit dem Teil eines PDO-Kanal verbunden werden. (Ein PDO-Telegramm kann bis zu 8 Datenbytes enthalten, und i.A. wird nur ein Teil des Datenfelds mit einer bestimmten UPT-Variablen verbunden!)
Um eine UPT-Variable mit einem PDO-Kanal zu verbinden, müssen Sie folgendes definieren:
- die "UPT-interne" Nummer des PDO-Kanals
- die Anzahl Datenbits die aus dem PDO in die Variable übertragen werden sollen
- Die Bitnummer des ersten zur Variablen gehörenden Datenbits (welches bei CANopen immer das niederwertige Bit darstellt)
- den Datentyp des Objekts
Diese Parameter werden auf dem folgenden Panel definiert, welches automatisch erscheint wenn die aktuell bearbeitete Variable mit einem PDO-Kanal verbunden ist:
Hinweise:
- Beim "UPT-2" (mit CANopen V4, z.B. UPT320) verwenden Sie für das PDO-Mapping besser die im CANopen-Objektverzeichnis immer vorhandenen PDO-mapbaren Variablen . Zum Zugriff darauf verwenden Sie die Interpreterfunktion obd(<Index>.<Subindex>) . Diese speziellen Variablen haben den Vorteil, dass sie in der EDS-Datei beschrieben sind, d.h. ihre Existenz ist (im Gegensatz zu den selbstdefinierten Variablen) jedem CANopen-Konfigurationstool bekannt - was die Konfiguration des Netzwerks erheblich vereinfacht !
- Nur 1-Bit-Parameter dürfen an beliebiger Bitposition im PDO-Datenfeld stehen.
- 8-, 16-, 24- oder 32-bit-Parameter müssen im PDO-Datenfeld an einer BYTE-GRENZE beginnen, daraus ergibt sich daß die "Nummer des Datenbits im PDO" immer ein Vielfaches von 8 sein muß ! (Die Bitzählung beginnt immer bei "0", nicht bei "1" wie in manchen Müsli-Programmiersprachen ;-)
- Parameter mit mehr als 8 Datenbits werden immer in der Reihenfolge "niederwertiges Byte zuerst" übertragen, was im CANopen-Standard immer der Fall ist (auch wenn Sie lieber Motorola-CPUs einsetzen, bei CAN hat sich wohl INTEL durchgesetzt)
Verwandte Themen: Kommunikationskanäle ,
SDO-Kanäle ,
PDO-Kanäle .
Verbinden von Variablen mit dem "eigenen" CANopen-Object-Dictionary des Terminals
In neueren Anzeigegeräten mit CANopen (siehe Feature-Matrix) können bestimmte Objekte im CANopen-OD direkt in PDO-Kanäle gemappt werden. Diese Objekte können (über ihren CANopen-Index und -Subindex) auch direkt mit den Display-Variablen verbunden werden. Der Interpreter kann ebenfalls direkt über den Objektindex auf das eigene CANopen-Objektverzeichnis des Gerätes zugreifen (siehe 'obd'-Funktion), was aber wegen der bei CANopen üblichen hexadezimalen Schreibweise der Indizes nicht jedermanns Sache ist. Aus dem Grund ist es möglich, bestimmte CANopen-Objekte auch mit einer Display-Variablen zu verbinden (-> Eingabe von OD-Index in der Tabelle mit den Variablendeklarationen; im weiter unten folgenden Screenshot rot markiert).Jeder Lesezugriff auf eine so deklarierte Variable greift dann in der Tat auf das CANopen-Objektverzeichnis zu; und ein Schreibzugriff (@Variablenname = Wert) führt intern zu einem Schreibzugriff auf das entsprechende CANopen-Objekt.
Ist das entsprechende Objekt in einen TPDO gemappt, kann die formelle Variablenzuweisung sogar zum Senden des Prozessdatentelegramms führen. Dies hängt allerdings vom 'Transmission Type' des PDOs ab.
Um die Verbindung von Display-Variablen mit dem CANopen-OD herzustellen,
bietet sich seit April 2010 folgender Ablauf an:
Zunächst ein Doppelklick in die Definitionstabelle in der Spalte mit
dem Titel OD-Index (bzw. Drücken der Enter-Taste, wenn eine Zelle
in dieser Tabellenspalte markiert ist) :
Per Doppelklick auf diese Zelle wird das folgende Dialogfenster geöffnet, in dem alle geeigneten CANopen-Objekte, mit hexadezimalem OD-Index und der (leider unspezifischen(*) ) Beschreibung des Objektes aufgelistet sind :
War die Display-Variable bereits vor dem Aufruf des Dialogfensters mit
einem Objekt im CANopen-OD verbunden, wird der ensprechende Listeneintrag
markiert (wie hier in blauer Farbe).
- Tip:
- Wenn Sie bereits mit CANopen vertraut sind, ist Ihnen bestimmt sofort aufgefallen, daß die Indizes nach der Formel 0x4000 + < CANopen-Datentyp > berechnet werden; Datentyp "4" bedeutet bei CANopen "32-bit signed integer".
Wenn vor dem Aufruf des Dialogs noch kein CANopen-Objekt mit der Display-Variablen verbunden war, wählt das Programm automatisch ein Objekt mit 'möglichst gut passendem Datentyp' (als Vorerinstellung; falls noch freie Subindizes im Objekt verfügbar sind). Jedes Objekt im Bereich 0x4001 bis 0x4009 verfügt über mindestens 10 Subindizes (je nach Firmware / Option "Monster-OD" auch bis zu 40). Insgesamt stehen also bis zu 360 'Speicherplätze' mit unterschiedlichen Datentypen zur Verfügung.
Nach dem Schließen des Dialogfensters per "OK" wählt das Programmiertool automatisch den nächsten freien Subindex des ausgewählten Objektes. Wäre z.B. Objekt 4004.01 und 4004.2 schon durch andere Variablen belegt, würde das Programmiertool automatisch Objekt 4004 Subindex 3 verwenden. Dies ist nach dem Schließen des Dialogfensters in der Variablen-Definitions-Tabelle sichtbar, und kann ggf manuell editiert werden.
Display-Variablen, die wie oben beschrieben mit dem CANopen-OD gekoppelt sind, sind für die 'Außenwelt' immer sichtbar, d.h. die Werte in diesen Variablen können über das Netzwerk gelesen oder geändert werden. Normalerweise werden solche externen Verbindungen bei CANopen mit einem speziellen Tool konfiguriert (z.B. dem CANopen Configuration Manager, mit dem nicht nur ein einzelner CAN-Knoten, sondern ein komplettes Netzwerk konfiguriert wird). Fast immer werden dazu PDO (Prozessdatenobjekte) verwendet, mit denen die CAN-Knoten im 'Normalbetrieb' (operational mode) Daten miteinander austauschen. Nur in Sonderfällen werden auch im Normalbetrieb SDO (Servicedatenobjekte) für die Kommunikation zwischen CANopen-Geräten eingesetzt, da die vorhandenen SDO-Server i.A. für den CANopen-Master reserviert sind.
Zurück zur Übersicht der Eigenschaften von Display-Variablen .
- (*)
-
Leider können die Objekte im CANopen-Object-Dictionary keine 'sprechenden'
Namen haben, denn die Namen von CANopen-Objekten sind leider nicht variabel
(zumindest nicht im EDS-File). Aus dem
Grund finden Sie im EDS-File nur nichtssagene Namen wie z.B. "Application
Vars 32 bit signed" für Objekt 0x4004 .
Für den Einsatz mit externer SPS-Konfigurationssoftware (z.B. CoDeSys) kann das UPT-Programmiertool (2) allerdings auch eine sogenannte DCF-Datei (device configuration file) zu erzeugen, in der dann tatsächlich die "sprechenden" Variablennamen enthalten sind (d.h. die Namen der Variablen, nicht die Default-Namen der CANopen-Objekte). Details zum DCF-Generator finden Sie hier .
Verwendung von "index" und "subindex" bei CANopen
Wenn eine Variable per SDO (CANopen Service-Daten-Objekt) mit der Außenwelt verbunden werden soll, müssen Sie den Index und Subindex des zu verbindenden Objekts kennen.Die "Objekte" eines CANopen-konformen Geräts sind im sogenannten "Objektverzeichnis" (object dictionary) enthalten. Jedes Objekt innerhalb eines CANopen-Dictionaries wird durch seinen Objekt-Index und Subindex definiert.
Der Objekt-Index ist ein 16-bit-Wert der normalerweise hexadezimal notiert wird. Hexadezimale Werte müssen beim UPT immer den Prefix "0x" oder "$" erhalten, andernfalls würde der Interpreter sie als Dezimalzahlen auffassen.
Der Subindex ist ein 8-bit-Wert, er wird oft für Arrays mit bis zu 255 Elementen oder für strukturierte Objekte mit bis zu 255 Komponenten verwendet.
Beispie: Ein E/A-Modul nach CANopen-DS401 mit 5 digitalen Eingängen enthält das Object 0x6020, welches den aktuellen Zustand der digitalen Eingänge repräsentiert. Subindex 0 dieses Objekts würde dann den Inhalt "5" haben, was hier "5 digitale Eingänge" bedeutet. Subindex 1 würde dann den aktuellen Zustand des ersten digitalen Eingangs liefern, Subindex 2 den Zustand des zweiten Eingangs und so weiter.
Index und Subindex von CANopen-Objekten sind oftmals im Gerätehandbuch angegeben. Für viele Objekte eines CANopen-konformen Gerätes finden Sie die benötigten Informationen auch im sogenannten Device Profile . Es gibt device profiles für verschiedene Typen von CANopen-Geräteklassen, zum Beispiel:
DS401: Device Profile for I/O Modules
- digital in- and outputs
- analog in- and outputs
Im folgenden werden einige oft verwendete Objekte angeführt. Eine Übersetzung aus dem Englischen haben wir uns (noch?) erspart...
DS401, Digital In- and outputs
DS401 specifies the CANopen Device Profile for I/O-Modules. If you want to connect any of these objects via SDO to a variable of your terminal program, you have to know the objects index and subindex. Here are some of the specified objects:Digital Inputs and Outputs
Index (hex) | Name |
Subindizes |
Type |
Access |
0x6000 | Read State [of] 8 Input Lines | 0,1 .. max.4 | Unsigned8 | ro |
0x6006 | Input Interrupt Mask [for] 8 Input Lines, any change | 0, 1.. max.4 | Unsigned8 | rw |
0x6020 | Read State [of] 1 Input Line | 0, 1.. max.32 | Unsigned8, Boolean |
ro |
0x6100 | Read State [of] 16 Input Lines | 0, [1, 2] | Unsigned16 | ro |
0x6120 | Read State [of] 32 Input Lines | 0, max. 1 | Unsigned32 | ro |
0x6200 | Write State [for] 8 Output Lines | 0, 1..max.4 | Unsigned8 | rw |
0x6206 | Fault Mode [for] 8 Output Lines | 0, 1..max 4 | Unsigned8 | rw |
0x6207 | Fault State [for] 8 Output Lines | 0, 1..max 4 | Unsigned8 | rw |
0x6220 | Write State [for] 1 Ouput Line | 0, 1.. max.32 |
Unsigned8, Boolean |
rw |
0x6250 | Fault Mode [for] 1 Output Line | 0, 1..max.32 |
Unsigned8, Boolean |
rw |
0x6260 | Fault State [for] 1 Output Line | 0, 1..max.32 |
Unsigned8, Boolean |
rw |
0x6300 | Write State [for] 16 Output Lines | 0, 1..max.2 |
Unsigned8, Unsigned16 |
rw |
0x6306 | Fault Mode [for] 16 Output Lines | 0, 1..max 2 |
Unsigned8, Unsigned16 |
rw |
0x6307 | Fault State [for] 16 Output Lines | 0, 1..max 4 |
Unsigned8, Unsigned16 |
rw |
0x6320 | Write State [for] 32 Output Lines | 0, max.1 |
Unsigned8, Unsigned32 |
rw |
0x6326 | Fault Mode [for] 32 Output Lines | 0, max 1 |
Unsigned8, Unsigned32 |
rw |
0x6327 | Fault State [for] 32 Output Lines | 0, max 1 |
Unsigned8, Unsigned32 |
rw |
DS401, Analog In- and outputs
DS401 specifies the CANopen Device Profile for I/O-Modules. If you want to connect any of these objects via SDO to a variable of your terminal program, you have to know the objects index and subindex. Here are some of the specified objects:Analog Inputs and Outputs
Index (hex) | Name | Subindizes | Type | Access |
0x6401 | Reads value of the input
channel (not converted) |
0
1 [... 4] |
Unsigned 8
Unsigned16 |
ro |
0x6411 | Writes value of the output channel (not converted) | 0
1 [... 4] |
Unsigned8
Unsigned 16 |
rw |
0x6420 | Set Analogue Input Range |
0
1 [... 4] |
Unsigned8
Unsigned 16 |
rw |
0x6421 | Determines which events cause an interrupt for a specific channel | 0
1 [... 4] |
Unsigned 8
Unsigned 8 |
rw |
0x6423 | Globally enable/disable Interrupt | 0 | Boolean | rw |
0x6424 | When enabled, interrupt triggered when analogue input rises above this value (not converted) | 0
1 [... 4] |
Unsigned8
Unsigned 32 |
rw |
0x6425 | When enabled, interrupt triggered when analogue input falls below this value (not converted) | 0
1 [... 4] |
Unsigned8
Unsigned 32 |
rw |
0x6426 | When enabled, interrupt triggered when analogue changes by more than this value from previous reading (rising or falling) (not converted) | 0 1 [...4] |
Unsigned8, Unsigned 32 |
rw |
0x6443 | Output Fault Mode | 0,1 | Unsigned8 | rw |
0x6444 | Default Output Fault value (unconverted) | 0
1 |
Unsigned 8
Unsigned 32 |
rw |
Variablen mit Anbindung an 'openABK'
Nur für Terminals mit openABK-Konnektivität !
Mangels Interesse an openABK sind diesbezüglich keine weiteren Entwicklungen geplant.
Wählen Sie dazu im Hauptmenü des Programmiertools den Eintrag Transfer, openABK, und im Untermenü die Funktion Definition von Variablen und Mailboxen aus einem openABK-Server lesen.
Nach dem Auslesen der Informationen aus dem openABK-Server schaltet das UPT-Programmiertool in ein neues Fenster um, in dem u.A. die auf dem openABK-Server vorhandenen Variablen mit den UPT-Display-Variablen (bzw den Variablen im MKT-Gateway) verknüpft werden können. Details zu diesem hochgradig 'openABK-spezifischen' Thema finden Sie in der Dokumentation der openABK-Funktionen separaten Dokument.
(Screenshot : Registerkarte 'openABK-Variablen' im UPT-Programmiertool)
Siehe auch (zum Thema 'openABK') :
OpenABK-'Discovery' (Protokoll zum Auffinden von openABK-Geräten im Netzwerk),
openABK-Support für programmierbare Displays und Gateways von MKT Systemtechnik.
Data-Breakpoints (Überwachung bestimmter Schreibzugriffe auf eine bestimmte Variable)
Für die Fehlersuche während einer Simulation kann die Ausführung des Programms gestoppt werden, wenn beim Schreibzugriff auf eine bestimmte Variable ein bestimmter Wert (bzw. Wertebereich) gesetzt werden soll. Um einen solchen 'Data-Breakpoint' zu definieren, klicken Sie zunächst auf der Registerkarte 'Variablen' mit der rechten Maustaste auf den gewünschten Namen.Im daraufhin angezeigten Kontext-Menü wählen Sie die Funktion
Setze Data-Breakpoint auf Zuweisungen an 'XYZ'
(darin ist 'XYZ' der Name einer in der Tabelle definierten Variablen)
Im daraufhin angezeigten Dialog geben Sie den Wert oder Wertebereich ein, bei dessen Zuweisung an die Variable die Simulation angehalten werden soll.
Wird der 'max'-Wert (nach dem Komma) weggelassen bzw. gelöscht, dann wird der zugewiesene Wert nicht mit einem Bereich sondern mit einem einzelnen Wert verglichen.
Wird dann irgendwo (z.B. in den globalen oder lokalen Events) ein neuer Wert per Interpreter im 'Abbruch'-Bereich an die Variable zugewiesen, dann schaltet das Programm (bzw. die Simulation) augenblicklich in den Zustand 'gestoppt' um. Eine entsprechende Meldung (mit dem alten und neuen Wert der Variablen) wird dann unter Fehler & Meldungen angezeigt, z.B.:
Data breakpoint fired on global event 12 when setting XYZ = 123.4 .
oder (wenn die Zuweisung nicht in einem 'Globalen Event' sondern auf einer bestimmten Display-Seite erfolgte):
Data breakpoint fired on page 13, line 14, when setting XYZ = 123.4 .
- Hinweis zur Funktionsweise:
- Der so gesetzte Data-Breakpoint funktioniert ähnlich wie ein flankengetriggertes Oszilloskop.
Der "Trigger" (in diesem Fall Programmabbruch mit Meldung) erfolgt nur,
wenn der alte Wert der Variablen außerhalb,
und der neue Wert der Variablen innerhalb
des oben beschriebenen Wertebereiches liegt.
Beim Setzen eines neuen Breakpoints wird der momentane Wert
aus der Variablen als "vorheriger Wert" intern gespeichert.
grau : Breakpoint noch 'passiv', weil noch keine Auswertung erfolgte
gelb : Breakpoint ist 'scharf', hat aber noch nicht ausgelöst
rot : Breakpoint hat 'ausgelöst'
Dank der oben beschriebenen Flankentriggerung kann die Simulation nach Stop per Data-Breakpoint einfach durch Anklicken des dann mit 'Gestoppt' beschrifteten Panels in der Statuszeile fortgesetzt werden. Das Programm wird danach erst wieder stoppen, wenn der Wert der Variablen zunächst außerhalb, und dann wieder innerhalb des Wertebereichs für den Haltepunkt läuft.
Wie auch bei 'Code Breakpoints' (in diesem Fall: Breakpoints in globalen oder lokalen Events) kann das Programm nach dem Auslösen eines Data-Breakpoints im Einzelschritt-Betrieb (per Funktionstaste F11) fortgesetzt werden.
Einstellungen (auf Registerkarten und in Dialogen des Programmiertool)
Die wichtigsten Parameter können im Programmiertool auf der Registerkarte 'Einstellungen' kontrolliert und geändert werden. Im linken Teil finden Sie z.g.T. Einstellungen, die bei der Übertragung mit dem zu programmierenden Gerät synchroniziert oder auf Kompatibilität geprüft werden.Im rechten Teil der hier gezeigten Registerkarte finden Sie Einstellungen, die für eine erfolgreiche Übertragung (z.B. per CAN) zum programmierbaren Gerät "passen" müssen:
Screenshot mit Registerkarte 'Einstellungen' (Settings)
Einstellungen im rechten Teil der Registerkarte 'Einstellungen'
Die Panels im rechten Teil der Registerkarte 'Einstellungen' enthalten Einstellungen, die das Programmiertool, aber nicht das damit erstellte Programm betreffen.Einstellungen des Programmiertools
Im oberen rechten Panel mit dem Titel 'Einstellungen des Programmiertools' können folgende Parameter eingestellt werden (einige davon mit Hilfe zusätzlicher Dialogfenster, die in später folgenden Kapiteln noch vorgestellt werden):- Konfiguration des CAN-Interfaces (Klicken Sie zunächst auf 'Auswahl + Einstellung', falls Sie ein CAN-Interface am PC betreiben),
- CAN-Bus Parameter für die Kommunikation mit dem am PC per CAN-Bus angeschlossenen Gerätes (Baudrate, evtl. weitere Parameter für CAN-FD)
- Auswahl der seriellen Schnittstelle am PC (z.B. "COM1"), falls das Programm
per RS-232 übertragen werden soll.
An diesem Port kann auch eine GPS-Maus angeschlossen werden, um mit dem PC / Programmiertool ein GPS-fähiges Gerät zu emulieren (inkl. der Echtzeitverarbeitung von 'echten' GPS-Daten); - Baudrate für die serielle Schnittstelle, die das Programmiertool zum
Übertragen der Applikation, aber auch für das
File Transfer Utility verwenden soll.
Hinweis: Nicht alle in der Liste aufgeführten Baudraten sind für alle Geräte verwendbar. Alte Geräte mit 8-Bit-CPU funktionieren mit maximal 19200 Bit/Sekunde, und Baudraten wie 230400 oder 460800 Bit/Sekunde funktionieren nur mit einem geeigneten Interface auf der PC-Seite (z.B. USB<->RS-232 Adapter aka "Virtual COM Port"). - Node ID des zu programmierenden Terminals (falls das Programm per CANopen/SDO übertragen werden soll)
- Node-ID des Programmiertools (falls das Programmiertool selbst als CANopen-Slave addressierbar sein soll, zum Testen + Simulieren),
- Einstellen, ob und wie das Programmiertool im Simulatorbetrieb Töne erzeugt (üblicherweise per Soundkarte)
- Konfiguration des im Programmiertool emulierbaren Web-Servers.
Da der Betrieb eines Web-Servers Ärger mit der Firewall des PCs verursachen könnte, ist diese Option per Default abgeschaltet.
Neben der Option 'Embedded Web Server emulieren' wird auf diesem Panel auch die vom Emulator verwendete (TCP-)Port-Nummer eingestellt. Diese Port-Nummer (i.A. 80 für den HTTP-Server) gilt nur für die Emulation auf dem PC ! Der Web-Server im 'echten' Gerät wird über dessen 'Netzwerk-Setup' konfiguriert.
Mit dem Button 'TEST' (rechts neben der Port-Nummer) wird der HTML-Browser gestartet, um eine Verbindung mit dem auf dem gleichen PC laufenden Server aufzubauen (127.0.0.1) .
Auswahl von Verzeichnissen
Unterhalb der 'Einstellungen des Programmiertools' finden Sie eine Liste mit Verzeichnissen, die das Programmiertool zum Speichern bestimmter Dateien nutzt.
Zu den einstellbaren Dateipfaden und Unterverzeichnissen ("Directories") zählen:
- das Verzeichnis, in dem Ihre Terminal-Applikation(en) abgelegt werden (per Default 'programs', nicht zu verwechseln mit dem Windows-Folder "Programme" !),
- das Verzeichnis mit dem Hilfesystem im HTML-Format (welches Sie vermutlich nie ändern werden.. im Gegensatz zur Auswahl des HTML-Browsers),
- das Verzeichnis, aus dem Icons importiert werden. Stellen Sie dieses Verzeichnis passend ein, um sich eine Menge Zeit durch nervtötende Mausklicks im Windows-Datei-Auswahl-Dialog zu ersparen, wenn eine neue Grafik in die UPT-Applikation importiert werden soll),
- das Verzeichnis für Script-Include-Dateien,
- das Verzeichnis mit anwenderdefinierten Zeichensätzen ('fonts'),
- Verzeichnispfad und Programmname des optional installierten Font-Editors (damit das Programmiertool diesen direkt starten kann),
- Verzeichnispfad und Programmname des CAN-Logger-Utilities ( " " " .. ),
- das Verzeichnis mit Audio-Dateien (wave files), damit das Programmiertool auch Terminals mit Audio-Wiedergabe simulieren kann,
- das Verzeichnis für die Simulation der Speicherkarte für die Entwicklung komplexerer Applikationen ohne 'echte' Hardware.
Hinweis: Die oben gezeigten 'Directory'-Einstellungen werden automatisch verworfen,
wenn ein neues Programmiertool in einem anderen Verzeichnis
auf der Festplatte installiert wird als bei der vorherigen Version.
Die Directory-Einstellungen können auf die 'Default'-Werte gesetzt werden
(wie nach einer Neu-Installation), indem die folgende Datei im 'Windows'-
Verzeichnis gelöscht wird (zumindest unter Windows XP war dies möglich):
- Programmiertool für Anzeigegeräte mit 'CANopen' : C:\WINDOWS\MKT_CANopenTerminalProgTool.ini
- Programmiertool für Anzeigegeräte mit 'CANdb' : C:\WINDOWS\MKT_CANdbTerminalProgTool.ini
Keines der Programmiertools von MKT verlässt sich auf die Windows-Registry, um dort 'wichtige' Daten zu speichern.
Einstellungen im linken Teil der Registerkarte 'Einstellungen'
Die Panels im linken Teil der Registerkarte 'Einstellungen' zeigen die Konfiguration des aktuell angeschlossenen Gerätes, bzw. des zu programmierenden Gerätes dar.
Linker Teil der Registerkarte 'Einstellungen'
Terminal-Konstanten (erster Teil der tabellarischen Ansicht)
Die Werte im oberen Teil der Tabelle unter 'Terminal-Konstanten, Einstellungen, nichtflüchtige Werte' im linken Teil der Registerkarte 'Einstellungen' sind nur für die Simulation und die Programmerstellung in Programmiertool wichtig. Einträge in dieser Tabelle sorgen z.B. dafür, dass das Programmiertool keine Funktionen anbietet, die vom zu programmierenden Gerät nicht unterstützt werden.Im Normalfall kümmert sich das Programmiertool selbst um die notwändigen Einträge; fast alle Einstellungen werden beim Up/Download per CAN automatisch synchronisiert. Wird allerdings die Konfiguration nur per Speicherkarte vom Programmiertool in das programmierbare Gerät übertragen, dann hat das Programmiertool keine Möglichkeit, den Inhalt dieser Tabelle aus dem Gerät auszulesen - die Einträge sind aus dem Grund notfalls manuell editierbar :
Im oberen Teil der Tabelle ("Konstanten") enthalten sind:
- das Kompilationsdatum der Geräte-Firmware (wichtig zur Vermeidung von Versions-Konflikten)
- die maximal mögliche Anzahl von Anzeigeseiten
- die maximal mögliche Anzahl von Zeilen im Text-Array
- und weitere, nur in Ausnahmefällen modifizierbare Parameter
Die in der Tabelle angezeigte Anzahl Icons (number of icons) ist die Anzahl momentan in der Applikation vorhandener Icons (wird automatisch ermittelt). Die maximale Anzahl von Icons ist i.A. nicht spezifizierbar; sie hängt von der Größe der Icons ab. Definierbar ist lediglich die Größe des für Icons zu reservierenden Speichers; dazu dient ein besonderer Einstelldialog.
Bei alten Geräten (z.B. UPT515 und MKT-View "Plus") kann die Anzahl Anzeigeseiten oder Anzahl Textzeilen angeklickt werden, um die Speicheraufteilung zu ändern. Beim Doppelklick auf die entsprechende Zelle in der Parameterliste (untere Tabelle) erscheint, passend zum Typ des angeklickten Parameters, z.B. auch zum Einstellen der Tastenkombination für das System-Menü oder für die Speicheraufteilung. Bei neueren Geräten (mit 32-Bit-CPU) ist -dank dynamischer Speicherverwaltung- diese Einstellung unnötig, bzw. hat keine Funktion.
Um die Defaultwerte des nichtflüchtigen Speichers (non-volatile numeric array) zu ändern, scrollen Sie die "Parameter"-Liste nach unten bis Sie die entsprechenden Werte sehen. Klicken Sie dann auf den gewünschten Eintrag um ein kleines Editierfenster zu öffnen, in dem Sie den Wert ändern können.
Die "Terminal-Konstanten" (constants) können bis auf wenige Ausnahmen nicht editiert werden, sie werden hier nur zu Ihrer Information angezeigt. Weil mittlerweile eine große Vielzahl verschiedener Firmware-Versionen und -Varianten existiert, versucht das Programmiertool bei jedem Up- oder Download diese Informationen aus dem angeschlossenen Terminal zu lesen. Zu den "Terminal-Konstanten" gehören unter anderem:
- Hardware-Profil, z.B. "MKTVIEW_3"
- Software-Profil, z.B. "CVTv1" für Geräte mit CAN, aber ohne CANopen (ehemals: Can-View-Terminal), und ohne CAN-FD
- Firmware-Kompilations-Datum
- maximale Anzahl von SDO-Kommunikations-Kanälen (nur für Geräte mit CANopen)
- maximale Anzahl von PDO-Kommunikations-Kanälen (nur für Geräte mit CANopen)
- maximale Anzahl von Display-Variablen
- maximale Größe des Script-Quelltextes (in kByte, hardwarespezifisch, und bei der Erstellung dieses Dokuments noch unbekannt)
- maximale Länge eines Format-String (der auch als statischer Text oder Menüeintrag verwendet werden kann)
- maximale Länge einer event-"condition" (Bedingung einer Ereignis-Abfrage)
- maximale Länge einer event-"reaction" (Reaktionsdefinition, als Quelltext für den Interpreter)
- maximale Anzahl von "globalen" Events (meistens 20 oder mehr)
- maximale Anzahl von Definitionszeilen pro Anzeigeseite (z.B. 15 beim "alten" UPT515)
- maximale Anzahl von Display-Seiten ohne "Spezialitäten" (wie dem Text-Array und Icon-Speicher, meistens 100 Pages)
- maximale Länge eines Seiten-Namens (meistens 8)
- maximale Länge eines Variablen-Namens (ehemals 8, meistens aber 12)
- maximale Anzahl von Zeilen im Text-Array (meistens 1024)
- maximale Anzahl von Icons, falls eine Begrenzung durch den Speicher-Manager erfolgt
- Art der Flash-Speicher-Verwaltung (statisch/flexibel)
- Display-Typ: 1=monochrome, 4=color with 4 bits/pixel
- Breite des Displays: 128 pixel beim "UPT515", 320 bei "UPT167","MKT-VIEW","IPE-VIEW"
- Höhe des Displays: 64 pixel beim "UPT515", 240 bei "UPT167","MKT-VIEW","IPE-VIEW"
- Unterstützte Zeichensätze als Bit-Kombination aus den Zeichensatz-Nummern.
Dieser Parameter kann notfalls modifiziert, z.B. wenn bekannt ist, dass im verwendeten Gerät mehr Zeichensätze existieren als im Programmiertool (oder der *.cvt-Datei) hinterlegt war. Wie bei vielen Parametern kann auch hier per Doppelklick ein spezieller Dialog geöffnet werden:
Dialog zur Kontrolle der vom Gerät unterstützten Zeichensätze
- und eine Vielzahl weiterer "Infos", die nur für Software-Entwickler wichtig sind..
Im Normalfall (d.h. wenn ein Standard-Gerät mit aktueller Standard-Firmware
verwendet wird), werden alle Informationen, die das Programmiertool über
die verwendete Hard- und Firmware kennen muss, bereits bei der Anwahl des
Zielsystems passend eingestellt. Verwenden Sie dazu (im Hauptmenü) die
Funktion Optionen...Geräteauswahl/LCD-Einstellungen.
Terminal-Einstellungen (zweiter Teil der tabellarischen Ansicht)
Links unten auf der Registerkarte 'Einstellungen' befindet sich die Tabelle 'Terminal-Einstellungen':Die dort einstellbaren Parameter sind:
- CAN-Kommunikation: Baudrate und weitere Bit-Timing-Parameter
(Anklicken einer dieser Zeilen öffnet das im folgenden Kapitel vorgestellte Dialogfenster 'CAN Bus Parameter') - die maximal mögliche Anzahl von Zeilen im Text-Array
- 'Generelle' Optionen (Anklicken dieser Zeile öffnet das Dialogfenster Allgemeine Terminal-Optionen)
- die Tastenkombination zum Aufruf des System-Menüs im Terminal (default: F2+F3)
- bis zu 32 verschiedene nicht-flüchtige numerische Werte auf die per Interpreter ("nv[0..31]") oder Script zugegriffen werden kann
Siehe auch: Optionales Setup (LCD, Automatik für die Hintergrundbeleuchtung, Audio)
Allgemeine Terminal-Optionen (Boot-Meldungen, Tastenkombination für Setup, ..)
Netzwerk-Setup im Systemmenü des Gerätes
Übersicht .
Erweiterte CAN-Bus Parameter (einstellbar per Dialog)
Abhängig von der Hardware stehen bis zu vier 'logische' CAN-Schnittstellen zur Verfügung,
wobei i.A. nur CAN 1 und CAN 2 phyikalisch (direkt am Gerät) verfügbar sind.
Die Schnittstellen CAN 3 und CAN 4 sind wahlweise über ein externes Gateway (CAN-via-UDP) als CAN- oder LIN-Port nutzbar.
Die Verwendung und Konfiguration der CAN- bzw. LIN-Schnittstellen erfolgt per Dialog im Programmiertool:
Zum Öffnen dieses Dialogfenster dient die Funktion Optionen ..
CAN-/LIN-Bus-Einstellungen im Hauptmenü des Programmiertools.
Details zur Verwendung der Ports CAN 3 oder CAN 4 als LIN-Interface finden Sie hier.
Die Konfiguration des optionalen UDP/CAN-Gateways für CAN 3 oder CAN 4 wird hier beschrieben.
Bei neueren Geräten sind folgende CAN-Bus-Parameter konfigurierbar:
- Baudrate
-
Gerundete CAN-Baudrate in kBit/Sekunde. Die Baudrate "666" entspricht 666.66666
kBit/Sekunde; "83" entspricht 83.33333 kBit/Sekunde. Alle anderen CAN-Baudraten
sind nicht gerundete Integer-Zahlen.
- Position of Sample Point (Position des Abtastpunktes)
-
Beschreibt die Position des Abtastpunktes innerhalb eines CAN-Datenbits,
als prozentuale Angabe (relativ zur Bitlänge). Übliche Werte sind
80 ... 83 Prozent, wobei 83 % i.A. 83.3333 % sind. Bei den meisten Geräten
mit CANopen hat dieser Parameter keinen Effekt.
- Sync Jump Width (SJW)
-
Weite eines Synchronisationssprungs beim Empfang, gemessen in Vielfachen
eines Abtast-Intervalls (tq, time quanta). Jedes CAN-Datenbit wird im
CAN-Controller in möglichst viele Abtastintervalle aufgeteilt (im
Automobilbereich oft "BTL-Zyklen" genannt, d.h. Bit-Timing-Logik-Zyklen).
Die resultierende Länge des Synchronisationssprunges ist daher leider
hardwareabhängig, liegt aber (fast) immer zwischen 10 und 20
Abtastintervallen.
Die tatsächlich realisierte Anzahl von Abtast-Intervallen kann nur im Gerät untersucht werden, siehe Kapitel "CAN Bit Timing Parameters" in Dokument Nr. 85115 (PDF) .
- Flexible Data Rate (FD)
-
Bitrate für das 'schnelle' Datenfeld bei 'CAN FD' mit Bitraten-Umschaltung.
Übliche CAN-FD-Bitraten sind 1000, 2000 oder 4000 kBit/Sekunde, in Ausnahmefällen
(wenn es Kabel, Steckverbinder, und die Transceiver auf beiden Seiten erlauben)
auch 8000 kBit/Sekunde.
Dieses Feld ist nur bei Geräten verfügbar, deren CAN-Controller und -Transceiver neben "Classic CAN" auch CAN FD unterstützen, z.B. MKT-View V.
Um CAN FD auch für die schnelle Übertragung zwischen Programmiertool und MKT-View (V) zu verwenden, muss auch das CAN-Interface am PC 'CAN FD' unterstützen, und auf der Registerkarte 'Einstellungen des Programmiertools' eine geeignete Kombination von Bitraten für die Arbitrierungs- und Datenphase eingestellt werden.. Dies ist momentan (2020-02) nur mit CAN-Interfaces von Kvaser möglich (getestet mit 'Kvaser Hybrid 2*CAN/LIN').
Bei der Geräteauswahl wird die Information, ob CAN FD für das verwendete Gerät verfügbar ist, aus einer internen Datenbank in das Geräteprofil übernommen. Beispiel: Der für das MKT-View V ursprünglich vorgesehene i.MX RT1064 verfügt über drei CAN-Controller, von denen leider nur einer CAN FD unterstützt. In dem Fall würde die Geräte-Firmware den CAN-FD-fähigen Controller (bei NXP "FlexCAN3" genannt) als ersten logischen CAN-Port ("CAN 1") verwenden.
Siehe auch: Hinweise zur Unterstützung von CAN FD im MKT-View V.
- Activate the following flags, and include them in the config :
-
Mit dieser Option werden ("ausnahmsweise") beim Übertragen der Konfiguration
(*.cvt) in das zu programmierende Gerät die dort im
System-Setup-Menü konfigurierten Werte
überschrieben. Ist diese Option nicht gesetzt, bleiben
die unten aufgelisteten Werte im System-Setup
unverändert. Zu den für CAN relevanten Flags
gehören:
- Enable Transmit and Acknowledge
-
Ermöglicht das Senden von CAN-Telegrammen, und Acknowledge-Bits.
Ist diese Option nicht gesetzt, wird der CAN-Knoten zum 'passiven Lauscher' (Listen-Only-Mode).
Hinweis: Diese Option existiert nur in Geräten mit geeigneter CAN-Hardware bzw. geeignetem CAN-Controller !
- Active Terminator (Resistor)
-
Schaltet den in manchen Geräten (z.B. MKT-View II) vorhandenen
schaltbaren Abschlusswiderstand ein, mit dem das Gerät den
CAN-Bus mit der zum Wellenwiderstand des verwendeten Kabels
passenden Impedanz (i.A. 120 Ohm) reflektionsfrei abschliessen kann.
Hinweis: Diese Option existiert nur in Geräten mit geeigneter CAN-Hardware bzw. geeignetem CAN-Controller, z.B. MKT-View II / III / IV !
Siehe auch:
- Hinweise zum Systemmenü / System Setup in der Beschreibung des Setup-Menüs im Terminal, Dokument Nr. 85115 (PDF) .
- Inbetriebnahme eines CAN-Interfaces "im" (bzw. am) PC, z.B. Kvaser Leaf, PCAN-USB, etc.
- Konfiguration des im Programmiertool für die Programm-Übertragung verwendeten CAN-Interfaces
Dialog 'Allgemeine Terminal-Optionen'
(Ursprünglich nur für "UPT" = user programmable terminal,
mittlerweile auch für MKT-View u.A. verwendet)
Der Einstelldialog "Allgemeine Terminal-Optionen" dient zum Einstellen einiger Parameter, die später beim Übertragen der Applikation in das programmierte Gerät benötigt werden. Dieser Dialog kann u.A. durch Anklicken des entsprechenden Eintrags im Hauptmenü unter "Optionen" geöffnet werden.
Die Option Enable System Menu / Aufruf des System-Menüs zulassen
kann abgeschaltet werden, wenn Sie sicher sind daß Sie (oder der Bediener des Terminals)
die Funktionen im UPT-Systemmenü nicht brauchen
(z.B. weil Sie die Tastenkombination F2+F3 in Ihrem UPT-Programm verwenden oder
weil Sie nicht wollen, daß der Bediener im Systemmenü herumspielt ;-).
Selbst wenn die Option "Enable System Menu" abgeschaltet ist, können
Sie noch ins Systemmenü gelangen, wenn beim Einschalten des Gerätes
die Tasten F2+F3 gedrückt gehalten werden (dann ist allerdings das
"Anwenderprogramm" noch nicht geladen, und "kritische" oder "geheime" Daten
sind nicht einsehbar).
Die Option Enable Debugging ist nur für den Entwickler der
Geräte-Firmware vorgesehen. Sie sollten diese Option abgeschaltet lassen.
Die Option Readout Protection (Ausleseschutz) verhindert, dass
die Applikation später aus dem Terminal per CAN oder RS-232
zurückgelesen werden kann. Bitte beachten Sie, dass diese Option erst
bei Geräten mit Firmware ab Kompilationsdatum 2009-05-20 funktioniert,
da diese Funktion erst im Mai 2009 implementiert wurde.
Mit der Option Bootup Display können
Meldungen kurz nach dem Einschalten des Displays erlaubt bzw. unterdrückt werden.
Dazu zählt u.A. der beim Compilieren des Scripts durchlaufende Text, Meldungen
beim Starten des CAN-Loggers, und diverse Popup-Fenster
beim Initialisieren verschiedener Netzwerk-Protokolle (z.B. Meldung der eigenen
IP-Adresse nach Zuweisung per DHCP,
Verbindungsaufbau für CAN-via-UDP, etc).
Die gleiche Einstellung ist auch 'am Gerät' (unter 'System Setup' / 'Display')
verfügbar. Siehe auch: Hinweise zur Anzeige eines eigenen Logos ("Boot-Screen").
Die Option Auto-Scale for larger display resolutions (automatisches Anpassen an höhere Display-Auflösungen) sollte gesetzt werden, wenn in der Applikation keine 'pixelgenauen' Grafikausgaben nötig sind, und ein beispielsweise für 320 * 240 Pixel entwickeltes Anzeigeprogramm ohne Änderungen auch auf einem 480*272-Pixel-Display laufen soll (ohne daß dabei Platz auf dem Display verschenkt wird). Siehe auch FAQs zum Umstieg vom älteren MKT-View auf das neuere MKT-View II / III .
Die Tastenkombination zum Aufruf des UPT-System-Menüs kann nun vom Programmiertool aus geändert werden, weil die alte (feste) Kombination F2+F3 mit der Anwendung eines Kundens kollidierte) . Seien Sie vorsichtig mit dieser Option, denn nicht alle Tastenkombinationen können bei allen Geräten abgefragt werden (speziell bei Geräten mit gemultiplexter Tastatur-Abfrage). Falls Sie hier eine "unmögliche" Tastenkombination eingegeben haben, können Sie das UPT-System-Menu nur durch Drücken von F2+F3 während des Einschaltens erreichen, oder (einen Ethernet-Anschluss vorausgesetzt) per Telnet-Verbindung.
Siehe auch:
-
Kontrolle der unterstützten Grafikfunktionen (Dialog),
LCD-Einstellungen (Dialog),
Optionales Setup (Beleuchtung, etc), Speicheraufteilung,
Einstellungen (Registerkarte) .
Optionales Setup (früher nur per System-Setup am Gerät konfigurierbar)
Bei manchen Geräten (z.B. MKT-View II/III/IV) kann das Display auch optional per Programmiertool konfiguriert werden. Bei älteren Geräten (mit älterer Firmware) konnten die hardware-spezifischen Einstellen nur mit Hilfe des System-Menüs im Terminal geändert werden (per System Setup / Display Setup / LCD Dimming) .Um den folgenden Konfigurations-Dialog zu öffnen, wählen Sie im Hauptmenü des Programmiertools die Funktion Optionen ... Display Setup .
Wichtig: Beim Übertragen der Display-Applikation (*.upt bzw. *.cvt) in das Zielsystem werden diese Einstellungen nur übertragen, wenn die Option (Checkmark) 'Include these settings when downloading the configuration' im oben gezeigten Dialogfenster gesetzt ist. Andernfalls wird das 'Optionale Setup' weder in der UPT / CVT-Datei gespeichert, noch übertragen. Das Programmiertool bleibt dadurch mit älteren Firmware-Versionen kompatibel. In einigen Fällen ist es auch nicht erwünscht, die individuellen Einstellungen (die vom Bediener möglicherweise aus gutem Grund im Systemmenü des Gerätes geändert wurden) beim Laden der Display-Applikation wieder zu überschreiben.
Beim Übertragen einer *.UPT oder *.CVT-Datei, in der die Option 'Include these settings...' gesetzt ist, werden die alten Einstellungen im System-Setup (EEPROM) einmal überschrieben. Danach können sie, solange das System-Menü nicht per 'General Settings' gesperrt wurde, vom Benutzer jederzeit wieder angepasst werden.
Hinweis: Der Wirkungsgrad mancher LCD-Hintergrundbeleuchtungen (i.A. weiße LEDs, bei älteren Geräten auch CFL) kann altersbedingt, oder durch Wechsel der Display-Technologie, variieren. Die gleichen 'Brightness'-Einstellungen können daher bei verschiedenen Geräten zu unterschiedlichen Helligkeiten führen !
Details zur Tag/Nacht-abhängigen Steuerung der Hintergrundbeleuchtung finden Sie in der Beschreibung des System-Setups, siehe Dokument Nr. 85115 .
Siehe auch: Feature matrix (für verschiedene Geräte),
General settings (tab),
Auswahl der Drehrichtung für den 'Portrait-Modus' im Geräte-Setup,
Übersicht
Kontrolle der unterstützten Grafikfunktionen (supported graphic functions)
Abhängig von der verwendeten Hardware und dem Firmwarestand kann das Zielsystem ("Terminal") einige der folgenden Grafikfunktionen unterstützen :- Invertierung des gesamten Bildschirms ("screen inversion", siehe Interpreterkommando "di").
- Graphische Buttons
- Bargraphen (Balkenanzeigen)
- Y(t)-Diagrams
- benutzerdefinierbare Zeichensätze
- Existenz eines Touchscreens (wichtig für die Simulation)
- und weitere Funktionen, die zum Zeitpunkt der Erstellung dieses Dokuments noch unbekannt waren...
Das folgende Dialogfenster kann aus dem Hauptmenü des Programmiertools oder durch Anklicken der entsprechenden Zeile auf der Registerkarte "General Settings" geöffnet werden:
Wenn eine Kontrollmarkierung in diesem Dialogfenster nicht gesetzt ist, bedeutet das nicht unbedingt dass die entsprechende Funktion nicht zur Verfügung steht ! Die Information, welche Funktionen vom Zielgerät unterstützt werden, ist in der Anwendungsdatei (*.upt bzw. *.cvt) enthalten. Nach dem Laden einer "alten Anwendung" ( *.upt oder *.cvt) könnte z.B. angezeigt werden, daß keine "Buttons" unterstützt werden, obwohl dies mit der "neuen" Firmware möglich ist. Der Grund ist: zum Zeitpunkt, als die Applikation erstellt wurde, gab es diese Funktion möglicherweise noch nicht ! Aus diesem Grund können Sie das Verzeichnis der "unterstützten Funktionen" zur Not manuell ändern (*). Normalerweise werden dies beim Auslesen(!) einer Applikation aus dem Terminal (per CAN-Bus) aktualisiert, und die Kontrollmarkierungen im oben abgebildeten Dialogfenster entsprechend gesetzt.
-
(*) Vorsicht: Setzen Sie keine Häkchen vor Funktionen, die vom verwendeten
Terminal (bzw dessen Firmware) tatsächlich nicht unterstützt werden
! Nach dem Download der Applikation ins "echte" Terminal könnte die
Anzeige im Display fehlerhaft sein, oft erscheint im Display dann der "Quelltext"
der nicht unterstützten Grafikfunktion !
Eine Übersicht, welches Terminal (mit welcher Firmware) welche Funktionen bietet, finden Sie in der Feature-Matrix .
Die Option "Breite und Höhe von Anzeigeelementen in
zusätzliche Spalten
anzeigen" ist nicht manuell wählbar. Sie hängt einzig und allein
vom Kompilationsdatum der
Gerätefirmware ab. Diese kann notfalls manuell auf der Registerkarte
"Einstellungen" (Settings) eingetragen werden, z.B. wenn keine bidirektionale
Übertragung zwischen Programmiertool und zu programmierendem Gerät
möglich ist (sondern nur per Speicherkarte).
Geräte mit Firmware-Kompilationsdatum vor 2009-11-27 unterstützten
die Breite und Höhe von Anzeigeelementen nur innerhalb der Parameterliste
von Buttons oder Bargraphen (und
sind daher veraltet, bzw. können für neuere Geräte erstellte
Programme nicht mehr verarbeiten).
Siehe auch: General UPT options (Dialog),
LCD-Einstellungen (Dialog)
, Speicheraufteilung (Dialog) .
Einfügen einer Datei-Beschreibung
Die 'Dateibeschreibung' ist eine frei definierbare, in der UPT-Datei (*.UPT bzw *.CVT) enthaltene Zeichenkette.
Diese sollte kurz genug sein, um bei der Anzeige im 'Applikations-Selektor' in eine Zeile auf dem Bildschirm zu passen.
Das Script-Demo 'AppSelector.cvt' zeigt diese Zeichenkette in einer Liste statt des 'DOS'-Dateinamens an,
da ein DOS-Dateiname auf 8+3 Zeichen begrenzt ist.
Beispiel (aus dem Demo 'AppSelector', in dem eine Tabelle zur Anzeige
aller auf der Speicherkarte gefundenen *.cvt - Dateien, oder deren Beschreibungen, verwendet wird):
Die Dateibeschreibung kann per Programmiertool im Menü 'Datei'...'Beschreibung' definiert werden :
Beim Aufruf des System-Menüs (Drücken von F2 und F3) wird u.A. auch die Dateibeschreibung (im Feld "App-Info") angezeigt. Dadurch kann mit einem Blick kontrolliert werden, ob im Gerät wirklich die für eine bestimmte Messaufgabe, Testfahrt, etc vorgesehene Applikation geladen wurde, falls sich die Applikation nicht selbst durch eine entsprechende Anzeigeseite identifiziert.
Das Script kann diese Zeichenkette als display.app_info auslesen.
Für Entwickler:
Die Dateibeschreibung wird im nicht verschlüsselten Teil der Datei ("Kopf") abgelegt, denn nur so kann das Script im "App-Selektor" diese Information aus der Datei extrahieren. Beispiel:
; File: c:\MKT\CANdbTerminalProgTool\programs\Brake_T1.cvt
; Saved: 2015-03-05 11:12:13
; Type: program file for user programmable terminal
; Producer: programming tool compiled Mar 5 2015
Description="Bremsentest, Strecke 1"
Encryption=0
PwdHint1=""
Password1=""
Das Script im 'App-Selektor' verwendet
die Funktion file.read zum Extrahieren der Dateibeschreibung aus einer *.cvt- oder *.upt-Datei.Simulation der Speicherkarte (im PC, als Ersatz für die Speicherkarte im 'echten Gerät')
Um komplexere Applikationen (z.B. mit Zugriff auf Dateien per Script) ohne spezielle Hardware am PC zu entwickeln, kann die im 'echten Gerät' vorhandene Speicherkarte durch ein frei wählbares Unterverzeichnis auf der Festplatte des PCs ersetzt werden (Parameter "Simulated MC" auf dem Panel "Directories").Um das Einsetzen / Entfernen der Speicherkarte zu simulieren, wählen Sie im Hauptmenü des Programmiertools unter 'Optionen' die Funktion
'Simulierte Speicherkarte' (schaltet zwischen 'Eingesetzt' und 'ENTFERNT' um).
Kontrolle der in einer Applikation verwendeten 'externen' Dateien
Manche Display-Anwendungen (Applikationen bzw "Programme") verwenden während ihrer Laufzeit externe, z.B. auf einer Speicherkarte oder im FLASH-Speicher des Terminals abgelegte Dateien, z.B. bestimmte Audio-Dateien, die während des Betriebes wiedergegeben werden sollen.
Wenn Sie derartige Anwendungen an Dritte weitergeben wollen (Kunden, Kollegen,..), vergessen Sie nicht, alle von der Anwendung benötigten 'externen' Dateien ebenfalls weiterzugeben, bzw diese bei der Auslieferung in das Gerät zu laden.
Um diese Aufgabe zu erleichtern, bietet das Programmiertool die Möglichkeit, die von einem Programm verwendeten Dateien während der Simulation, oder beim Aufruf der Funktion 'Alle Anzeigeseiten prüfen' zu ermitteln. Das Ergebnis kann per "Ansicht" .. "Externe Datei-Referenzen" im Hauptmenü des Programmiertools angezeigt werden :
Jede Zeile in dieser Liste enthält den Namen einer offensichtlich verwendeten Datei, die Nummer der Anzeigeseite (auf der die Datei verwendet wurde), die Zeilennummer innerhalb der Anzeigeseite oder Event-Definition, und das Datum der letzten Verwendung im ISO-8601-Format (JJJJMMDD) - was nichts mit dem Erstellungsdatum der Datei zu tun hat !
Wird die Datei-Historie nicht mehr benötigt, kann sie mit der Schaltfläche 'Löschen' (am unteren Rand des oben gezeigten Anzeigefensters) gelöscht werden.
Sie können notfalls neue Einträge manuell hinzufügen oder entfernen. Laden Sie die UPT- (bzw CVT-) Datei dazu mit einem Text-Editor, und suchen nach dem Abschnitt 'Audio- and other files (REFERENCES)', z.B. :
-
; ----- Audio- and other files (REFERENCES) -----
a file0="dog.wav" pn=0 li=1 da=20091207
a file1="puppy.wav" pn=0 li=2 da=20091207
a file2="sheep.wav" pn=0 li=3 da=20091207 - Darin ist
-
pn
= page number (Seitennummer),li
= 'line of page' (Zeilennummer), undda
= Datum im ISO-Format.
Die Datei-Referenz-Liste ist auf maximal 64 Einträge begrenzt (bedingt durch die Firmware, bzw den zur Ablage reservierten FLASH-Speicher).
Das Auffinden aller Datei-Referenzen mag trivial erscheinen, ist es aber nicht. Beachten Sie folgendes Beispiel :
-
audio.play( "msg" + str("***",AudioMsgNumber) + ".wav" )
Darin soll 'AudioMsgNumber' eine numerische Variable sein, deren Wert sich
zur Laufzeit per Kommunikationskanal (SDO, PDO, CAN-Signal, etc etc) ändern
kann. Das Programmiertool ist nicht in der Lage, alle mit dem oben gezeigten
String-Ausdruck 'berechneten' Dateinamen zu erraten. Selbst während
einer Simulator-Sitzung werden nicht immer alle möglichen Werte von
'AudioMsgNumber' auftreten. Darum:
Falls Sie derartige Kommandos verwenden, stellen Sie eine Liste aller eventuell
benötigten Dateien zusammen, und geben Sie diese zusammen mit der UPT-
(oder CVT-) Datei weiter, bzw. laden alle benötigten Dateien vor der
Auslieferung eines Gerätes.
Anwenderdefinierte Zeichensätze könnten strenggenommen auch zu
den 'externen Dateien' gezählt werden. Dies ist aber momentan nicht
der Fall (2009-12-07). Eine Liste der von der Applikation verwendeten
Zeichensätze finden Sie nicht in der oben gezeigten
Datei-Referenz-Liste, sondern in der in einem anderen Kapitel beschriebenen
Liste mit den benutzerdefinierten
Zeichensätzen .
Anlegen eines Text-Arrays (ohne Script, im Programmiertool)
Das Text-Array ist eine eindimensionale Liste von Zeichenketten, die Sie in Ihrer Anwendung einsetzen können um -abhängig von einem numerischen Wert- verschiedene Text-Meldungen auf dem Display anzeigen können.
Um das Text-Array nutzen zu können, müssen Sie im Programmiertool definieren wieviel Speicher dazu verwendet werden soll. Bei alten Geräten (mit 8- oder 16-Bit-CPU, z.B. MKT-View "Plus") mussten dafür einige Anzeigeseiten geopfert werden, um mehr Speicher für weitere Textzeilen zu erhalten. Bei neueren Geräten (mit flexibler Verwaltung des FLASH-Speichers) ist dies nicht mehr nötig.
Die Anzahl benötigter Textzeilen stellen Sie folgendermaßen ein:
Im Hauptmenü des Programmiertools: Optionen ...
Speicheraufteilung ... max. Zeilen im Textarray
.
Weitere Infos zur Speicherreservierung finden Sie
hier.
Um auf einzelne Zeilen des Textarrays zuzugreifen, verwenden Sie die entsprechenden String-Funktionen des Interpreters.
Ein einfaches Beispiel für
Text-Arrays finden Sie im zweiten Demoprogramm.
- Tip:
- Wenn Sie lediglich zwei oder drei Textalternativen (z.B. "ok"-"zu heiß" - "zu kalt") in Abhängigkeit von einem numerischen Wert anzeigen wollen, bietet sich dazu auch das "arithmetische if-then-else" innerhalb eines Format-Strings an. Dies wird im Kapitel BUTTONS(!) beschrieben.
Siehe auch:
- Popup-Fenster : kann zur Anzeige von Zeichenketten verwendet werden, die während der Laufzeit per CAN-Bus an das Anzeigeterminal gesendet werden (das "Popup-Fenster" arbeitet dann wie ein "Terminal im Terminal", zur Anzeige beliebiger Textmeldungen).
- String-Funktionen des Display-Interpreters
- Konstanten-Arrays in der Script-Sprache (elegantere Alternative zu den Text-Arrays, wenn Scripte verfügbar sind)
Zum Anfang
Definition von Anzeigeseiten (Referenz)
Die Registerkarte "Page Definition" dient zur Definition einer einzelnen
Anzeigeseite. Auf jeder Anzeigeseite können mehrere Anzeige-Elemente platziert werden.
Dieser wichtige Teil des Programmiertools ist in weitere
Unter-Register gegliedert, die im weiteren Verlauf erläutert werden.
Neben der unten gezeigten Definition in Tabellenform verfügt das Programmiertool
über einen später beschriebenen grafischen Editor.
(Definition einer Anzeigeseite im Programmiertool; hier in Tabellenform)
Einleitung zu den programmierbaren Anzeigeseiten
Eine Anzeigeseite besteht aus..- einer Kopf-Definition die für alle ZEILEN gilt (display page header)
-
mehreren Anzeige-Elementen, die per Programmiertool als Text oder
mit dem grahischen Editor definiert werden können.
Übersicht verfügbarer Anzeige-Elemente:
- einfacher Text, mit oder ohne Anzeige einer Variablen (per Platzhalter, z.B. '*****.*'),
- komplexere Texte mit Backslash-Sequenzen,
- Editierfelder,
- mehrzeilige Menüs,
- Icons (Bilder mit signalabhängiger Umschaltung),
- Balkendiagramme (vertikal oder horizontal ausgerichtet),
- Buttons (graphische Schaltflächen),
- Text-Panele (per Script-Sprache 'bedruckbar'),
- Grafik-Panele (Anzeige von Canvas-Grafiken),
- Tabellen (per Script-Sprache auch als Bedienelement nutzbar),
- Y(t) und X/Y-Diagramme,
- Zeigerinstrumente,
- ...
- 'low-level'-graphischen Anzeige-Kommandos (und anderen Spezialitäten)
- Ereignis-Definitionen und zugehörige Reaktionen (wird später, nach der Vorstellung des Interpreters vorgestellt)
Neben der oben gezeigten Tabellenform können Anzeigeseiten auch mit einem graphischen Editor bearbeitet werden (mehr dazu später) :
(Definition einer Anzeigeseite im Programmiertool; hier mit dem graphischen Editor)
Nach dem Start zeigt das Programmiertool 'Seite Null' Ihrer Applikation an (wie das 'echte' Gerät nach dem Einschalten).
Um im Programmiertool zu einer anderen Anzeigeseite Ihres
Terminal-Programms umzuschalten, verwenden Sie die roten Pfeil-Buttons
(,rechts oben) oder die
Anzeigeseiten-Übersicht (page overview),
auf der Sie alle bereits programmierten Seiten sehen können. Zur
Seitenumschaltung im Terminal bieten sich
Buttons,
Menüs,
selbstdefinierte Ereignisse,
Script, oder
Page-Scan-Sequenzen an. Doch zunächst zur
Beschreibung aller Elemente, die zu einer Anzeigeseite gehören...
Kopf einer Seitendefinition
Der Kopf einer Seitendefinition enthält die Eigenschaften einer Anzeigeseite, die nicht an ein spezifisches Anzeigeelement gebunden sind.Dazu gehören:
-
der NAME der Seite. Ersetzen Sie den automatisch erzeugten Namen
bitte durch einen sprechenden Namen,
z.B. "MainMenu" statt "page2". Dabei sind i.A. maximal 8 Buchstaben zulässig ! - das Flag "Diese Seite immer KOMPLETT neu zeichnen"
- das Flag "Bildschirm NICHT automatisch löschen (nur per Kommando)"
(in diesem Fall wird der Bildschirm nicht automatisch vor dem Zeichnen der Anzeige-Elemente gelöscht, sondern nur durch einen entsprechenden Befehl im Script oder per Display-Interpreter). - das Flag "Bildschirm NICHT aktualisieren wenn Tastaturpuffer voll"
(wodurch die Seitenumschaltung bei alten Geräten wie z.B. MKT-View / MKT-View "Plus" beschleunigt werden konnte) - das Flag "Tastaturpuffer NICHT löschen wenn diese Seite aufgerufen wird"
- das Flag "Umlaufende Tastatursteuerung"
(d.h. beim Navigieren z.B. per Cursor "Up" springt der Fokus vom ersten zum letzten Feld) - das Flag "Invertierter Bildschirm"
(nur bei alten Monochrom-Displays verfügbar): Weiße Schrift auf schwarzem Hintergrund statt schwarzer Schrift auf weißem Hintergrund.
Bei Farbdisplays stattdessem die 'Default-Farben' verwenden !) - die Option "Seite gehört zur "pscan"-Sequenz"
- das Aktualisierungsintervall (in Millisekunden): Optionale Reduktion der Seiten-Aktualisierungsrate. Verwendung z.B. wenn auf einer Seite ein numerischer Wert angezeigt wird, der sich sehr oft ändert (was die Lesbarkeit bei alten Passiv-LCDs, z.B. im MKT-View / MKT-View "Plus", besonders bei Kälte erschwerte).
- Textfarbe, Hintergrundfarbe (Default, Tag/Nacht-Farbschema): Nur für Farbdisplays. Prinzip, Verwendung und ein Beispiel finden Sie in einem anderen Kapitel.
- Spezieller Hintergrund: Hier kann ein optionaler Befehl zum Löschen des Hintergrundes (vor dem Aufbau der Seite) eingegeben werden. Andernfalls wird der Hintergrund der Seite beim ersten Aufruf mit der Hintergrundfarbe gefüllt ( wie "Clear Screen"). Hinweis: Das Kommando zum Füllen des Hintergrundes sollte den *gesamten* Hintergrund löschen, nicht nur einen Teil davon. Andernfalls bleiben Teile der vorherigen Bildschirmseite sichtbar. Beispiel: Kommando zum Füllen mit einem Farbverlauf (gradient fill).
- die Grafikauflösung für die diese Seite entworfen wurde,
und die Option, ob diese Seite gegebenenfalls automatisch für die Auflösung des tatsächlich verwendeten Displays angepasst (skaliert) werden darf.
(Screenshot 'Definitions-Kopf einer programmierbaren Display-Seite')
Bei gesetzter Option "..immer komplett neu zeichnen" wird bei jedem Hauptschleifendurchlauf die Anzeigeseite komplett neu gezeichnet. Dies erfordert ein hohes Maß an Rechenzeit, kann aber bei bestimmten Seiten nötig sein, z.B. bei überlappender oder bewegter Grafik (damit die bewegten Objekte keine "Schleifspur" hinterlassen). Eine komplette Seiten-Aktualisierung beinhaltet das Löschen des Bildschirms.
Eine typische Display-Aktualisierung mit der Option 'immer KOMPLETT neu zeichnen' dauerte bei alten Geräten mit 8-Bit-CPU circa 250 Millisekunden. Daraus ergab sich eine Screen-Aktualisierungsrate von mindestens 4 Updates pro Sekunde. Bei neueren Geräten (z.B. MKT-View III / IV / V) liegen die Aktualsierungsraten i.A. bei 10 bis 50 Hz (abhängig vom Inhalt der Anzeigeseite).
Wenn die Option 'immer KOMPLETT neu zeichnen' nicht aktiviert ist, werden nur die Anzeigezeilen neu gezeichnet in denen sich (vermutlich) etwas geändert hat. Dadurch wird etwas Rechenzeit eingespart, und die Update-Frequenz steigt deutlich an.
Als Alternative zur Option 'immer KOMPLETT neu zeichnen' kann unter 'Eigenschaften einer Anzeigezeile'
die Option '(ein einzelnes Element) immer neu zeichnen' gesetzt werden,
um ein bestimmtes Element ständig neu zu zeichnen (auch wenn sich aus Sicht des Interpreters
der 'Wert' in der entsprechenden Zeile nicht geändert hat).
Näheres dazu im Abschnitt 'Eigenschaften einer Anzeige-Zeile'.
Manuelle Definition von Anzeige-Elementen
Zum Einfügen von Anzeigeelementen klicken Sie (im einfachsten Fall) mit der rechten Maustaste in das simulierte LC-Display, und wählen aus, was sie dort einfügen wollen. Das Programmiertool fügt dann eine neue Anzeige-Definitions-Zeile zur unten beschriebenen Definitionstabelle hinzu. Für sehr einfache Anwendungen (bei denen die direkte Eingabe des Quelltextes nicht nötig ist), können Sie alternativ zur hier beschriebenen Eingabemöglichkeit auch den "einfachen" Anzeigeseiten-Editor verwenden.Fortgeschrittene Anwender bevorzugen die direkte (manuelle) Eingabe in der folgenden Tabelle.
Alle Anzeigezeilen einer Seitendefinitionen werden als Tabelle auf der Registerkarte "Display Lines" angezeigt:
Die Tabelle auf der linken Seite zeigt alle derzeit definierten Anzeigezeilen (innerhalb der aktuellen Anzeigeseite).
Rot hinterlegte Zellen in dieser Tabelle deuten auf Fehler hin, die beim letzten Aufruf der Funktion
'Alle Seiten prüfen und korrigieren' (im Hauptmenü unter 'Assistent') erkannt wurden,
z.B. Verwendung von nicht definierten Variablen (in der Spalte 'Var/Formel').
- Hinweis:
-
Wenn Ihnen diese Tabelle zu kompliziert vorkommt, benutzen
Sie stattdessem das weiter unten beschriebene Panel
(rechts neben der Tabelle) zur Definition eines einzelnen Anzeige-Elements,
oder verwenden Sie statt der tabellarischen Eingabe den graphischen Editor.
Die Tabelle wird von Experten viel verwendet und sehr geschätzt... wir hoffen, daß Sie auch bald zu den Experten zählen !
Die Buttons unterhalb der Tabelle dienen zum Bearbeiten des Tabelleninhalts. INSERT, DELETE, COPY und PASTE beziehen sich auf komplette Anzeigezeilen. Mit dem Button "MORE" kann ein Popup-Menü geöffnet werden, auf dem weitere Möglichkeiten angezeigt werden (auch durch Rechts-Klick in die Tabelle zu öffnen).
- Die Tabellenspalten (bzw. Editierfelder) "X" und "Y"
-
definieren die Position des oberen linken Eckpunktes des in dieser Zeile
definierten Elementes, gemessen in Pixel (bezogen auf den Grafikbildschirm
des Terminals).
Statt der numerischen Eingabe von Pixelkoordinaten empfiehlt sich die Verwendung des graphischen Editors .
- Die Spalten "W" und "H"
-
definieren die Breite und Höhe einiger (nicht aller!) Anzeige-Elemente.
Einheit: Pixel. Bei 'normalen' alphanumerischen Anzeigezeilen haben diese
Felder keine Funktion, denn die Größe eines Anzeigeelements ergibt sich aus der
Anzahl Buchstaben, dem verwendeten Zeichensatz, und Zoom-Faktor. Aus dem
Grund sind die Einträge under "W" und "H" für die Anzeige von "normalen
Textfeldern" oft leer (es sei denn, Text soll z.B.
rechtsbündig oder zentriert angezeigt werden).
Bei Geräten mit Firmware-Kompilations-Datum vor 2009-11-27 (ISO, YYYY-MM-DD; z.b: MKT-View "Plus") werden die Spalten "W" und "H" im Programmiertool nicht angezeigt, denn Geräte mit derart alter Firmware unterstützen diese Funktion nicht. Im Zweifelsfall vergleichen Sie bitte das Firmware-Kompilations-Datum im Systemmenü des verwendeten Gerätes, und auf der Registerkarte "Settings" (Einstellungen) des Programmiertools unter 'Firmware compilation date'. Wenn keine direkte Verbindung (per CAN oder seriellem Port) zwischen Programmiertool und programmierbarem Gerät aufgebaut werden kann, hat das Programmiertool keine Möglichkeit, das Firmware-Kompilations-Datum zu "erfragen" !
Im graphischen Editor kann die Größe durch Ziehen der unteren rechten Ecke (kleines Quadrat) geändert werden.
-
- Die Spalte "Name"
-
Hat ein Anzeigeelement einen eigenen Namen, kann per Interpreter oder per
Script darauf zugegriffen werden,
um z.B. die Farbe während der Laufzeit zu ändern.
Ein Namen (in dieser Spalte!) darf aus maximal 7 Buchstaben bestehen.
Sonder- oder Leerzeichen sind nicht erlaubt.
Weitere Details stehen hier .
- Die Spalte "Text"
-
dient zur Eingabe des Format-Strings für
numerische Anzeigen, oder als Menüzeile.
Der Format-String kann auch zur Anzeige von
Icons (kleinen Bildern),
Bargraphen (Anzeigebalken) ,
Buttons (graphischen Schaltflächen) oder anderen
graphischen Sonderfunktionen eingesetzt werden. Dazu werden sogenannte
Backslash-Sequenzen verwendet.
Ohne Backslash-Zeichen wird der Text direkt auf dem Display angezeigt.
- Die Spalte "Var/Formel" (bzw. "Var/Expr")
-
enthält normalerweise den Namen einer Variablen,
deren Wert in einer Zeile angezeigt oder editiert werden soll.
Bei Menüzeilen enthält diese Spalte ein Interpreterkommando welches
ausgeführt werden soll wenn der Menüeintrag aktiviert wurde.
Der Zahlenwert kann auch in einer Icon-Sequenz zum "bedingten" Invertieren
eines Icons verwendet werden (mit der Funktion "v").
Zum Ändern der Zuordnung von Variablen und Anzeigefeldern eignet sich
auch die Funktion "Variablen/Signalzuordnung ändern", die Sie im
lokalen Menü finden (Button "Mehr"/"More").
Bei Geräten mit 32-Bit-CPU (z.B. MKT-View II/III/IV) kann in der Spalte 'Var/Formel' auch ein numerischer Ausdruck eingegeben werden, der zur Laufzeit ständig neu berechnet wird. Das Ergebnis der Berechnung wird dann in numerischer Form -abhängig vom Format-String- angezeigt. - Die Spalte "Access/HotKey"
-
definiert die Zugriffsrechte für eine angezeigte/editierte Variable
oder eine hotkey-Definition falls diese Displayzeile als
Menüzeile (menu item) verwendet wird. Mehr darüber in der Beschreibung
des 'display line property panels'.
- Die Spalten "Draw Mode", "Color", "Font" usw
-
beeinflussen das Erscheinungsbild der Zeile auf dem Display. Siehe 'Property
panel'.
Das "property"-Panel auf der rechten Seite zeigt detailierte Informationen über die aktuell in der Tabelle selektierte Anzeige-Zeile.
Sie können die Eigenschaften einer Anzeigezeile sowohl in der Tabelle
als auch auf dem 'property panel' editieren, die Änderung wird jeweils
in die "andere" Darstellungsart übernommen.
Um den Inhalt einer Variablen
oder eines numerischen Ausdrucks ("Formel") in der Definitionstabelle
zu untersuchen, zeigen Sie mit der Maus in die entsprechende Zelle (ohne zu klicken).
Wenn der (Display-)Interpreter den Ausdruck unter der Maus auswerten kann,
dann wird der Ausdruck und das das berechnete Ergebnis
in der Statuszeile am unteren Rand des Hauptfensters angezeigt.
Mit der Position des Mauspfeils über dem Ausdruck kann gesteuert werden,
welcher Teil davon ausgewertet wird. Details dazu im Kapitel Interpreter.
Wenn das Fenster des LCD-Simulators sichtbar
ist, können Sie den Effekt der Änderungen sofort sehen. Wenn
beispielsweise die Y-Position eines Textes mit dem Up/Down-Scroller auf dem
Property Panel geändert wird, bewegt sich der Text auf dem simulierten
LC-Display. Die momentan editierte Anzeigezeile kann mit einem gestrichelten
Rechteck im Simulatorfenster markiert werden (per "General Settings"
abschaltbar).
Wenn sich einige graphische Elemente auf dem Bildschirm überlappen, muss die Reihenfolge, in der die Elemente gezeichnet werden, beachtet werden ! Die Reihenfolge der Definitionszeilen kann per Maus geändert werden. Dazu bei gedrückter linker Taste einen Eintrag in der Spalte "Nr" nach oben oder unten bewegen. Ein schwarzer horizontaler Markierungsbalken zeigt die Einfügeposition. Diese Tabellen-Zeilen-Verschiebung funktioniert auch in anderen Tabellen des Programmiertools.
Viele Möglichkeiten der Anzeige werden in den Beispielen vorgestellt.
Eigenschaften einer Anzeige-Zeile (display line properties)
Das "display line property"-panel zeigt die Eigenschaften einer einzelnen Display-Zeile (die in der Seitendefinitionstabelle angewählt wurde).
Wenn das simulierte LC-Display sichtbar ist, sehen Sie den Effekt der Änderungen sofort. Wenn Sie zum Beispiel die Y-Position eines angezeigten Textes mit dem up/down-Scroller auf dem "property"-Panel ändern, wandert der Text auf dem simulierten LC-Display.
Eigenschaften einer Anzeige-Zeile (oder ähnlichen graphischen Objekts) sind:
- X-Position, Y-Position (Position des Elements in Pixel)
- Breite und Höhe (Größe des Anzeige-Elements in Pixel)
Details in der Beschreibung der tabellarischen Eingabe (Spalten "W"=Width=Breite und "H"=Höhe).
-
Typ / Text : Zeigt, abhängig von eventuell vorhanden
Backslash-Sequenzen im Format-String den
Typ des Anzeigeelements an (einfacher Text, Icon, Button, Bargraph, Diagramm, Textpanel, Tabelle, ...).
Passend zum Typ wird i.A. auch die Registerkarte im mittleren Teil des Panels umgeschaltet ('Text', 'Symbol', ... 'Tabelle' ).
Eine nachträgliche Änderung des Typs ist nicht ohne weiteres möglich (z.B. wird aus einem 'Button' nicht ohne Weiteres ein Y(t)-Diagramm und umgekehrt)... denn dazu müsste der komplette Format-String modifiziert werden. Wird einem normalen Text z.B. die Backslash-Sequenz \btn vorangestellt (durch direkte Eingabe), dann ändert sich der Typ automatisch von 'Text' nach 'Button' (=graphische Schaltfläche), weil der Inhalt des Editierfeldes 'Text' während der Eingabe laufend analysiert wird. Auch die Anzeige im Simulator wird sofort (während der Eingabe) aktualisiert.
-
Zeichenmodus :
Bei Monochrom-Displays konnte hier normal, blinkend, invers angewählt werden.
Bei Farbdisplays ist dieses Feld belanglos, da z.B. blinkender Text nicht unterstützt wird.
-
Text- und Hintergrundfarben (nur bei Farbdisplays).
Bei Displays mit 256 oder mehr Farben kann eine Farbe per Doppelklick aus der verfügbaren Palette ausgewählt werden.
Die zweite Hintergrundfarbe dient z.B. zum Erzeugen von Farbverläufen ("gradients") in graphischen Buttons und ähnlichen Objekten, oder für gefüllte Polygonflächen.
Bei der Anzeige von Bitmaps dient die zweite Hintergrundfarbe zur Definition, welche Pixelfarbe in der Bitmap transparent erscheinen soll.
Bei Zeigerinstrumenten kann (seit 2023) die zweite Hintergrundfarbe verwendet werden, um dem Skalenbereich einen vom Rest des Instruments abweichenden Hintergrund zu geben.
Tipp: Wenn Vorder- und Hintergrungfarbe auf -1 (minus eins) gesetzt, verwendet das Terminal automatisch die Defaultwerte aus dem Kopf einer Seitendefinition. Dadurch kann bequem zwischen Tag- und Nachtdesign umgeschaltet werden, ohne für jede Zeile eine eigene Farbe definieren zu müssen.
Details zur Verwendung von Farben und zur Tag/Nacht-Umschaltung finden Sie hier. Details zum speziellen Farbwerten in den Eingabefeldern des Programmiertools finden Sie hier, z.B.
-1 = "verwende die für die aktuelle Seite definierte Default-Farbe",
-2 = "transparente Darstellung".
-
Zeichensatz (font). Fonts Nr. 1 bis 9 sind nichtproportionale Bitmap-Fonts (monospaced), 10 bis 15 benutzerdefiniert,
weitere Nummern sind für frei skalierbare, proportionale Vektor-Fonts reserviert:
- 1 : Nicht-proportionaler Bitmap-Font mit 4*6 Pixeln
- 2 : Nicht-proportionaler Bitmap-Font mit 6*8 Pixeln
- 3 : Nicht-proportionaler Bitmap-Font mit 7*12 Pixeln
- 4 : Nicht-proportionaler Bitmap-Font mit 8*8 Pixeln
- 5 : Nicht-proportionaler Bitmap-Font mit 8*16 Pixeln
- 6 : Nicht-proportionaler Bitmap-Font mit 16*16 Pixeln
- 7 : Nicht-proportionaler Bitmap-Font mit 16*32 Pixeln
- 8 : Nicht-proportionaler Bitmap-Font mit 32*32 Pixeln (nur für 'große' Displays)
- 9 : Nicht-proportionaler Bitmap-Font mit 12*24 Pixeln (nur für 'große' Displays)
- 10 .. 15 : Benutzerdefinierte Zeichensätze
- 21: Vektor-Font 'Hershey Simplex' (mit dünnen Linen)
- 22: Vektor-Font 'Hershey Duplex' (mit doppelt gezogenen Linen)
- 2 : Nicht-proportionaler Bitmap-Font mit 6*8 Pixeln
Welche Zeichensätze im verwendeten Gerät tatsächlich vorhanden sind, kann im Programmiertool auf der Registerkarte 'Einstellungen' unter Terminal-Konstanten / 'Unterstützte Zeichensätze' kontrolliert werden.
Jedes Bit im dort hexadezimal angezeigtem Wert repräsentiert einen der oben aufgelisteten Zeichensätze.
- 1 : Nicht-proportionaler Bitmap-Font mit 4*6 Pixeln
-
Vergrößerungsfaktor für Buchstaben (Zoom). Getrennt für X- (horizontal) und Y-Achse (vertikal) einstellbar.
Bitmaps und Bitmap-Fonts können nur 1,2,3,4 .. 15-fach vergrößert werden, Vektor-Fonts dagegen im Bereich 0.2 bis 15.9 (d.h. Vektor-Fonts können nicht nur 'feinschrittig' vergrößert, sondern auch verkleinert werden).
- Variable / Formel / Ausdruck
In dieser Spalte wird z.B. der Namen der Variablen definiert, deren Wert (oder auch deren Namen) auf dem Bildschirm angezeigt werden soll.
Bei normalen Textzeilen wird das Format, und eventuell vorlaufender Text durch den bereits erwähnten Format-String definiert.
Bei Geräten mit 32-Bit-CPU (z.B. MKT-View II, III, IV) kann in dieser Spalte nicht nur eine einfache (Display-)Variable, sondern ein kurzer Ausdruck ("Formel") eingegeben werden, z.B.
Strom*Spannung
Für komplexere 'verrechnete Werte' empfiehlt es sich aber, die eigentliche Berechung als Script-Funktion zu implementieren (z.B. 'Leistung'), und diese dann mit dem Prefix 'script.' (wie beim Zugriff auf Script-Variablen aus dem Display-Interpreter) aufzurufen:
script.Leistung
mit der folgenden Implementierung der Funktion 'Leistung' (im Script):func Leistung return display.Strom * display.Spannung; endfunc;
-
Zugriff (access): Der Wert einer
Variablen mit Schreib/Lesezugriff kann auf dem Display
editiert werden (nur Integerzahlen
!).
Steht hier "read only", kann der Wert auf dieser Seite nur angezeigt, aber nicht geändert werden.
Einige Anzeigeelemente (z.B. Balkendiagramme) werden durch 'Schreib/Lesezugriff' ('Access: Read/Write' im oben gezeigten Panel) zu einem interaktiven Bedienelement, so wird z.Baus einem einfachen Balkendiagramm ein per Touchscreen bedienbarer 'Schieber' oder Scrollbalken. -
Control ID: Wird nur
benötigt, wenn Ereignisse (Events) im Zusammenhang mit diesem Steuerelement
(Button, Menüzeile, Editierfeld) in der
Script-Sprache abgefangen, bzw.
verarbeitet werden sollen. Durch diesen "Control ID" (=Identifizierer für
ein Steuerelement) kann im Script mit Hilfe der select..case-Anweisung
herausgefunden werden, welches Steuerelement das Ereignis ausgelöst
hat. Dazu müssen alle Steuerelemente (zumindest alle Steuerelemente
auf einer Seite) unterschiedliche IDs erhalten. Es wird dringend empfohlen,
als Control-ID keine Zahlenwerte, sondern symbolische Konstanten (deren Werte
im Script definiert sind) zu verwenden. Beispiel: Siehe "Button-Event-Demo".
Ist das Feld 'Control ID' leer, kann das Script keine Benachrichtigung empfangen, wenn mit dem Steuerelement "etwas Besonderes" passiert .
Liste mit selbstdefinierten Script-Konstanten,
nach Doppelklick in das Feld 'Control ID' im Programmiertool.
Details zu Control-Identifiern finden Sie im Handbuch zur Script-Sprache. - "Menüeintrag"
Durch Setzen dieses Flags wird aus einer normalen Anzeige-Zeile eine Menüzeile. Der Bediener kann sich später mit den Cursortasten durch das Menü auf einer Anzeigeseite bewegen und mit der ENTER-Taste das unter "Variable/Expression/Menu Command" definierte Kommando ausführen (welches meistens aus einem Sprung auf eine andere Anzeigeseite bestehen wird).
- "immer komplett neu zeichnen"
Veranlasst den Display-Interpreter, diese Anzeigezeile so oft wie möglich neu zu zeichnen. Verwenden Sie diese Option wenn eine Zeile bestimmte "Nebeneffekte" hat, wie z.B. eine dynamische Textanzeige. Für "normale" Anzeigezeilen deren Inhalt nur vom Wert der dargestellten Variablen abhängt, brauchen Sie diese Option nicht (die UPT-Firmware kümmert sich darum, eine Anzeigezeile neu zu zeichnen wenn sich der WERT der angezeigten Variablen ändert).
- "per Touchscreen bedienbar"
Das Anzeige-Element soll per Touchscreen bedienbar werden.
Beim Element-Typ 'Tabelle' kann z.B. per Touchscreen innerhalb der Tabelle navigiert werden (d.h. Zellen markiert); bei Buttons die programmierbare Reaktion ausgelöst; Balkendiagramme werden dadurch zum Bedienelement 'Schieber'; Icons (Bilder) können die Funktion von 'Buttons' erhalten; etc.
- "Text" (Registerkarte im unteren Teil des Panels, für einfache Anzeige/Bedien-Elemente mit dem Typ "Text" oder "Numerisch" ):
- Text (Eingabefeld): Statischer Text oder/und ein Format-String
mit Platzhaltern, optionalen Backslash-Sequenzen
- Flags :
- "Ausgangskanal beim Editieren aktualisieren"
- Wenn diese Option gesetzt ist, wird der aktuelle Wert aus dem
Editierfeld auf dem Ausgabekanal aktualisiert
während das Feld editiert wird, nicht erst beim
Betätigen der ENTER - Taste um die Eingabe zu beenden.
- "Mit virtueller Tastatur editieren"
- Sobald dieses Element (als Eingabefeld) z.B. per Drehknopf in den Modus 'editieren' geschaltet wird, öffnet sich zur Eingabe von Zeichen die virtuelle Tastatur.
- "Ausgangskanal beim Editieren aktualisieren"
- Basis : Anzeige von Werten im Binär-, Dezimal-, Hexadezimalformat (oder aus Wertetabelle)
0 = "automatisch", Anzeige als Zeichenkette aus Wertetabelle oder (ohne passenden Eintrag) dezimal
2 = Anzeige des Wertes als Binärzahl
10 = Anzeige immer als Dezimalzahl (kein Durchsuchen von Wertetabellen)
16 = Anzeige des Wertes als Hexadezimalzahl
- Text (Eingabefeld): Statischer Text oder/und ein Format-String
mit Platzhaltern, optionalen Backslash-Sequenzen
Eigenschaften die von einem bestimmten Gerät nicht unterstützt werden, werden auf dem "property"-Panel passiv dargestellt (grau).
Die Zuordnung von Variablen zu Anzeigezeilen kann auch mit dem
Variablen-Auswahl-Dialog erfolgen.
Format-String (für die Definition von Anzeige-Elementen)
Der Format-String (Zeichenkette) ist eine der Eigenschaften einer Anzeige-Zeilen-Definition.
Er kann...
- ein einfacher (fester) Text sein wie z.B. "Hallo, Welt !"
- spezielle "Platzhalter" wie z.B. "****" für numerische Ziffern enthalten
- spezielle Backslash-Sequenzen enthalten, wie z.B. \vvvvvvvv zur Anzeige des Variablennamens
- verwendet werden um Icons anzuzeigen (in backslash-Sequenzen wie "\iMyIcon" )
- einfache HTML-ähnliche Tags enthalten, z.B. '<u> unterstrichener Text </u>'
- auch das Aussehen und Verhalten von Editierfeldern bei der Eingabe steuern.
Spezielle Zeichen im Format-String, Backslash-Sequenzen
(Hinweis: Die folgende Liste bezieht sich auf 'moderne' Geräte mit 32-Bit-CPU.Ältere Geräte wie z.B. "MKT-View" (mit 16-bit CPU) und "UPT-515" (mit 8-Bit-CPU)
unterstützten nur einen kleinen Teil aus der folgenden Aufzählung.)
-
* (Sternchen, Asterisk) wird durch eine Ziffer oder ein Zeichen eines String-Ausdrucks ersetzt. - Bei Fliesskommawerten werden führende Nullen unterdrückt, bei Integer nicht.
-
# wird, ähnlich wie '*', durch eine Ziffer ersetzt. - Im Gegensatz zu '*' werden führende Nullen IMMER unterdrückt, d.h. durch Leerzeichen ersetzt.
-
0 (Ziffer Null): Wird -ähnlich wie '*' und '#'- durch eine Ziffer des numerischen Wertes ersetzt. - Im Gegensatz zu den Platzhaltern '*' und '#' werden Nullen NICHT unterdrückt.
-
. (Punkt) dient als Dezimal-Trennzeichen (auch als 'Dummy' in Integer-Werten). - Siehe auch: Hinweise zu Editierfeldern.
-
, (Komma im Format-String, nicht in Interpreterkommandos) -
dient seit Oktober 2009 als Dezimal-Trennzeichen für deutsche
Anwender;
allerdings nur, wenn direkt danach ein Platzhalter für eine Ziffer folgt. -
- wird durch das Vorzeichen eines numerischen Wertes ersetzt (+,-)
\\ zeigt eine einzelnes Backslash-Zeichen an
\< zeigt eine öffnende spitze Klammer an (statt diese als HTML-Tag zu interpretieren)
\- zeigt ein Minuszeichen an (kein Platzhalter für das Vorzeichen einer Zahl)
\0 zeigt das Zeichen 'Null' an (kein Platzhalter für die Ziffer einer Zahl) -
-
\ar align
right (rechtsbündige Ausgabe, bezieht sich auf den Rest
der Zeichenkette innerhalb ihres Anzeigefelds
(*) )
\ac align center (horizontal und vertikal zentrierte Ausgabe, ebenfalls für den Rest der Zeichenkette (*) )
\ah align horizontally centered (horizontal zentrierte Ausgabe für den Rest der Zeichenkette (*) )
\av align vertically centered (vertikal zentrierte Ausgabe für den Rest der Zeichenkette (*) )
\at, \ab : Reserviert für das Aurichten von Feldern auf dem Bildschirm (nicht für den Text innerhalb des Felds)
-
Nur für Geräte mit 32-Bit CPU und Firmware ab 2013-03-25.
Der rechte und ggf. untere Rand ergibt sich aus der Position ("X","Y") und der festen Größe des Anzeigeelements.
Bei Anzeigeelementen ohne feste Größe verwenden die meisten \a-Sequenzen den rechten und unteren Bildschirmrand als Ende der 'nutzbaren Fläche' zum Ausrichten des Textes.
Das folgende Beispiel aus programs\AlignTst.cvt verwendet farbige Hintergründe um die einzelnen Felder sichtbar zu machen, in denen die Texte ausgerichtet werden:
-
\bar(width,height,flags,ticks,pattern...) -
zeichnet einen Anzeigebalken (bargraph)
-
\btn(width,height, ...) -
zeichnet einen Button bzw. Schaltfläche (nur
bei bestimmten Geräten verfügbar !)
-
\chr(N) zeigt ein einzelnes Zeichen mit dem Code N (dezimal). Der aktuelle Zeichensatz wird verwendet. Beispiele: -
\chr(65) Buchstabe " a ".
\chr(v) zeichnet das Zeichen mit dem Code (v), der sich aus der Auswertung des numerischen Ausdrucks in der aktuellen Anzeige-Definitions-Zeile ergibt (siehe "v"-Funktion)
\chr(56) zeichnet ein graphisches Symbol für "schnellen Vorlauf". Voraussetzung: der aktuelle Zeichensatz ist der benutzerdefinierte Zeichensatz "Webd3232" oder ähnlich. Dies ist nur bei bestimmten Terminals möglich. ("Webd3232" ist ein "Webdings"-kompatibler Symbolzeichensatz, "Webdings" (c) Microsoft Corporation).
Bei einigen Geräten (z.B. MKT-View III,IV) können per chr(N) auch bestimmte Sonderzeichen per Unicode angezeigt werden. Der Zeichencode (N) wird dann vorzugsweise in hexadezimaler Form mit vier Ziffern angegeben, z.B.: \chr(0x2611)
(zeichnet ein 'Häkchen im Kasten', ☑, vgl. Anzeige von Sonderzeichen in einer Tabelle und Beispiel: Buttons mit Häkchen). Gebräuchlicher als per chr() ist allerdings die Ausgabe von Sonderzeichen im Format \U+<hex> (Backslash-U "plus" hexadezimalem Code).
- \cN setzt die Textfarbe für die Ausgabe der nachfolgenden Zeichen auf den numerisch angegebenen Farbwert
- Darin sollte N eine der hier spezifizierten Standard-Farben sein.
Beispiel: \c7 setzt die Textfarbe auf Weiss.
- \CN setzt die Hintergrundfarbe für die Ausgabe der nachfolgenden Zeichen
- Darin sollte N auch hier nur eine der Standard-Farben sein.
Üblicherweise werden Farben nicht zwischen zwei Buchstaben in der gleichen Textzeile umgeschaltet. Die Textfarben werden i.A. nur durch die Eigenschaften der (gesamten) Anzeigezeile festgelegt.
Beispiel: \C0 ("C Null") setzt die Hintergrundfarbe auf Schwarz.
-
\dia( <diagram-definition> ) -
Teil einer Diagramm-Definition (nur bei Geräten
mit geeigneter Grafikanzeige)
-
\e( <String-Ausdruck> ) -
String-Ausdruck (expression) statt eines
festen Format-Strings. Nur bei Geräten mit 16-Bit-CPU möglich !
- \fN schaltet den Zeichensatz innerhalb einer Anzeigezeile um.
- Darin ist N die Zeichensatz-Nummer wie auf dem
Zeilen-Definitions-Panel. Dies funktioniert
auch beim Interpreterkommando "pa", mit dem Text an
variablen Koordinaten ausgegeben werden kann.
- \fr( x1,y1, x2,y2 )
- Zeichnet einen rechteckigen Rahmen. Die Koordinaten sind *relativ* zur Position
der Display-Zeile. Beispiel: Menu \M0\fr(-2,-2,260,32)
- \fi( x1,y1, x2,y2 )
- Zeichnet ein mit der aktuellen Vordergrundfarbe gefülltes Rechteck.
Auch hier sind die Koordinaten *relativ* zur Position der Display-Zeile.
- \i<Icon-Name>[,<Invert-Flag>]
- Fügt ein Icon an der aktuellen
Ausgabeposition ein. Diese Sequenz kann vom Programmiertool automatisch erzeugt
werden (s.U.), aber auch manuell oder per Script
um z.B. Glyphen bei der Übersetzung ('Internationalisierung') einzufügen. Beispiel:
\i"hourglas"
(hier mit Beschränkung auf 8 Buchstaben im Namen, um die Bilddatei gegebenenfalls auch zur Laufzeit von FAT-Dateisystemen ohne 'Long Filenames' laden zu können).
- \li( [options] x1,y1, x2,y2 [, x3,y3, ..] )
- Zeichnet eine Linie oder einen Pfad (Polygonzug). Auf dem "Pfad" können auch andere
Grafikelemente wie geschlossene oder gefüllte Polygone liegen.
Die Koordinaten sind *relativ* zur Position der Display-Zeile.
Optionen: w=width(1..3), p=pattern (16 bit für 16 pixel).
Ein Komma zwischen zwei Punkten (Koordinaten) verbindet diese mit einer Linie in der aktuellen Stärke, ein Semikolon nicht.
Wie bei den meisten Anzeigeelementen werden auch beim Zeichnen von Linienzügen oder Polygonen die für das Element definierten Zeichenfarben verwendet:
- Für durchgezogene Linien wird die Vordergrundfarbe verwendet
(die bei normalem Text für die Buchstaben verwendet wird); - der Hintergrund der rechteckigen Zeichenfläche wird mit der ersten Hintergrundfarbe gefüllt (bzw. "-2" = transparent).
- gefüllte Polygonflächen ("polyfill") verwenden die zweite Hintergrundfarbe.
Zum Einfügen oder Editieren von Polygonen kann auch der graphische Editor verwendet werden.\li(0,15, 100,15) zeichnet eine Linie, Koordinaten relativ zur Objektposition \li(w=2,polyfill(13,44,52,44,32,12)) zeichnet ein gefülltes Dreieck mit Rand (Breite 2 Pixel) \li(font=1, "Test" ) zeichnet einen Text mit dem Vektor-Font "Hershey Simplex" \li(font=2, rot=45, "Test" ) zeichnet um 45° (im Uhrzeigersinn) gedrehten Text
Beispiele für Linienzüge mit gefüllten Polygonen (mit einigen Tricks) finden Sie hier.
\mN definiert den Zeichenmodus für alle folgenden Zeichen in der Zeile.- In einer "selektierten" Menüzeile (invertiert), wird der Zeichenmodus automatisch konvertiert. Bei Geräten mit 16-bit CPU kann der Zeichenmodus auch als numerischer Ausdruck in Klammern definiert werden. Die Werte für den Zeichenmodus sind die gleichen wie für das Interpreterkommando dm .
\MN definiert den Zeichenmodus für alle folgenden Zeichen in der Zeile.- Im Gegensatz zu "\m", wird der Zeichenmodus nicht automatisch konvertiert wenn die Zeile als Menüzeile invers dargestellt werden soll.
\n new line (plus carriage return).- Bei "normaler" linksbündiger Ausgabe wird die Ausgabeposition für den folgenden Text wird an den linken Rand (= x-Position aus Zeilendefinition) der folgenden Textzeile gesetzt.
\panel [ ( Optionen ) ] Mehrzeiliges Text-Panel.- Definiert eine rechteckige Fläche, die per Script-Sprache mit mehrzeiligem Text gefüllt werden kann (wie ein kleines, mehrzeiliges Textdisplay).
Dazu dient (im Script-Programm) das print-Kommando; je nach Ausgabe-Modus. Details zum 'Text-Panel' finden Sie hier.
\s(<condition>)?"<string1>":"<string2>"- Zeigt einen der beiden String-Alternativen in Abhängigkeit von "condition" (z.B. Wertevergleich) an. Folgen Sie dem Link für weitere Informationen.
\script.<Funktionsname>(<Argumenten-Liste>) (nur für Geräte mit Script-Sprache)- Aufruf einer Script-Funktion, die als Return-Wert eine Zeichenkette liefern muss. Der Return-Wert (String) wird anstelle dieser Backslash-Sequenz eingefügt.
Folgen Sie dem obigen Link für weitere Informationen !
- \table( <key=value> ) Anzeige einer Tabelle.
- Definiert eine rechteckige Tabelle, die per Script-Sprache mit Daten gefüllt werden kann.
Details zum Anzeige-Element "Tabelle" finden Sie in einem separaten Dokument.
- \vvv
- Platzhalter für den Namen einer VARIABLEN. Das Backslash-Zeichen wird als Teil des Platzhalters angesehen, daher zeigt "\vvv" die ersten vier(!) Buchstaben des Variablennamens an. Namensvorsätze wie z.B. "script." werden bei der Anzeige übersprungen.
- \uuu
- Platzhalter für die Einheit (UNIT) einer Variablen. Der Backslash ist Teil des Platzhalters, daher zeigt "\uuu" die ersten vier(!) Buchstaben der Einheit an. Ist die Einheit kürzer als der Platzhalter, wird mit Leerzeichen aufgefüllt.
- \U+<hexadezimaler Unicode>
- Zeichnet ein einzelnes Unicode-Zeichen, welches durch seinen hexadezimalen Code ("Unicode") definiert wird.
Beispiel (in einen Format-String für den Display-Interpreter): "\U+1F50D Zoom in" .
Der Wert endet beim ersten nicht als Hex-Ziffer auswertbarem Zeichen (i.A. einem Leerzeichen wie im gezeigten Beispiel). Das Beispiel zeichnet ein "nach links zeigendes Vergrößerungsglas", wenn der entsprechende "Codepoint" (U+1F50D = LEFT-POINTING MAGNIFYING GLASS) im aktuellen Zeichensatz enthalten ist).
Eine Übersicht der verfügbaren Unicode-'Sonderzeichen' (und in welchem Zeichensatz diese implementiert sind) finden Sie hier. Zum Zeitpunkt der Erstellung dieser Beschreibung (2018-12-06) waren die meisten Unicode-"Sonderzeichen" (mit Codes über 0x00FF) nur im Zeichensatz 'Hershey Simplex' vorhanden.
- \x <hexadezimal codierte Sonderzeichen> (seit Oktober 2009)
- Mit Backslash-x beginnt eine hexadezimale Sequenz, ähnlich wie in der Programmiersprache "C". Alle nach Backslash-x folgendenen Zeichen werden als zweiziffige hexadezimale Codes aufgefaßt. Für jeden Code wird dann das entsprechende Zeichen aus dem aktuellen Zeichensatz ausgegeben. Details hier.
- \zN
- Stellt den Skalierungsfaktor für die Anzeige von Zeichen ein ("Zoom", "Vergrößerung"). Nur verfügbar bei Terminals mit 16-Bit-CPU (also nicht für UPT515). "\z0" stellt wieder den per Programmiertool für die aktuelle Zeile programmierten Wert ein. Um den horizontalen und vertikalen Vergrößerungsfaktor voneinander unabhängig einzustellen, verwenden Sie zwei Ziffern wie in diesem Beispiel:
\z14 Hoch aber schmal \z0 Wieder normal
- Für durchgezogene Linien wird die Vordergrundfarbe verwendet
Einige Beispiele für Format-Strings:
Voltage= *****.** V
Icons: \iF_ok,kd0 \iF_no \iF_stop
Invertiertes Icon, abhängig vom Wert einer Variablen: \iF_stop,(v)
DrawModes: \m0 Normal \m5 Invers \m8 Blink
\s(<condition>)?"<string1>":"<string2>" Substrings in Abhängigkeit einer Bedingung
Zeigt einen der beiden String-Alternativen in Abhängigkeit von "condition"
(z.B. Wertevergleich) an. <String1> wird angezeigt, wenn
<condition> einen Wert ungleich 0 (bzw. TRUE nach Vergleich) ergibt,
andernfalls <string2> (als 'else'-Zweig).
Der Vergleich sollte die Funktion 'v' verwenden,
um auf den Wert der in der aktuellen Anzeigezeile dargestellten Variablen zuzugreifen.
Die Vergleiche können auch verschachtelt werden. Beispiele:
\s(v<15)?"zu kalt":(v>25)?"zu warm":"Temp ok"
- Ist 'v' (Wert der Variablen) kleiner als 15, wird 'zu kalt' angezeigt.
Ist 'v' größer als 25, wird 'zu warm' angezeigt.
Andernfalls wird 'Temp ok' angezeigt.
\s(v)1"Mon":2"Tue":3"Wed":4"Thu":5"Fri":6"Sat":7"Sun":"err"
- In diesem Beispiel wird <v> nacheinander mit 1, 2, 3,..7 verglichen,
bis der passende Wert gefunden wurde.
Wird nichts gefunden, wird in diesem Beispiel der String "err" angezeigt.
Das Fragezeichen (als nachgestellter "if"-Operator) darf hier ausnahmsweise entfallen.
\s(v)0"Null":1"Eins":2"Zwei":"****"
- Die Werte 0, 1, 2 werden als Klartext angezeigt,
alle anderen Werte numerisch (dezimal, integer, vier Ziffern).
func OneTwoThree( int n ) select n case 0 : return "Null"; case 1 : return "Eins"; case 2 : return "Zwei"; case 3 : return "Drei"; else : return itoa( n, 4 ); endselect; endfunc;In der Definitionsspalte 'Variable / Formel' würde dann statt der Variablen (z.B. 'X') der folgende Ausdruck zum Aufruf der oben gezeigten Script-Funktion eingetragen:
script.OneTwoThree( X )
Die von der Funktion 'OneTwoThree' zurückgelieferte Zeichenkette wird dann wie eine normale String-Variable zur Anzeige gebracht, d.h. jeder Buchstabe ersetzt ein Sternchen im Format-String.
\x hexadezimal codierte Sonderzeichen
Mit Backslash-x beginnt eine hexadezimale Sequenz, ähnlich wie in der
Programmiersprache "C". Alle nach Backslash-x folgendenen Zeichen werden
als zweiziffige hexadezimale Codes aufgefaßt. Für jeden
Code wird dann das entsprechende Zeichen aus dem aktuellen Zeichensatz
ausgegeben.
Diese Funktion eignet sich besonders um Sonderzeichen anzuzeigen, für
die es auf mitteleuropäischen PC-Tastaturen keine Eingabemöglichkeit
gibt. Das hexadezimale Zahlensystem macht dies besonders einfach:
Wird der Zeichensatz mit seinen maximal 256 Zeichen in einer Tabelle mit
16 * 16 Feldern angezeigt (oder besser auf Papier ausgedruckt), und...
-
die Spalten dieser Tabelle mit 0..9,a..f beschriftet,
-
die Zeilen der Tabelle mit 0..9,A..F beschriftet,
...dann steht die erste (höherwertige) Ziffer des hexadezimalen Codes
für die Tabellenzeile (0..9,A..F); und die zweite (niederwertige) Ziffer
für die Tabellenspalte (0..9,a..f). So lassen sich die Codes direkt
ablesen.
Für das Terminal spielt es keine Rolle, ob in hexadezimalen Zahlen A..F
oder a..f verwendet wird. Wir verwenden hier A..F für die höherwertige
Ziffer, und a..7 für die niederwertige Ziffer lediglich um die Lesbarkeit
von längeren Hexadezimal-Sequenzen zu verbessern.
Im Gegensatz zu "C" könne die Hex-Sequenzen hier beliebig lang sein.
Eine Hex-Sequenz endet mit dem ersten Zeichen, welches keine gültige
HEX-Ziffer darstellt (zum Beispiel mit einem Leerzeichen).
Im folgenden Beispiel wird daher 'Hello ' angezeigt, wenn ein normaler
(westlicher, alphanumerischer) Zeichensatz für die Ausgabe verwendet
wird:
'\x48656c6c6f
' . Um eine Sequenz mit hexadezimal codierten
Sonderzeichen in eine Anzeigezeile einzufügen, klicken Sie auf den
Mehr-Button im Register Eigenschaften einer Anzeigezeile,
und wählen Font Table im dann erscheinenden Dialogfenster:
(klicken Sie in die Zeichenmatrix um Sonderzeichen an die
backslash-x-Sequenz anzuhängen)
Hexadezimale Werte über 0x00FF (= dezimal 255) werden bei der Ausgabe vom LCD-Treiber als UNICODE
interpretiert. Es stehen bislang aber nur wenige Glyphen wirklich zur Verfügung (und bis dato
nur im Zeichensatz 'Hershey Simplex'):
Zum Einbetten dieser Zeichen in eine Zeichenkette (für den Display-Interpreter) verwenden Sie
die Backslash-Sequenz \U+ ("Unicode"), gefolgt vom hexadezimalen Code ohne Prefix '0x'.
U+0203C = Unicode Character 'DOUBLE EXCLAMATION MARK'
U+02190 = Unicode Character 'LEFTWARDS ARROW'
U+02191 = Unicode Character 'UPWARDS ARROW'
U+02192 = Unicode Character 'RIGHTWARDS ARROW'
U+02193 = Unicode Character 'DOWNARDS ARROW'
U+02194 = Unicode Character 'LEFT RIGHT ARROW'
U+02195 = Unicode Character 'UP DOWN ARROW'
U+025AD = Unicode Character 'WHITE RECTANGLE'
U+025B3 = Unicode Character 'WHITE UP-POINTING TRIANGLE'
U+025B7 = Unicode Character 'WHITE RIGHT-POINTING TRIANGLE'
U+025BD = Unicode Character 'WHITE DOWN-POINTING TRIANGLE'
U+025C1 = Unicode Character 'WHITE LEFT-POINTING TRIANGLE'
U+02610 = Unicode Character 'BALLOT BOX' (empty "checkbox")
U+02611 = Unicode Character 'BALLOT BOX WITH CHECK' (checkmarked)
U+02612 = Unicode Character 'BALLOT BOX WITH X'
U+1F50D = Unicode Character 'LEFT-POINTING MAGNIFYING GLASS'
U+1F50E = Unicode Character 'RIGHT-POINTING MAGNIFYING GLASS'
In der Applikation programs/HersheyFont.cvt werden einige der oben aufgeführten Sonderzeichen per \U+xxx zur Anzeige gebracht:
Siehe auch: Unicode per Funktion 'chr()', Benutzerdefinierte Zeichensätze,
Anzeige von Sonderzeichen in einer Tabelle (per Unicode),
Beispiel: Buttons mit Häkchen (per Unicode).
HTML-ähnliche 'tags' im Format-String
Geräte mit Firmware ab Oktober 2017 unterstützen HTML-ähnliche 'Tags' im Format-String für die Anzeige. Eine Verschachtelung ist im Gegensatz zu HTML nicht vorgesehen. Bei Erstellung dieser Beschreibung wurden die folgenden Tags unterstützt:- <b> fetter Text (bold) </b> (akzeptables Aussehen nur mit Vektor- oder großen Bitmap-Fonts, min. 12*24 Pixel)
- <i> kursiver Text (italic) </i> (realisiert durch 'schräge Ausgabe', akzeptables Aussehen ebenfalls nur mit großen Zeichen)
- <u> unterstrichener Text </u>
- <wN>Text mit einer Linienstärke von N Pixeln</w> (funktioniert nur mit Vektor-Zeichensätzen)
Im Gegensatz zu echtem HTML ist der Display-Interpreter nicht 'pingelig', was die Verschachtelung und Kombination der obigen Tags betrifft. Das folgende Beispiel wäre in HTML nicht erlaubt, wird vom Display-Interpreter aber anstandslos akzeptiert:
Dieser Text <b>ist fett, <u>nun auch unterstrichen,</b> nicht mehr fett, </u> nicht mehr unterstrichen.
Muster mit verschiedenen 'fett oder/und kursiv gemachten' Zeichensätzen finden Sie in der Applikation programs/FontDemo.cvt .
Editierfelder (auf programmierten Anzeigeseiten)
Werte von Display- und Script-Variablen können auf dem Display editiert werden, wenn in der Definition des Anzeige-Elements "Schreib/Lese-Zugriff" erlaubt wird. Dieser "Zugriff" bezieht sich auf die mit dem Element verknüpfte Variable.Das entsprechende Feld wird dadurch per Cursortasten oder Drehknopf selektierbar (ähnlich wie die Option '[v] Menüeintrag' bei Elementen mit Nur-Lese-Zugriff).
Beispiel aus der Applikation programs/EditTest.cvt:
Beim MKT-View I (aka "MKT-View Plus") konnten nur ganze Zahlen (Integer-Typen) editiert werden.
Beim MKT-View II/III können auch Fliesskommawerte und Zeichenketten (Strings) editiert werden.
Aus Kompatibilitätsgründen blieb aber die folgende Besonderheit erhalten:
Beim Editieren von Integer-Variablen kann im Format-String
an beliebiger Stelle ein Dezimalpunkt eingefügt werden, um die Zahl auf dem Display
wie eine Festkommazahl (fixed point) mit Nachkommaziffern aussehen zu lassen.
Beispiel:
Ein Temperaturwert zwischen -20.0°C ... +70.0°C , der intern als -200
... 700 in einer Integer-Variablen abgelegt wird, würde mit dem
Format-String "+**.*" auf dem Display wie eine Zahl mit einer Nachkommastelle
aussehen, obwohl intern nur Ganzzahlen verwendet werden. Wenn sich das Feld
im Editiermodus befindet, kann der Bediener nur die drei Ziffernstellen
anwählen, aber nicht den Dezimalpunkt selbst.
Hinweise zu Editierfeldern:
- Die editierte Variable muss Lese- und Schreibzugriff haben; sowohl in der Variablen-Definitions-Tabelle als auch in der Anzeige-Definition.
-
Beim alten MKT-View (1,"Plus") musste die Variable ein Integer-Typ sein,
denn das Editieren von "echten" Fliesskommazahlen war mit diesem Gerät nicht möglich.
Bei MKT-View II, III, IV, und ähnlichen Geräten mit 32-Bit-CPU entfällt diese lästige Einschränkung. - Variablen, die mit (aus Sicht des Terminals) "empfangenen" CAN-Signalen verbunden sind, sind nicht editierbar.
- Um eine Feld in den Editiermodus zu schalten, und um eins von (möglicherweise) mehreren Feldern auf einer Anzeigeseite zu wählen, verwenden Sie -je nach Terminal- die Cursortasten Hoch/Runter bzw. den Drehknopf.
- Für spezielle Anwendungen können Sie per Interpreterfunktion "mm" abfragen, ob sich ein Feld auf der aktuellen Seite im Zustand "selektiert" oder "editiert" befindet.
-
Wenn ein Editierfeld nicht mit einer Display-Variablen, sondern z.B. mit
einer globalen Script-Variablen verbunden ist,
dann sind dem Display-Interpreter keine Grenzwerte für das Inkrementieren oder
Dekrementieren per Cursor bzw. Drehknopf bekannt.
Um beim 'Beginn des Editierens' trotzdem eigene Min- und Max-Werte zu setzen,
definieren Sie im Script einen
Control-Event-Handler (OnControlEvent),
der für das vom Editierfeld gesendete Ereignis "Beginn des Editierens" (evBeginEdit)
die situationsabhängigen Grenzwerte in der Systemvariablen display.EditValueMin
bzw display.EditValueMax einträgt.
Mit dem Ereignis evEndEdit
kann das Script z.B. den geänderten Wert auf Plausibilität prüfen und dann übernehmen.
Dies mag auf den ersten Blick umständlich erscheinen, ist aber sehr flexibel, denn der editierbare Wertebereich kann so zur Laufzeit angepasst werden.
Buttons
Buttons sind graphische Schaltflächen, die bei Betätigung eine frei programmierbare Funktion auslösen.
Als Betätigung eines Buttons zählen:
- Drücken des dem Button zugeordneten 'Hotkeys'
- Selektion des Buttons per Cursortasten (oder Drehknopf), mit Anwahl der Enter-Taste
- Anwahl des Buttons per Touchscreen (optional, nur bei geeigneter Hardware)
Je nach Display-Hardware (TFT, Monochrom, ..) können Buttons verschiedene Farben und Stile zugewiesen werden. Bei TFT-Displays mit mindestens 255 Farben sind auch transparente (oder komplett unsichtbare) Buttons realisierbar, die z.B. als aktive Schaltfläche für den Touchscreen über eine Hintergrundgrafik gelegt werden können.
Details zu den programmierbaren Buttons finden Sie
hier .
Tabellen (graphische Anzeige- und Bedienelemente)
Tabellen können -ähnlich wie Buttons- auch als touchscreen-gesteuerte Bedienelemente verwendet werden.Mit der Backslash-Sequenz "\table" kann eine Tabelle für die Anzeige definiert.
Da eine detailierte Beschreibung den Rahmen dieses Dokumentes sprengen würde, finden Sie die Beschreibung des Anzeige-Elements 'Tabelle' in einem separaten Dokument (table_04.htm).
Das Anzeige-Element 'Tabelle' wird i.A. von Geräten mit 32-Bit-CPU, Touchscreen, und mindestens 480*272-Pixel-Display unterstützt.
Icons (Bitmap-Grafiken als programmierbares Anzeige-Element)
Icons können als einfache graphische Anzeige-Elemente auf den programmierbaren Anzeigeseiten eingefügt werden. Wählen Sie dazu auf der Registerkarte 'Seite #1' (page #x) unter 'Anzeigezeilen-Definitionen' den Button 'Neu...' (links unten). Alernativ können Icons auch mit dem graphischen Editor eingefügt werden.Intern (in der Seitendefinition) ist ein Icon lediglich eine Backslash-Sequenz im Format-String. Die generelle Syntax ist:
\i<Icon-Name>
Beispiel (automatisch vom Programmiertool erzeugte Backslash-Sequenz):
\i"Earth2"
Darin ist "Earth2" der Name einer Grafik,
die an einer festen Position angezeigt (wie bei allen anderen graphischen
Elementen ist die Position ein Teil der
Eigenschaften einer Anzeigezeile ).
Normalerweise müssen alle Icons vor der Verwendung aus geeigneten
Bitmap-Dateien importiert werden (Ausnahme: s.U.
unter "Hinweise").
(screenshot of the 'icon import' tab)
Innerhalb einer Anzeigezeile können notfalls auch mehrere Icons eingefügt werden. Dazu müssen die entsprechenden Backslash-Sequenzen allerdings manuell eingegenem werden. Die Icons verhalten sich bei der Ausgabe wie normale Buchstaben (Fließtext).
Die Grafik kann innerhalb einer Icon-Definition in Abhängigkeit einer Variablen oder eines numerischen Ausdrucks umgeschaltet werden, oder (bei monochromen Bitmaps) in Abhängigkeit eines Ausdrucks invertiert werden (d.h. Vorder- und Hintergrundfarbe vertauscht). Beispiel :
(Screenshot des 'Property'-Panels einer komplexeren Icon-Definition)
-
Wenn der Icon-Name in der Sequenz "\i<Icon-Name>" unbekannt ist (weil
das Icon nicht auf der the Icon Page definiert wurde, oder wegen
Inkompatibilität nicht angezeigt werden kann), wird die gesamte
Backslash-Sequenz wie normaler Text angezeigt. Ausnahme:
Siehe direkt vom Speichermedium ladbare Icons. -
Sie sollten die Option "diese Zeile immer neu zeichnen" ("always redraw this
line") auf dem Display-Zeilen-Property-Panel aktivieren, wenn Sie "invertierbare"
Icons in einer Display-Zeile anzeigen.
Grund: Der Interpreter bekommt möglicherweile nicht mit, dass sich das "Invers-Flag" in der Icon-Sequenz geändert hat, weil das Invertierungs-Flag nur ausgewertet wird wenn die Zeile neu gezeichnet wird.
Um den Wert aus der Definitionsspalte "Var/expr" zur Steuerung der Invertierung auszuwerten, verwenden Sie die "v"-Funktion. -
Sie sollten die Option "diese Zeile immer neu zeichnen" setzen, wenn Sie
die Sequenz "\m<Draw-Mode>" in einem Format-String verwenden und
<DrawMode> ein variabler numerischer Ausdruck ist.
Grund: Siehe oben, wie beim Invertierung-Flag.
- Bei Geräten mit 32-Bit-CPU (z.B. MKT-View II / III / IV) kann die Position
von Anzeigeelementen auch während der Laufzeit modifiziert werden
- siehe Beschreibung der Script-Sprache, Funktion display.elem[].x,y .
-
Bei bestimmten Geräten müssen Icons nicht unbedingt mit
dem Programmiertool importiert werden. Sie
könnnen stattdessem von einem geeigneten Speichermedium, z.B. einem
"Flash-Laufwerk", während der Laufzeit aus einer Bitmap-Datei geladen
werden. Verfügbar z.B. im "MIL-Terminal" mit Firmware #11356 (dort kann
der 8 MByte große
"Audio-Flash" als Ablage
für Bitmap-Dateien genutzt werden; die benötigten Bitmap-Dateien
müssen vorher per File Transfer Utility
dorthin geladen werden). Die Firmware lädt Bitmaps nur dann aus Dateien,
wenn deren Namen nicht in der Liste der 'importierten'
Icons gefunden wurde.
Ein Beispiel zur Anzeige von Bildern (Bitmaps), die nicht per Programmiertool in die *.cvt / *.upt - Datei importiert wurden, finden Sie in der Applikation ?/programs/MKTview2/BitmapsFromExternalStorage.cvt .
Seit 2015-03-25 kann dazu in der Icon-Backslash-Sequenz optional der komplette (Pseudo-)Dateipfad angegeben werden, z.B.:
\i"memory_card/fant1.bmp"
Durch Angabe des kompletten (Pseudo-)Dateipfades würde die Datei auch dann vom angegebenen Medium geladen, wenn sie einem anderen Medium (z.B. "font_flash") vorhanden wäre.
Screenshots aus dem Beispiel 'BitmapsFromExternalStorage.cvt'; links mit, rechts ohne die benötigten Bilddateien auf dem Speichermedium.
Bei fehlenden Dateien wird der Dateiname statt der Grafik angezeigt.
Dies ist beabsichtigt, und kein Firmware- sondern ein Applikationsfehler (in diesem Fall "absichtlich herbeigeführt").
Klicken Sie auf eine Grafik um diese zu vergrößern.
- Bei Farbgrafiken, d.h. Bitmaps mit 4 oder 8 Bit/Pixel, kann eine der 16 oder 256 Farben als 'transparente Farbe' definiert werden. Ein Beispiel dazu finden Sie in der Datei arm7_special\transparent_color_bitmap.cvt. Der zweite Farbwert (Hintergrundfarbe) in der Anzeige-Definiton muss dazu auf -2 (minus Zwei = "transparent") gesetzt werden, und im dritten Farbwert die Farbe der Pixel in der Bitmap-Datei, die bei der Anzeige transparent erscheinen sollen. Im Beispiel (mit Wolfsspinne) erscheinen alle weißen Pixel bei der Anzeige im LCD (TFT) transparent. Diese Funktion steht nur bei Geräten mit 32-Bit CPU (z.B. ARM-7) zur Verfügung.
(Screenshots aus dem 'Transparent Bitmap Demo')
Siehe auch (zum Thema 'Grafik') :
Importieren von Icons aus Dateien,
Transparente Buttons,
überlappende Grafik,
System-Icons (Indikatoren für Logger, Audio-Recorder, USV),
Boot-Screen (optional beim Einschalten angezeigte Bitmap-Grafik),
Canvas-Objekte ("Leinwand" zum Zeichnen von Grafiken per Script während der Laufzeit).
Verwendung von Anzeige-Zeilen als Menü
Display-Zeilen können auch zur Realisierung eines einfachen "Auswahlmenüs" verwendet werden.
Setzen Sie zu diesem Zweck die Option Menüeintrag in den 'Eigenschaften der Anzeigezeile'. Dadurch wird eine normale Anzeige-Zeile in eine Menüzeile verwandelt, die später mit den CURSOR-Tasten angewählt werden kann (bzw per Drehknopf oder per Touchscreen).
Als nächsten Schritt definieren Sie, was Ihre Applikation tun soll wenn der Bediener die ENTER-Taste drückt während die Menüzeile markiert ist. In den meisten Fällen wird dies ein goto-Kommando sein um zu einer anderen Anzeigeseite zu springen.
- Beispiel:
- g"Menu2" (unter der Annahme daß Ihr Programm eine Seite namens "Menu2" enthält)
Dieses Kommando muß in der Spalte "Var/Expression" einer Anzeige-Seiten-Definition eingetragen werden. Wenn Sie den Namen der "Zielseite" noch nicht kennen, lassen Sie das Feld zunächst leer. Verwenden Sie später (wenn alle Display-Seiten existieren) den Menü-Link-Dialog, auf dem sie bequem alle Menüsprünge definieren können (der "goto"-Befehl wird dann gegebenenfalls automatisch erzeugt).
Sie können zusätzlich- einen hotkey für diese Art von Menü auf dem "display line property panel" definieren.
Der UPT-Interpreter bietet einige Funktionen um diese Art von Menüs zu steuern:
- mi : liefert die Zeilennummer (index, 0..n) des aktuell markierten Menüeintrags (oder Eingabefelds)
-
mm: liefert den aktuellen "Menü-Modus". Dies
kann einer der folgenden Werte sein:
0 = Menü ist "Aus", d.h. der Markierungsbalken ist zur Zeit unsichtbar
1 = Modus "Selektieren", d.h. der Markierungsbalken ist sichtbar, der Bediener kann ihn per Cursor durch alle "Menüzeilen" auf der aktuellen Seite bewegen.
Andere "Modi" sind nur für numerische Eingabefelder gültig, z.B. 2 = "Es wird grade ein Wert editiert".
Es gibt auch einige "SET"-Prozeduren mit denen die Menüs programmgesteuert beeinflußt werden können. Die "SET"-Prozeduren haben die gleichen Namen wie die entsprechenden "GET"-Funktionen:
- mi( <new_item> ) ermöglicht das Setzen des "aktuellen" Menü-Item durch das Interpreterprogramm (z.B. per Event),
- mm( <new_mode> ) ermöglicht das Setzen des "aktuellen" Menu-Modus' durch das Interpreterprogramm.
Hinweis: Wenn Sie eine Displayzeile als ein Menü-Item verwenden, können Sie in dieser Zeile keinen numerischen Wert anzeigen !
Balkendiagramme
Alle Geräte mit grafikfähigem Display unterstützen einzelne Balken-Elemente ("Bargraphen"), die mit Hilfe des grafischen Editors auch zu komplexeren 'dynamischen' Diagrammen zusammengesetzt werden können, z.B.:
Anzeigeseite mit Balkendiagrammen als 'Füllstandsanzeige',
mit transparenten Bitmaps im Vordergrund (als Rahmen).
Y(t) und X/Y-Diagramme
Y(t)-Diagramme stellen i.A. den zeitlichen Verlauf eines oder mehrerer Signale dar, z.B.:
Beispiel für ein zweikanaliges Y(t)-Diagramm
Y(t)- und X/Y-Diagramme werden mittlerweile von allen Geräten mit 32-Bit-CPU und mindestens 480*272-Pixel-Display unterstützt.
Mehrzeilige Text-Panels (dienen als 'Textbildschirm' für die Script-Sprache)
Mit der Backslash-Sequenz "\panel" können Anzeigeelemente definiert werden, in denen per Script-Sprache farbiger Text angezeigt wird (vergleichbar mit einem 'Textfenster', 'Konsolenfenster' oder auch einem kompletten 'Textbildschirm').Zur Zeit kann ein solches Text-Panel nur per Script-Sprache gefüllt werden. Dazu dient im Script das Kommando 'print'.
Ohne weitere Angaben (in der optionalen Argumentenliste, d.h. im Klammern) hat ein Text-Panel weder einen Rahmen noch Rand.
Die folgenden Optionen können nach dem Schlüsselwort 'panel' in Klammern definiert werden:
- bo= <Breite des äußeren Rahmens (Rands) in Pixeln>
-
Umgibt das Panel mit einem 'äußeren Rahmen' (outer border), der mit der Vordergrundfarbe des Elements gezeichnet wird.
- bi= <Breite des inneren Rahmens (Rands) in Pixeln>
- Umgibt das Panel mit einem 'inneren Rahmen' (inner border), der mit der Hintergrundfarbe des Elements gezeichnet wird.
Beispiel: \panel(bo=6,bi=2)
definiert ein Text-Panel mit einem 6 Pixel breiten äußerem, und einem 2 Pixel breitem innerem Rahmen,
wodurch sich die für den Text verbleibende Fläche um 8 Pixel an jedem Rand (oben, unten, links, rechts) verringert.
(Screenshot aus dem Script-Beispiel "GPS-Empfänger-Test")
Um ein bereits auf einer Display-Seite eingefügtes Anzeige-Element in ein mehrzeiliges Text-Panel zu verwandeln, setzen Sie den Typ des Elements auf 'Multi-Line Text Panel' (im Programmiertool auf der Registerkarte 'Seite X'):
Da das Script während des Editierens der Display-Applikation gestoppt ist, können Sie zunächst keinen echten Text
auf dem Panel sehen. Um das Aussehen des Panels (im Zusammenhang mit dem verwendeten Zeichensatz) zu kontrollieren,
füllt das Programmiertool den Textbereich mit "Dummy-Zeichen".
Alle Zeichen innerhalb eines Panels verwenden den gleichen Zeichensatz, wie im oben gezeigten Screenshot
zu erkennen ist.
Ein Text-Panel kann nicht nur als Anzeige-, sondern auch als Bedienelement verwendet werden.
Es kann beispielweise (mit Hilfe der Script-Sprache) auch auf Touchscreen-Ereignisse reagieren.
Details und Beispiele zu diesem Thema finden Sie im Handbuch zur Script-Sprache.
Siehe auch : Handbuch zur Script-Sprache (externer Link,
funktioniert leider nur im HTML-basierten Hilfesystem, aber nicht im daraus erzeugten PDF),
script: print, script: gotoxy,
script: setcolor .
Grafik-Panels (Anzeige von Canvas-Grafiken)
Bei Geräten mit Script-Sprache kann alternativ zum im vorhergehenden Kapitel beschriebenen Text-Panel auch ein Grafik-Panel eingefügt werden. Dazu dient die Backslash-Sequenz "\canvas" (englisch: "Leinwand"), gefolgt vom Namen eines im Script mit dem Typ 'tCanvas' deklarierten Objektes.Oft werden 'Canvas'-Objekte auch als Hintergrund-Grafik verwendet, z.B. als Hintergrund eines Diagramms. Die Backslash-Sequenz "\canvas" wird dann nicht benötigt.
Im Gegensatz zu importierten Bildern ("Icons") wird die auf einem Grafik-Panel angezeigte Grafik erst während der Laufzeit per Script erzeugt. Ein einfaches Beispiel dazu finden Sie in der Applikation script_demos/Mandelbrot.cvt (erzeugt die auch als "Apfelmännchen" bekannte Fraktal-Grafik).
Beispiel zur Anzeige eines Canvas-Objektes per Backslash-Sequenz.
Das im Script deklarierte tCanvas-Objekt namens "MyCanvas"
erhält durch diese Definition bereits eine Größe von 748 * 400 Pixeln.
Funktionen zum Zeichnen auf einer 'Canvas' (Leinwand).
Einfügen anderer graphischer Elemente in einer Anzeigeseite
Die Registerkarte "Other Commands" für eine Display-Seiten-Definition ermöglicht das Einfügen von "speziellen" Anzeige-Kommandos, die sich nicht in das "Zeilen-Tabellen-Schema" pressen ließen. Wahlweise können dort auch "alle" zu einer Anzeigeseite gehörenden Zeilen, Kommandos und Event-Definitionen angezeigt werden (wenn die Checkbox "show all types of commands" aktiviert wird). Hintergrund: Pro Anzeigeseite steht nur eine begrenzte Anzahl von Zeilen+Kommandos+Events zu Verfügung.
Bei modernen Geräten (z.B. MKT-View III / IV) werden 'low-level'-Grafik-Befehle
(z.B. dm=draw mode, ic=icon,
li=line,...) nicht mehr benötigt.
Sie existieren nur noch aus Kompatibilitätsgründen für Geräte ohne Script-Sprache.
Verwenden Sie stattdessem die unten aufgeführten 'high-level'-Elemente, oder
(wenn Sie für Ihre Applikation wirklich 'selbst zeichnen' wollen oder müssen),
zeichnen Sie per Script in das dafür vorgesehene Canvas-Element.
Siehe auch:
Bargraphen, Bitmaps, Buttons,
Diagramme, Polygone,
Zeigerinstrumente, Tabellen (als graphische Elements),
Auffinden der Definiton von grafischen Elementen per LCD-Simulator.
Überlappende und bewegte Grafik
Für einige "Spezialeffekte" können Sie Anzeigeelemente (Text oder Graphik) im Vordergrund vor anderen Elementen anordnen.Beispiel: Ein recht großes Icon im Hintergrund und eine Textzeile im Vordergrund (vor dem Icon).
Um diesen Effekt zu erzielen, muß zunächst das Icon gezeichnet werden, und erst danach der Text. Die Reihenfolge, in der gezeichnet wird, ist durch die Zeilennummer in der Anzeige-Seiten-Definition (Tabelle) vorgegeben.
Die erste Zeile in der Definitionstabelle (Zeile "0") wird als erste gezeichnet, danach die zweite Zeile und so weiter. Dies ist allerdings nur so, wenn immer die "komplette Seite" gezeichnet wird !
Wenn Sie wie hier "überlappende" Grafik einsetzen, muss eventuell die Option "redraw page completely" im dem Seiten-Definitions-Kopf gesetzt werden, auch wenn dies die UPT-Applikation etwas verlangsamt. Entsprechendes gilt für bewegte Grafik.
Wird ein graphisches Element allerdings komplett durch ein anderes Element überdeckt (wie im unten angeführten Beispiel), so reicht es im Allgemeinen, nur das Flag 'diese Zeile immer komplett neu zeichnen', statt immer den ganzen Bildschirm neu zu zeichnen - wodurch der Seitenaufbau unnötig verlangsamt werden könnte. Beispiel:
(Screenshot aus dem 'Transparent Bitmap Demo',
file arm7_special\transparent_color_bitmap.cvt)
Um die Reihenfolge des Zeichnens der Anzeigeelemente zu ändern, bewegen Sie den Mauspfeil in die erste Spalte der Anzeigezeilen-Definitions-Tabelle (mit dem Titel "Nr"), drücken Sie die linke Maustaste, und halten Sie sie gedrückt, während sie die Anzeige-Definitions-Zeile in der Tabelle nach oben oder unten verschieben. Zur Erinnerung: Das oberste Anzeigeelement (in 'Definitionszeile Nummer Null') wird als erstes gezeichnet, das letzte Element in der Definitionstabelle zuletzt.
Siehe auch: Übersicht,
Selektieren eines 'überlappten' Elements im LCD-Simulator,
transparente Bitmaps,
transparente Buttons,
Grafik per Script im OnPageUpdate-Handler.
Touchscreen-Unterstützung
Ob ein bestimmtes Anzeige-Element per Touchscreen bedienbar sein soll, kann während der Applikationsentwicklung unter 'Eigenschaften einer Anzeigezeile' / 'per Touchscreen bedienbar' eingestellt werden.Die detailierte Beschreibung der Touchscreen-Unterstützung (inkl. Gestensteuerung) finden Sie in einem separaten Dokument (touchscreen_49.htm).
Mehrsprachige Applikationen (und deren Realisierung)
Um eine Anwendung mehrsprachig zu machen, bieten sich mehrere Möglichkeiten an:- Duplizieren der selbstdefinierten Anzeigeseiten, mit sprachabhängigem Prefix oder Suffix für die
Sprache im Seitennamen, z.B. "Menu_49" für das Hauptmenü in deutscher Sprache,
"Menu_01" in englischer Sprache, u.s.w.
- Nachteil:
- In allen Befehlen zur Seitenumschaltung (z.B. "goto") muss auch
der Suffix manuell angepasst werden, z.B.
g "Menu_49" für den Sprung in's deutsche Hauptmenü,
g "Menu_01" bei englischer Sprache, usw.
- Vorteil:
- Einfach zu realisieren, und in der Seitenübersicht des Programmiertools werden alle Seiten in allen Sprachen angezeigt.
- Auslagern aller Zeichenketten in eine String-Tabelle (o.Ä.), und Ersatz durch den Aufruf
einer selbstdefinierten Script-Funktion (z.B. script.GetText() im Beispiel 'MultiLanguageTest.cvt'
oder TranslatePage() im Beispiel 'i18nDemo.cvt', aus dem die weiter unten gezeigten
Screenshots stammen).
Ein Beispiel zur Realisation einer mehrsprachigen Anwendung mit diesem Prinzip finden Sie in der Beschreibung der Script-Sprache im Beispiel MultiLanguageTest.cvt (man beachte die Implementierung der Funktion GetText() im Script, bei dem einige 'hartcodierte' Texte fest im Script vorhanden sind; andere Zeilen werden dagegen zur Laufzeit per Script aus einer 'Übersetzungsdatei' geladen).
Um z.B. alle Zeichenketten auf der aktuellen Anzeigeseite per Script in eine andere Sprache zu übersetzen (um die Applikation zu 'internationalisieren'), bietet sich der speziell dafür vorgesehende Event-Handler OnPageLoaded() an.
- Nachteile:
- Für den Einstieg recht aufwändig zu programmieren, und (bei Auslagerung der
Zeichenketten für die Internationalisierung in eine Textdatei)
nicht einfach zu testen, weil nur anhand der Stringtabelle (im Script oder Übersetzungsdatei)
nicht zu erkennen ist, ob der übersetzte Text wirklich in allen
Sprachen, auf allen Seiten in die entsprechende Anzeige-Elemente
(einfache Textfelder, Buttons, usw) passt.
Ferner: Das Laden von Zeichenketten aus einer 'Übersetzungsdatei' zur Laufzeit kostet etwas Zeit, funktioniert nur bei Geräten mit freigeschalteter Option 'Erweiterte Script-Funktionen' (beinhaltet Funktionen für den Dateizugriff auf der SD-Karte oder auf Dateien im geräteeigenen Flash-Speicher (Pseudo-Verzeichnis "font_flash" oder "audio_flash").
- Vorteil:
- Die Applikation besteht weiterhin aus wenigen Anzeigeseiten, was bei sehr
umfangreichen Seiten die Fehlersuche und den Einbau neuer Funktionen
erleichtert (weil die "Logik" für eine bestimmte Seite nur einmal
vorhanden ist).
Beispiel einer per Script (in script_demos/i18nDemo.cvt)
in mehrere Sprachen übersetzten Anzeigeseite.
In dem bewusst einfach gehaltenen Beispiel ist die 'Übersetzungstabelle' fest im Script eingebaut.
Die Applikation besteht daher nur aus der *.cvt-Datei, und funktioniert ohne externe Abhängigkeiten.
Der "einfache" (graphische) Editor für Anzeigeseiten
Der "einfache" (graphische) Editor wurde erst viele Jahre nach der Erstellung des Programmiertools integriert. Er erleichtert z.B. das Positionieren von Anzeige-Elementen, wird aber von fortgeschrittene Anwender für die Programmieren von komplexeren Elementen, z.B. mit Farbumschaltung per Backslash-Sequenz, eher selten verwendet.
Die Toolbar des graphischen Seiten-Editors
Die Toolbar des "einfachen" Anzeigeseiten-Editors enthält die folgenden Funktionen (Buttons) :
- (Pfeil-Werkzeug) : Verschieben, Selektieren oder Bearbeiten von Elementen der Anzeige.
-
Solange dieses Tool aktiv ist, kann -bei gedrückter linker Maustaste-
das markierte Anzeigeelement verschoben werden.
Ein kurzer, einzelner Klick mit der linken Maustaste selektiert ein Objekt zum Ausschneiden / Kopieren / Einfügen.
Um mehrere Elemente zu markieren, halten Sie die STRG-Taste ("Control-Taste") gedrückt, oder ziehen mit der linken Maustaste einen Selektionsrahmen auf. Details zur Mehrfachauswahl folgen unten.
Per Doppelklick wird ein spezieller Einstelldialog gestartet, in dem das markierte Element bearbeitet werden kann.
Elemente mit frei änderbarer Größe erhalten im selektierten Zustand ein kleines Quadrat in der unteren rechten Ecke. Dieses Quadrat kann mit der Maus erfasst werden (wobei es in oranger statt roter Farbe dargestellt wird), und kann dann zum Ändern der Größe des markierten Elements verschoben werden.
Die obere linke Ecke des Elements bleibt währenddessen fixiert.
Ändern der Größe eines Elements (hier: eines Buttons)
durch Verschieben der unteren rechten Ecke (orange).
- (Text-Werkzeug) : Einfügen einer alphanumerischen Anzeigezeile.
-
Aktivieren Sie zunächst dieses Tool (durch Klick auf das Symbol in der
Toolbar).
Danach kann mit einem einzelnen Klick eine neue Textzeile auf der Anzeige platziert werden.
Nach Einfügen der Textzeile kann diese in einem speziellen Einstelldialog bearbeitet werden.
- (Icon-Werkzeug) : Einfügen eines Icons (Symbol; Bitmap-Grafik).
-
Mit diesem Tool können Sie kleine Grafiken ("Icons") auf der Seite
einfügen.
Hinweis: Die Grafiken müssen vorher auf der Registerkarte "Symbole" (engl. "Icons") importiert werden.
Nach Einfügen der Grafik kann deren Erscheinungsbild ggf. angepasst werden (Farbe, Vergrößerung, unterschiedliche Symbole in Abhängigkeit einer Variablen, etc.) Verwenden Sie dazu das Pfeil-Werkzeug, und einen Doppelklick in die neu eingefügte Grafik.
- (Button-Werkzeug) : Fügt einen neuen Button (graphische Schaltfläche) ein.
-
Selektieren Sie dieses Tool, und klicken Sie in die Zeichenfläche, um
dort einen neuen Button einzufügen.
Danach kann der Button in einem speziellen Einstelldialog konfiguriert werden.
- (Bargraph-Werkzeug) : Fügt ein neues Balkendiagramm ein.
-
Wenn dieses Tool aktiv ist, wird per Mausklick in die Zeichenfläche
dort ein neues Balkendiagramm eingefügt.
Dieses kann danach in einem speziellen Einstelldialog konfiguriert werden.
- (Diagramm-Werkzeug) : Fügt ein Y(t) oder X/Y-Diagramm ein.
-
Ist dieses Took aktiv, kann per Mausklick ein neues Diagramm eingefügt werden.
- (Weitere Werkzeuge) : Öffnet ein Untermenü, in dem weitere Elemente zum Einfügen ausgewählt werden können.
-
Dazu zählen z.B. Tabellen und Polygone.
- (Ausschneiden) : Schneidet das selektierte Anzeige-Element aus ("cut").
-
Selektieren Sie zunächst das Element, welches entfernt werden soll (mit
dem Pfeil-Tool),
und klicken danach das Tool zum Ausschneiden an (Schere).
Beim Ausschneiden wird das selektierte Objekt in eine interne Ablage kopiert (s.U.).
- (Kopieren) : Kopiert das selektierte Element in eine interne Ablage ("copy").
-
Selektieren Sie zunächst das Element, welches in die Ablage kopiert
werden soll (mit dem Pfeil-Tool),
und klicken danach auf das Tool zum Kopieren .
Das selektierte Objekt wird in eine interne Ablage kopiert .
Hinweis: diese Ablage ist nicht mit der Windows-Zwischenablage zu verwechseln !
- (Einfügen) : Fügt das Element aus der internen Ablage wieder auf der Anzeige ein ("paste").
-
Wählen Sie ggf zunächst mit dem Pfeil-Tool das zu überschreibende
Element.
Wenn Sie beim Einfügen nichts überschreiben wollen, selektieren Sie vorher nichts (z.B. Klick ins Leere).
Das in der internen Ablage gespeicherte Element wird auf der Zeichenfläche eingefügt, und kann anschließend verschoben werden.
War vor dem Einfügen ein Element markiert, so wird dieses durch das eingefügte Element ersetzt.
War vor dem Einfügen kein Element markiert, so wird das neue Element an der Position eingefügt, die durch den Einfüge-Cursor (roter Punkt) markiert ist.
Der Einfüge-Cursor kann (vor dem Einfügen) durch einen kurzen Mausklick "ins Leere" umgesetzt werden. Beim Einfügen eines Elementes wird der Einfügecursor entsprechend der Größe des eingefügten Objektes weiterbewegt, so daß sich beim erneuten Einfügen keine Überlappung ergibt.
- (Rückgängig, engl. "Undo") : Letzte Aktion(en) rückgängig machen.
-
Ein Klick auf den 'UNDO'-Button macht die letze Änderung auf der aktuellen
Anzeigeseite rückgängig.
In diesem Editor können nacheinander bis zu 20 Aktionen rückgängig gemacht werden, da auf einem entsprechend großen Stapelspeicher abgelegt werden.
Vorsicht: Wenn Sie die aktuelle Anzeigeseite im Editor verlassen, können die einzelnen Änderungen auf der Seite nicht mehr rückgängig gemacht werden !
- (Wiederrufen, engl. "Redo" oder "Un-Undo") : Letzte Unfo-Aktion widerrufen.
-
Wenn Sie versehentlich zu oft "UNDO" aufgerufen haben (s.O.), können
Sie die letzten UNDO-Aktionen durch Anklicken von REDO wiederrufen (d.h.
das "Rückgänig-machen wieder rückgängig machen", englisch
"un-undo").
Im Anzeigeseiten-Editor können bis zu 20 vorhergehende Undo-Aktionen rückgängig gemacht werden, da auch zum Wiederrufen ein entsprechend großer Speicher zur Verfügung steht.
Vorsicht: Wenn Sie die aktuelle Anzeigeseite im Editor verlassen, kann -ählich wie bei Undo- auch kein REDO für die aktuelle Seite mehr erfolgen !
Das selektierte Objekt wird in der Zeichenfläche mit einem (bzw mehreren) roten
Rahmen markiert.
Um mehrere Objekte zu markieren, aktivieren Sie zunächst wie oben beschrieben
das 'Pfeil'-Werkzeug. Drücken Sie danach die STRG-Taste (bzw CTRL) und halten sie gedrückt,
um per Klick mit der linken Maustaste weitere Objekte zur aktuellen Selektion hinzugefügt werden.
Alternativ können mehrere 'nebeneinander' liegende Objekte wie folgt markiert werden:
Bewegen Sie den Mauszeiger zunächst über einen freien Bereich (in dem kein Objekt steht),
links oberhalb der linken oberen Ecke des ersten zu markierenden Objekts. Drücken und halten Sie
anschließend die linke Maustaste, während sie die Maus nach rechts unten über den zu markierenden
Bereich bewegen. Dadurch wird ein transparentes Rechteck aufgespannt, z.B.:
(Screenshot aus dem 'graphischen Editor' mit mehreren per Maus selektierten Objekten; linke Maustaste noch gedrückt)
Beim Loslassen der Maustaste verschwindet das aufgespannte Markierungs-Rechteck, alle davon berührten Objekte
bleiben aber selektiert (erkennbar an den roten Rahmen).
Um die so markierten Objekt auf dem Bildschirm zu verschieben, greifen Sie eines dieser Objekte
mit der linken Maustaste (denn andernfalls, beim Klick außerhalb der Selektion werden alle Objekte de-selektiert),
und verschieben die Objekte mit gedrückter Maustaste an die neue Position.
Sind mehrere Objekte selektiert, beziehen sich auch 'Ausschneiden', 'Kopieren' und 'Einfügen' auf diese Objekte.
Damit können z.B. ganze Gruppen von Objekten von einer Anzeigeseite auf andere Seiten übernommen werden.
Mit der Combo-Box in der Toolbar des Editors können die Anzeigezeilen selektiert werden (als Alternative zum Selektieren per Maus in der Zeichenfläche). Diese Funktion ist z.B. dann nötig, wenn ein Anzeigeelement komplett verdeckt ist, und daher nicht direkt mit der Maus selektiert werden kann.
Beim Selektieren eines Objektes in der Zeichenfläche (Pfeil-Werkzeug) wird auch der entsprechende Eintrag in der Combo-Liste umgeschaltet. Die Anzeige in der Combo-Liste ist folgendermaßen zu interpretieren:
[Zeilennummer] ELEMENT-TYP : Element-Text
Beispiel:
[5] TEXT : The EA515..
- Dies bedeutet:
-
Das aktuell selektierte Anzeige-Element ist in Zeile Nummer 5 definiert
(Array-Index; die Zählung beginnt bei Null);
es handelt sich um eine einfache TEXT-Anzeige (alphanumerisch);
der Anzeigetext beginnt mit der Zeichenkette "The EA515..".
Graphische Elemente können mit dem Anzeige-Editor an einem 8*8-Pixel-Gitter ausgerichtet werden. Um dieses Gitter anzuzeigen, oder Koordinaten automatisch am Gitter auszurichten, wählen Sie im Hauptmenü "Optionen"..."Seiten-Editor". Ist die Option "Koordinaten an 8*8-Pixel-Gitter" aktiv, rasten die Koordinaten beim Verschieben eines Objektes automatisch auf den nächstgelegenen Gitterpunkt ein.
Zur Zeit werden die folgenden Element-Typen vom graphischen Editor unterstützt:
- TEXT : einfacher Text, mit oder ohne Anzeige einer Variablen (Sternchen als Platzhalter)
- ICON : kleine Bitmap-Grafik ("Symbol")
- BUTTON : graphische Schaltfläche (siehe 'btns_49.htm').
- BARGRAPH : Balkendiagramm
- DIAGRAM : Y(t) oder X/Y-Diagramm
- TABLE : Tabelle (Anzeige- oder Bedienelement mit mehreren Spalten und Zeilen)
- POLYGON: Polygon (Linien, Linienzüge, Rechtecke, vektorisierter Text und andere Formen; punktweise editierbar).
Sonderfunktionen wie z.B. Grafikommandos
oder per Script erzeugter Text
werden vom hier beschriebenen graphischen Editor nicht unterstützt.
Die Funktionen zum Kopieren / Ausschneiden / Einfügen und zum
Ändern der Eigenschaften eines einzelnen Elements können auch
(per Klick mit der rechten Maustaste) über das Kontext-Menü
des graphischen Editors aufgerufen werden.
Dialog für alphanumerische Anzeigeelemente
Per Doppelklick auf ein alphanumerisches Anzeigeelement wird der folgende Dialog geöffnet:
Im Feld 'Text' können neben normalem Text auch die in Kapitel 1.11 vorgestellten Backslash-Sequenzen, Platzhalter für Ziffern (*,#,0) und Vorzeichen (-), sowie HTML-ähnliche Tags für Fettschrift, Kursivschrift, und Unterstreichung eingegeben werden.
Einfügen und Bearbeiten von Polygonen mit dem graphischen Editor
Polygone können aus Linienzügen, einzelnen Linien, Gittern, Vielecken, vektorisiertem Text
und ähnlichen geometrischen Figuren bestehen. Die Anzahl von "Stützpunkten" pro Polygon ist allerdings begrenzt,
so daß komplexere Vektorgrafiken notfalls aus mehreren Polygonen zusammengesetzt werden müssen
(jeweils in einer eigenen Definitionszeile).
Mit maximal 500 Zeichen pro Definitionszeile, und 6 Zeichen pro 'Koordinate' in Textform sind
etwa 80 Punkte pro Polygon möglich.
- Nur für Experten und Fortgeschrittene:
- Der graphische Editor erstellt aus dem Polygon die Backslash-Sequenz "\li",
gefolgt von den Koordinaten aller Eckpunkte.
In der Argumentenliste können auch weitere Grafik-Elemente enthalten sein, z.B. polygon(), polyfill(), usw.
Beispiele für derartige 'Vektorgrafiken' finden Sie am Ende dieses Kapitels.
Wie alle Anzeigeelemente können Polygone auch 'als Text' bearbeitet werden. Markieren Sie dazu das zu beabeitende Polygon im Editor, und wählen im Kontext-Menü (s.U.) den Eintrag 'Eigenschaften' (Properties).
Button in der Toolbar des Editors | |
| Menü des Editors zum Einfügen 'weiterer Elemente', u.A. mit vordefinierten Vektorgrafiken |
Wählen Sie im Menü die Funktion 'Linien oder Polygone einfügen', oder wählen im Untermenü 'Vordefinierte Vektorgrafiken' eine geometrische Form oder ein Symbol aus. Für 'vektorisierten Text' geben Sie noch die entsprechende Zeichenkette ein.
Klicken Sie anschließend in der Abbildung der Anzeigeseite auf die linke obere Ecke, an der das neue Polygon eingefügt werden soll.
Passen Sie danach die Zeichenfläche des Polygons an, indem Sie wie oben beschrieben die rechte untere Ecke der rot umrahmten Fläche per Maus ziehen.
Ein neu eingefügtes Polygon besteht aus einem einfachen Rechteck, dessen Eckpunkte am Rand der Zeichenfläche liegen.
Per Doppelklick in die Polygonfläche schaltet der Editor vom Modus "Objekt verschieben oder Größe ändern" in den Modus "einzelne Polygon-Punkte verschieben" um. In diesem Zustand werden alle Punkte des Polygons markiert, und einzelne Punkte können per Maus verschoben werden:
⇔ | ||
Polygon im grafischen Editor, Modus 'Objekt bewegen / skalieren' (Move/Size) | Polygon im grafischen Editor, Modus 'Punkte verschieben' (Move points) |
Da sich dicht beieinander liegende Punkte nur schwer per Maus selektieren lassen,
kann im Modus 'Punkte editieren' ein einzelner Punkt auch per Mausrad (oder notfalls per Cursor-Taste) selektiert werden.
Der aktuell selektierte Punkt wird grün markiert, und auch in der Statuszeile angezeigt. Z.B. bedeutet die Anzeige
pt[0]: 1,2
dass momentan der erste Punkt des Polygons selektiert ist (Array-Indizes beginnen bei Null),
und sich an der Koordinate x=1, y=2 innerhalb der Polygon-Zeichenfläche befindet.
Eigenschaften wie Linienfarbe, Hintergrundfarbe (bzw. "transparenter Hintergrund" = Dummy-Farbwert "-2") können
wie bei normalen Text-Anzeigen mit dem im Kontext-Menü per "Eigenschaften" zu öffnenden Dialog eingestellt werden.
Weitere Funktionen zum 'Nacharbeiten' eines Polygons oder Linienzugs finden Sie im Kontext-Menü (Öffnen per Rechtsklick auf das selektierte Polygon):
Kontext-Menü des Editors mit Optionen zum Editieren eines Polygons |
Beispiele für Linien, Linienzüge, offene und geschlossene Polygone
Die im Folgenden aufgeführten Beispiele stammen z.T. aus dem Beispiel programs/line_art.cvt.Die Zeichenfläche für die folgenden Beispiele sollte mindestens 100 * 100 Pixel umfassen.
- Einfache Linie mit Start- und Endpunkt
- \li(x1,y1, x2,y2)
- Breite Linie (Stärke z.B. 4 Pixel, dies ist der Parameter 'w')
- \li(w=4, x1,y1, x2,y2)
- Zwei offene Linienzüge (man beachte das Semikolon als Trenner zwischen zwei Koordinaten ohne Verbindungslinie)
- \li(8,8, 8,88, 88,88; 16,16, 16,80, 80,80)
- Geschlossenes, aber nicht gefülltes Polygon (hier: Dreieck)
- \li(polygon(0,99, 50,0, 99,99))
- Gefülltes, 'dick umrahmtes' Polygon :
- \li(polyfill(w=4, 5,95, 50,5, 95,95))
- Gefülltes Polygon ohne Rahmen :
- \li(polyfill(5,95; 50,5; 95,95))
Siehe auch: Polygone im Kurvenbereich eines Diagramms, generelle '\li'-Syntax, gedrehter Text aus Vektor-Fonts.
Zurück zur Übersicht
Einfügen eines Zeigerinstruments (Analog-Instrument)
Seit August 2017 brauchen Analoginstrumente (und ähnliche Zeigerinstrument wie z.B. Tachometer) nicht mehr
aus Polygonen und Bitmaps zusammengesetzt werden.
Ein Zeigerinstrument kann wie jedes andere Grafikelement mit dem Editor eingefügt oder bearbeitet werden.
Spezifische Parameter werden per Property-Liste ("Eigenschaften") im Programmiertool definiert. Dazu zählen
u.A.:
Outer Shape (Äußere Form)
Rect: Rechteckiges Instrument (z.B. "Voltmeter"), Round: Rundinstrument (z.B. "Tachometer").
Arrow Type, Arrow Colour (Zeigertyp, Zeigerfarbe)
Erscheinungsbild des Zeigers (Nadel, Pfeil, Kompaß-ähnlich, usw.).
Start- and End angle (Start- und Endwinkel)
Bereich in dem sich der Zeiger (Nadel, Pfeil, ..) bewegen kann.
Verwendet das weiter unten gezeigte 'Kompaß'-Winkelsystem.
Scale start value (Wert am Skalenanfang)
Wert für den unteren Endanschlag. Ein entsprechendes Label wird am 'Anfang' der Skala gezeichnet.
Scale end value (Wert am Skalenende)
Wert für den oberen Endanschlag. Ein entsprechendes Label wird am 'Ende' der Skala gezeichnet.
Arrow2Value, Arrow3Value
Numerischer Ausdruck für den Wert, der als zweiter bzw. dritter Zeiger angezeigt werden soll.
Der Wert für den ersten Zeiger ergibt sich aus dem Feld 'Variable / Formel / Ausdruck',
welches für jegliche Art von Anzeige-Element im oberen Teil des Definitionsfensters existiert.
Beispiele für Zeigerinstrumente finden Sie u.A. in der Applikation 'Analog meter test' (Datei programs/analog_meter_test.cvt):
Screenshot aus Application 'analog meter test'
Der Drehbereich eines Zeigers wird durch Start- und Endwinkel definiert. Winkel werden dabei wie beim Kompass angegeben, d.h. 0° = Nord (oben), +90° = Ost (Zeiger nach rechts). Negative Winkel drehen entgegen des Uhrzeigersinns:
Kompassrichtungen (in Grad)
Beispiele:
Analoges Voltmeter: StartAngle=-45, EndAngle=45 .
Rundinstrument (z.B. Tachometer): StartAngle=-135, EndAngle=135 .
Analoguhr (siehe folgendes Beispiel): StartAngle=0, EndAngle=360 .
Bei Rundinstrumenten befindet sich der Drehpunkt (pivot) immer in der Mitte.
Bei Instrumenten mit rechteckigem Rand wird der Drehpunkt automatisch so platziert, daß die Spitze
des Indikators eine möglichst große Kreisbahn überstreichen kann. Die Position des Drehpunktes hängt daher
vom Winkelbereich ab. Bei kleinen Winkelbereichen (z.B. "Voltmeter" mit StartAngle=-45, EndAngle=45°) kann
der Drehpunkt auch außerhalb des sichtbaren Instrumentes liegen.
Zusätzlich zum Haupt-Zeiger können zwei weitere Indikatoren (Zeiger, Nadeln, Dreiecke) im Instrument angezeigt werden.
Die Position der zusätzlichen Indikatoren kann eine numerische Konstante, Variable, oder sogar ein beliebiger Ausdruck
("Formel zur Skalierung") sein.
Zum Einfügen eines Zeigerinstruments klicken Sie mit der rechten Maustaste in das LCD-Simulator-Fenster,
und wählen im Kontextmenü 'Insert analog meter' ('Zeigerinstrument einfügen'). Wie bei allen anderen Anzeige-Elementen können
die Eigenschaften des Instruments in der rechten Hälfte des Hauptfensters (im Programmiertool) eingestellt werden:
Eigenschaften eines Zeigerinstruments (analog meter)
im Programmiertool (Editor für Anzeigeseiten)
Die rechts gezeigte 'Analoguhr' stammt aus der Beispielapplikation 'programs/analog_clock_480.cvt'. Sie besteht aus einem einzelnen Zeigerinstrument (mit drei Zeigern) mit dem Winkelbereich 0 bis 360°, und Wertebereich 0 bis 12. Stunden-, Minuten- und Sekundenzeiger wurden wie folgt definiert:
Zeiger | Arrow Type | Ausdruck (anzuzeigender Wert) |
---|---|---|
Sekunden | thin_line | rtc.se * 0.2 |
Minuten | thin_line | rtc.mi * 0.2 |
Stunden | short_line | (rtc.hr%12) + rtc.mi/60.0 |
In den oben gezeigten numerischen Ausdrücken dienen die 'rtc'-Funktionen zum Zugriff auf die Echtzeituhr (rtc = real time clock). Durch Multiplikationen mit geeigneten Faktoren werden alle drei Werte in den Bereich 0 bis 12 konvertiert, denn das Zeigerinstrument verwendet für alle Zeiger die gleiche Skalierung für die Umrechnung der "Meßwerte" in Drehwinkel.
Die bei allen Anzeige-Elementen vorhandenen Eigenschaften wie Vorder- und Hintergrundfarbe sind zwar keine 'Eigenschaften eines Zeigerelementes', haben aber beim Zeigerinstrument die folgenden Bedeutungen bzw Besonderheiten:
- die Vordergrundfarbe
(der erste unter 'Eigenschaften einer Anzeigezeile' aufgeführte Farbwert)
wird bei Zeigerinstrumenten als Farbe für die Umrahmung, Skalenbögen, Teilstriche,
und als Textfarbe für die optionale Beschriftung der Skala verwendet
- die erste Hintergrundfarbe
(der zweite unter 'Eigenschaften einer Anzeigezeile' aufgeführte Farbwert)
wird bei Zeigerinstrumenten für den einfarbigen Hintergrund verwendet.
Bei Geräten mit schneller CPU (bei denen die Option 'Diese Seite immer komplett neu zeichnen' noch eine ausreichende Aktualisierungsrate bietet, z.B. MKT-View V) kann diese Farbe auch auf den Wert -2 = "Transparent" gesetzt werden. Beim Entwurf der Anzeigeseite kann dann z.B. als Hintergrund für das Zeigerinstrument eine Bitmap-Grafik, ein Farbverlauf, oder eine numerische Anzeige (unter dem "Zeiger") verwendet werden. Der Hintergrund muss dazu natürlich vor dem Instrument gezeignet werden, d.h. in der Definitionsliste vor dem Instrument eingefügt werden.
- die zweite Hintergrundfarbe
(der dritte unter 'Eigenschaften einer Anzeigezeile' aufgeführte Farbwert)
kann seit 03/2023 bei Zeigerinstrumenten für den Hintergrund der Skala
verwendet werden, z.B. um die Teilstriche auf der Skala trotz (in den
anderen Bereichen des Instruments) durchscheinendem Hintergrund einen
guten Kontrast zu erzielen. Beispiel:
Zurück zur Inhaltsübersicht
Übersicht Event - Definitionen
Es können "Events" (Ereignisse) definiert werden, die von Ihrer Terminal-Applikation erkannt und in einer bestimmten Art und Weise ("Reaction") bearbeitet werden können.Hier einige Beispiele für Events:
- der Bediener drückt eine bestimmte Taste oder läßt sie los
- ein digitaler Eingang des Terminals (mit "onboard I/O") ändert sich
- der Wert eine Variablen (die möglicherweise per CAN gelesen wurde) überschreitet einen bestimmten Wert
- ein Bit einer Variablen nimmt einen bestimmten Wert an
- einer der programmierbaren Timer läuft ab
- und viele Kombinationen...
Für jedes Event wird auch eine entsprechende "Reaktions-Methode" programmiert. Dies erfolgt mit einer oder mehreren Interpreter-Kommandos .
Mögliche Reaktionsmethoden sind:
- Umschalten auf eine andere Displayseite
- Setzen einer Variablen auf einen bestimmten Wert (der evtl. per CAN gesendet wird)
Zur Definition von Events wird eine relativ einfache Definitions-Sprache verwendet, Sie können Events allerdings auch aus einer Liste mit "vordefinierten" Definitionen auswählen (was einfacher aber auch wesentlich unflexibler ist).
Events können...
- "global" definiert sein, sie werden dann "immer" abgefragt, unabhängig von der aktuellen Anzeigeseite;
- "lokal" auf einer bestimmten Anzeigeseite definierte Events werden nur abgefragt, wenn diese Seite grade aktiv ist.
Um Events zu definieren, verwenden Sie das Event-Definitions-Fenster.
Verwandte Themen:
- Interpreterkommandos
- numerische Ausdrücke (können zur Formulierung komplexer Ereignisabfragen verwendet werden)
- Event-Handling in der Script-Sprache (nur für Geräte mit 32-bit CPU seit 2011, ermöglicht umfangreichere Steuerungen als mit den 'Event-Definitionen' des UPT-Display-Interpreters)
Das Event-Definitions-Fenster
Um bestimmte Reaktionen beim Eintreten bestimmter Ereignisse zu definieren, kann das folgende Fenster verwendet (welches fast identisch für globale und lokale Events verwendet wird):
Die Buttons unter der Tabelle dienen zum Bearbeiten der Tabelle. INSERT, DELETE, COPY und PASTE beziehen sich auf einzelne Tabellenzeilen.Der "Apply"-Button sollte angeklickt werden, um den Inhalt der Tabelle zu übernehmen.
Das Panel auf der rechten Seite zeigt detailierte Informationen zur aktuellen (in der Tabelle markierten) Event-Definition an.
Sie können die Eigenschaften einer Definitionszeile wahlweise in der
Tabelle oder auf dem Panel (rechts) editieren, die Änderungen werden
jeweils übernommen.
Ein einzelner Breakpoint (Haltepunkt)
kann durch Anhaken von 'Breakpoint auf dieses Event setzen' aktiviert werden.
Dieser Breakpoint löst dann (im Simulatorbetrieb) aus, wenn die Bedingung
den Wert TRUE annimmt, und zwar vor dem Ausführen der entsprechenden Reaktion.
Um nach dem Auslösen eines
Code- oder Data-Breakpoints die Abarbeitung
der Ereignis-Definitionen im Einzelschrittbetrieb fortzusetzen, drücken Sie
für jeden Schritt die Funktionstaste F11 auf der PC-Tastatur.
Die Buttons "E. hinzufügen" (Ereignis hinzufügen) und "R. hinzufügen"
(Reaktion hinzufügen) öffnen spezielle Dialogfenster, mit
denen Event-Abfragen und Event-Reaktionen aus Listen
ausgewählt und zusammengestellt werden können (hilfreich wenn Sie
noch nicht mit der Event-Definitionssprache vertraut sind).
Während eines Simulatorlaufs zeigt die
Hintergrundfarbe von Zellen in der Event-Definitions-Tabelle an,
welche Ereignisse grade aktiv (d.h. Bedingungen erfüllt) sind,
und welche Reaktionenen im letzten Zyklus abgearbeitet wurden
- ähnlich wie im CAN-Simulator:
- Hellgrüner Hintergrund :
Die Bedingung in dieser Zeile war bei der letzten Auswertung erfüllt, und die entsprechende Reaktion wurde fehlerfrei abgearbeitet.
- Gelber Hintergrund :
Markiert die nächste im Single-Step-Betrieb (z.B. nach Stopp per Breakpoint) abzuarbeitende Zeile.
- Hellroter Hintergrund :
Beim Auswertungen der Bedingung (Event), oder beim Abarbeiten der Reaktion (Kommandozeile) trat ein Fehler auf.
Die Event-Definitions-Sprache
Ein "Event" ist das Eintreten eines bestimmten Zustands oder "Ereignisses", welches Sie in Ihrer Terminal-Applikation abfragen wollen. Solche Events können Sie direkt in der Event-Definitions-Sprache des Terminals formulieren. Die Event-Abfrage wird prinzipiell als numerischer Ausdruck vom Interpreter abgearbeitet.- Hinweis:
-
Das Programmiertool könnte einige dieser Definitionen in leichter
lesbarer Form anzeigen, z.B.
page_enter
statt "pe
".
Bei komplexeren Anwendungen empfiehlt sich der Einsatz der Script-Sprache als Alternative,
z.B. Low-Level-Event-Handler wie "OnKeyDown", "OnKeyUp", "OnPenDown", "OnPenUp", "OnGesture", etc.
Einige einfache Beispiele für Event-Abfragen ohne Script:
Event-Type / expression |
Parameter (falls nötig) |
Beschreibung |
kd | key-name | Bediener hat eine Funktionstaste gedrückt |
ku | key-name | Bediener hat eine Taste losgelassen |
kb | key-name | Prüft ob eine bestimmte Taste gedrückt wurde. Die Taste wird durch die Abfrage aus dem Puffer entfernt ! |
kh | Irgendeine Taste wurde gedrückt (auch "Systemtasten" und "Cursor") | |
kc | Liest einen Tastencode (egal welchen) und entfernt ihn aus dem Tastaturpuffer | |
kcb | Liest den Code der zuletzt gedrückten Taste ohne diese aus dem Puffer zu entfernen | |
cb | CAN-Error: Bus Off . Siehe auch: cs (CAN Status) |
|
ce, alias ce0 | schwerwiegender CAN-Fehler auf dem ersten CAN-Port | |
ce1 | schwerwiegender CAN-Fehler auf dem zweiten CAN-Port | |
cw | CAN-Warnung | |
ch | CAN-Hardware-Fehler | |
co | CAN-Fehler: Überlauf (overflow) | |
ct | CAN-Fehler beim Senden (transmit) | |
else | Liefert TRUE, wenn die vorhergehende Event-Bedingung nicht erfüllt war. Nur in Firmware ab Compilationsdatum 2012-10-15 verfügbar ! Beispiel |
|
t0 ... t3 | User-Timer ( Nr. 0...3) abgelaufen | |
ti_ms>1500 | Seit dem Einschalten sind über 1500 Millisekunden vergangen | |
pe alias page_enter |
Die aktuelle Seite wurde grade neu aufgerufen (Page Enter) | |
pq alias page_quit |
Die aktuelle Seite wird gleich verlassen
(Page Quit). Wie bei allen 'Page'-Events wird auch dieses Ereignis natürlich nur auf der grade aktuellen, d.h. in den Speicher geladenen, Anzeigeseite auftreten bzw "verarbeitet werden" ! Um eine universelle Reaktionsmethode für das "Betreten" oder "Verlassen" irgendeiner Anzeigeseite (unabhängig von der Nummer der aktuellen Anzeigeseite) zu implementieren, empfiehlt sich der Einsatz der Script-Sprache ("OnPageLoaded"). |
|
pr alias page_redraw |
Page Redraw. Die aktuelle Seite wird grade komplett neu gezeichnet, z.B. nach "cls" (clear screen), oder wenn display.redraw per Script gesetzt wurde. | |
pdo[N].rcv | N = PDO-Kanalnr | Ein PDO-Telegram wurde empfangen (received) |
rot.l, rot.b, ... | Drehknopf (rotary encoder) wurde gedreht . | |
syn.rcv | Ein SYNC-Telegram wurde empfangen . | |
Der im Terminal eingebaute Interpreter wertet Ereignisdefinitionen als booleschen Ausdruck aus, d.h. entscheident ist, ob das Ergebnis des numerischen Ausdrucks von Null verschieden (="TRUE") oder genau Null (="FALSE") ist.
Wenn das Ergebnis einer Event-Abfrage von Null verschieden ist, arbeitet der Interpreter die programmierbare Reaktionsmethode ab. Dies ist (intern) eine Kette von Interpreterkommandos., die einzelnen Kommandos müssen ggf. durch Doppelpunkt getrennt werden.
Beispiel: Ändern der Hintergrundfarbe eines Anzeigeelementes (aus 'Auslieferungstest.cvt'):
Ereignis Reaktion (sys.vsup<120)||(sys.vsup>260) dis.VSup.bc = (ti&8)?7:4 : REM flashing supply-voltage warning else dis.VSup.bc = white : REM no voltage warning
Siehe auch: Überblick der numerischen Funktionen des Interpreters.
Globale und Lokale Events
Sie können globale Events definieren, die unabhängig von der aktuellen Anzeigeseite abgefragt (und bearbeitet) werden.
- Zum Beispiel könnten Sie eine bestimmte Anzeigeseite aufrufen (per "call"), wenn ein schwerwiegender CAN-Fehler auftritt. Dies ließe sich folgendermaßen realisieren:
-
Event-Abfrage: ce (bedeutet: "wenn ein CAN-BUS(!)-Fehler auftritt"...)
Reaktion: c"CanError" (bedeutet: ... rufe die Seite namens "CanError" auf, mit möglicher Rückkehr zur aktuellen Seite)
Definieren Sie dieses Event (mit Reaktion) auf der Registerkarte "Global Events", dies erspart es Ihnen, die Abfrage auf jeder einzelne Anzeigeseite zu programmieren (beachten Sie, die Anzahl von Definitionszeilen pro Anzeigeseite ist begrenzt !).
Regeln für die Verwendung globaler Event-Definitionen:
- Verwenden Sie globale Events nur für Ereignisse, die Sie andernfalls auf jeder Anzeigeseite programmieren müssten.
- Verwenden Sie nach Möglichkeit keine Display-Ausgabe-Kommandos in den global Events, denn diese könnten sich auf einigen der von Ihnen programmierten Anzeigeseiten störend auswirken.
- Wenn Sie ein bestimmtes Ereignis (wie z.B. "ce" im obigen Beispiel) als globales Event definiert haben, wiederholen Sie dies nicht als "lokales Even" auf einer Anzeigeseite. Eine Event-Abfrage zweimal zu definieren (einmal global und einmal lokal) stört zwar den Event-Handler in der Firmware nicht; Sie werden allerdings schnell die Übersicht verlieren und nie genau wissen, auf welcher Seite die Event-Abfrage denn nun "zugeschlagen" hat..
- Wenn vom Gerät unterstützt (z.B. MKT-View II, III, IV), verwenden Sie als 'leistungsfähigere Alternative' die in der Script-Sprache definierbaren Event- und Message-Handler.
Lokale Events gehören immer zu einer ganz bestimmten Anzeigeseite. Sie werden nur ausgewertet, wenn diese Seite grade sichtbar ist. In den meisten Anwendungen werden "lokale" Event wohl Tastaturereignisse abfragen und gegebenenfalls zu einer anderen Anzeigeseite umschalten.
Einfache GLOBALE Event-Definitionen können auch aus einem Katalog (in Form eines speziellen Dialogfensters) ausgewählt werden.
Zurück zur Beschreibung des Event-Definitions-Fensters
Assistenten und dialog-basierte Hilfen
Assistent zum Erstellen einfacher Anwendungen
Der folgende Dialog kann aus dem Hauptmenü per 'Neues Programm, einfach' oder 'Neues Programm, universell' aufgerufen werden. Der Assistent führt Sie durch die wichtigsten Schritte, um ein komplett neues Anzeigeprogramm zu erstellen. In vielen Fällen wird aber auf bereits existierende Applikationen zurückgegriffen.
Zunächst wird das Hard- und Softwareprofile des Zielsystems ausgewählt:
(Screenshot 'Hard- und Softwareprofil des Zielsystems wählen')
- Technischer Hintergrund:
- Für viele Geräte, z.B. MKT-View II, gibt es ein Hardwareprofil, in dem
u.A. die Bildschirmauflösung und das Farbmodell enthalten ist. Zusätzlich existieren z.T. mehrere
Softwareprofile, z.B. für Geräte mit verschiedenen CANopen-Protokoll-Versionen (UPTv1=DS301 V3, UPTv2=DS301 V4).
Bei allen Geräten ohne CANopen-Firmware (die stattdessem durch Import von DBC-Dateien parametriert werden) ist als Software-Profil grundsätzlich 'CVTv1' anzuwählen (CAN-View-Terminals, z.B. MKT-View II mit Firmware #11314).
Das Programmiertool könnte daraufhin vorschlagen, ein anderes Tool zu verwenden; denn das Programmiertool für Geräte mit 'CANdb' unterstützt kein CANopen, und kann daher die von Ihnen erstellte Display-Applikation nicht per CAN-Bus in das angeschlossene Gerät laden.
Im nächsten Schritt wird der Assistent nach der Anzahl zu erstellender Display-Seiten fragen:
(Screenshot 'Neue Anzeigeseiten erstellen')
Abhängig vom Aufruf des Assistenten können Sie anschließend auswählen,
wie z.B. die Umschaltung der Anzeigeseiten realisiert werden soll:
Dialog zur Auswahl von Variablen auf einer Anzeigeseite
Dieser Dialog dient zur Auwahl von VARIABLEN, die auf einer bestimmten ANZEIGESEITE angezeigt werden sollen.Zum Öffnen des Dialogs klicken Sie z.B. auf der Registerkarte "Anzeigezeilen-Definition" auf den Button "Mehr.."
(Screenshot "Schaltflächen auf Registerkarte
Anzeigezeilen-Definitionen")
Im nun erscheinenden Popup-Menü wählen Sie den Eintrag "Variablen- / Signal-Zuordnungen prüfen und ändern".
(Screenshot von Popup "Displayzeilen")
Im danach angezeigten Dialogfenster mit dem Titel
"Variablen oder Signale für Seite XYZ auswählen" können Sie bereits
vorhandene Variablen für die Anzeige auswählen, oder aus CAN-Signalen
neue Variablen erstellen die dann angezeigt werden können. Diese Funktion
werden Sie noch häufig einsetzen, wenn Sie fertige Programme für
andere Anwendungen modifizieren !
(Hinweis: Es gibt noch andere Situationen, in denen dieser Dialog erscheint,
z.B. per Assistent).
(screenshot "Select VARIABLES or SIGNALS on page XYZ"
bzw "VARIABLEN oder SIGNALE auf Seite XYZ ersetzen" )
Die Tabelle auf der linken Seite zeigt alle Zeilen, in denen numerische Anzeigen, Editierfelder oder Grafiken stehen, die mit Variablen in Verbindung stehen.
Das Panel auf der rechten Seite zeigt wahlweise eine Liste aller vorhandenen Variablen oder alle CANdb-Knoten, -Messages und -Signale (die vorher aus einem CANdb-File geladen wurden). Bei Geräten mit CANopen wird dort statt der Registerkarte Signale eine Liste aller CANopen-Variablen (im lokalen Objektverzeichnis des Terminals) angezeigt. Weitere Details zum Thema 'Anzeige von CANopen-Objekten' in einem anderen Dokument.
Wählen Sie erst links die zu ersetzende Variable aus, danach -auf der rechten Seite- eine andere Variable bzw. ein anderes Signal.
Bei Auswahl eines CAN-Signals aus der dreiteiligen Liste (Nodes, Messages, Signals) wird automatisch eine neue Variable erzeugt, falls das Signal noch nicht mit einer existierenden Variablen verbunden ist. Wählen Sie dazu erst einen CANdb-Knoten (Node) aus, dann eine CANdb-Message, und schließlich ein CAN-Signal aus. Das Programmiertool fragt gegebenenfalls nach, welchen Namen die neue Variable erhalten soll.
Die Spalte "Type" in der Tabelle zeigt an, ob eine Variable mit einem Signal ("Sig") verbunden ist, oder ob es sich um eine "normale" (d.h. nicht mit einem Kommunikationskanal verbundene) Variable ("Var") handelt. Wenn hinter "Sig" ein Fragezeichen steht, ist die ursprüngliche Signaldefinition (auf der Registerkarte "CANdb") nicht mehr vorhanden weil die CANdb-Tabelle gelöscht wurde. Dies spielt für die Funktion des Terminals als Anzeige allerdings keine Rolle.
Für Geräte mit Script-Sprache können mit dem oben gezeigten Dialog auch globale Script-Variablen mit der Anzeige verbunden werden. Wählen Sie dazu die Registerkarte 'Script' (rechts neben 'Variablen' und 'Signalen', im oben gezeigten Screenshot nicht sichtbar). Beim Auswählen einer der dort aufgelisteten Script-Variablen erzeugt das Programmiertool einen Formelausdruck mit dem Schlüsselwort 'script.' vor dem Variablennamen. Daran erkennt der Display-Interpreter später, dass es sich hier nicht um eine 'normale' Anzeigevariable handelt, sondern um eine Script-Variable, die nur in der vom Compiler erzeugten Symboltabelle (aber nicht auf der Registerkarte "Variablen" im Programmiertool) bekannt ist. Lokale Script-Variablen können auf diese Weise nicht angezeigt werden.
Wenn die Option "select new line automatically" aktiv ist, wird die aktive Tabellenzeile (=blaue Markierung) automatisch in die nächste Zeile umgeschaltet, wenn eine neue Variable (oder CAN-Signal) in auf der rechten Seite ausgewählt wurde. Dies reduziert die Anzahl erforderlicher Mausklicks, wenn Sie die komplette Anzeigeseite ändern wollen.
Die Option "replace name in display text" bewirkt folgendes:
Wenn im alten Menütext auch der VARIABLENNAME vorkommt, wird er automatisch
bei Zuweisung einer anderen Variablen ersetzt.
- Nur für Geräte mit CANdb-Funktionalität:
-
Wenn die CANdb-Datei sehr viele Signale enthält, kann es schwerfallen
ein bestimmtes Signal zu finden, z.B. "Oeldruck" (speziell wenn Sie nicht
wissen von welchen Knoten dieses Signal gesendet wird, und in welcher Message
es enthalten ist). Es gibt eine "globale" Suchfunktion für SIGNALNAMEN,
durch alle KNOTEN und MESSAGES. Klicken Sie dazu mit der rechten Maustaste
in die Knotenliste ("CAN nodes"). Es erscheint ein Popup-Menü; wählen
Sie "Find Signal" und geben im nun erscheinenden Fenster den SIGNALNAMEN
ein. Die Suche erfolgt unabhängig von Groß/Kleinschrift, Sie
können den Suchstring daher komplett in Kleinbuchstaben eingeben, z.B.
"oeldruck".
Da in zwei unterschiedlichen Messages gleiche Signalnamen vorkommen könnten, kann die Suche auch an der aktuellen Position innerhalb der Datenbank fortgesetzt werden ("Find next occurrence of XYZ").
Siehe auch:
Zurück zum Inhaltsverzeichnis
Dialog zum 'Verlinken' von Menüs
Dieses Dialogfenster dient zum Zuweisen von "Sprungzielen" für alle Menüzeilen, die auf einer Anzeigeseite definiert sind. Es wird automatisch geöffnet, wenn die Funktion zum Testen aller Anzeigeseiten ("check all pages") einen ungültigen Menü-Sprung findet, oder aus einem Popup-Menü in der Anzeigeseiten-Definition.
Die linke Tabelle zeigt alle auf einer Seite definierten Menüzeilen (allerdings nur das hier "Wesentliche"). Die Liste auf der rechten Seite enthält die Namen aller vorhandenen Anzeigeseiten (die als "Sprungziel" bei der Auswahl eines Menü-Items verwendet werden können). Ein Klick auf einen Seitennamen ordnet diesen der in der Tabelle selektierten Menüzeile zu.
Die Selektion der Menüzeile (blaue Markierung) wird umgeschaltet, wenn
per Klick in das Listenfenster ein neues Sprungziel ausgewählt wird
(dies miminiert die Anzahl der Mausklicks, wenn alle Sprungziele auf einer
Seite neu definiert werden). Sie können eine Menüzeile per Mausklick
in die Tabelle erneut anwählen.
- Hinweis:
- Das Ändern der angezeigten Menütexte und das graphische Erscheinungsbild ist nicht die Aufgabe dieses Dialoges. Verwenden Sie die Registerkarte zum Definieren einer Anzeigeseite um den Text, Zeichensatz, Bildschirmkoordinate usw. zu ändern.
Falls etwas mit der Menü-Sprungziel-Definition nicht stimmt, wird eine Fehlermeldung in roter Farbe angezeigt. Normalerweise ist ein "nicht existierendes Sprungziel" die Ursache dafür. Alle ungültigen Sprunziele werden auch in der Tabelle mit roter Farbe markiert.
In der unteren rechten Ecke des Dialogfensters finden Sie die folgenden Checkboxen:
- Select new line automatically
- Aktiviert die automatische Selektion der nächsten Menüdefinition beim Anklicken eines neuen Sprungziel (zum Minimieren der sonst nötigen Mausklicks..)
- Replace (variable-) name in menu (-text)
-
Wenn der Name des Sprungziels (=Seitenname) im Menütext enthalten ist,
wird er automatisch ersetzt wenn ein neues Sprungziel angewählt wird.
Wenn der Name kein Teil des Menütextes ist, passiert nichts.
Hinweis: Zum EDITIEREN DES MENÜTEXTES dient nicht dieses Dialogfenster, sondern die Display-Seiten-Definition.
Falls der Menü-Link-Dialog aus der Anzeige-Seiten-Übersicht geöffnet wurde, können sie mit den Buttons "previous" und "next" zur vorhergehenden bzw. folgenden Anzeigeseite umschalten.
Nachdem Sie die Sprungziele für alle Menüzeilen definiert haben, schließen Sie das Dialogfenster mit dem "OK"-Button. Erst dann werden die Änderungen übernommen !
Zurück zum Inhaltsverzeichnis
Assistent 'Alle Seiten prüfen und korrigieren'
Beim 'Recyceln' existierender Anzeigeseiten für neue Applikationen können
Probleme auftreten, z.B. durch die Verwendung von Variablen (auf der kopierten Seite),
die in der neuen Applikation noch nicht definiert wurden; Sprung zu Anzeigeseiten,
die zwar in der alten Applikation aber nicht in der neuen Applikation
existieren ("broken links"), u.s.w.
Um solche Probleme mit wenig Aufwand zu erkennen, bietet das Programmiertool
im Hauptmenü unter 'Assistent' die Funktion
Alle Seiten prüfen und korrigieren .
Das Programmiertool durchsucht dann in allen in der Applikation vorhandenen
Anzeigeseiten nach Fehlern, wie z.B.:
- Verwendung von nicht (mehr?) definierten Variablen
- Verwendung von noch nicht definierten Variablen (mit Platzhaltern wie z.B. <SelectMe> anstelle eines gültigen Variablennamens)
- Sprünge auf Seiten mit unbekanntem Namen oder 'Nummer' (z.B. als Reaktion auf Tastendruck)
- Fehler in numerischen Ausdrücken (d.h. wenn der anzuzeigende Wert keine einfache Variable, sondern ein 'berechneter Wert' ist)
Abhängig vom Typ des Fehlers, und von der Position (Seite, Zeile, Definitionsspalte) wird die entsprechende Zelle
auf der Registerkarte "Seite #N" farbig markiert. Grobe Fehler (z.B. nicht definierte Variablen) werden rot,
Warnungen (z.B. noch nicht 'mit Leben angefüllte Platzhalter') werden gelb hinterlegt.
Darüberhinaus kann dieser Assistent automatisch andere Hilfen aufrufen,
z.B. den im vorhergehenden Kapitel vorgestellten Dialog zur Auswahl von Variablen auf einer Anzeigeseite.
Katalog zur Auswahl von 'globalen' Event-Definitionen
Der unerfahrene Anwender kann ein paar GLOBALE EVENT-Definitionen aus einem Katalog auswählen:
(Screenshot 'Katalog zur Auswahl von globalen Events-Definitionen')
Die so erzeugten Definitionszeilen dienen zum...
- Umschalten zwischen Bildschirm-Anzeigeseiten (ohne Menüs anlegen zu müssen)
- Umschalten zu einer bestimmten Anzeigeseite wenn ein schwerwiegender CAN-BUS-Fehler auftritt
- ...
Siehe auch:
Wurde der oben gezeigte Katalog vom Assistenten zum Erzeugen einer neuen Applikation geöffnet,
dann war dies der letzte Schritt durch den der Assistent Sie geleitet hat.
Vor dem Übertragen der Applikation
in das programmierbare Gerät wird üblicherweise noch die
Zuordnung von Variablen/Signalen und Anzeigeelementen
überprüft, und ggf. mit dem graphischen Editor noch der letzte 'Feinschliff' durchgeführt.
Anzeige-Seiten-Übersicht
Auf der Registerkarte "Seitenübersicht" wird eine Übersicht aller Anzeigeseiten dargestellt, die momentan in Ihrer Terminal-Anwendung enthalten sind.Sie können per Doppelklick auf eine der angezeigten Seiten klicken um zur Anzeige-Seiten-Definition umzuschalten, um dort den Inhalt der Anzeigeseite zu bearbeiten.
Ein einfacher Klick auf eine Seite markiert diese für die nachfolgenden Aktionen. Die selektierte Seite wird durch einen farbigen Rahmen markiert.
Ein Klick mit der rechten Maustaste auf eine der Vorschau-Seiten öffnet ein Popup-Menü mit den folgenden Optionen:
- eine neue, leere Seite einfügen (vor der selektierten Seite)
- die selektierte Seite löschen
- per Copy & Paste die Reihenfolge einstellen
- alle Menü-Links auf der selektierten Seite prüfen
- [v] Anzeige stauchen
- Die Seitenübersicht verwendet verkleinerte Vorschau-Bilder,
auf denen nicht jedes einzelne Pixel erkennbar ist.
Auch viele Seiten sind so ohne Scrollen sichtbar.
- [v] Script-Aufrufe erlauben
- Ohne diese Option sind beim Erstellen der Seitenübersicht
keine Aufrufe von Script-Funktionen zulässig.
Stattdessem wird in allen Zeilen, in denen z.B. das Script zum Zusammenstellen
des Anzeigetextes aufgerufen würde, der Text '<generating preview>' angezeigt.
Dadurch werden unerwünschte Nebeneffekte vermieden, z.B. eine zu langsame Aktualisierung wenn das Script die Texte über ein Netzwerk anfordert, oder einzeln aus einer Textdatei liest und aufbereitet.
Zurück zum Inhaltsverzeichnis
Importieren von Bildern (Symbole, Bitmaps, Icons)
Zum Einbinden von Bildern in die Applikation dient die Registerkarte "Symbole" (engl. "Icons") im Programmiertool.
Sie können -je nach Hardware- Bilder aus monochromen oder farbigen
Windows-Bitmaps importieren.
Im Hauptmenü besteht unter "Icon..Create New" auch die Möglichkeit,
ein neues ("leeres") Icon zu erzeugen.
Sie können das Icon Pixel-für-Pixel mit dem Programmiertool bearbeiten (durch Klicken in das Bild auf der rechten Seite); besser ist es jedoch, dafür ein geeignetes Malprogramm einzusetzen (z.B. "Paint"). Vektorgrafiken, wie sie von Zeichenprogrammen erzeugt werden, sind nicht verwendbar.
Der Name der Bilddatei (Bitmap) muss ein gültiger DOS-Dateiname sein, denn die Firmware in manchen Geräten verwendet ein DOS-ähnliches Dateisystem um große Objekte zu speichern. Darum muss der Dateiname (und damit auch der "Icon-Name") folgende Bedingungen erfüllen:
- Der Name muss mit einem Buchstaben beginnen (a..z, A..Z) .
- Der Name darf maximal acht Zeichen lang sein (ohne Dateityp) .
-
Das zweite bis achte Zeichen darf aus der folgenden Menge stammen:
a..z, A..Z, 0..9, oder _ (Unterstrich). NICHTS ANDERES. Insbesonders keine Leerzeichen, auch wenn z.B. Windows die Verwendung von Leerzeichen in Dateinamen erlaubt.
Bei älteren Geräten (mit 256 Farben, z.B. MKT-View II) konnten nur Bitmaps
mit 1, 4, oder 8 Bit pro Pixel eingelesen werden; d.h. monochrome, 16-, oder 256-Farb-Bilder.
Die Farbpalette im Gerät ist nicht variabel, darum sehen Farbbilder nicht immer genau so
aus wie in einem Malprogramm mit 16 Millionen Farben. Mit den folgenden Tipps 'für Experten'
kann auch bei diesen Geräten ansprechende Farbgrafiken realisiert werden.
-
Für Experten:
-
In der tabellarischen Übersicht mit allen in der Applikation importierten
Bitmap-Grafiken werden nicht nur Name, Breite und Höhe, sondern auch die
Farbtiefe angezeigt. Die dezimale Codierung des Typs entspricht dabei
der Ablage der Bitmap 'als Text' in der *.cvt- bzw. *.upt-Datei:
- 0 = Monochrom (ein Bit pro Pixel)
- 1 = 16 Farben, vier Bits pro Pixel, nur Grundfarben (0 bis 15)
- 2 = 256 Farben, acht Bits pro Pixel, keine Palette sondern RGB-3-3-2
- 3 = 256 Farben, acht Bits pro Pixel, reserviert für Bitmaps mit eigener Farbpalette
- 4 = 65536 Farben, 16 Bits pro Pixel, Format RGB-5-6-5
- 1 = 16 Farben, vier Bits pro Pixel, nur Grundfarben (0 bis 15)
- 0 = Monochrom (ein Bit pro Pixel)
-
Im 256-Farb-Modus werden 2 Bits für den blauen Farbanteil, 3 Bits für
Grün, und 3 Bits für Rot verwendet. Manche Bild-Datei-Konverter
(z.B. IrfanView) können High-Colour-Bilder (mit 65535 Farben) und
True-Colour-Bilder (mit 16 Millionen Farben) in optimierte 256-Farb-Bilder
umwandeln, wobei ein trickreicher Algorithmus
(z.B. Floyd-Steinberg)
dafür sorgt, dass auch Farbverläufe gut aussehen. Derartige Programme
erzeugen grundsätzlich bessere Resultate als der im Programmiertool
eingebaute Import-Filter, der nur die 'am besten geeignete' Farbe aus der
festen 2+3+3-Bit-Farb-Palette auswählt, aber kein Dithering durchführt.
-
Die Umwandlung eines 'True-Color'-Bildes mit Hilfe des Programms IrfanView,
unter Nutzung einer für das Terminal optimierten Farbpalette, ist in
der Datei 'readme_irfanview.txt' im Unterverzeichnis 'icons' des Programmiertools
beschrieben.
-
Seit November 2021 können einige Geräte (z.B. MKT-View III, IV) Icons
für die interne Ablage im Flash komprimieren. Der intern verwendete
Algorithmus (z.B. RLE) hängt von den Möglichkeiten der CPU ab, und ist
dem Programmiertool unbekannt. Die im unteren Panel auf der Registerkarte
'Icon-Import' angezeigte noch freie Flash-Speicher ("~ XXX kByte free (in Flash)")
ist daher nur eine grobe Schätzung, und bei Bildern mit vielen monochromen
Flächen eher pessimistisch.
Der einzige zuverlässige Indikator für den nach dem Import der Applikation im Target noch freien Flash-Speicher ist im Target selbst; er kann über das Setup/System-Menü per Diagnostics .. Storage Directory aufgerufen werden. Der von der Applikation (inklusive der importierten Icons) belegte, und der verbleibende freie Speicher wird in der Fußzeile (unter der Liste aller gespeicherten Elemente) angezeigt, z.B.:
Used: 672; unused: 357 kByte .
-
In Geräten mit großem Programmspeicher können die importierten Icons
auch individuell aufgelistet und angezeigt werden.
Selektieren Sie dazu im oben erwähnten 'Storage Directory' die Zeile mit
'Type=ICON' und drücken Enter bzw. den Drehknopf. Wenn vorhanden, öffnet
sich in dem Fall der 'Icon Browser', mit dem alle importierten Icons
angezeigt werden können, inkl. der komprimierten und entkomprimierten Größe.
- statisch (sehr alt)
- Display-Seiten haben eine konstante Größe bei der Ablage im Flash-Speicher.
Für Icons wird ein eigener Speicherbereich verwendet.
Diese Methode kommt nur bei sehr alten Geräten mit 8-Bit-CPU, z.B. "UPT-515", zum Einsatz.
- statisch, geteilt (alt)
- Display-Seiten haben eine konstante Größe, Icons und Display-Seiten teilen sich aber einen (großen) Flash-Speicher.
Diese Methode wird nur bei relativ alten Geräten mit 16-Bit-CPU, z.B. "MKT-View I", verwendet.
- flexibel, geteilt
- Display-Seiten belegen nur so viel Speicher im Flash wie 'unbedingt nötig'.
Zeichenketten (wie auch Display-Elemente) werden mit variabler Länge abgelegt ("so kurz wie nötig").
Icons, Display-Seiten, Texte, Scripte, Variablendeklarationen, CAN-Datenbanken u.v.A.m. teilen sich einen Flash-Speicher.
Diese Methode wird bei allen neueren Geräten mit 32-Bit-CPU, z.B. "MKT-View III / IV / V", verwendet.
-
Icon Memory Shared (bzw. "t icons_shared" in der *.CVT / *.UPT
- Datei) :
0 = für die Icons wird ein eigener Bereich im FLASH-Speicher verwendet (z.B. beim MKT-View "alt")
1 = Icons und Anzeigeseiten nutzen einen gemeinsamen FLASH-Bereich, Anzeigeseiten haben eine statische Größe im Speicher (z.B. "UPT515")
2 = Icons und Anzeigeseiten nutzen einen gemeinsamen FLASH-Bereich, alle Objekte haben flexible Größen
(z.B. "MKT-View II / III / IV", "UPT 320", und alle anderen Geräte mit ARM- oder Cortex-CPU) -
Max. Data FLASH Size (bzw. "t max_free_mem_kbyte" in der *.CVT
/ *.UPT - Datei) :
Dieser Wert gibt die Größe des für Anzeigeseiten, Variablendefinitionen, Text-Array-Zeilen, Icons (Bilder) und diverse andere Objekte verwendeten FLASH-Bereiches an. Ein anderer Teil des FLASH-Speichers wird für die Firmware (Maschinenprogramm) benötigt; die verfügbare "freie" Speichergröße ist daher von der verwendeten Hard- und Firmware abhängig. Beim "UPT 320" (Terminal mit 5.7"-TFT, 320*240 Pixel) mit Firmware #11352 waren beispielsweise 896 kByte für die Speicherung des Anzeigeprogramms verfügbar.
- Hinweis:
- Da der Flash-Speicher bei vielen Geräten nicht nur für die Applikation des Endanwenders,
sondern auch für die Geräte-Firmware und den Firmware-Bootloader verwendet wird,
ergibt sich bei vielen Geräten eine "krumme Größe" (keine Zweierpotenz) des unter
'Target Size' angezeigten Wertes. Die genaue, und zur verwendeten Geräte-Firmware
genau passende Speichergröße finden Sie nur 'Storage Directory'
des Gerätes (siehe Link, unten). Speziell bei Geräten mit einer kundenspezifischen
Sonder-Firmware könnten im Flash-Speicher auch Objekte abgelegt sein, die dem
Programmiertool nicht bekannt sind.
- Das "Watch"-Fenster ermöglicht die Anzeige des Inhalts einiger Variablen und anderer "berechneter" Ausdrücke;
- Das "Test-Kommando"-Fenster dient zur Eingabe von Kommandos zur Simulation empfangener CAN-Telegramme, usw.
- Die Registerkarte "Fehler" zeigt Fehlermeldungen, Protokollverstöße, und andere Meldungen in der Reihenfolge ihres Auftretens.
- Mit dem "CAN-Logfile-Player" können CAN-Telegramme aus einer (ASCII-)Datei abgespielt werden, als Ersatz für einen 'echten' CAN-Bus.
- Für die Script-Sprache stehen weitere Hilfsmittel zur Verfügung, z.B. Breakpoints, Single-Step, Anzeige von Variablen, Trace-Historie, etc.
- Für den Schreibzugriff auf eine Variable kann ein Data-Breakpoint definiert werden, der die Simulation stoppt wenn der zugewiesene Wert in einem bestimmten Bereich liegt.
-
Bei Geräten mit Ethernet-Schnittstelle und integriertem Web-Server (z.B.
MKT-View II / III / IV) können Sie per Web-Browser die 'Fernsteuerung' des
Gerätes aktivieren. Auf der 'Remote Control'-Seite können Befehle
an den Display-Interpreter gesendet werden, und einzelne Variablen (wie im
Watch-Fenster des Programmiertools) inspiziert werden. Technische Details
zum Web-Server finden Sie
hier (online,
auf der MKT-Webseite).
Details zu den Netzwerk-Einstellungen (u.A. IP-Adresse, HTTP-Server-Port, etc) finden Sie in Dokument Nr. 85115, "System Setup" . - Bei Geräten mit 32-bit-CPU (z.B. MKT-View III/IV) kann über das System-Menü die Funktion 'Diagnostics'..'Error History' aufgerufen werden. Dort werden zum Teil auch Fehler im Anzeigeprogramm (vom Display-Interpreter, vom Script-Compiler, und von der Script-Laufzeitumgebung) angezeigt.
- d,D dezimal
- +,- dezimal, immer mit Vorzeichen
- h,H hexadezimal
- b,B binär
- Hinweis zum Kommando "sim_rx":
- Dieses Kommando stammt noch aus der Anfangszeit des Programmiertools, anno 1999.
Der CAN-Bus-Simulator bietet einen wesentlich flexibleren Ersatz.
- 'Werkzeuge' ...
- CAN-Logfile abspielen (für Simulator)
- Suche nach 'Aussetzern', z.B. bei periodisch übertragenen CAN-Telegrammen:
Verwenden Sie einen Filter wie z.B. "frame.time_delta > 0.1", um alle Telegramme anzuzeigen, die nach einer Pause von über 100 Millisekunden (seit dem letzten empfangenen "Paket") empfangen wurden.
Da das Filtern nach einem bestimmten CAN-Message-Identifier in Wireshark aufwändig ist (oder zumindest war), schalten Sie die Option 'any ID' per Web-Browser vor dem Start der Aufzeichnung ab.
Ohne die Option 'any ID' werden im Packet Capture nur CAN-Frames mit Identifiern aufgezeichnet, die z.B. von Ihrer Applikation per Script für den Empfang registriert wurden, oder die per DBC-Import mit Display-Variablen verknüpft sind.
- CANopen object dictionary des programmierbaren Terminals
- EDS-Dateien (electronic device specification) für die programmierbaren Terminals
- EDS/DCF-Generator zur Übernahme der CANopen-Konfiguration aus der UPT-Applikation in SPS-Programmiersysteme (z.B. CoDeSys)
- Funktionen für den SDO-Zugriff per Interpreter (nur für Terminals mit CANopen "V4")
- SDO-Fehlercodes ("abort codes")
- Aktualisieren der Display-Applikation per Speicherkarte
- Übertragen der Applikation in das Terminal per CAN oder RS-232
- Firmware-Update
- Übertragen anderer Dateien (mit dem File-Transfer-Utility)
- Fernsteuerung (besonders wichtig für Geräte ohne Tastatur)
- Übertragung per Ethernet / LAN ( UDP ) mit dem Programmiertool
- Übertragung von Dateien per Web-Browser (externer Link)
- Auffinden von MKT-Geräten am Ethernet-LAN (mittels DHCP-Server)
- Automatische Aktualisierung des Anzeigeprogramms per FLASH-Speicherkarte
- Rufen Sie das Systemmenü im Terminal auf (üblicherweise durch gleichzeitiges Drücken der 2. und 3. Funktionstaste)
- Bewegen Sie den Markierungsbalken auf den Menüpunkt "Transfer via CAN = xx", und drücken dann Enter (bzw den Drehknopf)
- Schalten Sie von "Transfer via CAN = OFF" auf "Transfer via CAN = ON" (mit den Cursortasten bzw. dem Drehknopf)
- Drücken Sie erneut Enter um die Eingabe abzuschließen, und verlassen Sie das Systemmenü.
- Transfer ...
-
Applikation ins Terminal laden .
- Transfer ..
- Verbindungs-Parameter .... Medium .... CAN bzw. Serieller Port ("COM") oder UDP/IP (Ethernet) .
- Couldn't save var-defs
Die Variablen-Definitionen konnten nicht (oder nicht komplett) im Zielsystem gespeichert werden.
Ursache könnte ein zu kleiner Flash-Baustein oder ein Hardwareproblem sein (Flash-Speicher).
- Couldn't save global event-defs
Die globalen Event-Definitionen konnten nicht im Zielsystem gespeichert werden.
Mögliche Ursachen ähnlich wie bei anderen "Couldn't save"-Fehlern ...
- Couldn't save the page-array
Die anwenderdefinierten Display-Seiten konnten nicht im Zielsystem gespeichert werden.
- Couldn't save general settings
Die 'allgemeinen Einstellungen' konnten nicht gespeichert werden (s.O.),
oder sind nicht mit dem Zielsystem kompatibel.
- Couldn't save user settings
Die auch vom Anwender im 'Geräte-Setup' editierbaren Einstellungen (User Settings) konnten nicht gespeichert werden.
Da diese (im Gegensatz zu vielen anderen Konfigurationselementen) bei den meisten Geräten nicht im Flash-Speicher sondern in einem EEPROM gespeichert werden, könnte als Ursache auch ein defektes EEPROM in Frage kommen. Überprüfen Sie die Einträge in der 'Error History' des Zielsystems (erreichbar per System-Menü). Steht dort z.B. "EEPROM verify error at adr..", handelt es sich mit hoher Wahrscheinlichkeit um einen Hardware-Fehler.
- Couldn't save an icon in Flash
Mindestens eines der selbstdefinierten Bitmap-Grafiken konnte nicht im Flash des Zielsystems gespeichert werden. Da ein Teil des Flash-Speichers als 'Laufwerk' (mit dynamischer Größe) verwaltet wird, kann dieses Problem manchmal durch das Neu-Formatieren der 'Flash-Dateien' behoben werden:
Wählen Sie am Gerät im System-Menü die Funktion 'Diagnostic' / 'Erase Flash (data)',
und versuchen danach erneut, Ihre Applikation zu übertragen.
Notfalls ignorieren Sie den Fehler - die Applikation wird trotzdem laufen, lediglich einige der Grafiken werden möglicherweise nicht korrekt angezeigt.
- Couldn't save Flash-shadow-RAM
Dieser Fehler kann nur bei Geräten mit 'großem RAM aber kleinem Flash-Speicher' auftreten, oder bei Hardware-Defekten. Überprüfen Sie auch hier die Einträge in der 'Error History'.
- Couldn't save PDO channel defs
CANopen-spefizischer Fehler im Zusammenhang mit der Prozessdaten-Kommunikation.
- Couldn't save SDO channel defs
CANopen-spefizischer Fehler im Zusammenhang mit der Konfiguration von Service-Daten-Objekten.
- Couldn't save CANopen-config
CANopen-spefizischer Fehler aus 'anderen Gründen' (weder mit PDO noch SDO zusammenhängend).
- Hinweis:
- Um eine Punkt-zu-Punkt-Verbindung per Ethernet-Kabel (ohne weitere Teilnehmer) aufzubauen,
muss trotz statischer IP-Adresse in einigen Fällen die physikalische Verbindung hergestellt werden,
bevor Windows der Schnittstelle eine gültige lokale IP-Adresse zuweist.
Die oben abgebildete Liste mit 'lokalen IP-Adressen' wird nur einmal, beim Öffnen des Dialogfensters aktualisiert !
Hat das MKT-View z.B. die per DHCP geleaste IP-Adresse 192.168.25.143, dann ist das Gerät nur im Netzwerk beginnend mit 192.168.25 (*) erreichbar. Technischer Hintergrund: In den Netzwerk-Einstellungen des PCs ist die Subnetz-Maske oft auf 255.255.255.0 eingestellt, d.h. die ersten drei Bytes der IPv4-Adresse "müssen passen".
Unter Windows 10 funktionierte in einigen Fällen die Übertragung per UDP nicht, obwohl ein Verbindungstest per "Ping" erfolgreich war. Als Alternative bietet sich in derart 'hartnäckigen' Fällen die Übertragung per HTTP ('File Upload' mit Hilfe eines Internet-Browsers) an. In fast allen Fällen funktioniert dann auch die Adressierung des Gerätes per Host-Namen (statt numerischer IP-Adresse) - wenn der Web-Browser nicht nach dem Hostnamen 'googelt', statt ihn einfach aufzurufen.
- "Eine Anwendung, die als Internetserver fungiert, hat sich seit der letzten Ausführung verändert." (after program updates)
- "ctptwin1.exe (or uptwin2.exe) is trying to access the internet / act as a server / etc" .
- "autoload.cvt" bei allen Terminals ohne CANopen (parametriert per CANdb, wie das ursprüngliche MKT-View)
- "autoload.upt" bei allen Terminals mit CANopen (z.B. die "UPT2"-Familie)
- Bei entsprechend ausgestattetem Geräten empfehlen wir den Firmware-Update
per Speicherkarte.
- Ein Update per RS-232 ist zwar in vielen Fällen möglich (aber quälend langsam), die entsprechende Funktion kann aus dem Hauptmenü des Programmiertools unter 'Transfer' aufgerufen werden.
- Für einen Firmware-Update per CAN wird ein externes Programm (CAN-Tester für Windows) benötigt, und ein geeignetes CAN-Bus-Interface für den PC, welches in vielen Fällen nicht zur Verfügung steht.
-
Bei Geräten mit 'großem' Hauptspeicher und integriertem Web-Server kann die
Firmware auch per TCP/IP (HTTP) im Hintergrund, d.h. ohne langwierige Unterbrechung
des Normalbetriebs aktualisiert werden. Die Firmware-Datei (*.BI2) wird dabei
zunächst komplett(!) in den Hauptspeicher des Gerätes (RAMDISK) hochgeladen,
bevor die Umprogrammierung des FLASH-Speichers starten kann.
Details finden Sie in der Beschreibung des HTTP-Servers . - Die Firmware im UPT515 kann nur per CAN-Bus aktualsisiert werden, weil das Gerät keine serielle Schnittstelle enthält. Zum Firmware-Update per CAN benötigen Sie ein altes DOS-Programm von MKT. Weitere Informationen finden Sie in der Datei fwupdate.htm.
- Brechen Sie den Firmware-Update niemals ab ! Starten Sie während der Übertragung keine anderen Programme, um die Gefahr eines PC-Absturzes zu "minimieren". Zur Not müssen Sie den im Terminal eingebauten Bootloader beim Einschalten durch Drücken der ersten und dritten Funktionstaste manuell aktivieren, und den Firmware-Update wiederholen.
- Für Geräte mit ARM-CPU (z.B. MKT-View II, seit 11/2008) wird zur Ablage der Firmware nicht mehr das HEX-Format ("Intel Hex") verwendet, sondern ein platzsparenderes, segmentiertes Binärformat mit der Dateinamenserweiterung "BI2" . Achten Sie darauf, dass Sie beim Laden der Firmware für diese Geräte in der Dateiauswahlbox den Dateityp von "HEX Files" auf "SEGMENTED Binary Files (*.BI2)" ändern, andernfalls werden Sie die passende Datei nicht finden...
- Siehe auch:
-
Überprüfen ob ein Firmware-Update nötig ist,
Firmware-Kompilations-Datum,
Readme.txt im Unterverzeichnis "firmware" (mit einem Auszug aus der Firmware-Versions-Historie),
Kurzanleitung fuer Firmware-Update (fwupdate.htm),
Firmware Release Notes,
Dateiübertragung per Web-Browser (HTTP; externer Link) . -
PCAN-Dongle von PEAK
Der(/das?) PCAN-Dongle war ein einfaches Interface für den Parallelport, welches beim Erscheinen der ersten Programmiertools von MKT (anno 2001) noch weit verbreitet war. Mit den damals von Peak mitgelieferten Tools (NetConfig, PCANStat und PCANView) konnte dieses Interface konfiguriert werden. Parallel-Interfaces wurden z.g.T. durch USB ersetzt. -
PCAN-USB LIGHT, PEAK-CanAPI2, PCAN-Dongle LIGHT :
Weitere CAN-Interfaces der Firma Peak, die vom Programmiertool unterstützt werden / wurden.
-
NTCAN von ESD
Die NTCAN API der Firma ESD unterstützt verschiedene CAN interfaces für den Parallelport, ISA- und PCI-slots.
-
KVASER CANLIB
Ein universeller Treiber der Firma Kvaser AB, der sämtliche (?) CAN-Interfaces dieser Firma unterstützt.
-
VECTOR XL Driver
Zuletzt getestet mit 'CANcase VN1610', wobei die Zuordnung zwischen 'Kanal' und physikalischer Schnittstelle zunächst problematisch war. Tipps zur Verwendung der Vector-CAN-Hardware finden Sie hier.
- MKT-View III / IV :
Diese Geräte können auch als Umsetzer von CAN auf Ethernet ( / UDP ), und damit als Ersatz für ein CAN-Interface am PC verwendet werden. Sowohl im Programmiertool, als auch im MKT-View muß dazu das CAN-via-UDP-Protokoll aktiviert werden. Details zum Protkoll (für Entwickler) finden Sie hier. - Hinweis
- Weichen die 'Einstellungen des Programmiertools' (für die Programmübertragung per CAN)
zu sehr von den 'Einstellungen des ersten CAN-Interfaces in der Gerätekonfiguration' ab,
dann werden die entsprechenden Dialogelemente im Programmiertool rot markiert.
Das Programmiertool nimmt niemals eine 'automatische Korrektur' der Konfiguration vor !
Im unten gezeigten Screenshot wird z.B. ein Konflikt signalisiert, weil das CAN-Interface "am PC" für einen Betrieb ohne CAN FD konfiguriert war, während in den Einstellungen für das zu programmierende Gerät (MKT-View V mit CAN FD) eine "schnelle Datenphase" mit 4000 kBit/sec konfiguriert war.
UCAN_Init: Loaded Kvaser CANLIB32 V5.30 . CAN1 configured for 500 kbps, FD=4000 kbps CAN1 bit timing : ts1=63, ts2=16, sjw=16, tq=25 ns, nSamp=3; FD:ts1=7, ts2=2, sjw=2, tq=25 ns |________ Arbitrierungsphase ___________| |___ "schnelle" Datenphase ____|
ts1 = time segment 1 ("vor dem Abtastpunkt"), Angabe als Vielfaches von 'tq'
ts2 = time segment 2 ("nach dem Abtastpunkt"), Angabe als Vielfaches von 'tq'
sjw = sync jump witdh, Angabe ebenfalls als Vielfaches von 'tq'
tq = Dauer eines 'Time Quantums' in Nanosekunden
nSamp = Anzahl Abtastungen pro Bit. Entfällt diese Angabe, wird jedes Bit nur einmal abgetastet.
Um die obigen Parameter des Kvaser-Interfaces in die Position des Abtastpunktes umzurechnen (vergleichbar mit den Parametern im System-Setup des MKT-Views) und für die Kontrolle der Baudrate können folgende Formeln verwendet werden:
Baudrate = 1 / (tq * (1+ts1+ts2) ) Sample Point = 100 % * (1+ts1) / (1+ts1+ts2) Beispiel 1 : tq = 25 ns, ts1=63, ts2=16 : Baudrate = 1 / (25ns * (1+63+16) ) = 500000 [Bits / Sekunde] Sample Point = 100 % * (1+63) / (1+63+16) = 80 % Beispiel 2 : tq = 125 ns, ts1=9, ts2=2 : Baudrate = 1 / (125ns * (1+9+2) ) = 666666.667 [Bits / Sekunde] Sample Point = 100 % * (1+9) / (1+9+2) = 83.333 %
Laut einer Empfehlung aus dem CAN (CiA)-Newsletter 1/2018, Recommendation for the CAN FD bit-timing, sollen für Arbitrierungs- und Datenphase identische Vorteiler-Einstellungen verwendet werden, woraus sich dann identische Werte für tq ergeben (im Beispiel mit dem Kvaser-Interface: je 25 ns, d.h. "ok").
Ferner soll tq so kurz wie möglich gewählt werden, um auch in der 'schnellen Datenphase' möglichst hohe Werte für ts1 und ts2 zu erreichen. Mit dem ursprünglich für das MKT-View V vorgesehenen Controller (i.MX RT1064) war diese Forderung nur bedingt zu erfüllen - Details hier.
Trotz der funktionellen Einschränkungen des Controllers war mit einem kurzen Anschlusskabel eine Übertragung zwischen Kvaser-Interface und MKT-View-V-Prototyp mit 500 kbit/s Arbitrierungs- und 4 Mbit/s Datenphase möglich.
Bei mehrkanaligen CAN-Interfaces (am PC) kann der zweite Kanal während der Simulation eines entsprechenden Gerätes (z.B. MKT-View III/IV/V) als Ersatz für den Anschluss "CAN 2" verwendet werden. Im Gegensatz zum ersten CAN-Kanal ist die zweite CAN-Schnittstelle nicht für eine Dateiübertragung zwischen PC und zu programmierenden Gerät vorgesehen. Für "CAN 2" werden während der Simulation die unter CAN Bus Parameter (CAN 2) eingestellten Parameter verwendet.
- Wichtiger Hinweis zu USB-Geräten :
-
Verbinden Sie ein bestimmtes USB-Gerät immer mit dem gleichen USB-Port am PC.
Anderfalls könnte Windows auf die abstruse Idee kommen, den bereits installierten USB-Treiber erneut zu installieren, oder/und dem virtuellen COM-Port eine neue Schnittstellen-Nummer zuzuweisen.
Z.B. könnte Windows dem USB-nach-Seriell-Konverter gestern die Schnittstelle "COM10" zugeordnet haben, sich heute aber für "COM11" entscheiden. In dem Fall ist der im Programmiertool eingestellte COM-Port plötzlich ungültig (...DANKE, WINDOWS...), und in der Auswahlliste für die serielle Schnittstelle erscheint Folgendes:
Der Hinweis "*INVALID*" bedeutet in diesem Zusammenhang, daß "COM10" im oben gezeigten Bespiel nicht mehr gültig ist, was -wie gesagt- daran liegen kann, daß Sie das Gerät heute an einem anderen USB-Port angeschlossen haben als gestern.
Ferner sollten Sie das USB-Gerät anschließen, bevor Sie das Programm starten, welches dieses Gerät verwendet (in diesem Fall also die USB-Kabel-Verbindung zwischen PC und Terminal herstellen, bevor das UPT-Programmiertool gestartet wird). - Drücken Sie die Tastenkombination zum Aufruf des System-Menüs (sofern diese nicht per Setup unterdrückt wurde, andernfalls verwenden Sie eine der hier beschriebenen Alternativen oder die Touchscreen-Geste 'U')
- Bewegen Sie den Markierungsbalken per Cursortasten, Drehknopf, oder Touchscreen bis zum gewünschten Eintrag ('Navigation')
- Drücken Sie ENTER (oder den Drehknopf), um den markierten Parameter zu editieren bzw die markierte Funktion / das Untermenü'aufzurufen'
- Betätigen Sie ESCAPE (oder ersatzweise F3) um ein Menü zu verlassen, bzw in das übergeordnete Menü zurückzukehren
- Verwenden Sie den Menüeintrag "Save & Exit" um geänderte Parameter dauerhaft (im Konfigurations-EEPROM) abzuspeichern
- Display Setup, je nach Hardware z.B. mit Einstellung des LCD-Kontrasts, Hintergrundbeleuchtung, Touchscreen-Gesten, etc;
- Audio-Setup, ebenfalls hardwareabhängig, mit Einstellungen für Touchscreen-"Klick"-Lautstärke, Mikrofonverstärkung, Lautstärke für Lautsprecherausgang, etc;
- Netzwerk-Einstellungen (Details im nächsten Kapitel)
- Einstellen von Datum und Uhrzeit, falls das Gerät über eine batteriegepufferte Uhr verfügt;
- CAN-Baudrate: Auch wichtig für die Übertragung zwischen UPT / MKT-View und Programmiertool.
- Module/Node-ID (Knotennummer), wichtig für die Kommunikation bei CANopen
- weitere hardwareabhängige Einstellungen, z.B. CAN-Transmit-Enable, CAN-Abschlusswiderstand, etc;
- Ein- und Ausschalten des Gerätes; automatisches 'Aufwecken' z.B. per CAN
- Eingabe eines Freischaltcodes um bestimmte 'Spezialfunktionen' nach deren Erwerb zu aktivieren
- Diagnose-Funktionen ("Diagnostics") mit Aufruf des Bootloaders, Default-Einstellungen, Anzeige der Error- und Trace-Historie, manuelles 'Durchblättern' aller Anzeigeseiten, Details zur Speicherbelegung ("Storage Directory")
- Einstellen der CAN-Baudraten für den Normalbetrieb, i.A. individuell für zwei CAN-Interfaces
- 'Spezielle' (selten genutzte) CAN-Einstellungen, z.B. Bit-Timing, Sample Point, Sync Width, "LIN statt CAN", ..
Details zur Berechung der CAN-Bit-Timing-Parameter für 'ungewöhnliche' CAN-Baudraten finden sie in englischer Sprache in diesem Dokument. - Editieren der Werte im nichtflüchtigen Array (EEPROM auf das per Interpreter oder Script zugegriffen werden kann)
- Versionsabfrage
- Aufruf des Bootloaders (zwecks Firmware-Update)
- Wiederherstellen der "BIOS"-Default-Werte
- Anzeige der Fehler-Historie, bei Geräten mit Script auch 'Trace History'
- Blättern in den programmierten Anzeigeseiten ("Browse Display Pages"):
Nach jedem Seitenwechsel (per Cursor oder Drehknopf) werden kurzzeitig Seitennummer und -name eingeblendet. Abbruch per Escape bzw F3. - Auflisten aller Display-Variablen
- Auflisten diverser im Flash gespeicherter Objekte ("Storage Directory")
- Löschen des Flash-Speichers mit Daten und Applikation (declassify)
- Anzeige erweiterter CAN-Bit-Timing-Parameter (evtl. auch CAN FD)
- (1) Ethernet- MAC-Adresse .
- (2) Name (Hostname) des Gerätes im lokalen Netzwerk .
- Ermöglicht den Zugriff auf das Gerät durch Eingabe des Namens im Web-Browser,
was oft (besonders im Zusammenhang mit DHCP, s.U.) einfacher sein kann als die Eingabe einer IP-Adresse im Browser.
Als Defaultwert gilt für alle programmierbaren Terminals der Name "UPT" (User Programmable Terminal).
Werden mehrere Geräte (UPTs) in einem IP-Netzwerk betrieben, muss der Hostname ggf. geändert werden.
Jedes Gerät muss einen eindeutigen (nur einmal verwendeten) Namen im Netzwerk haben.
Die maximale Länge ist hier (bei den UPTs) auf sieben Buchstaben begrenzt.
Bedingt durch die Implementierung von NetBIOS sind Kleinbuchstaben im Gerätenamen nicht zulässig. - (3) DHCP-Konfiguration (statische oder dynamische IP-Adresse)
- Falls eine dynamisch vergebene IP-Adresse verwendet werden soll, muss ein externer DHCP-Server im Netzwerk vorhanden sein.
In dem Fall sind die folgenden Felder (4..6) bedeutungslos.
Eine feste IP-Adresse kann einfacher zu verwenden sein, speziell wenn das Gerät von anderen 'embedded'-Geräten angesprochen werden soll. - (4) Statische IP-Addresse
- Dieser Eintrag hat nur eine Funktion, wenn die IP-Adresse nicht per DHCP zugewiesen wird.
- (5) Subnet mask (Subnetzmaske, manchmal kurz 'Netzmaske' genannt)
- Dieser Eintrag hat nur eine Funktion, wenn die IP-Adresse nicht per DHCP zugewiesen wird.
- (6) Gateway (Standardgateway für externe IP-Verbindungen)
- Dieser Eintrag hat nur eine Funktion, wenn die IP-Adresse nicht per DHCP zugewiesen wird.
- (7) Lokale TCP Server Ports:
- HTTP: Integrierter HTTP Web Server (default port für HTTP: 80), Telnet (default port: 23), und FTP (geplant, default: 21)
- (8) Betriebsart für CAN-via-UDP : "off" (Aus), "Client", "Server".
- Im Gegensatz zu manchen PC-Programmen kann das programmierbare Terminal entweder Client oder Server sein, aber nicht beides zur gleichen Zeit.
- (9) Parameter für CAN-via-UDP :
-
Dazu zählen die IP-Addresse und Port-Nummer eines abgesetzten
CAN-via-UDP-Servers (falls das Terminal selbst als Client arbeitet,
d.h. "seine" CAN-Schnittstellen für ein externes Gerät zur
Verfügung stellt), sowie die lokale Port-Nummer falls das Terminal
selbst als Server arbeitet.
- Wählen Sie im 'Main system menu' die Funktion 'System Setup / UNLOCK'
- Scrollen Sie im 'Setup Menu' bis zum Eintrag 'WakeupSource'.
- Drücken Sie ENTER (bzw. den Dreh/Druckknopf) um von 'Navigieren' auf 'Editieren' umzuschalten
- Verwenden Sie die Cursortasten oder den Drehknopf um eine der weiter unten beschriebenen Optionen zu wählen
- Key (only)
- Das Gerät (z.B. MKT-View) soll nur per Power-Taste eingeschaltet werden.
Es startet nicht automatisch beim Anlegen der Versorgunsspannung.
- Key, Vin
- Das Gerät kann per Power-Taste oder durch Anlegen der Versorgungsspannung ("Vin") gestartet werden.
- Key, Vin, CAN
- Ähnlich wie oben; zusätzlich kann das Gerät auch (ohne "steigende Flanke" an Vin) durch Aktivität auf dem
ersten CAN-Bus-Interface automatisch gestartet werden.
- Key, DIN, CAN
- Einschalten per Power-Taste, per digitalem Eingang ("DIN"=digital input),
oder durch CAN-Aktivität. Die Spezifikation des elektrischen Eingangs (zulässige Spannungen und Schaltschwelle)
finden Sie ausschliesslich im Gerätehandbuch.
- Key, Vin, DIN, CAN
- Kombination aller obigen 'Wake-Up-Quellen' (Power-Taste, steigende Spannung an Vin, DIN, und CAN-Bus-Aktivität).
- Key, CAN
- Einschalten nur per Taste oder CAN-Bus. Flanken an Vin und DIN werden ignoriert.
- Vin, CAN / Vin, DigIN / Vin (only) / CAN (only)
- Selten genutzte Kombinationen die kein Einschalten durch den Bediener selbst zulassen.
Diese wurden vor langer Zeit von einem 'guten Kunden' benötigt, und sind in neueren Geräten (MKT-View V ?)
möglicherweise nicht mehr verfügbar.
- Nr
- Laufende Element-Nummer. Um alle zwanzig (?) bislang implementierten Elemente
zu sehen, muss ggf. nach unten gescrollt werden.
- Type
- Typ oder 'Speicherklasse' des Elements. Die meisten Elemente treten nur
einmal in der Liste auf; bei komplexen Systemen mit mehreren Speichermedien
(z.B. Flash / EEPROM mit I2C-, SPI- oder parallelem Businterface) könnten
Objekte allerdings auf verschiedene Medien aufgeteilt werden und tauchen dann
mehrmals in der Liste auf.
Im Dezember 2020 existieren die folgenden Element-Typen:
- GENS
- General settings
- SDOs
- Service Data Objects (für CANopen)
- PDOs
- Process Data Objects (für CANopen)
- VARI
- Definitionen von Anzeige-Variablen
- G_EV
- globale Event-Definitionen
- CANO
- CANopen-Konfiguration (zusätzlich zu SDOs und PDOs)
- user
- Optionale 'Benutzer-Einstellungen', oder spezielle "anwenderspezifische Objekte" (Sonderfirmware)
- CdbH
- CAN Database Import History (Liste von Dateien mit CAN-Datenbanken oder AUTOSAR-Dateien, die beim Erstellen der Applikation importiert wurden)
- CdbS
- CAN Database Signal Definitions (sofern diese für die Applikation relevant sind und per Tool importiert wurden)
- ufnt
- User-defined fonts (Benutzerdefinierte Zeichensätze die per Programmiertool direkt in die Applikation importiert wurden)
- ufre
- User-defined font references (Liste von Dateinamen mit benutzerdefinierten Zeichensätzen)
- FREF
- Weitere Datei-Referenzen ("Dateien, die von der Applikation verwendet werden/wurden", soweit dies dem Programmiertool bekannt war)
- FLEX
- Andere Objekte im 'flexibel' verwalteten Teil des Flash-Speichers
- STRG
- Null-terminierte String-Konstanten (auf diversen Objekten, aber nicht der Script-Quelltext)
- ICON
- Icons (vom Programmiertool importierte Bitmap-Grafiken)
- PAGE
- Selbstdefinierte Anzeigeseiten
- TEXT
- Text-Array
- SCRI
- Script-Quelltext (der erst im Zielsystem compiliert wird)
- DYNA
- Weitere 'dynamisch' allozierte Objekte. Dazu gehören auch Objekte, die erst nach dem Laden der Applikation in Onboard-Flash-Speicher des Zielsystems abgelegt wurden.
- Count
- Anzahl gespeicherter Objekte eines bestimmten Typs, die zusammen in einem
zusammenhängenden Speicherblock enthalten sind.
- kByte
- Größe des Speicherblocks in Kilobyte (1 kByte = 1024 Byte).
- FirstAddr
- Startadresse des Speicherblocks aus Sicht der CPU.
Wird nur zu Testzwecken und die Firmware-Entwicklung angezeigt.
Speicheradressen sind hochgradig hardware-abhängig. "Niedrige" Adressesen
befinden sich oft im CPU-internen ("schnellen") Flash-Speicher,
höhere Adressen sind oft (aber nicht immer) separate Speicher
auf der Hauptplatine oder der "CPU-Karte".
- LastAddr
- Adresse unter der der letzte Eintrag eines Array-ähnlichen Typs gespeichert wurde.
Abhängig von der Reihenfolge von Objekten bei der Übertragung (oder beim Laden aus einer *.cvt / *.upt - Datei) können sich Adressbereiche scheinbar überlappen. Dies liegt aber daran, dass zwischen 'FirstAddr' und 'LastAddr' noch andere Objekte alloziert werden konnten. Z.B. können beim Import von Anzeigeseiten ("PAGE") hunderte von Zeichenketten ("STRG") alloziert werden, die dann als verkettete Listen 'irgendwo' im Flash-Speicher liegen könnten.
- help, run, stop, print
- sim_rx (sendet einen "simulierten" Datenblock an den Empfangs-Verteiler, z.B. für CAN)
- Übersicht der Interpreter-Kommandos
- Grafik-Anzeige-Kommandos
- Übersicht der numerischen Funktionen des Interpreters
- Script-Sprache (nur für Geräte mit 32-bit CPU, für komplexere Steuerungen)
- Inhaltsverzeichnis
- komplexe Ereignis-Definitionen, z.B. Vergleiche, logische Verknüpfungen etc
- Berechnete Werte für Zuweisungen an Variablen (assignments)
- Parameter, die beim Aufruf an Interpreterfunktionen und -Prozeduren übergeben werden
-
Testmöglichkeit (für "Debugging") im
Watch-Fenster
- Einige Beispiele für numerische Ausdrücke:
-
(Voltage * 100 ) / 230 (Skalierung eines Integer-Wertes, Ergebnis ebenfalls eine Ganzzahl)
(Voltage * 0.23) (Skalierung mit Fliesskomma-Faktor, Ergebnis immer Fliesskomma)
(Voltage > 230) (ein Vergleich, z.B. für Event-Abfragen)
(ce & kd0) (logische Verknüpfung von "CAN-Fehler" UND "Funktionstaste F1 gedrückt") - feste Zahlenwerte (Konstanten, "numbers") ,
- Operatoren (Verknüpfungszeichen wie "+","-" etc) ,
- Variablen,
- Funktionsaufrufen,
- Lesezugriffen auf Array-Elemente.
- dezimal mit optionalem Prefix "#"
- hexadezimal mit Prefix "0x" oder "$" ("C" oder Pascal-Stil)
binär mit Prefix "%"( '%' dient nun als modulo-Operator )- Einige Beispiele für Konstanten:
-
12345
-12345
#12345
0x0ABCD
-0xABCD
$abcd
%010101 - Hinweis:
-
Der Interpreter unterstützt (i.A.) keine
Fließkommazahlen, sondern nur 32-bit-Integerwerte mit Vorzeichen.
Darum ist -123.45 keine zulässige Konstante.
Nur bei Terminals mit CANdb-Funktionalität können echte Fließkommawerte angezeigt und vom Interpreter verarbeitet werden.
- Syntax:
-
<arg1>?<arg2>:<arg3>
- Funktion:
-
if (<arg1> is not zero)
then result:=<arg2> ;- else result:=<arg3>
- (*) Hinweis zu den numerischen Operatoren:
-
Bei Geräten mit 16- oder 32-Bit-CPU, deren Firmware im Februar 2007
oder später compiliert wurde, sind einige -wenige- Operatoren auch für
Zeichenketten definiert. Dies sind:
== ("gleich")
!= ("ungleich").
Diese -und nur diese- Operatoren funktionieren ausnahmsweise auch mit Strings (Zeichenketten). Der zweite Operand muss dabei eine einfache Konstante oder Stringvariable sein, aber kein zusammengesetzter String. -
Wenn eine Variable als "Kommunikationsvariable" verwendet wird (d.h. wenn
sie mit einem Kommunikationskanal verbunden ist), können Sie auf die
folgenden
Komponenten
der Variablen mit Hilfe des Interpreters auch zur Laufzeit des UPT-Programms zugreifen (".xx" an den Variablennamen anhängen, z.B.Temp_3.in
): -
.fl liefert das "flag"-Feld einer Varariablen,
.ut liefert den Wert des "update timers" einer Variablen (zählt in 0.1-Sekunden-Schritten abwärts),
.cy liefert die Zykluszeit in Millisekunden (0 = "kein periodisches Senden" für CAN-Signale),
entspricht dem Parameter 'Upd-Time' auf der Registerkarte Variablen;
.in liefert den "letzten Eingangswert" (input value) der Variablen vom Kommunikationskanal,
bei mit CAN ('CANdb') verknüpften Variablen ist dies der nicht skalierte 'Rohwert';
.iu testet ob der "Eingangswert" einer Variablen per Kommunikationkanal aktualisiert wurde,
.ic zaehlt wie oft der Eingangswert per Kommunikationskanal aktualisiert wurde,
.ed liefert den "editierten Wert" der momentan auf dem Display sichtbar ist,
.ou liefert den "letzten Ausgangwert" (output value) der an einen Kommunikationskanal gesendet wurde,
.od testet ob der aktuelle Wert bereits erfolgreich zum Kommunikationskanal gesendet wurde,
.de liefert den "Defaultwert" aus der Variablen-Definitionstabelle,
.mi liefert das "Minimum" aus der Variablen-Definitionstabelle,
.ma liefert das "Maximum" aus der Variablen-Definitionstabelle,
.fa liefert den Skalierungsfaktor aus der Variablen-Definitionstabelle,
.di liefert den Skalierungsdivisor aus der Variablen-Definitionstabelle,
.of liefert den Skalierungs-Offset aus der Variablen-Definitionstabelle,
.ty liefert den Typ der Variablen (numerische Codierung des Datentyps wie bei CANopen),
.un liefert die physikalische Einheit (UNIT, aus der Definitionstabelle),
.uo testet die "output update flags" der Variablen (nur für Experten),
.va (Abk. für 'valid') testet ob der Wert der Variablen (.ed) momentan "gültig" bzw "verfügbar" ist. - Nur für Geräte mit 32-Bit-CPU, und "CANdb"-Unterstützung:
-
.ci liest (oder ändert) den
CAN-Identifier einer Signaldefinition während der Laufzeit,
wenn die Variable mit einem 'CAN-Signal' gekoppelt ist.
.fb, .nb, .bo, .st, .sf, .so : Teile einer CAN-Signal-Definition. Details hier .
- in ("INput value", spezielle Komponente einer Variablenstruktur)
-
liefert den "letzten Eingangswert" (input value) der Variablen vom
Kommunikationskanal. Bei Variablen, die mit
CAN-Signalen verbunden sind, ist dies der "rohe"
(d.h. nicht skalierte) Wert der direkt aus der CAN-Message entnommen wurde.
Dies ist -im Gegensatz zum "angezeigten" Wert (.ed)- immer eine
Integer-Zahl.
- ic ("Input Counter", spezielle Komponente einer Variablenstruktur)
-
Liest oder setzt den Stand eines "Aktualisierungs-Zählers" einer Variablen.
Jede Variable, die mit einem Kommunikationskanal verbunden ist, verfügt
über einen eigenen ("Empfangs-")Zähler, auf den per Interpreter
zugegriffen werden kann (für Debugging oder für
Überwachungszwecke).
Vorsicht: Der maximale Zählerstand ist 32767. Wird dieser Wert überschritten, ändert sich nur noch das niederwertige BYTE des Zählerstandes (oder, mit anderen Worten, der Zählerstand 'friert nicht ein' wenn die Variable 32678-mal aktualsiert wurde).
Um den Zählerstand auf Null zu setzen, verwenden Sie eine formale Zuweisung wie diese:
@StopIt.ic
= 0 - iu ("Input Updated", spezielle Komponente einer Variablenstruktur)
-
Testet, ob eine Variable per Kommunikationskanal aktualisiert wurde (i.A.
nach Empfang einer passenden CAN-Message, in der der "Eingangswert" enthalten
war).
Um dieses Flag zurückzusetzen, verwenden Sie eine formale Zuweisung wie z.B.:
@StopIt.iu
= 0
- od ("Output Done", spezielle Komponente einer Variablenstruktur)
-
Testet ob eine Variable bereits erfolgreich auf dem Kommunikationskanal
ausgegeben wurde ("output done", "output updated").
Verwenden Sie diese Komponente, wenn Sie testen wollen ob der "neue" Wert, den Sie irgendwie an die Variable zugewiesen haben, bereits erfolgreich zum dazugehörigen "Ausgangs"-Kanal übertragen werden konnte (dies kann z.B. beim SDO eine ganze Weile dauern!). Beispiel:
Nehmen wir an, Sie haben eine Variable namens StopIt, die per SDO-Kanal mit einem externen Gerät verbunden ist. Im Terminalprogramm weisen Sie nun dieser Variablen einen neuen Wert zu (z.B. in einem Event, um irgendeine Maschine auf Tastendruck zum Stoppen zu bringen):
@StopIt=1
Der SDO-Protokoll-Handler wird daraufhin versuchen, einen Write-Request an das externe Gerät zu senden, und wartet anschließend auf ein Write-Response-Telegramm von dem Gerät. Während der SDO-Handler beschäftigt ist (busy), arbeitet das Terminal ganz "normal" weiter (weil der Protokoll-Handler im UPT -mehr oder weniger- "im Hintergrund" arbeitet).
Nach einiger Zeit (abhängig vom externen Gerät und von der Arbeitsgeschwindigkeit des UPT's) wird das UPT das Write-Response-Telegramm empfangen. Ein bestimmtes Flag der Variablen (hier: "StopIt.od") wird auf EINS gesetzt nachdem das Response-Telegramm empfangen wurde.
Ihre Anwendung kann dieses Flag in einem "Event" abfragen, zum Beispiel:
Event:StopIt.od
Reaktion:g"StopOk"
Dieses Event (incl. Reaktion) wird dann zu einer bestimmten Anzeigeseite namens "StopOk" umschalten, sobald der Partner den Empfang des geänderten Variableninhalts quittiert hat. - va ("VAlid", spezielle Komponente einer Variablenstruktur)
-
Testet, ob der aktuelle Wert einer Variablen "gültig" (valid) bzw.
"verfügbar" ist. Dies ist i.A. TRUE = 1 = "wahr". Bei Variablen die
an CAN-Signale gekoppelt sind, kann es vorkommen daß der Wert noch
"ungültig" ist weil das Signal noch nicht empfangen wurde (im Gegensatz
zu CANopen ist es bei CANdb nicht möglich, sogenannte "Defaultwerte"
zu definieren - zumindest nicht im CANdb-File).
Ist die optionale Timeout-Überwachung aktiv, kann sogar ein bereits gültiger Wert nach einiger Zeit wieder ungültig werden (nämlich dann, wenn eine zyklische Übertragung per CAN länger als der parametrierte 'Timeout'-Wert ausbleibt).
Bei Variablen, die (per SDO oder PDO) an CANopen-Objekte gekoppelt sind, ist der Wert prinzipiell immer gültig, weil die Variablenwerte beim Einschalten auf den vordefinierten 'Defaultwert' gesetzt werden können. - Variablen (allgemein)
- Variablen an PDO-Kanälen
- Fest im CANopen-Objektverzeichnis des Terminals verankerte Variablen, auf die mit der Funktion obd(<index>.<subindex>) zugegriffen werden kann (nur für Terminals mit "CANopen V4").
- Mauspfeil in der Mitte eines Bezeichners (z.B. Variablenname):
Es wird nur der Wert dieses Bezeichners angezeigt. - Mauspfeil am Anfang eines Bezeichners:
Es wird ein kompletter Term (mit Operatoren und Operanden links vom Bezeichner) ausgewertet, i.A. bis zum nächsten Leerzeichen. - Mauspfeil am Ende eines Bezeichners:
Es wird ein kompletter Term (mit Operatoren und Operanden rechts vom Bezeichner) ausgewertet, i.A. bis zum nächsten Leerzeichen. - Mauspfeil auf einer öffnenden Klammer:
Wertet den geklammerten Term "nach rechts" bis zur korrespondierenden schliessenden Klammer aus. - Mauspfeil auf einer schließenden Klammer:
Wertet den geklammerten Term "nach links" bis zur korrespondierenden öffnenden Klammer aus. -
ain1, ain2 : liefert den Wert eines Analog-Eingangs,
Wertebereich 0..1023 (höhere Auflösung per Script).
- arr[row][col][comp]: Zugriff auf globales Array (Fliesskommawerte, nur bei manchen Geräten)
- appl.xxx liefert Informationen über die geladene Applikation, z.B. den Dateinamen
- audio.xxx liefert Informationen über den Audio-Recorder (z.B. Status der Aufnahme, Wiedergabe, etc)
- bk, bs : Button Key, Button-State (nur bei manchen Geräten)
- crx CAN-Receive, testet ob ein CAN-Telegramm empfangen wurde (nur in seltenen Sonderfällen benötigt; seit 2010-02)
- cs CAN-Status, bitweise codierter Status des CAN-Controllers
- csim. : Modul-Präfix des CAN-Simulators. Existiert nur im Programmiertool.
- dia.xxx Diagramm-Funktionen (und -Kommandos; nur bei manchen Geräten)
- disp.<Name>.<Komponente> ermöglicht den Zugriff auf Anzeigeelemente der aktuellen Seite
- gps.xxx : Funktionen zum Steuern eines externen GPS-Empfängers ("GPS-Maus")
- gsm.xxx : Funktionen zum Steuern eines externen GSM/GPRS-Modems
- hex$ : wandelt einen Integer-Wert in eine hexadezimale Zeichenkette ("Hex-String") um
- inp (inputs) liest den Zustand der digitalen Eingänge des UPT's
- isin(X) Integer-Sinus aus ROM-Tabelle. X=0...1023 liefert eine volle Sinus-Periode.
- jx, jy, jc dienen zur Abfrage des (optionalen) analogen Joysticks
- kd, ku, kb , kr , kc, kcb (key down, key up, key buffered, key released, key code,..) Tastatur-Abfrage-Funktionen
- lim(value,min,max) Arithmetische Begrenzungsfunktion.
- mm, mi : Menue-Modus, Menue-Index
- nbit(matrix,bitnr) Sucht das "nächste" Bit in einer Bitmatrix
- nv Lese- und Schreibzugriff auf nichtflüchtige numerische Werte (non-volatile)
- obd(index.subindex) ähnelt "sdo", greift aber auf das eigene (lokale) CANopen-Objekt-Dictionary zu
- out Lese(!)- und Schreibzugriff für die digitalen Ausgänge des UPT's (digital outputs)
- pdo[N].xxx liest Komponenten eines PDO-Kanals: counter, data, received-flag, transmitted-flag, modified-flag, etc.
- pn (page number) liefert die aktuelle Seitennummer, pcnt die Anzahl programmierter Anzeigeseiten
- puc, pur (= page-update-count, page-update-rate): Funktionen zur Analyse der Seiten-Aufbau-Rate
-
power (nur für alte Geräte, z.B. "MKT-View PLUS") : Power-Flag.
- random(N) : Zufallsgenerator für Ganzzahlen. Der Wertebereich umfasst 0 bis N-1 (!) bei positivem N, und -(abs(N)-1) bis +(abs(N)-1) bei negativem N.
- rgb(red, green, blue) mischt eine Farbe aus RGB-Komponenten. Ergebnis ist eine 32-bit Ganzzahl.
- rtc.xxx (real time clock) Zugriff auf die batteriegepufferte Echtzeituhr, falls vorhanden
- rot.xxx (rotary knob) Lesen von Modus und Position des Drehknopfes (bei bestimmten Terminals)
- script.XYZ greift auf eine globale Variable im Script-Programm zu (nur für Geräte mit Script-Sprache - siehe Feature-Matrix)
- sdo(index.subindex, type) liest oder schreibt einen Wert per CANopen-SDO-Kanal
- ser.xxx Serielle Schnittstelle: Konfiguration, Senden, Empfangen (bei bestimmten Terminals)
- sigs.xxx Konfiguration des Timeout-Monitor für empfangene Signals (nur Terminals mit "CANdb-Support")
- str(<format>,<value>) wandelt einen numerischen Wert in einen String um
- syn.xxx liest Komponenten der CANopen SYNC-Message: counter und received-flag.
- sys.xxx liest bestimmte Systemwerte wie Versorgungsspannung, Temperatur, etc (bei bestimmten Terminals)
- tv0...tv3 (timer values) Werte der programmierbaren Timer
- type2str(typ) Wandelt den Code für einen Datentyp in einen lesbaren String um. Beispiel: type2str(1) liefert "BOOL" .
- ti Systemzeit (time), wird alle 100 Millisekunden inkrementiert
- udp.xyz : Funktionen (und Kommandos) zur Kommunikation per Ethernet / UDP (User Datagram Protocol)
- v enthält den "aktuellen Wert" (value) der Variablen in der aktuellen Anzeigezeile
- val() , eval(): wandeln Zeichenketten (strings) in Zahlen um
- var(<name>) Variablen-Referenz (wobei <name> selbst eine Variable sein kann)
- vkey.xyz : Funktionen zum Steuern der virtuellen Tastatur (für Geräte mit Touchscreen)
- xmax, ymax liefern (seit 03/2011) die maximal mögliche X- und Y-Koordinate, abhängig vom Display-Typ.
- Spezielle Funktionen zur Event-Abfrage
- String-Funktionen
- Übersicht Interpreter-Kommandos (sortiert nach Kategorie und Alphabet )
- Anwenderdefinierte Funktionen und Prozeduren in der Script-Sprache
- UPT-Beispiele
- Inhaltsverzeichnis
- kdN
-
Testet ob Taste N in diesem Moment grade gedrückt ist ("key
down"). Die Taste wird in dem Moment abgefragt, in dem diese Funktion
aufgerufen wird, es findet keine "Pufferung" statt (im Gegensatz zu "kb",
siehe Unten).
Resultat: 1 (=TRUE) wenn die Taste momentan gedrückt ist, andernfalls 0 (=FALSE).
- kuN
-
Testet ob die Taste im Moment "oben" ist ("key up"), d.h. im
Moment nicht gedrückt ist. Im Gegensatz zu "kr" (key released,
s.U.) liefert diese Funktion auch TRUE, wenn die Taste seit dem Einschalten
noch nie gedrückt wurde. "kr" liefert nur TRUE, nachdem eine bestimmte
Taste losgelassen wurde.
- kbN (bzw. kb(<Tastenname>) bei neueren Geräten)
-
Testet ob Funktionstaste N(0..7) in den Tastaturpuffer eingetragen wurde
("key buffered"). Falls die Taste seit dem letzten Aufruf dieser
Funktion gedrückt wurde, liefert die Funktion den Wert 1 (=TRUE), und
die Taste wird aus dem Puffer entfernt (ein wichtiger "Nebeneffekt" !).
Im Gegensatz zu kd erkennt diese Funktion auch kurzzeitige Tastenbetätigungen, weil die Abfrage in einer Interruptroutine im Hintergrund läuft.
Geräte mit 32-bit-CPU und Firmware-Kompilationsdatum seit 2009-09-30 unterstützen eine erweiterte Syntax für die kb-Funktion, mit der z.B. auch Cursortasten abgefragt werden können. Weitere Details zur erweiterten Syntax finden Sie hier.
- krN
-
Testet ob Funktionstaste N(0..7) nach dem Drücken wieder losgelassen
wurde (kr = "key released"). Wie die "kb"-Funktion verwendet
auch "kr" einen internen Ereignis-Puffer, der beim Aufruf der Funktion
gelöscht wird. Beispiel :
kr0 || kr1 || k2
testet ob F1 oder F2 oder F3 nach der Betätigung wieder losgelassen wurde .
Hinweise:- Diese Funktion hat einen Nebeneffekt: Durch die Abfrage des Event-Flags wird dieses gelöscht (quittiert) ! Im obigen Beispiel mit der logischen ODER-Verknüpfung werdem daher drei Flags (für die Tasten F1...F3) gelöscht, denn der Interpreter arbeitet den kompletten Ausdruck ab (im Gegensatz zur Programmiersprache "C", die die Auswertung der ODER-Verknüpfung nach der ersten "TRUE"-Bedingung abbrechen würde).
- Geräte, deren Firmware vor dem 2. Juli 2007 compiliert wurde, unterstützen diese Funktion nicht !
- Die Tastennummer "N" kann automatisch vom Programmiertool eingesetzt werden, wenn Sie die Taste aus einer Liste auswählen (zum Beispiel im Ereignis-Definitions-Dialog: Wählen Sie dort die Funktion "key pressed" ... "F1", das Programmiertool erzeugt daraus den Quelltext "kd0").
- kh (keyboard hit)
-
Testet ob irgendeine Taste seit dem letzten Aufruf der "kc"-Funktion (s.U.)
gedrückt wurde ("keyboard hit"). Der Rückgabewert ist "0" wenn
keine Taste gedrückt wurde, oder "1" wenn irgendeine Taste auf der
UPT-Tastatur gedrückt wurde (und nun im Tastaturpuffer auf ihren
"Abtransport" wartet).
- kc (key code)
-
Liest den System-Tasten-Code(!!) einer Taste
aus einem Puffer. Sollte nur aufgerufen werden, wenn die Funktion "kh" (key
hit) vorher den Wert "1" geliefert hat. Durch den Aufruf dieser Funktion
wird der Tastencode auch aus dem (speziellen) Tastaturpuffer entfernt. Der
nächste Aufruf von "kc" wird dann den Wert Null liefern, bis der Bediener
wieder eine Taste drückt. Warnung: Die System-Tasten-Codes könnten
von der UPT-Hardware abhängig sein !
Siehe auch: Detailierte Erklärung der Funktionen "kh" und "kc".
- kcb (key code buffered)
-
Nahezu identisch mit der kc-Funktion. Im Gegensatz zu kc entfernt "kcb" den
Tastencode beim Auslesen nicht aus dem Puffer. Ferner wird der Inhalt
von "kcb" nicht gelöscht, wenn das Anzeigeprogramm zu einer anderen
Seite umschaltet. Wenn die Applikation eine Taste verarbeitet hat, sollte
der Inhalt der Pseudo-Variablen "kcb" mit der folgenden Anweisung gelöscht
werden:
kcb=0 : REM clear key-code-buffer so we can detect the next event
Da "kcb" im Gegensatz zu "kc" den Tastencode beim Auslesen nicht löscht, kann diese Funktion beliebig oft zur Abfrage von bestimmten Tasten eingesetzt werden. Hier ein Beispiel zur Abfrage der ENTER-Taste (mit Code 13 = "carriage return"):
Ereignis:kcb=13
Reaktion:@X=X+1 : kcb=0
Beachten Sie das Löschen der Taste in der Reaktionsmethode ! Die Abfrage, ob überhaupt eine Taste gedrückt wurde, ist hier nicht nötig (solange keine Taste gedrückt wurde, liefert kcb den Wert Null). -
- km (keyboard matrix)
-
Liefert den aktuellen Zustand der Tastaturmatrix als Kombination von bis
zu 32 Bits (Tasten). Dieser Wert wird direkt vom Tastaturtreiber des Terminals
gelesem, er ist daher hochgradig hardware-abhängig. Als "Daumenregel"
gilt: Der Zustand der "ersten" Taste (oft "F1") steht in Bit 0, und so
weiter.
Die Funktion "km" ermöglicht es (im Gegensatz zu den anderen Tastatur-Abfrage-Funktionen), auch viele Tastenkombinationen (wie z.B. F1+ESCAPE+CursorLeft) abzufragen, sofern die Tastaturelektronik dies zuläßt. Wegen der Hardware-Abhängigkeit der Funktion sollten Sie diese nur einsetzen, wenn unbedingt nötig !
Tipp: Bei Terminals mit CANopen V4 kann die Tastaturmatrix auch als CANopen-Objekt 0x5001 in einen TPDO (= gesendetes Prozessdatenobjekt) eingeblendet werden. Eine Zuordnung zwischen Tasten und Bitnummern finden Sie in der Beschreibung von Objekt 0x5001 im CANopen Object Dictionary.
- keyrepeat (keyboard repeat interval in milliseconds / flag to turn repeat off)
-
Konfiguration der automatischen Tastatur-Wiederhol-Funktion. Per Default
verwendet das Terminal einen ähnlichen Tastatur-Repeat wie eine PC-Tastatur.
Mit dem Kommando "keyrepeat=0" kann die automatische Wiederholung abgeschaltet
werden, falls sie stört. Mit "keyrepeat=1000" wird startet die
Repeat-Funktion, wenn eine Taste länger als 1000 Millisekunden
gedrückt wird.
Hinweis: Diese Funktion existiert erst seit 2006-10-04 ! (Firmware-Datum beachten)
- keytable
-
Ermöglicht das Umschalten der aktuellen Tastatur-Zuordnungs-Tabelle
per Interpreterkommando, bzw. das Lesen des aktuellen Zustandes per
Interpreterfunktion. Diese Funktion wurde 2009-12-16 für ein bestimmtes
Gerät implementiert, bei dem nur Cursortasten ("Pfeiltasten") sowie
ENTER und ESCAPE physikalisch existierten, aber leider keine Funktionstaste,
und auch keine 'Shift'-Taste (mit der notfalls die Tastenfunktion durch den
Benutzer umgeschaltet werden könnten, um z.B. auch die Tastencodes F1
.. F6 zu erzeugen).
Ähnlich wie mit einer Shift-Taste ("Umschalttaste") kann per 'keytable=XYZ' die Tastaturbelegung programmgesteuert umgeschaltet werden. Beispiele:
keytable=0
selektiert die Default-Tastatur-Tabelle (hier: mit vier Cursortasten, ENTER, und ESCAPE);
keytable=1
selektiert die erste alternative Tabelle (hier: mit Funktionstasten F1..F6 statt der oben erwähnten Tasten); etc.
Faustregel: keytable=0 ordnet den Tasten ihre normalen (auf der Tastaturfolie abgebildeten) Funktionen zu, keytable=1 selektert die erste 'alternative' Tabelle (die man bei geeigneten Tastaturen mit der linken Shift-Taste erreichen würde), und so weiter.
Hardwarespezifische Details finden Sie in der Hardwarebeschreibung.
Hinweis: Die Funktion 'keytable' wird vom im Programmiertool enthaltenen Simulator nicht unterstützt ! - "handle key"Kommando (hk) zum Einschleusen von Tastaturereignissen in den Puffer
- Tabelle mit allen Tastatur-Codes
- Tastatur-Handling in Popup-Fenstern
- Funktionen zum Steuern und Abfragen des Drehknopfes (encoder)
- Funktionen zum Steuern der Virtuellen Tastatur (für Touchscreens)
- Übersicht der numerischen Funktionen des Interpreters
- kb(ENTER)
- Prüft ob die 'ENTER'-Taste gedrückt wurde.
Wenn ja, liefert die Funktion den Wert 1 (Eins, TRUE) und entfernt den Tastencode aus dem Puffer.
Entsprechendes gilt auf für die folgenden Beispiele.
Bei einigen Geräten ist die ENTER-Taste mit 'Ok' beschriftet, bei anderen ist ENTER die 'nicht beschriftete quadratische Taste zwischen den Cursor-Tasten (Pfeil-Tasten)'.
- kb(ESC)
- Abfrage der 'ESCAPE'-Taste. Wird meistens zum 'Abbrechen' irgendeiner Aktion verwendet. Diese Taste ist manchmal mit 'ESC' beschriftet, manchmal mit 'Cancel'. Bei anderen Geräten ist die 'Abbruch'-Taste mit einem Symbol beschriftet (z.B. "rote Nuss-Ecke"), dessen Bedeutung wohl nur dem Anwender (Auftraggeber) bekannt ist...
- kb(UP)
- Fragt die 'Cursor-Up'-Taste ab. Diese ist oft mit einem Pfeil oder nach oben zeigendem Dreieck beschriftet.
Bei anderen Geräten (ohne 'echte' Cursortasten) wird 'Cursor Up' per Drehgeber emuliert. - kb(DOWN)
- 'Cursor Down'-Taste. Beschriftung i.A. mit einem nach unten zeigenden Pfeil oder Dreieck.
- kb(LEFT)
- 'Cursor Links'-Taste. Beschriftung i.A. mit einem nach links zeigenden Pfeil oder Dreieck.
- kb(RIGHT)
- 'Cursor Rechts'-Taste. Beschriftung i.A. mit einem nach rechts zeigenden Pfeil oder Dreieck.
- kb(F1)
- Abfrage der 'ersten' Funktionstaste. Bei manchen Geräten mit 'F1' beschriftet.
Beim MKT-View II/III dient diese Taste auch als Ein/Aus-Schalter, und ist entsprechend beschriftet. - kb(F2)
- Abfrage der zweiten Funktionstaste. Bei manchen Geräten mit 'F2' beschriftet.
Beim MKT-View II/III ist F2 die mittlere, nicht beschriftete, Taste. - kb(F3)
- Abfrage der dritten Funktionstaste. Bei manchen Geräten mit 'F3' beschriftet.
Beim MKT-View II/III ist F3 die nicht beschriftete Taste oberhalb des Drehknopfs (unten). - Die Tastencodes liegen immer im Bereich 1..127 (7 bit). Sie werden intern als 8-bit-Wert abgelegt. Das MSB fungiert als "Make/Break"-Flag ähnlich wie bei PC-Tastaturen (Bit 7 gelöscht bedeutet "Taste wurde gedrückt", Bit 7 gesetzt bedeutet "Taste wurde losgelassen"). Die Interpreterfunktion "kc" filtert die Break-Codes allerdings aus, Ihre Applikation wird daher immer nur die Codes 1..127 empfangen.
-
Die Fernsteuerung für Geräte
ohne "echte" (eigene) Tastatur verwendet die gleichen Tastencodes für
die Übertragung vom Terminalprogramm zum fernbedienten Gerät.
Der Rückkanal (für die Anzeige von Zeichen im auf dem PC laufenden Fernsteuer- bzw. Terminalprogramm) verwendet dagegen VT-52-Escape-Sequenzen. - Resultat:
-
value, falls (value>=min) und (value<=max)
min, falls value<min
max, falls value>max . - pn
- liefert die aktuelle Seitennummer im Bereich 0 bis (pcnt-1) ,
- pcnt
-
liefert die Anzahl programmierter Anzeigeseiten .
-
pn("BusOff")
- liefert die Seitennummer der Seite namens "BusOff" .
-
Global Event condition:
-
cb && ( pn != pn( "BusOff" ) ) .
Remember, "pn" is the current page number, and pn("BusOff") retrieves the number of a page called "BusOff" in your application .
-
Global Event reaction:
-
g( "BusOff" ) : REM switch to "BusOff" when CAN is bus-off, and not already there .
On the "BusOff" page, a warning could be displayed, or the application could try to reset the CAN controller . - Testfunktionen zum Messen der Aktualisierungsgeschwindigkeit:
puc
zählt wie oft die aktuelle Bildschirmseite seit ihrem Aufruf aktualisiert wurde.pur
liefert die Frequenz (in zehntel Hertz) mit der die aktuelle Seite aktualisiert wird.- val("123") liefert die Zahl(!) 123
- val("1+2+3") liefert die Zahl(!) 6
- val(sa[X]) liefert den X-ten Eintrag in der Text-Tabelle (string array) als numerischen Wert
-
eval( "Hello 123.45 !?", 5, 7, F, 9999 )
(Die ersten 5 Zeichen werden übersprungen, dann bis zu 7 Zeichen als dezimale Fliesskommazahl interpretert, und falls keine gültige Zahl vorliegt der Default-Wert 9999 geliefert. In diesem Beispiel ist das Ergebnis daher 123.45 als Fliesskommazahl) -
eval( "Hello 123.45 !?", 5, 7, I, 9999 )
(Liefert 123 als Integerzahl) -
eval( "FFFF", 0, 4, H, 0 )
(Wandelt die Hex-Zahl 0xFFFF in eine Integerzahl um, das Ergebnis in diesem Beispiel 65535 (dezimal) ) -
eval( "No number in here", 0, 10, I, 9999 )
(Liefert den Defaultwert, hier 9999, weil an der angegebenen Position im String keine gültige Zahl vorliegt) -
@Temp_I = eval(ser.rstr,"i=",8,F,Temp_I) : rem parse value #1
Empfängt eine Textzeile von der seriellen Schnittstelle (ser.rstr), sucht nach dem ersten Auftreten des Tokens (substring) "i=", und wandelt bis zu 8 der danach folgenden Zeichen in eine Fliesskommazahl (Format F) um. Falls das Token "i=" in der empfangenen Zeichenkette nicht enthalten ist, oder danach keine gültige Fliesskommazahl im Text folgt, wird der alte Wert der zugewiesenen Variablen (hier: Temp_I) als Default-Wert zurückgeliefert. Mit anderen Worten: Wenn nichts passendes empfangen wurde, ändert sich der Wert von Temp_I in diesem Beispiel nicht.
Hinweis: Dieses Beispiel wurde aus einem Testprogramm für den seriellen Port / MKT-View entnommen (Datei ser_test.cvt), die Sie im Unterverzeichnis 'programs' des Programmiertools finden (falls Ihr Terminal den Zugriff auf die serielle Schnittstelle bietet ... also nicht beim Programmiertool für das UPT515 ) - pdo[N].cnt
-
Liefert den Wert eines Zählers. Verwenden Sie diese Funktion um zu
ermitteln, wie oft ein bestimmter PDO seit Power-On gesendet bzw. empfangen
wurde.
- pdo[N].cyc
-
Liefert die Zykluszeit für Sende-PDOs in Millisekunden. Sie können
durch eine formale Zuweisung an diese Komponente auch einen neuen Sendezyklus
(zur Laufzeit!) einstellen, z.B.: pdo[0].cyc = 1234 .
Der Sendezyklus funktioniert ähnlich wie der "PDO Event Timer", beschrieben in CANopen DS301 V4.0, Object 0x1400, Subindex 5.
- pdo[N].dat[I]
-
Liefert den aktuellen Wert des [I]-ten Datenbytes aus PDO-Kanal N. Normalerweise
verbinden Sie ja eine Variable mit einem PDO, um ein oder mehrere Bytes aus
dem PDO-Datenfeld zu "isolieren", darum werden Sie diese Funktion nur sehr
selten brauchen (außer für "sehr spezielle" Zwecke !). Sie
können durch eine formale Zuweisung auch ein einzelnes Byte in einem
Sende-PDO ändern, z.B.:
pdo[0].dat[7] = 123 (dies ist allerdings sinnlos, wenn eine Variable in dieses Byte des PDOs gemappt ist !)
- pdo[N].id
-
Zugriff aus den aktuellen CAN-Identifier eines PDO-Kanals.
Sie können durch eine formale Zuweisung den Identifier auch während der Laufzeit ändern, z.B.: pdo[0].id = 2047.
DIESE MÖGLICHKEIT DARF NUR MIT ÄUSSERSTER VORSICHT EINGESETZT WERDEN, WEIL DER INTERPRETER WÄHREND DER LAUFZEIT NICHT DIE GÜLTIGKEIT DER CAN-IDENTIFIER TESTET ! Das Senden eines falschen CAN-Identifiers in ein Netzwerk kann schwerwiegende (bis "katastrophale") Probleme verursachen ! Bei Geräten mit CANopen V4 besteht diese Möglichkeit nicht mehr. Verwenden Sie stattdessem den PDO-Kommunikations-Parameter im Object-Dictionary.
- pdo[N].rcv
-
Diese Funktion testet ob seit dem letzten Aufruf schon wieder ein PDO-Telegramm
empfangen wurde.
Das Flag wird durch das Auslesen intern wieder zurückgesetzt ! Die Funktion ist nur für den Einsatz in Event-Definitionen vorgesehen. Sie können damit "Überwachungsfunktionen" in Ihr Programm einbauen (z.B. im Zusammenhang mit den Timern das Ausbleiben eines PDOs überwachen).
- pdo[N].trn
-
Diese Funktion testet ob seit dem letzten Aufruf schon wieder ein PDO-Telegramm
gesendet wurde.
Das Flag wird (ähnl. .rcv) durch das Auslesen wieder zurückgesetzt. Einsatz in Event-Definitionen.
- pdo[N].tx
-
Dies ist keine Funktion, sondern eine Prozedur. Sie stößt die
Sendung eines PDO-Telegramms durch den Interpreter an (allerdings nur, wenn
der NMT-Zustand "OPERATIONAL" ist !). Verwenden Sie diese Prozedur wenn sie
einen "ereignisgesteuerten" PDO (z.B. auf Tastendruck) realisieren wollen.
- pdo[N].mod
-
Diese Funktion testet, ob ein PDO-Telegramm modifiziert aber noch
nicht gesendet wurde.
Ergebnis: 1 (TRUE) = Das PDO-Datenfeld wurde geändert aber noch nicht gesendet
0 (FALSE)= Das PDO-Datenfeld wurde seit der letzten Sendung nicht mehr geändert
- pdo[N].syn
- Diese Funktion liefert die Anzahl SYNC-Intervalle eines bestimmten PDOs seit dessen letzter Sendung (oder Auswertung, bei RX). Dieser Zähler wird intern für die CANopen-Transmission-Types 2..241 verwendet. Weitere Infos in DS301.
- syn.rcv (abgekürzt als syn.r )
-
Diese numerische Funktion testet, ob seit dem letzten Aufruf dieser Funktion
ein SYNC-Telegramm empfangen wurde.
Das Flag wird durch das Auslesen intern gelöscht. Die Funktion ist nur für den Einsatz in einer Event-Definition vorgesehen.
Sie könnten zum Beispiel eine "Überwachung" für zyklisch empfangene SYNC-Telegramme programmieren:
Definieren Sie "syn.rcv" als globales Event und ein Timer-Start-Kommando wie "ts0(50)" als entsprechende Reaktion. Dadurch wird Timer 0 (neu) für 500 ms gestartet, wenn ein SYNC-Telegramm empfangen wurde. Definieren Sie ein anderes globales Event ("t0") mit Reaktionsmethode (z.B. g"NoSync"). Erzeugen Sie eine Anzeigeseite namens "NoSync". Diese Seite wird dann aufgerufen, wenn das UPT über eine halbe Sekunde keine SYNC-Telegramme mehr empfängt.
- syn.cnt (abgekürzt als syn.c )
-
Liefert die Anzahl der übertragenen SYNC-Telegramme. Sie können
dies für Überwachungszwecke einsetzen (z.B. um zu testen, ob ein
neues SYNC-Telegramm empfangen wurde, ohne das "syn.rcv"-Flag zu löschen).
- cs : CAN-Status-Abfrage
- cr : CAN-Reset (z.B. nach Bus-Off)
- crx : CAN-Empfang
- ctx : CAN-Senden
-
0x01 = Hardwarefehler, Problem mit CAN-Treiber (DLL),
oder "anderer genereller Fehler" für den kein Bit mehr frei war ! - 0x02 = Überlauf des Empfangspuffers
- 0x04 = Sendepuffer-Überlauf
-
0x08 = Problem mit dem CAN-Interrupt (z.B. CPU-Überlastung)
- 0x10 = kein ACKNOWLEDGE für Sendung oder Sende-Timeout
-
0x20 = nicht näher definierbarer Busfehler
(oft aus Fehlermeldung der CAN-Treiber-DLL übernommen) -
0x40 = Bus-WARNUNG
(abnormale Fehlerrate) -
0x80 = Bus-OFF
(Controller hat sich wegen ernster Probleme vom Bus abgekoppelt) - crx( <CAN-ID> )
-
Testet, ob seit der letzten Quittierung ein neues Telegramm mit dem angegebene
CAN-Identifier empfangen wurde.
Die Funktion liefert 0 (Null, FALSE) wenn kein Telegramm empfangen wurde, andernfalls die Anzahl der Telegramme seit der letzten Quittierung (s.U.) .
- crx( <CAN-ID> ) = 0
-
Kommando zur Quittierung des CAN-Empfangs. Damit wird das bereits oben
erwähnte 'Flag' gelöscht, welches unter Anderem auch den
Empfang des nächsten CAN-Telegramms mit dem spezifizierten
CAN-Identifier erlaubt..
Dieses Kommando wird üblicherweise ein einer Event-Definition (Reaktion) verwendet, um den Empfang zu 'bestätigen', nachdem die empfangenen Datenbytes in irgendeiner Form verarbeitet wurden. Ein Beispiel dazu finden Sie im weiter unten erwähnten Beispiel "crx_demo".
- crx( <CAN-ID> ).cnt
-
Liefert den aktuellen Zählerstand für alle empfangenen CAN-Telegramme
mit dem angegebenen Identifier. Im Gegensatz zu den noch folgenden
"Auslese-Funktionen" kann sich der Wert dieses Zählers auch ändern,
wenn das weiter oben erwähnte CAN-Empfangs-Flag noch nicht gelöscht
wurde.
- crx( <CAN-ID> ).len
-
Liefert die Anzahl Datenbytes im zuletzt empfangenen (und noch nicht
'verarbeiteten') CAN-Telegramm. Dieser auch 'DLC' (data length code) genannte
Wert kann zwischen 0 und 8 liegen, da ein CAN-Telegramm Null bis Acht Datenbytes
enthalten kann.
Sobald ein CAN-Telegramm mit dem angegebenen Identifier empfangen wurde, ändert sich dieser Wert nicht mehr, bis der Empfang wie oben beschrieben "quittiert" wurde.
- crx( <CAN-ID> ).b[N]
-
Liefert das Datenbyte (8 bit) mit dem Index N im CAN-Telegramm. N ist der
'Byte-Index', gültiger Bereich 0 bis 7 (!).
Sobald ein CAN-Telegramm mit dem angegebenen Identifier empfangen wurde, ändert sich dieser Wert nicht mehr, bis der Empfang wie oben beschrieben "quittiert" wurde.
- crx( <CAN-ID> ).w[N]
-
Liefert das N-te 16-Bit "word" im CAN-Telegramm. N ist der 'Word-Index',
gültiger Bereich 0 bis 3(!).
Sobald ein CAN-Telegramm mit dem angegebenen Identifier empfangen wurde, ändert sich dieser Wert nicht mehr, bis der Empfang wie oben beschrieben "quittiert" wurde.
- crx( <CAN-ID> ).dw[N]
-
Liefert das N-te 32-Bit "doubleword" im CAN-Telegramm. N ist der
'Doubleword-Index', gültiger Bereich 0 bis 2(!).
Sobald ein CAN-Telegramm mit dem angegebenen Identifier empfangen wurde, ändert sich dieser Wert nicht mehr, bis der Empfang wie oben beschrieben "quittiert" wurde.
-
In der Datei programs/crx_demo.cvt
(innerhalb des Programmiertools) finden Sie ein Test- und Beispielprogramm
für die crx-Funktion.
Das Demo verwendet drei verschiedene 'crx'-Objekte, um die Empfangszähler, Telegrammlängen, und einen Teil der CAN-Datenfelder auf dem internen Display anzuzeigen.
Für das erste crx-Objekt (mit dem 11-bit ID 0x333), wird das Empfangs-Flag sofort wieder gelöscht, sobald ein Telegramm mit dem passenden CAN-ID empfangen wurde, und die Daten verarbeitet wurden (hier: einfaches Umkopieren in eine Variable). Erst durch das Löschen des Empfangs-Flags (d.h. "Quittieren des Empfangs") ist der Empfang des nächsten CAN-Telegramms (mit dem gleichen CAN-Identifier) möglich, bzw. erst danach darf der Empfangspuffer wieder überschrieben werden.
Beim 2. und 3. crx-Objekt wird das Empfangs-Flag absichtlich nicht gelöscht, was dazu führt, dass der Inhalt des Datenfeldes im Empfangspuffer nicht mehr geändert wird, wenn weitere Telegramme empfangen werden (lediglich der Empfangszähler läuft weiter).
Diese Besonderheit ist sehr wichtig, da das Datenfeld nicht überschrieben werden darf, solange Ihr Anzeiprogramm die empfangenen Daten nicht komplett verarbeitet hat. Hier die Event-Definition aus dem Demoprogramm (crx_demo.cvt) :
Event:crx(0x333)
: REM checks if a new message with CAN-ID 0x333 has been received
Reaction:DWord0=crx(0x333).dw[0] : DWord1=crx(0x333).dw[1] : crx(0x333)=0
: REM handle CAN reception for ID 0x333
(Bedenken Sie, was passieren würde, wenn zwischen dem Auslesen des ersten und zweiten Double-Words bereits ein neues CAN-Telegramm mit dem gleichen CAN-ID empfangen würde: Das Ergebnis wäre inkonsistent. Aus dem Grund wird im Demoprogramm erst das Datenfeld gelesen (hier: In die Variablen 'DWord0' und 'DWord1' umkopiert), und danach das CAN-Empfangs-Flag gelöscht, d.h. der Empfang quittiert um den Empfang des nächsten Datenfeldes zu ermöglichen. Nebenbei bemerkt, diese 'Empfangs-Quittierung' hat nichts mit dem CAN-Acklowlege-Bit auf CAN-Layer 2 zu tun.) - Für die crx-Funktion steht nur eine begrenzte Anzahl von CAN-Empfängern (im CAN-Controller) zur Verfügung. Zum Zeitpunkt der Erstellung dieses Dokuments (Februar 2010) konnten mit der crx-Funktion 8 verschiedene CAN-Identifier überwacht werden.
- In Geräten mit CANopen (statt "CANdb") ist die crx-Funktion nicht implementiert .
-
In Geräten ohne 32-Bit-CPU (ARM) ist die crx-Funktion ebenfalls
nicht implementiert .
- Die prinzipielle Syntax des CAN-Sende-Kommandos ist:
-
ctx( identifier, databyte, ...)
- .w or .iw = INTEL WORD,
- .l (kleines "L") oder .il oder .dw = INTEL 'LONG' aka 'doubleword' (32 Bit),
- .mw = MOTOROLA WORD,
- .ml = MOTOROLA 'LONG' ('LONG' = 32 bit),
-
.flt = IEEE 754 single-precision floating point mit INTEL byte order :
1. Byte = Mantisse Bit 7..0; 2. Byte = Mantisse Bit 15..8; 3. Byte = Mantisse Bit 23..16; 4. Byte = Exponent . -
.flt_m = IEEE 754 single-precision floating point mit MOTOROLA byte order
(ein seltener Sonderfall) :
1. Byte = Exponent; 2. Byte = Mantisse Bit 23..16; 3. Byte = Mantisse Bit 15..8, 4. Byte = Mantisse Bit 7..0 . - Einige Beispiele zum "ctx"-Kommando:
-
ctx(0x4D2,1,2,3,4,5,6,7,8) ; bevorzugte Notation mit Komma als Trenner
ctx(0x4D2 1 2 3 4 5 6 7 8) ; alternative Notation ohne Komma
ctx(#1234, 7B 7C 7D 7E 7F 80) ; Dezimaler ID aber hexadezimales Datenfeld
ctx(0x4D2, #123,124,125,126,127,128) ; hexadezimaler ID aber dezimale Datenbytes
ctx(#1234.x, 11,22,33,44,55,66,77,88) ; EXTENDED frame (29-Bit-ID)
ctx(#1234.s, 11,22,33,44,55,66,77,88) ; STANDARD frame (11-Bit-ID)
ctx(0x4D2, 0xABCD.w , #32767.w) ; zwei INTEL-WORDs (jeweils 16 Bit)
ctx(0x4D2, 0x12345678.l , #12345678.l) ; zwei INTEL-LONGs (jeweils 32 Bit)
ctx(0x4D2, 0xABCD.mw, #32767.mw) ; zwei MOTOROLA-WORDs
ctx(0x4D2, 0x12345678.ml,#12345678.ml) ; zwei MOTOROLA-LONGs
ctx(0x4D2, (ti).il, (ti).ml ) ; Zeit im Intel- und Motorola-Format
ctx(0x456, Temperatur.flt,Druck.flt) ; zwei single-Precision-floats
ctx(0x456, (1.0).flt, (2.0).flt ) ; zwei Fliesskomma-Konstanten, Intel-Byte-Reihenfolge
ctx(0x456,(1.0).flt_m,(2.0).flt_m) ; ähnliches mit Motorola-Byte-Order
- Um ein Telegramm über die zweite Schnittstelle zu senden, verwenden Sie das Kommando
-
ctx2( identifier, databyte, ...)
-
Die Parameterliste für dieses Kommando hat dieselbe Bedeutung wie bei
ctx
.
- a2t( < string > ) ("ansi-to-terminal")
-
Wandelt eine Zeichenkette im ANSI-Zeichensatz (8-bit) in den vom Terminal
intern verwendeten Zeichensatz ("DOS") um. Nur bei Geräten mit
erweiterter String-Verarbeitung
verfügbar .
- appl.fname
-
Liefert den kompletten Dateinamen der "Applikation". Dies ist der Name der
*.upt bzw *.cvt-Datei, die in das Terminal geladen wurde.
- appl.name
-
Liefert den Namen der "Applikation" (ähnlich wie appl.fname), allerdings
ohne Pfad und Dateinamenserweiterung.
- hex$(value, num_digits)
-
Wandelt einen Integer-Wert (value, bis zu 32 bit) in einen
Hexadezimalzahl (als String) mit der angegebenen Anzahl Ziffern um
(num_digits; default=8).
- sa[ <text-array-INDEX> ]
-
Liefert eine Zeile des Text-Arrays , definiert
durch den Array-Index (0... < Anzahl Zeilen minus Eins > ).
Um das Text-Array zur Speicherung von numerischen Werten zu verwenden, können Sie die Strings mit der val-Funktion in Zahlen umwandeln.
- sr[ <text-array-REFERENCE> ]
-
Liefert eine Zeile des Text-Arrays , definiert
durch die im Array enthaltene (programmierbare) Referenznummer.
WARNUNG: Bei den meisten Geräten ist diese Funktion recht langsam, weil das ganze Array linear durchsucht werden muß !
- str(<format-string>, <value>)
-
Wandelt einen Zahlenwert in eine Zeichenkette (string). Nur bei Terminals
mit 16-Bit-CPU seit 09/2005 verfügbar ! Der Format-String definiert,
wie die Zahl formatiert werden soll (sic!). Einige Beispiele, mit X=1.234,
die Anführungszeichen im Resultat dienen nur zur Verdeutlichung der
führenden Leerzeichen:
str("**.**",X) -> " 1.23"
(Beachten Sie das führende Leerzeichen, Funktion des Sternchens im Format-String)
str("X=00.***",X) -> "X=01.235"
(Eine NULL im Format-String erzeugt führende Nullen im Resultat)
str("X=** kHz",X) -> "X= 1 kHz"
(nachfolgende Zeichen im Format-String sind erlaubt, allerdings maximal 8) -
- type2str(typ)
-
Wandelt den Code für einen Datentyp (nach CANopen) in einen
lesbaren String um.
Beispiel: type2str(1) liefert "BOOL", da bei CANopen der Datentyp Nummer 1 für "Boolean" steht.
Weitere Informationen zu Datentypen finden Sie hier .
- sa[0]+" "+sa[1]+" "+sa[2]+" "+sa[3]
- Addiert den Inhalt der ersten vier Einträge im String-Array, durch Leerzeichen voneinander getrennt.
- str("***.*",Frequency*0.001)+" kHz"
- Wandelt eine Zahl (hier: Fliesskomma) in einen String um, und hängt eine Einheit an. Das Resultat (=Zeichenkette) könnte so aussehen: "137.7 kHz".
- rtc.yr
-
Jahreszahl, zulässiger Bereich 2000..2000+n.
- rtc.mo
-
Monatszahl des Jahres, Bereich 1..12.
- rtc.da (oder rtc.dm, day of month)
-
Tageszahl des Monats, Bereich 1..31.
- rtc.dw (day of week)
-
Tageszahl der Woche, Bereich 1=Montag..7=Sonntag.
Der Wert 0 zeigt an, daß bei der Berechnung ein Fehler auftrag (i.A. unzulässige Jahreszahl im RTC-Register).
- rtc.dstr
-
Aktuelles Datum (ohne Uhrzeit) als Zeichenkette, Format YYYY-MM-DD (10 Buchstaben)
- rtc.hr
-
Stundenwert, Bereich 0..23.
- rtc.mi
-
Minutenwert, Bereich 0..59.
- rtc.se
-
Sekundenwert, Bereich 0..59.
- rtc.tstr
-
Aktuelle Uhrzeit als Zeichenkette, Format hh:mm:ss (8 Buchstaben)
- rtc.packed
-
Liefert eine Kombination aus aktuellem Datum UND Uhrzeit, in eine
32-Bit-Integer-Zahl gepackt, in dem weiter Unten beschriebenen Format.
- rtc.pack(year,month,day,hour,minute,second)
-
Packt ein beliebiges Kalender-Datum in das weiter Unten beschriebene
Format (ähnlich wie rtc.packed).
Hilfreich zum 'Vergleich' von Kalenderzeiten als Integer-Wert, um zu testen, ob ein bestimmtes Datum+Uhrzeit schon erreicht wurde, usw . - ts0 ... ts3 (timer start)
-
Startet einen der vier Timer mit der als Parameter angegebenen Intervallzeit.
Der Timer zählt dann von diesem Startwert abwärts bis Null; dann
wird ein Timer-Event produziert. Wird der Timer neu gestartet, bevor er
abgelaufen ist, wird kein Event erzeugt. Der maximale Startwert beträgt
65534 ( * 100 ms).
Syntax: ts0(<Timer-Startwert in 100ms>)
Beispiel: ts0(40) startet den ersten Timer für ein 4-Sekunden-Intervall. Nach 4 Sekunden wird das Event "t0" erzeugt, welches Sie in den globalen oder lokalen Event-Definitionen abfragen können. - tr0 ... tr3 (timer reset)
- Rücksetzen eines der vier Timer. Der Timer wird gestoppt, er erzeugt dann kein Event mehr. Intern enthält ein gestoppter Timer den Wert 0xFFFF. Dies ist auch der Default-Zustand nach Power-On.
- t0 ... t3 (t0 ... t9 bei Geräten mit Firmware ab 2012-04-16)
-
Testet ob ein bestimmter Timer abgelaufen ist, d.h. wenn er beim
Abwärtszählen den Übergang von 1 auf 0 durchlaufen hat.
Rückgabewert:
Null (=FALSE) wenn der Timer nicht läuft oder noch nicht den Wert Null erreicht hat,
Eins (=TRUE) wenn der Timer abgelaufen (und noch nicht "quittiert") ist.
Zum Quittieren des "Ablaufs" eines Timers dient das Kommando tr0...tr3 (siehe oben) . Beispiel (in einer Event-Definition):
Ereignis: t2 // is Timer 2 expired ?
Reaktion: tr2 : goto "Timeout" : REM clear timer2 and jump to the "timeout" display
Die Intervalltimer (t0..t3 bzw t0..t9) arbeiten im Single-Shot-Modus. Zum Auslösen periodischer Ereignisse muss der Timer in der Reaktionsmethode neu gestartet werden. Beispiel:
Ereignis: t2 // is timer 2 expired ?
Reaktion: beep(1000,5) : ts2(10) : REM short beep, and restart timer #2 for the next 1-second interval
-
- tv0 ... tv3 (timer value)
-
Liest den aktuellen Zählerstand eines Timers. Dieser Wert läuft
vom Startwert abwärts bis auf Null (ein Schritt in 100 Millisekunden).
- ti (Zeit seit dem Einschalten in 100-ms-Schritten)
-
Liest den aktuellen Stand des "System-Taktgebers" als 32-Bit-Wert. Dies ist
ein 32-bit-Zähler, der alle 100 Millisekunden inkrementiert wird.
Er hängt nicht von den vier User-Timern ab, und kann weder gestoppt
noch umprogrammiert werden ("read-only"). Dieser Timer läuft erst nach
6 Jahren ununterbrochenem Betriebs des Terminals über (von ((2 ^31)-1)
nach (2^31), d.h. der Wert wird dann -als 32-Bit-Integer-Zahl- negativ. Nach
Power-On startet dieser Zähler immer bei Null (er wird nicht von einer
eventuell vorhandenen batteriegepufferten Uhr beeinflusst).
Einige Demo-Programme verwenden diesen Timer (ti) um nach dem Einschalten für kurze Zeit ein Firmenlogo anzuzeigen.
- ti_ms (Zeit seit dem Einschalten in Millisekunden)
-
Liest den aktuellen Stand eines System-Timers als 32-Bit-Wert, skaliert in Millisekunden.
Ähnlich wie die Funktion 'ti' hängt auch dieser Timer nicht von den User-Timern ab, und kann weder gestoppt noch umprogrammiert werden ("read-only").
Ungefähr 2^32/( 40kHz * 60 * 60 ) = 29.8 Stunden nach Power-On läuft das 32-Bit-Timer-Register über, was einen "Sprung" im Wert von 'ti_ms' verursacht. Nach Power-On startet dieser Timer immer bei Null (er wird nicht von einer eventuell vorhandenen batteriegepufferten Uhr beeinflusst).
Einige Demo-Programme verwenden diesen Timer (ti_ms) um 'dynamische' Werte zu berechnen, wobei sich der Wert (statt wie mit 'ti' nur alle 100 ms) einmal pro Millisekunde ändern kann.
In der Script-Sprache steht mit system.ti_ms eine äquivalente Funktion zur Verfügung.
- ti_sec (Zeit seit dem Einschalten in Sekunden, als Fließkommawert)
-
Entspricht (im Display-Interpreter) der Script-Funktion system.timestamp_sec
-
tsim_ms (Zeit seit dem Starten der CAN-Simulation in Millisekunden, als Integer-Wert),
tsim (Zeit seit dem Starten der CAN-Simulation in Sekunden als Fließkommawert, Typ 'double')
-
Diese nur im Programmiertool vorhandene Funktion dient zum Erzeugen zeitabhängiger
Stimuli
für die Simulation von CAN-Signalen. Im Gegensatz zu ti_ms startet der von
tsim_ms (und tsim) bei jedem Anklicken von 'Run' erneut bei Null.
Bei nicht laufender CAN-Signal-Simulation liefern sowohl 'tsim' als auch 'tsim_ms' Null. Sie liefern daher eine bei Null startende Rampenfunktion, die in der Simulation z.B. als Ersatz für eine mit konstanter Geschwindigkeit zurückgelegte Wegstrecke dienen könnte.
-
nbit(<matrix>,<index>)
nb(<matrix>,<index>)
(abgekürzt) - worin: matrix=32-bit-INTEGER, <index>:0=Zähle alle "1"-bits, 1..32: Ermittle die Nummer des N-ten gesetzten Bits (1..32) in der Matrix.
-
nbit(0x1281,0) liefert z.B. den Wert 4
- (denn VIER Bits sind in der angegebenen Matrix gesetzt)
-
nbit(0x1281,1) liefert 1
- (die Nummer des ERSTEN gesetzten Bits in der Matrix, Zählung 1..32, der Wert 0 wäre "kein weiteres gesetztes Bit vorhanden" )
-
nbit(0x1281,2) liefert 8
- (das ZWEITE gesetzte Bit in der Matrix)
-
nbit(0x1281,3) liefert 10
- (das DRITTE gesetzte Bit in der Matrix)
-
nbit(0x1281,4) liefert 13
- (das VIERTE gesetzte Bit in der Matrix)
-
nbit(0x1281,5) liefert 0
- (denn in der Matrix 1281hex sind keine fünf Bits gesetzt)
- @X = nv[0]
- liest einen der 32 Werte. Der zulässige Array-Index ist 0..31. In diesem Beispiel wird der Wert aus nv[0] in die Variable 'X' kopiert.
- @nv[0]=X
- Weist einem der 32 nicht-flüchtigen Speicher einen neuen Inhalt zu.
- nvs
-
Speichert den Inhalt aller 32 nicht-flüchtigen Werte in einem kleinen
EEPROM dauerhaft ab.
Vorsicht: Verwenden Sie das "nvs"-Kommando so sparsam wie möglich, denn die Lebensdauer vieler EEPROMs ist auf 100.000 Schreibzyklen begrenzt.
Wir fanden eine Applikation in der das "nvs"-Kommando nach jedem einzelnen Tastendruck, und zusätzlich bei jeder einzelnen Seitenumschaltung (im "pe"-Event) aufgerufen wurde !!! Dies ist ein sehr schlechter Programmierstil, der wegen der begrenzten Lebensdauer des EEPROMs zum frühzeitigen Ausfall des Terminals führen wird, ferner wird die Applikation durch die ständigen unnötigen "nvs"-Aufrufe sehr träge.
Um die Hardware zu schützen, wird sich in zukünftigen Firmware-Versionen die "nvs"-Funktion intern dagegen zur Wehr setzen, häufiger als einmal in 10 Sekunden aufgerufen zu werden. In Geräten mit interner USV (z.B. MKT-View III, IV) könnte der EEPROM- Schreibvorgang sogar bis zum Abschalten des Gerätes verzögert werden.
- Hinweis für Entwickler:
- Programmiertool-intern werden Elemente im Array nv[], die nicht beim Laden der Applikation
in das EEPROM des Targets übernommen werden sollen, mit dem Wert 0x8000FFEE besetzt.
Dies ist der intern verwendete Code für 'kein gültiger Integer'. Wenn z.B. während eines Simulator-Laufs der Wert per Script überschrieben wird bevor Sie die Applikation als *.cvt- oder *.upt-Datei abgespeichert haben, dann gehen die Änderungen in der oben gezeigten Tabelle (im entsprechenden nv[]-Wert) verloren, und in der gespeichten Datei steht der zuletzt per Zuweisung im Script gesetzte Wert.
Mit anderen Worten: Die Tabelle zeigt immer die aktuellen Werte an, egal ob diese per Tastatur (manuell) oder per Script gesetzt wurden. - Nicht alle Bedienterminals haben eingebaute digitale bzw. analoge Eingänge !
- Für fortgeschrittene Anwendungen, z.B. Frequenzmessung oder Abfrage von Inkremental-Encodern
eignet sich die im folgenden beschriebene Abfrage per Display-Interpreter(z.B. "inp") nicht.
Verwenden Sie stattdessem z.B. einen schnelllaufenden Timer
in der Script-Sprache, mit dem Sie z.B. alle 10 Millisekunden
den Zustand der digitalen Eingänge (system.dwInputs) abtasten können.
-
inp
-
Liefert den Zustand aller im Terminal eingebauten digitalen Eingänge
als Bitkombination (Bit 0 = erster Eingang, usw.).
-
inp1
(seit April 2003) -
Liefert den Zustand des ersten(!) digitalen Eingangs. Das Ergebnis ist Null
(0) oder Eins (1), je nach Klemmenspannung.
-
inp2
- Liefert den Zustand des zweiten digitalen Eingangs. Das Ergebnis ist auch hier Null (0) oder Eins (1).
-
ain1
bzw
ain2
-
Liefert das auf 10 Bit skalierte Ergebnis einer A/D-Wandlung für einen analogen Eingang ('on-Board').
Der Wertebereich ist aus Kompatibilitätsgründen 0...1023 (210-1), selbst wenn der geräteinterne A/D Wandler eine höhere Auflösung bietet.
Die Bestückung des Eingangsspannungsteilers (zwischen Klemme und Eingang des A/D-Wandlers) ist leider hardwareabhängig.
Beim MKT-View II lag der Skalenendwert für beide analogen Eingänge bei 15 Volt (d.h. ain1=1023 bedeutet 15 Volt am ersten analogen Eingang, usw.).
Für andere Geräte entnehmen Sie den Skalenbereich der analogen Eingänge bitte dem Datenblatt.
In der Script-Sprache können analoge Eingänge (onboard) per system.analog_in[0..3] abgefragt werden.
Da einige Geräte (z.B. MKT-View III / IV / V) über A/D-Wandler mit höherer Auflösung verfügen, wird bei der Abfrage per Script das Ergebnis als Fliesskommawert im Bereich 0.0 bis 1.0 geliefert - unabhängig von der Auflösung des Wandlers (MKT-View III : 12 Bit).
Im Programmiertool können die Analog-Eingänge nur emuliert werden. Wählen Sie dazu im Hauptmenü die Funktion
'Optionen' .. 'Simulierte analoge Eingänge', wählen den A/D-Wandler-Kanal, und geben den zu emulierenden Wert in PROZENT (0..100 %) im Editierfeld ein. Zur Simulation beliebiger Wellenformen sind hier auch numerische Ausdrücke zulässig: Mit dem Ausdruck
50 + isin(ti_ms/3)/655
wird für die Simulation im Programmiertool z.B. eine Sinusfunktion mit 100 % Amplitude, und einer Frequenz von ungefähr 1 / ( 1024 Millisekunden * 3 ) = 0.326 Hz erzeugt.
Simulation der analogen Eingänge im Programmiertool, und Anzeige der Analog-Werte (per Script) im Watch-Fenster - rot.f
-
Ermittelt oder beinflußt die aktuelle "Funktion" des Drehknopfes.
Mögliche Werte sind:
rot.f = 0 : "der Knopf erzeugt KEINE CURSOR-TASTEN-CODES"
rot.f = 1 : "der Knopf erzeugt die Tastencodes CURSOR_UP und CURSOR_DOWN" (default nach Power-On)
rot.f = 2 : "der Knopf erzeugt die Tastencodes CURSOR_LEFT und CURSOR_RIGHT"
Hinweis: rot.f beeinflußt nur die Erzeugung von 'Cursor-Tastencodes', aber nicht die folgende Funktion:
- rot.p
-
Liefert die aktuelle Position des Drehknopfs als Integerwert.
Hinweis: Die Zuweisung eines neuen Wertes an 'rot.p' ändert intern nur einen Offset, beeinflußt die aktuelle Menüposition allerdings nicht.
Wird der Drehknopf im Uhrzeigersinn gedreht, wird rot.p inkrementiert, entgegen den Uhrzeigersinn führt zum dekrementieren. Der erste Encoder, der in den Terminals eingesetzt wurde, erzeugte 20 Schritte pro voller Umdrehung (360°).
Hinweis: Wie oben erwähnt, müssen Sie den Encoder nicht "selbst" abfragen, wenn Sie ihn zur Navigation in Menüs oder zum Editieren von Werten einsetzen. Die Terminal-Firmware erledigt das selbst, solange Sierot.f
nicht auf Null setzen.
- rot.l (kleines "L" wie "left")
-
Liefert 1 (= TRUE) wenn der Knopf seit dem letzten Funktionsaufruf LINKS
(im Gegenuhrzeigersinn) gedreht wurde.
Durch den Aufruf dieser Funktion wird ein internes Flag gelöscht, d.h. das Ereignis "links gedreht" quittiert.
- rot.r
-
Liefert 1 (= TRUE) wenn der Knopf seit dem letzten Funktionsaufruf RECHTS
(im Uhrzeigersinn) gedreht wurde.
Durch den Aufruf dieser Funktion wird ein internes Flag gelöscht, d.h. das Ereignis "rechts gedreht" quittiert.
- rot.lb, rot.rb
-
Ähnlich wie
rot.l
bzw.rot.b
, mit dem Unterschied dass diese "gepufferten" Funktionen (b=buffered) den Wert 1 (=TRUE) für jeden einzelnen Schritt des Drehknopfes liefern (d.h. hier wird intern mitgezählt). Wenn beispielsweise der Knopf seit der letzten Abfrage 5 Schritte (schnell) nach links gedreht wurde, liefertrot.lb
fünfmal nacheinander den Wert "TRUE", währendrot.l
in diesem Fall nur einmal TRUE liefert (weilrot.l
nicht die Anzahl der Schritte berücksichtigt, sondern nur die Drehrichtung als solche).
Diese Funktion eignet sich besonders für die Seitenumschaltung per Drehknopf, wenn der Bediener durch einen "schnellen Dreh" eine bestimmte Anzahl von Seiten weiterschalten will.
Durch den Aufruf dieser Funktionen werden interne Flags gelöscht, d.h. das Ereignis "links/rechts gedreht" quittiert.
- Ereignis-Behandlungs-Methoden, die oft aus "goto" oder "call" -Kommandos bestehen
- Grafik-Anzeige-Kommandos für komplexe Anzeigeseiten
- Kommandos zum Steuern der Anzeige-LEDs und Hintergrundbeleuchtung,
- Kommandos zum Steuern der digitalen Ausgänge des UPT's (!)
- Kommandos zum Steuern der vier "User"-Timer
- das Zuweisungs-Kommando (assign) um einer Variablen einen neuen Wert zuzuweisen,
- Das CAN-Transmit - Kommando zum Senden eines einzelnen, beliebigen CAN-Telegrams (gefährlich!),
- PDO-Kommandos (und -Funktionen) zum "programmierten" Zugriff auf Prozeßdatenkanäle,
- SDO-Kommandos und -Funktionen zum Zugriff per SDO-Kanal ohne Einsatz spezieller Variablen,
- OBD-Kommandos und -Funktionen zum Zugriff auf das eigene CANopen-Dictionary,
- Kommandos zum Aufruf von Funktionen im SYSTEMMENÜ (sys.xxxx)
- Kommandos für die Drehknopfabfrage, Page-Scan-Modus
- Kommandos zum Steuern des Diagramms (nur bei bestimmten Terminals, z.B. MKT-View)
- Ansprechen der seriellen Schnittstelle, oder (optional) Empfang von GPS-Daten (NMEA0183)
- andere spezielle Kommandos für verschiedene Zwecke (CAN-Reset, Pieper, Logger, Popup-Meldungen, etc).
- audio.xxx : Kommandos zum Steuern des Audio-Recorders
- Applikation: reset
- beep : Kommando zum Erzeugen von Tönen mit dem internen Summer
- Bildschirmausgabe: draw mode, display inversion
- CAN reset, CAN transmit, CAN receive .
- csim. : Modul-Präfix des CAN-Simulators. Existiert nur im Programmiertool.
- dim : ändert die Dimension eines Arrays (mit bis zu 3 Dimensionen)
- disp.<Name>.<Komponente> ermöglicht den Zugriff auf Anzeigeelemente der aktuellen Seite
- goto, call, return : Umschalten zwischen Anzeigeseiten (!)
- gps : Kommandos zum Konfigurieren des GPS-Empfängers
- Grafik: co(color), icon, line, pixel, frame, fill, cls, popup, gf, disp .
- hk : Handle Key, fügt einen beliebigen Tastencode in den Tastaturpuffer ein
- LED's, backlight control, digital outputs
- logger : Befehle zum Steuern des optionalen CAN-Loggers
- menu mode, menu item
- nscan (node-scan) : Sonderfunktion zum Scannen eines CANopen-Netzwerks
- nvs(non-volaile storage) : Nichtflüchtiges Speichern von numerischen Werten im EEPROM
- obd (object dictionary) : Zugriff auf das "eigene" CANopen-Objektverzeichnis
- Page-Scan : Befehle zum automatischen oder manuellen Umschalten zwischen Bildschirmseiten
- power (nur für alte Geräte, z.B. "MKT-View PLUS") : Power-Flag.
Musste beim MKT-View I von der Anwendung gesetzt werden, um u.A. den Logger(!) zu aktivieren. - REM: Anfang eines Kommentars in einer Kommandozeile
- rot.xxx : Drehknopf konfigurieren (rotary knob)
- script.XYZ : Aufruf eines in der Script-Sprache geschriebenen Unterprogramms namens XYZ (Prozedur).
- sdo (service data object) : Zugriff per auf ein externes CANopen-Gerät per SDO
- sys.menu, sys.show_icons, sys.edit_contrast , sys.reset und weitere Kommandos für System-Einstellungen
- signals.timeout, signals.tx_enable : Optionen für CAN-Signale ("CANdb").
- Timer-Prozeduren
- udp.xyz : Kommandos (und Funktionen) zur Kommunikation per Ethernet / UDP (User Datagram Protocol)
- var(<name>) : Zugriff auf Variablen per Referenz
- vkey.xyz : Kommandos zum Steuern der virtuellen Tastatur (nur für Geräte mit Touchscreen)
- Syntax:
-
goto: g<page-number> oder g"page-name"
call: c<page-number> oder c"page-name"
return: r
- Beispiele:
-
g(0) : REM schaltet zur ersten(!) Anzeigeseite um
g(pn+1) : REM schaltet von der aktuellen zur nächsten Anzeigeseite um
g(pcnt-1) : REM schaltet zur letzten(!) Anzeigeseite um
g"MainMenu" : REM springt zu einer Seite namens "MainMenu"
-
- Syntax:
-
mm( <neuer Menü-Modus>)
mi( <neuer Menü-Index>) - 0 = "aus", weder Auswahlbalken noch blinkender Cursor sind sichtbar
- 1 = "Selektieren / Navigieren", der aktuelle Menüpunkt (bzw Displayzeile mit Editierfeld) ist invertiert, der Bediener kann den Auswahlbalken mit den Cursortasten zwischen verschiedenen Menüpunkten bewegen
- 2 = "Editieren", der blinkende Cursor ist auf einer editierbaren Ziffer in einem Editierfeld sichtbar. Nur möglich, wenn die selektierte Displayzeile ein Editierfeld enthält !
- 8 = "Editieren abbrechen", sonst wie mm(0) .
- 9 = "Editieren abbrechen", sonst wie mm(1) .
- Syntax:
- led( <led-number>, <led-blink-pattern> )
- or abbreviated:
- le ( <led-number> , <led-blink-pattern> )
- Parameter:
- <led-number> ist der Index(!) der LED, die angesteuert werden soll: 0=erste LED, 1=zweite LED, ....
- 0x00 LED ist AUS (Defaultzustand nach Power-On)
- 0xFF LED ist dauernd AN
- 0xF0 LED blinkt langsam: 400ms AN, 400ms AUS und so weiter
- 0x55 LED blinkt schnell: 100ms AN, 100ms AUS und so weiter
- 0x01 LED gibt "kurze Blitze" ab: 100ms AN, 700ms AUS und so weiter...
- Syntax:
- led( <led-number>, <led-blink-pattern>, [ <red intensity>, <green intensity>, <blue intensity> ] )
-
led( 0, 0xFF, 0xFF, 0xFF, 0xFF ) : REM 1st LED bright white, permanently on
led( 1, 0x55, 0xFF, 0x00, 0x00 ) : REM 2nd LED bright red, flashing rapidly
led( 2, 0xF0, 0x00, 0xFF, 0x00 ) : REM 3rd LED bright green, blinking slowly
led( 0, 0x0F, 0x00, 0x00, 0xFF ) : REM bright blue, blinking slowly (2nd phase)
led( 1, 0xFF, 0xFF, 0xFF, 0x00 ) : REM bright yellow
led( 2, 0xFF, 0xFF, 0x00, 0xFF ) : REM bright purple
led( 0, 0xFF, 0x00, 0xFF, 0xFF ) : REM bright cyan
- Das Demoprogram "MV2_DEMO.CVT" (MKT-View II Demo) enthält einige der oben gezeigten LED-Ansteuerungs-Kommandos.
- Da die RGB-LEDs nicht direkt mit dem Mikrocontroller verbunden sind (sie verwenden stattdessem eine interne serielle Schnittstellt), kann es eine kurze Zeit dauern, bis der Befehl zum Umschalten der LED-Farbe effektiv wird. Aus dem Grund sollten Sie Blinkeffekte nicht durch schnelles Ein- und Ausschalten der LED per Interpreterscript realisieren, sondern dazu das Blinkmuster verwenden (zweiter Parameter des LED-Kommandos).
- Im "Dunkel"-Zustand im Blinkzyklus verlöschen die LEDs beim MKT-View II nicht komplett. Stattdessem werden alle drei Farbkomponenten auf etwa 6 Prozent der maximalen Helligkeit gesetzt, um eine Hintergrundbeleuchtung (unter den drei Funktionstasten) zu realisieren.
- In der Script-Sprache steht ein ähnlicher Befehl (system.led) zum Ansteuern der RGB-LEDs zur Verfügung.
- Syntax :
-
bl(1) setzt die minimal mögliche Hintergrundbeleuchtung
bl(255) setzt die maximal mögliche Helligkeit
bl(1..254) setzt die Beleuchtung auf "mittlere Helligkeit" in verschiedenen Stufen (nur bei bestimmten Terminals möglich) - Kommandos zum Steuern der Tastaturbeleuchtung:
-
kl(0) Schaltet die Tastaturbeleuchtung ab, und stoppt die Zeitautomatik.
kl(N) Schaltet die Tastaturbeleuchtung für N Sekunden ein, und startet die Zeitautomatik. Beispiel: kl(60) schaltet das Licht für (mindestens) 60 Sekunden ein. - Beispiel (in einer Kommandozeile des Interpreters, d.h. im Anzeigeprogramm, nicht im Script-Quelltext):
-
script.SetLanguage(LANG_GER)
- Beispiel (aus dem Script-Quelltext der Applikation "Multi-Language-Test" ) :
-
const
// 'language codes' :
LANG_ENG = 10000; // internal language code for 'english'
LANG_GER = 20000; // internal language code for 'german'
LANG_ARA = 30000; // internal language code for 'arabian'
endconst;
...
//------------------------------------------------------------
proc SetLanguage( int iLanguage ) // Anwenderdefinierte Prozedur .
// Setzt die neue 'Sprache' (LANG_GER, LANG_ENG, etc).
// Aufruf aus dem DISPLAY INTERPRETER, z.B.
// als Reaktion auf die Betätigung eines Buttons
// im Anzeigeprogramm .
if( language != iLanguage ) then
// Display language has been modified:
language := iLanguage; // set NEW language in a global var
display.exec("cls"); // redraw the entire display page
endif;
endproc; // end SetLanguage()
- icon (ic) zeichnet ein kleines Bild ("icon")
-
line (li) zeichnet eine Linie.
Kann bei Geräten mit 32-Bit-CPU durch mit dem Grafik-Editor erstellbaren Polygonen ersetzt werden.
Zum Unterstreichen von Texten bietet sich das einfacher zu verwendende HTML-Tag <u> .. </u> an. -
pa(X, Y, Text ) druckt eine Zeichenkette an der spezifizierten Koordinate (X,Y) ins Display ("print at").Nur für UPT515, nicht mehr verwenden ! - pixel (pi) Setzt ein einzelnes Pixel
- frame(fr) zeichnet einen rechteckigen Rahmen
- fill(fi) zeichnet ein gefülltes Rechteck
- gf zeichnet ein gefülltes Rechteck mit Farbverlauf ("gradient fill")
- cls(cl) löscht den Bildschirm und zeichnet alle "Anzeigefelder" neu
- popup(..) öffnet ein kleines "Pop-Up-Fenster" im Vordergrund
- co( <fg>, <bg> ) setzt Vordergrund- und Hintergrundfarbe für die danach folgenden Befehle
- dm Setzt den Zeichenmodus (draw mode) für graphische Ausgaben.
- zo(X,Y) setzt den Zoomfaktor.
- Beispiel (aus dem "Dead-Pixel-Testprogramm" für MKT-View II, programs/DeadPix1.cvt, Befehl für den "speziellen Hintergrund" ) :
-
co(BGCol,BGCol) : fi(0,0,xmax,ymax,0,0)
- disp.<NAME>.<KOMPONENTE> dient zum Zugriff auf ein bestimmtes Anzeigeelement ("display element"). Damit können während der Programmlaufzeit Parameter wie z.B. Farbe, Position, Format-String geändert werden, die normalerweise nur beim Entwurf im Programmiertool definierbar sind (allerdings nur auf der aktuellen, vom FLASH ins RAM geladenen Anzeigeseite). Details zu dieser Funktion finden Sie hier .
- rgb( <Rot>, <Grün>, <Blau> ) : Funktion für die RGB-Farbmischung. Details und Beispiele hier.
- Syntax:
- co(<fg>,<bg>)
- Beispiel:
-
ic("stopbtn1",280,10)
- Beispiel zum Zeichnen eines transparenten Icons (funktioniert nur bei Displays mit 8 Bit/Pixel) :
-
ic("mkt_logo",100,40,t=7)
- li( <x1>, <y1>, <x2>, <y2> )
- Für alle Geräte mit grafikfähigem Display. Zeichnet eine dünne Linie (ein Pixel breit).
- li( <x1>, <y1>, <x2>, <y2>, <width> )
- Für Geräte mit 16-Bit-CPU und 320*240-Pixel-Display. Zeichnet eine Linie mit der angegebenen Stärke ("width" gemessen in Pixel).
- Syntax:
- pi( <x>, <y> )
- Syntax:
- fr( <x1>, <y1>, <x2>, <y2> )
- darin ist
-
x1 = linker Rand
y1 = oberer Rand
x2 = rechter Rand
y2 = unterer Rand - Syntax:
- fi( <x1>, <y1>, <x2>, <y2> [ , <pattern0> , <pattern1>] )
- darin ist
-
x1=left border, y1=top, x2=right border, y2=bottom,
pattern1, pattern2 = optional "filling" pattern, default=0xFF - Einige Beispiele für "sinnvolle" Füllmuster:
-
fi(10,10,30,20, 0xFF, 0xFF) zeichnet ein "massives schwarzes" Rechteck
fi(10,22,30,30, 0xFF, 0x00) zeichnet ein Rechteck aus dünnen horizontalen Linien
fi(10,32,30,40, 0x55, 0x55) zeichnet ein Rechteck aus dünnen vertikalen Linien
fi(10,42,30,50, 0x55, 0xAA) zweichnet ein grau schattiertes Rechteck (50 Prozent Schwärzung) - Syntax:
-
di=0 keine Display-Inversion, schwarze Schrift auf weißen Grund
di=1 Display-Inversion, weiße Schrift auf schwarzem Grund - Löschen des kompletten Bildschirms
- Neuzeichnen aller auf der aktuellen Seite definierten Anzeigezeilen
- Erst nachdem der Neu-Aufbau komplett ist, wird die Grafik auf das LC-Display übertragen.
- Syntax:
-
gf( <x1>, <y1>, <x2>, <y2>, <Orientierung>,
<Farbe 1>, <Farbe 2> )
- Darin ist ..
-
x1=left border, y1=top, x2=right border, y2=bottom,
Orientierung: Reserviert (noch keine Funktion). Eines Tages wird mit diesem Wert spezifiziert, ob der Farbverlauf von Oben nach Unten verläuft (=default), oder von Links nach Rechts, etc.
Farbe 1 = Farb-Startwert (i.A. für die obere Kante des Rechtecks)
Farbe 2 = Endwert (i.A. für die untere Kante des Rechtecks)
- Beispiel zum Füllen des kompletten Bildschirms mit einem Farbgradienten von Grün nach Blau:
-
gf( 0, 0, xmax, ymax, 0, #070, #007 )
- xmax
- Liefert die maximale X-Koordinate (horizontal).
x=0=linker Bildschirmrand, x=xmax (z.B. 319 oder 479) = rechter Bildschirmrand.
- ymax
- Liefert die maximale Y-Koordinate (vertikal).
y=0=oberer Bildschirmrand, y=ymax (z.B. 239 oder 271) = unterer Bildschirmrand. - pscan=N
- Aktiviert den timergesteuerten Page-Scan-Modus. N ist das Seiten-Umschalt-Intervall in Sekunden. Mit "pscan=5" wird z.B. alle 5 Sekunden zur nächsten Seite der Scan-Sequenz umgeschaltet. (Welche Seiten zur Scan-Sequenz gehören sollen wird mit dem Programmiertool definiert).
- pscan=0
-
Schaltet den timergesteuerten Page-Scan-Modus aus. Dies ist der
Default-Zustand nach dem Einschalten !
- pscan.next, pscan.prev
-
Schaltet von der aktuellen Seite sofort auf die nächste, zur Scan-Sequenz
gehörenden Seite um, bzw. mit "pscan.prev" zur vorhergehenden Seite
(unabhängig vom Zustand des oben beschriebenen
Page-Scan-Timers).
Diese Kommandos sind z.B. zum Durchblättern der "Hauptseiten" per programmierbarer Buttons vorgesehen (als Reaktion auf die Betätigung eines Buttons, oder -sofern vorhanden- Drehen des Knopfes, etc). Siehe Beispiel unter "Hinweise und Tips".
- Wenn eine Seite zur Page-Scan-Sequenz gehören soll, setzen Sie das Checkmark "include this page in the pscan-sequence" im Register Display Page Header. Nur Anzeigeseiten, bei denen dieses Flag gesetzt ist, werden beim Page-Scan-Zyklus aufgerufen.
-
Zum manuellen Page-Scan per Drehknopf können z.B. die folgenden
globalen Event-Definitionen verwendet werden:
Ereignis Reaktion rot.lb
pscan.prev
rot.rb
pscan.next
-
Um den timergesteuerten Page-Scan-Modus ein- und auszuschalten,
bietet sich ein Softkey an (programierbarer
"Button"). Verwenden Sie z.B. die folgende Anweisung
als Button-Reaktions-Methode:
pscan=5-pscan
Wie funktioniert dies ? 'pscan' kann (formell) wie eine Variable verwendet werden, nach dem Einschalten ist der Wert 0 (Null). Mit der genannten Anweisung wird aus 0 eine 5 (= 5 Sekunden), auf 5 wird 0, und so weiter. Sie können auch die Beschriftung des Buttons abhängig vom Zustand des Page-Scan-Modus definieren, wie im folgenden Beispiel (Quelltext einer Button-Definition):
\btn(55,50,0x002,(pscan>0)?"Stop":"Scan",59,pscan=5-pscan)
- Um den aktuellen Stand des Page-Scan-Timers abzufragen, verwenden Sie die numerische Funktion "pscan.timer" . Dies ist ein Count-Down-Timer. Beim Erreichen des Zählerstands 0 (Null) erfolgt die nächste Page-Scan-Seitenumschaltung. Die Einheit des Zählers ist 0.1 Sekunden.
- Beim Betätigen einer beliebigen Taste wird der Page-Scan-Timer automatisch mit der doppelten Intervallzeit neu geladen, d.h. Page-Scan "pausiert" solange der Bediener Tastatureingaben macht; Page-Scanning wird aber nicht (automatisch) abgeschaltet.
- In der Script-Sprache wurde "pscan" durch
display.page_scan ersetzt.
- Das 'at'-Zeichen vor der zugewiesenen Variable war nur bei sehr alten Geräten erforderlich.
Dank des Zuweisungs-Operators ( := statt = ) ist für den Interpreter klar, an welchen
Stellen es sich um eine Zuweisung, und nicht um einen Vergleich handelt. Das 'at' ist daher
überflüssig und sollte im Interesse einer besseren Lesbarkeit nicht mehr verwendet werden.
- Sie können nur Werte an Variablen zuweisen, die in der Variablen-Tabelle mit dem Programmiertool definiert wurden (es gibt keine "automatischen" Variablen wie in der Programmiersprache "BASIC").
- Sie sollten keine Werte an Variablen zuweisen, die ihren "Eingang" von einem Kommunikationskanal erhalten, weil der zugewiesene Wert i.A. schnell wieder vom Kommunikationskanal (per CAN) wieder überschrieben werden.
- Auch einige im Interpreter fest eingebaute Kommandos können mit einer formellen Zuweisung aufgerufen werden. Wenn der Operand hinter dem at-Zeichen mit einem Kleinbuchstaben beginnt, handelt es sich nicht um eine (benutzerdefinierte) Variable sondern um ein "variablen-ähnliches Interpreterkommando".
-
out(<8-bit-value>)
- Mit diesem Kommando können Sie alle digitalen Ausgänge gleichzeitig schalten. Bit 0 steuert den ersten Ausgang , u.s.w.
-
outN(<neuer Zustand)
- Schaltet einen einzelnen digitalen Ausgang (Nummer N, 1...8)
-
out(<output_nr>, <new_state> )
- Schaltet ebenfalls einen einzelnen digitalen Ausgang (mit output_nr 0...7). Welcher Kanal geschaltet werden soll, kann hier als Variable übergeben werden.
- out(0xFF) schaltet alle Ausgänge ein
- out(0x00) schaltet alle Ausgänge aus
- out(0, 1) schaltet den ersten(!) Ausgang ein
- out1(1) schaltet ebenfalls den ERSTEN(!) digitalen Eingang ein (Syntax und Kanalnummer wie bei der inp-Funktion).
- out(3, 0) schaltet den vierten (!) Ausgang aus
- out4(0) schaltet ebenfalls den vierten (!) Ausgang aus
- out(out^0x02) invertiert den Zustand des zweiten digitalen Ausgangs
- out16(!out16) invertiert den Zustand des sechzehnten Ausgangs.
-
Es gibt nicht nur das Kommando "out" zum Setzen der digitalen
Ausgänge, sondern auch eine Funktion "out" die den aktuellen
Zustand der digitalen Ausgänge(!) zurückliest - nicht zu
verwechseln mit der Funktion "inp" .
Beispiel:out2
liefert den Wert 1 (Eins, als Funktion) wenn der
zweite Ausgang gesetzt ist, andernfalls 0 (Null). - Nicht alle Geräte, die als "UPT" bzw "MKT-View" eingesetzt werden, haben eingebaute digitale Ausgänge. Um digitale Ausgänge eines speziellen I/O-Erweiterungsmoduls anzusteuern, benötigen Sie einen CANopen-Kommunikationskanal.
- Die Anzahl verfügbarer digitaler Eingänge, und die zulässigen Eingangspegel entnehmen Sie bitte der Hardwarebeschreibung Ihres Terminals. Falls dies ein UPT515 ist, sind dort wahrscheinlich vier digitale Ausgänge und sechs digitale Eingänge vorhanden.
- Die digitalen Ein- und Ausgänge der UPTs können vom Programmiertool "simuliert" werden. Die aktuellen Zustände werden als runde "LEDs" im Simulatorfenster angezeigt. Die grünen LEDs sind die Eingänge, die gelben die Ausgänge. Dass bei bestimmten Geräten (z.B. "MKT-View") Ein- und Ausgänge (leider!) auf identischen Anschlußklemmen liegen, berücksichtigt der Simulator allerdings nicht.
-
sys.audio_vol
-
Reads or writes the audio output volume aka "Speaker Volume". The same parameter
can be modified (and permanently saved) in the terminal's
system menu.
The function is only implemented in certain terminals with an analog audio output - see feature matrix .
-
sys.click_vol
- Nur für Geräte mit Touchscreen. Mit dieser Funktion (formell: Variable) kann die normalerweise im System-Menu eingestellte Klick-Lautstärke gelesen bzw. modifiziert werden.
-
sys.lost
-
Liefert die Summe aller seit dem Einschalten "verlorenen" CAN-Telegramme,
nicht verarbeiteter Interrupt-Anforderungen, verlorene Zeichen von der seriellen
Schnittstelle, verlorene Ereignisse, usw. Dieser Wert darf nur gelesen werden.
Im Ideallfall ist (und bleibt!) er Null. Mögliche Ursachen, wenn dieser
Zähler ungleich Null ist, sind...
- empfangene CAN-Telegramme, die (wegen CPU-Überlastung) vom CAN-Logger nicht verarbeitet werden konnten
- CAN-Telegramme, die eigentlich vom Protokoll-Handler des Terminals verarbeitet werden sollten, die aber wegen eines Pufferüberlaufs verloren gingen
- Tastaturereignisse, die wegen eines Pufferüberlaufs verloren gingen (i.A. wegen zu langsamer Hauptschleife)
- Zeichen die von der seriellen Schnittstelle empfangen wurden, die aber -auf RS232-Treiber oder 3964R-Protokoll-Ebene- verloren gingen
- Interrupts an die CPU die wegen zu vieler noch anstehender Interrupt-Anforderungen von der CPU nicht verarbeitet werden konnten (normalerweise durch hohe Buslast verursacht)
-
sys.menu(x)
-
Dieses Kommando kann verwendet werden, um eine bestimmte Funktion im
"System-Menue" der Terminals aus dem Anwenderprogramm (der "Applikation")
aufzurufen. Diese Funktion diente in erster Linie zu Tests während der
Entwicklung des Terminals beim Hersteller. Weitere Informationen und eine
Liste der zulässigen Menü-Nummern (x) finden Sie
hier (nur in englischer Sprache).
-
sys.show_icons
- Nur in Geräten mit 32-Bit-CPU verfügbar (seit 2008). Mit diesem Kommando wird die Anzeige sogenannter "System-Icons" aktiviert, mit der z.B. der Zustand der Speicherkarte, der Spannungsversorgung, des CAN-Busses, und des CAN-Loggers angezeigt werden kann. Details finden Sie in diesem Dokument.
-
sys.edit_contrast
-
Diente bei alten Geräten mit Passiv-STN-Display (z.B. MKT-VIEW "Plus") zum Optimieren
der LCD-Kontrast-Steuerung. Die genaue Funktion und Bedienung des
"LCD-Kontrast-Kennlinien-Editors" wird in einem
gesonderten Dokument beschrieben.
Das Kommando wurde damals verwendet, um dem Bediener den Aufruf
dieser Einstellfunktion aus der Applikation zu ermöglichen,
ohne daß sich der Bediener durch das Systemmenü des Terminals "hangeln" musste.
Bei moderneren Geräten mit TFT- oder OLED-Display entfällt dieser Anachronismus.
-
sys.poff
-
Schaltet das Gerät ab. Hinweis: Dies funktioniert nur bei bestimmten
Geräten (z.B. MKT-View II). Die meisten älteren Geräte
können sich -hardwarebedingt- nicht selbst abschalten.
Wie das Gerät danach wieder eingeschaltet werden kann, hängt von der verwendeten Hardware, und z.T. von den Einstellungen im System-Menü ab. Details dazu finden Sie im Dokument Nr. 85115 (PDF), Kapitel "Power on/off" .
In der Script-Sprache existiert ein ähnlicher Befehl : system.shutdown. -
sys.t_shutdown( < Dauer bis zum Öffnen der Shutdown-Meldung in 0.1-Sekunden-Schritten > )
-
Dieses sehr spezielle, und extrem selten verwendete Sonderkommando dient
zum Einstellen der Zeit, die der Power-Knopf gedrückt werden muss, bis
das sog. "Shutdown-Menü" (u.a. zum Abschalten des Gerätes) angezeigt
wird. Die Einheit ist 0.1 Sekunden; der Default-Wert beträgt 30 (* 0.1
Sekunden).
Das Kommando funktioniert nur bei Geräten, die tatsächlich per Tastendruck ein- und ausgeschaltet werden können (wie z.B. das "MKT-View II").
Hinweis: Wird die Power-Taste für mehr als zehn Sekunden gedrückt, schaltet sich das Terminal IMMER ab (ohne Shutdown-Screen). Diese Funktion ist durch die Hardware vorgegeben (Not-Abschaltung wie beim "gecrashten Notebook"); sie kann softwaremäßig nicht geändert werden.
Siehe auch: sys.poff (um das Gerät programmgesteuert, ohne Shutdown-Menü, abzuschalten). -
sys.reset
-
Führt einen System-Reset durch, d.h. die Terminal-Firmware wird "neu
hochgefahren". Dies kann in bestimmten Fällen nötig sein, z.B.
um das verwendete CAN-Protokoll neu zu initialisieren, oder um aus dem
"CAN-Gateway"-Modus wieder in den Normalbetrieb umzuschalten. (Das hier gemeinte
CAN-Gateway ist eine proprietäre Sonderfunktion eines bestimmten Terminals,
die hier nicht weiter beschrieben wird. Dokumentation ist beim Autor
erhältlich).
Bei Geräten mit Script-Sprache kann mit diesem Befehl wieder aus der per system.exec(<Dateiname.cvt>) von der Speicherkarte nachgeladenen Applikation wieder in den 'App-Selektor' zurückgeschaltet werden. -
sys.set_time
-
Öffnet eine Anzeigeseite auf der die
Echtzeituhr eingestellt werden kann (Datum und Uhrzeit).
Nur bei Terminals vorhanden, in denen eine batteriegepufferte Echtzeituhr
eingebaut ist.
Hinweis: Im Systemmenü des Terminals wird das Format nach ISO 8601 verwendet. Das Datumsformat ist YYYY-MM-DD (DD=Tag), das Zeitformat hh:mm:ss (Stunde:Minute:Sekunde). Suchen Sie im Web nach "ISO 8601", wenn Sie weitere Informationen zu dieser segensreichen Normierung benötigen. Der Autor dieses Dokuments empfiehlt dringend, dieses Format auch in Ihrer eigenen Anwendung einzusetzen, auch wenn Sie vielleicht kein Programmierer sind. Ein internationaler Anwender wird unter der Angabe "12.05.03" mit Sicherheit nicht das Datum "12. Mai 2003" vermuten !
-
sys.vsup
-
Liefert die aktuelle Versorgungsspannung des Terminals, gemessen
"kurz hinter der Verpolschutzdiode". Der Wert ist daher nicht sehr präzise.
Sie können diese Funktion zu Diagnosezwecken einsetzen, wenn das Terminal
z.B. aus dem Bordnetz eines KFZ versorgt wird. Einheit: 0.1 Volt, d.h. der
Wert 123 bedeutet "12.3 Volt".
-
sys.vcap
-
Ähnlich wie sys.vsup, hier wird allerdings die Spannung an den
Pufferkondensatoren in der internen USV
(Unterbrechungsfreie Stromversorgung) gemessen. Einheit: Millivolt.
Das Maximum liegt (beim MKT-View II) knapp
unter 5000, d.h. 5 Volt. Bei Geräten ohne interne USV (z.B. MKT-View
I) liefert diese Funktion den Wert Null.
-
sys.temp
- Liefert die aktuelle Temperatur im Terminal, gemessen in der Nähe des Displays. Die Terminal-Firmware verwendet diesen Wert für die automatische Kontraststeuerung. Sie können diesen Wert zu Testzwecken in Ihrer Anwendung auf dem Display anzeigen, etc. Der von der Funktion "sys.temp" zurückgegebene Wert ist eine Integerzahl mit dem Skalierungsfaktor 0.1 °C, der Wert -185 bedeutet daher z.B. "-18.5 Grad Celsius".
-
sys.alight
(ambient light sensor value) -
Liefert den aktuellen Messwert des Beleuchtungssensors (0=dunkel ...
255=Sonnenlicht). Existiert nur in bestimmten Geräten, z.B. MKT-View
II .
Ein Beispiel für den Einsatz dieser Funktion zur automatischen Umschaltung zwischen Tag- und Nachtdesign finden Sie hier. - SDO-Fehlercodes
- CANopen-Objekte im Terminal (nur für Geräte mit CANopen)
- SDO-Fehlercodes (nur für Geräte mit CANopen)
- Oft gestellte Fragen (FAQ; separates Dokument)
- Troubleshooting
- Glossar
- Kontaktaufnahme mit dem Autor
- Versionshistorie der UPT-Familie
Verschlüsselung der CVT/UPT-Datei (Applikation)
Beim Abspeichern der Applikation als *.CVT- bzw. *.UPT-Datei können Daten (Programmcode, Anzeigeseiten, aber auch aus *.DBC oder AUTOSAR importierte Definitionen) mit einem selbstdefinierten Passwort verschlüsselt werden. Wählen Sie dazu im Programmiertool vor dem Abspeichern im Menü 'Datei' die Funktion 'Passwortschutz' ... 'Passwort aktivieren'.
Dialog für die Eingabe eines Passworts für die Dateiverschlüsselung
Beides (Passwort und Hinweis) werden in verschlüsselter Form im Dateikopf abgelegt.
- Hinweis
- Bewaren Sie das Passwort sorgfältig auf. Wir (MKT Systemtechnik) haben
keine Möglichkeit, ein verlorenes Passwort aus der *.CVT- oder *.UPT-Datei
wiederherzustellen.
Passwörter können zwar optional auf Wunsch des Benutzers vom Programmiertool auf dem PC 'lokal' gespeichert werden, und liegen dann in gescrambelter Form in der Datei MKT_CANdbTerminalProgTool.ini bzw. MKT_CANopenTerminalProgTool.ini vor, sind aber ohne Kenntnis des Scrambling-Algorithmus ebenfalls nicht wiederherstellbar.
Die Geräte-Firmware kann aus dem gescambelten Passwort einen Schlüssel zum Decodieren der Daten (Programmcode, Anzeigeseiten, Signaldefinitionen, ..) erzeugen, so daß zum Betrieb des Gerätes mit einer verschlüsselten Applikation keine Passworteingabe durch den Bediener nötig ist.
Beim Auslesen der Applikation aus dem Flash des Gerätes (z.B. per CAN) bleibt die Verschlüsselung erhalten. Auch auf diesem 'Umweg' kommen Sie daher nicht an ein verlorenes Passwort heran !
Handbücher zu den programmierbaren Terminals (PDF-Format)
Die folgenden Verweise führen direkt auf die Seiten des Herstellers (MKT). Nur so ist sichergestellt, daß Sie die aktuellste Version des Dokuments verwenden. Wenn Ihr Rechner nicht mit dem Internet verbunden ist, finden Sie einen Teil dieser Dokumente nach der Installation des Programmiertools im Unterverzeichnis 'DOKU'. Alternativ finden Sie eine Übersicht auf der "MKT-CD" (ebenfalls online verfügbar).- Dokument Nr. 85110 : Handbuch zum UPT-Programmiertool
- Dokument Nr. 85111 : Zusatzinformationen für Terminals mit Parametrierung per "CANdb" (mit Schnelleinstieg für MKT-View+, MKT-View II, ..)
-
Dokument Nr. 85113 :
Beschreibung
des Konfigurationstools für den CAN-Logger
- Dokument Nr. 85114 : Installation eines CAN-Bus-Interfaces auf dem (Windows-)PC
- Dokument Nr. 85115 : Beschreibung und Bedienung des Systemmenüs (im Terminal)
- Dokument Nr. 85116 : Spezifikation des Download-Protokolls (nur für Entwickler, die das Terminal aus eigenen Tools laden wollen)
- Dokument Nr. 85118 : Beschreibung des optionalen CAN-Snoopers (ein in den MKT-Views integrierter CAN-Bus-Monitor)
-
Dokument Nr. 85122 :
Beschreibung
der Script-Sprache für programmierbare Terminals
- Dokument Nr. 85131 : Präsentation des Programmiertools für programmierbare Displays vom / für Entwickler
- Dokument Nr. 85132 : Präsentation des in manchen Geräten integrierten CAN-Loggers, und des dazugehörigen Programmiertools
- Dokument Nr. 85140 : Protokollspezifikation 'CAN via UDP' (ermöglicht den Anschluss weiterer CAN-Schnittstellen per Ethernet)
- Einige der obigen Dokumente (im PDF-Format) sind nach der Installation des Programmiertools lokal im Verzeichnis 'Doku' enthalten.
Weitere Handbücher, z.B. gerätespezifische Hardwarebeschreibungen, Zubehörkataloge, "Programmiereinstieg", etc. können von der MKT-Webseite heruntergeladen werden.
Boot-Screen (optional beim Einschalten angezeigte Bitmap-Grafik)
Je nach Umfang der Applikation und CPU-Geschwindigkeit vergehen zwischen Einschalten der Spannungsversorgung und der Anzeige der ersten 'programmierten' Seite ('Seite Null') einige (wenige) Sekunden.
Während dieser Zeit wird im Display per Default der Initialisierungsverlauf (als Text) angezeigt, oder der Bildschirm bleibt bis zum Erscheinen der ersten 'programmierten' Seite komplett schwarz.
Stattdessem kann bei Geräten mit Farbdisplay eine für den Kunden angepasste Grafik (z.B. ein Firmenlogo) während des Startvorgangs angezeigt werden.
(Beispiel für eine beim Einschalten angezeigte 'Boot-Screen'-Grafik, 240 * 240 Pixel)Setzen Sie dazu zunächst im 'System-Menü / Setup' unter 'System Setup' .. 'Display Setup' den Parameter 'Bootup Display' auf 'FALSE'. Dadurch wird die Anzeige des Initialisierungsverlaufs beim Starten unterdrückt.
→ Main system menu (9) EXIT ! Load program from FILE Transfer via CAN = OFF/Auto Other transfers ... ▶ Audio Recorder CAN snooper mode CAN logger config User Settings System Setup / Unlock System Test Network Setup Diagnostics General Settings ...
→ Setup Menu (3) EXIT ! Save & EXIT ! Display setup .. ▶ Audio setup .. ▶ Date and Time .. ▶ CAN-Baudrate=500 Modul/NodeID=000 CAN1_TxEnable=1 CAN2_TxEnable=1 CAN1_120_Ohm=1 CAN2_120_Ohm=1 WakeupSource=Key, Vin GPS Rcv Type=NONE / off ...
→ Display Setup (5) EXIT ! Save & EXIT ! LCD dimming .. ▶ LCD-OffTime =0000 Bootup Displ=FALSE Bootup Debug=0 Vis. Gesture=TRUE Portr.Rotate=CLOCKWISE Touchscreen Calibration
(Abschalten der System-Meldungen beim Hochfahren des Gerätes, hier: beim MKT-View III)
Laden Sie danach eine selbst erstellte Grafik als Datei mit dem Namen BOOTSCRN.BMP (*) in das geräteinterne FLASH des Gerätes.
Ähnlich wie die benutzerdefinierten Zeichensätze wird diese Datei nicht 'fest' in die *.cvt-Datei eingebunden (denn das würde die CVT-Datei extrem aufblähen), sondern sie wird per File-Transfer über das Pseudo-Dateisystem im Verzeichnis "font_flash" abgelegt. Beim Aufruf des File-Transfer-Utilities aus dem Hauptmenü des Programmiertools über Transfer .. 'Boot-Screen per File-Transfer-Utility senden' wird automatisch das passende Zielverzeichnis (i.A. "font_flash") eingestellt.
Der Inhalt der Partition "font_flash" wird beim Laden einer neuen Applikation (*.cvt bzw. *.upt) nicht überschrieben, d.h. die oben beschriebene Übertragung ist pro Gerät nur ein einziges Mal nötig.
(*) Die Datei BOOTSCRN.BMP darf nicht komprimiert sein.
Die Farbtiefe sollte 8 Bit pro Pixel betragen, d.h. 256 Farben (mit Palette oder im 'RGB332'-Format).
Die Größe (in Pixel) darf nicht größer als das Display sein (siehe Angabe in der Feature-Matrix).
Zum Anpassen von Größe und Farbformat ist z.B. das Programm 'IrfanView' gut geeignet. Zum Verringern der Farbtiefe wählen Sie in IrfanView die Funktion Image .. Decrease Colour Depth .. 256 Colors (8 BPP), zum Anpassen der Größe die Funktion Image .. Resize / Resample.
Ist das Bild kleiner als das Display, wird es in der Anzeige zentriert.
Das hier verwendete, für Displays mit mittlerer Größe geeignete Beispiel finden Sie im Unterverzeichnis 'fonts' des Programmiertools, Datei BOOTSCRN.BMP .
Mit einer Größe von 240 * 240 Pixel ist ist das Bild im MKT-View III sowohl für Hoch- als auch Querformat geeignet.
CANopen-SDO-Fehlercodes
Die unten gezeigte Tabelle zeigt einige Fehlercodes, die bei der Kommunikation per SDO (CANopen) z.B. während der Programmübertragung auftreten könnten.
Wir haben uns eine Übersetzung der Fehlercodes ins Deutsche bislang erspart..Die meisten Fehlercodes stammen aus 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.
See also: CANopen objects inside the UPT , description of the error page
CANopen Error Codes 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
CANopen-Objekte innerhalb des Terminals
Auf die meisten im Terminal gespeicherten Informationen kann per CAN-Bus zugegriffen werden, da sie als Teil des sogenannten CANopen-Objektverzeichnisses angelegt sind. Das Programmiertool kann per SDO auf diese Objekte zugreifen, wenn z.B. das Anwenderprogramm per CAN-Bus vom PC in das Terminal geladen wird.Mittlerweile existieren zwei
völlig unterschiedliche
Implementierungen des CANopen-Protokolls in MKT's programmierbaren CAN-Terminals: Im UPT515 wird eine alte, proprietäre Implementierung verwendet (die nicht dem aktuellen Standard DS301 V4 entspricht), in allen anderen Geräten (mit 16-Bit-CPU, z.B. UPT320) steht genug Speicher für eine "vollwertige" CANopen-Implementierung der Firma SYS TEC zur Verfügung.Im letztgenannten Fall (UPT320, CANopen "von SYS TEC") steht eine maschinenlesbare Beschreibung des CANopen-Verzeichnisses als EDS-Datei zur Verfügung. Einige Details zu Objekten im herstellerspezifischen Profil finden Sie auch in diesem separaten Dokument.
Das Folgende gilt nur für das ("alte") UPT515, in dem nicht genügend Codespeicher für eine "moderne" CANopen-Implementierung zur Verfügung steht :
(ToDo: Übersetzen, oder den folgenden Text lieber gleich entfernen ?)
As you upload or download a program into/from the terminal, there may be some error messages with a CANopen-index in the range of 0x5100 to 0x57FF. The possible cause for such errors may be a compatibility problem between an "old" terminal and a "new" programming software (or vice versa). The following table may help to trace such errors:
CANopen-Index Inhalt (Vorsicht, einige Objekte existieren nur im alten "UPT515",
einige andere nur in neueren Geräten mit 32-Bit-CPU / "UPT 2"-Familie ! )0x4001...0x400F PDO-mapbare Variablen (nur UPT 2, NICHT bei UPT515 ! ) 0x5000 Digitale Eingänge, onboard (nur bei bestimmten Geräte in der UPT 2 - Familie) 0x5001 Tastatur-Matrix (bei den meisten Geräten in der UPT 2 - Familie) 0x5080 MKTs CAN snapshot utility (UPT515 only) 0x5101 Constants (max number of variables, etc., UPT515 only) 0x5102 Names of the terminals keys (UPT515 only) 0x5103 General Settings (number of display pages, etc., UPT515 only) 0x5104 Run Mode (Run, Stop, Transfer etc, UPT515 only) 0x5105 current Display-Page 0x5106 Save Permanent (transfers RAM data to EEPROM, UPT515 only) 0x5107 Erase some Flash Sectors (used for table-storage, UPT515 only) 0x5110 CANopen-Konfiguration (SYNC, NMT, UPT515 only) 0x5111
Die komplette "UPT"-Applikation für Terminals mit 16-Bit-CPU
(als Zeichenketten mit "auto-inkrement" für den Zeilenzähler,
nur bei Terminals mit CANopen V4, also nicht für UPT515).
Geräte mit 32-Bit-CPU können über dieses Objekt ferngesteuert werden.
0x5112 X/YModem File Server (nur bei Geräten mit 32-Bit-CPU) 0x5120 CANdb(!) file import history (as strings, UPT515 only) 0x5180 global Events-Definitions (as strings, UPT515 only) 0x5200..52ff SDO-Channel-Definitions (as strings, UPT515 only) 0x5200 Digitale Ausgänge, onboard (nur bei bestimmten Geräte in der UPT 2 - Familie) 0x5300..53ff PDO-Kanal-Definitions (as strings, UPT515 only) 0x5400..54ff Variable-Definitions (as strings, UPT515 only) 0x5500..55ff Display-Page-Definitions (as strings, UPT515 only) 0x5600..56FF Icon-Definitions (hex-coded strings, UPT515 only) 0x5700..57FF Text-Array-Definitions (strings, UPT515 only) 0x5800..580F Non-volatile values which can be accessed as "nv[N]" from the interpreter.
UPT515 only ! !
The data format of the definition-tables is very similar to the text-file-format which is used to save your UPT program on a disk drive. In fact, we use the same conversion routines in the UPT firmware as in the programming tool.
Since May 2001, some UPT firmware versions have a few objects from the CANopen communication profile implemented (DS301, Object index range 0x1000 0x1BFF). These objects only exist to detect a UPT device in a network. It is impossible to modify UPT settings via these objects. The PDO communication- and mapping objects do not carry useful information yet.
CANopen-Index Contents 0x1000 Device Type
(not applicable, only DS301 at the moment)0x1018 Identity Object 0x1018.1 MKTs vendor ID (0x004D4B54) 0x1018.2 Product Code (70055=UPT515, etc) 0x1018.3 Revision Number (ex: 0x00010002 = V01.02) 0x1018.4 Serial Number (expect this to be ZERO)
See also: Usage of Index and Subindex , SDO error codes
Troubleshooting
Dieses Kapitel enthält eine Liste von mehr oder weniger "häufigen" Problemen, die im Laufe der Entwicklung verschiedener Geräte aufgetreten sind, deren möglicher Ursache, und (im Idealfall) der Fehlerbehebung durch den Anwender.
Siehe auch: FAQ ("oft gestellte Fragen").
- Problem: Direkt nach dem Einschalten
sendet ein MKT-View Morsezeichen, aber es erscheint nichts auf dem Bildschirm.
- Ursache: Diese Morsezeichen sind ein (hilfreiches) Überbleibsel aus der
Entwicklungsphase. Wenn ein ARM-Cortex-Prozessor aus diversen Gründen
'abstürzt', landet er mit etwas Glück nicht im 'Nirvana' sondern in einem
'Exception handler'. Passiert dies direkt nach dem Einschalten, bevor die
CPU das Display (oder das externe SDRAM) initialisieren konnte, wird eine
entsprechende Fehlermeldung im Morsecode per Speaker ausgegeben.
Der Entwickler (Funkamateur und Hobby-Telegraphist) konnte dem Morsecode
nicht nur den Namen des Exception-Handlers (z.B. "HF" = Hard Fault),
sondern u.A. auch die hexadezimale Adresse des Programmzählers entnehmen,
wenn weder ein Display noch JTAG-Debugger zur Verfügung standen (denn nach
Murphy's Law treten sporadische Fehler nie auf, wenn ein Debugger angeschlossen ist).
In den meisten Fällen wurden solche Fehler durch EMV-Probleme ("Störspannungen"), Probleme mit dem SDRAM, oder durch eine zu langsam ansteigende Versorgungsspannung hervorgerufen. Letzeres führte zum unsicheren Betrieb des SDRAMs, wenn die CPU wenige Millisekunden nach dem Einschalten "Strom zog", aber die Spannung auf der Eingangsseite des internen Spannungsreglers noch zu niedrig für einen sicheren Betrieb war. Fehlerbehebung: Gerät abschalten, einige Sekunden "abkühlen" lassen, und wieder einschalten. Tritt das Problem (Morsecode statt Anzeige) wieder auf, versuchen Sie zunächst ein Firmware-Update per Bootloader. Führt dies nicht zum Erfolg, schicken Sie das Gerät zur Überprüfung an den Hersteller. Legen Sie dem Gerät bitte eine Fehlerbeschreibung bei, mit Angabe der Spannungsversorgung (wichtig: Spannung und Maximalstrom des verwendeten Netzteils bzw. Bordnetzes, Länge und Leiterquerschnitt der verwendeten Anschlusskabel, und [wegen SDRAM-Problematik / 'Delay Line Calibration' bei älteren CPUs] auch die Umgebungstemperatur, bei der das Problem auftrat).
- Problem: Direkt nach dem Einschalten
blinken beim MKT-View rote LEDs unter den Tasten, der Bildschirm bleibt dunkel.
- Ursache und Fehlerbehebung:
Ähnlich wie beim vorhergehenden Punkt dieser Liste, in diesem Fall aber ohne den 'glücklichen Umstand' dass der Haupt-Prozessor statt 'Crash' in einem Exception-Handler landete (und Lebenszeichen / Fehlerdetails im Morsecode senden konnte).
Der im MKT-View eingebaute 'Hilfsprozessor' (aka 'Standby-Controller') bemerkt, dass der 'Hauptprozessor' (ARM-Cortex) sich nicht innerhalb weniger Millisekunden über eine interne Schnittstelle meldet, und steuert als Warnung bzw. Fehlermeldung die rote(n) Leuchtdiode(n) unter den Funktionstasten an.
Tritt dieser Fehler mehr als einmal (nach Aus- und Wiedereinschalten) auf, kann versucht werden, per Bootloader einen 'zerschossenen' Flash-Inhalt wiederherzustellen. Details dazu finden Sie im Unterverzeichnis 'Firmware' in der zum verwendeten Gerät passenden Anleitung zum Firmware-Update, z.B. (MKT-View III) in der Datei Readme_MKTview3.pdf im Kapitel "Rettung per FlashMagic". Lässt sich das Gerät auch per Flash-Magic nicht mehr ansprechen, liegt ein Hardware-Defekt vor, und das Gerät sollte zur Reparatur eingeschickt werden. Bitte auch in diesem Fall eine genaue Fehlerbeschreibung beilegen, denn es haben sich bereits Geräte (mit steckbarer CPU-Platine wie beim MKT-View III) durch Vibrationen beim Transport 'vorübergehend selbst repariert', und der Fehler war beim Hersteller nicht mehr nachvollziehbar.
- Problem: Ein älteres "UPT" crashte nach einer Aktualisierung der Firmware oder des Anwender-Programms.
- Ursache: Die neue Firmware verwendet möglicherweise Datenstrukturen,
die nicht mit dem im Flash gespeicherten Anwender-Programm kompatibel ist.
Von diesem Problem sind nur schon seit langem 'veraltete' Geräte (UPT-515,
MKT-View I, MKT-View "Plus") betroffen.
Abhilfe: Umgehen Sie das Laden der "alten" Applikation, indem Sie vor und während des Einschaltns die Tastenkombination zum Aufruf des System-Setups (bei den meisten Geräten F2+F3) gedrückt halten.
Statt die Applikation zu laden, springt die Firmware dadurch sofort in's "Setup". Verlassen Sie das Setup. Es erscheint z.B. die Anzeige "no display page loaded". Verbinden Sie das Gerät mit dem Programmiertool, und laden Sie Ihr Anwenderprogramm (*.cvt oder *.upt) erneut. Bei der Übertragung per CAN, Ethernet, oder Speicherkarte wird die Applikation aus dem Textformat automatisch in das zur neuen Firmware passende Binärformat konvertiert.
- Problem: Nach dem Einschalten zeigt ein altes UPT zeigt "Loading XYZ.... error" auf dem Display an.
- Ursache: Ähnlich wie im vorherigen Absatz (allerdings ohne Crash):
Struktur des Anwender-Programms passt nicht zur neu geladenen Firmware.
Abhilfe auch hier durch Neu-Laden der Applikation.
- Problem: Der Empfang von PDOs ("Prozessdaten") funktioniert zwar am Gerät, aber nicht in der Simulation.
- Grund ("damals") : Der Simulator in einem mittlerweile antiquierten Programmiertool
unterstützte keine PDO-Funktionaliät, weil im damals verwendeten "CAN-Dongle" für
den Parallelport(!) kein "Full-CAN", sondern nur ein "Basic-CAN"-Controller verwendet
wurde. Im "echten" Geräte (mit "Full-CAN") existierte für jeden zu empfangenen
CAN-Message-Identifier ein eigenes "Empfangs-Objekt" (was übrigends auch der Grund
für die Beschränkung auf maximal 14 verschiedene Message-Identifier in alten MKT-Views war).
Moderne CAN-Interfaces (bzw. deren Controller) verfügen über echte Empfangs-FIFOs,
und das Problem mit "zu vielen verschiedenen CAN-Identifiern" existiert weder
in den Geräten von MKT Systemtechnik, noch in den am PC anschließbaren CAN-Interfaces.
Abhilfe ("damals"): Testen Sie Ihre Applikation nur am "echten" Gerät.
- Problem: Während des Editierens eines Anzeige-Elements schaltet das Programmiertool plötzlich zu einer anderen Seite um.
- Grund: Die Simulation wurde nicht gestoppt, und "irgendwo" (z.B. Tastatur- oder Timer-Event-Handler)
in Ihrere Applikation steht ein Befehl zum Umschalten der Anzeigeseite.
Abhilfe: Stoppen Sie vor dem Editieren die Ausführung des Programms im Simulator ("Stop").
In der Statuszeile (am unteren Rand des Programmiertools) sollte "gestoppt" oder "Editieren",
aber nicht "Läuft" angezeigt werden.
- Problem:
Trotz funktionsfähiger CAN-Schnittstelle funktioniert das
erneute Hochladen der Applikation per CAN nicht mehr.
Beim ersten Hochladen hatte das noch funktioniert.
- Ursache (Möglichkeit 1): Beim Hochladen wurde auch die CAN-Baudrate des Gerätes geändert.
Abhilfe: Stellen Sie auch im Programmiertool (für das CAN-Interface am PC) die gleiche CAN-Baudrate ein, die in der neu geladenen Applikation im Gerät für die Schnittstelle 'CAN1' verwendet wird.
Ursache (Möglichkeit 2): Das Script in der Applikation hat die Möglichkeit, per CAN-Empfangs-Handler die weitere Verarbeitung bestimmter empfangener CAN-Message-Identifier zu unterbinden. Ist davon auch der für die Programmübertragung verwendete ID betroffen, funktioniert die Übertragung nicht mehr. Dieser Effekt könnte vom Entwickler der Applikation sogar beabsichtigt sein.
Abhilfe #1 (Holzhammer-Methode) : Löschen Sie die Applikation im Flash ("Diagnostics".."Erase Flash"), und starten das Gerät neu. Ohne Script wird sich die Firmware nicht mehr weigern, das empfangene Telegramm zu verarbeiten.
Abhilfe #2 (etwas eleganter) : Setzen Sie im System-Menü des Gerätes den Parameter in der Zeile "Transfer via CAN" von "Disabled" oder "OFF/Auto" auf "ON".
Damit signalisieren Sie der Geräte-Firmware, dass Message-Identifier 0x7F1..0x7FF unbedingt zum systemeigenen CAN-Empfangs-Handler 'durchgelassen' werden sollen.
Abhilfe #3 ('letzte Rettung') : Laden Sie die Applikation (ggf. mit einer aktualisierten Gerätefirmware) per Speicherkarte (SD, nicht SDHC).
Falls Sie selbst ein Problem haben, welches in der obigen Liste aufgeführt werden sollte, senden Sie Ihren Vorschlag bitte per Email an den Autor dieses Programms (bei MKT Systemtechnik).
Glossar
- Babbling Idiot
-
Ein gestörter CAN-Knoten, bei dem z.B. der Empfangszweig nicht mehr
funktioniert, aber der Sendezweig. Dies kann beim CAN-Bus zu einem endlosen
Sendeversuch führen, weil der "plappernde Idiot" für das von ihm
gesendete Telegramm keine Bestätigung erhält, und der Sendeversuch
laut CAN-Spezifikation wiederholt wird . Ein Babbling Idiot kann zum kompletten
Ausfall eines CAN-Busses führen, wenn er nicht -durch spezielle Hardware
(!) - automatisch abgeschaltet wird. Als Folgeeffekt treten meistens
Error Frames auf dem CAN-Bus auf.
- CiA = "CAN in Automation"
-
Internationale Gruppe aus CAN-Anwendern und -Herstellern. Unterstützer
von CANopen . Im Internet zu finden unter
www.can-cia.de .
- CANdb file
-
CAN database file. Eine von vielen Möglichkeiten, CAN-Telegramme und
-Signale in einem CAN-Netzwerk zu beschreiben (völlig anders und weitgehend
inkompatibel zu CANopen, weil in CANdb-Dateien
bislang keine Protokolle definiert werden sondern -eigentlich- nur
Telegramme).
CANdb ist eingetragenes Warenzeichen der Vector Informatik GmbH. Vector produziert u.A. ein Tool mit dem CANdb-Dateien erstellt werden können (CANdb-Editor).
Nachtrag 2009: Der CANdb-Editor ist offenbar nicht mehr als eigenständiges Programm frei verfügbar, sondern nur noch im Paket "CANdbLib" erhältlich. Als Alternative bietet sich z.B. der CANdb-Editor von Kvaser (Kvaser Database Editor) an.
- CANopen
-
Ein offener Industriestandard (von CiA) in dem eine
Vielzahl von CAN-Übertragungsprotokollen, Datentypen, und Ablagestrukturen
für die Objekte eines Gerätes beschrieben wird.
DS401 ist nur ein vergleichsweise winziger Teil
davon.
- CVT
-
CAN-viewing terminal ("CAN-Anzeige-Terminal"). Wird auch als
Dateinamenserweiterung verwendet. Im Gegensatz zu
UPT-Dateien sind 'CVT'-Dateien aussschliesslich
für Geräte mit CANdb-Funktionalität vorgesehen. Das erste
Gerät welches CVT-Dateien verarbeitete war das MKT-View.
Irgendwann (Herbst 2009) kam die Forderung, daß diese ursprünglich nur als Anzeige konzipierten Geräte auch CAN-Signale senden können. Die Dateinamenserweiterung 'CVT' wird allerdings auch für diese Geräte (die keine reinen Anzeigen, sondern Steuerungen sind) beibehalten.
- Device Profile
-
Eine standardisierte Beschreibung eines Gerätes mit CAN-Schnittstelle,
in diesem Fall: Teil von CANopen von
"CAN in Automation".
- DS401
-
CANopen Device Profile for I/O-Modules. Ein
Dokument von "CAN in Automation" für standardisierte E/A-Module.
- Error Frame
-
Ein Indikator, dass in einem CAN-Netzwerk "irgendetwas" nicht stimmt. Error
Frames können vom Programmiertool (!) angezeigt werden, wenn ein dafür
geeignetes CAN-Interface / CAN-Treiber verwendet wird.
- Function
-
Ein bestimmtes Unterprogramm im Interpreter, welches einen Wert zum Aufrufer
zurückgibt. Der Funktionsaufruf kann Teil eines beliebigen numerischen
Ausdrucks sein. Der Funktionsname beginnt immer mit einem Kleinbuchstaben.
Im Gegensatz zu Funktionen liefern
Prozeduren keine Werte, und haben
daher -auch syntaktisch- eine völlig andere Bedeutung.
- Geeignete Text-Editoren
-
.. sind Editoren für reinen ASCII-Text, oder notfalls 8-Bit-ANSI,
die nicht die Unart besitzen nach "eigenem Gusto" normale Leerzeichen --chr(32)--
durch sogenannte 'non-breaking spaces' mit dem Code 160 (dezimal) bzw 0xA0
(hexadezimal) zu ersetzen.
Text-Editoren mit dieser unangenehmen Eigenart sind nicht zum Bearbeiten von *.upt bzw *.cvt - Dateien geeignet .
Hintergrund: Der Autor entdeckte Dutzende von ("Leer"-)Zeichen mit dem dezimalen Code #160 in einer Kunden-Applikation, die nur mit einem geeigneten Texteditor gerettet werden konnte. Als geeigneter Editor war NotePad++ in der Lage, die unsinnigen 160er-Zeichen wieder durch normale Leerzeichen (mit dem Zeichencode 32) zu ersetzen. Dabei ist allerdings Vorsicht geboten, denn das Zeichen #160 ist in den DOS-kompatiblen Zeichensätzen ein 'a accute' (á) .
- MKT-View
-
Ein programmierbares Anzeige-Terminal für die Automobilbranche.
Eigentlich kein Bedienterminal, obwohl es von vielen Anwendern genau
dazu eingesetzt wird. Ursprünglich unterstützten diese Terminals
*kein* CANopen, stattdessem erfolgte die Konfiguration durch
CAN-Datenbanken. Die ins MKT-View ladbaren Dateien
haben die Erweiterung CVT.
- OD
-
Abkürzung für Object Dictionary. Manchmal (- treffender? -) auch
als Object Directory ("Datenverzeichnis") bezeichnet, aber bei
CiA wird das Verzeichnis aller Objekte eines
CANopen-Gerätes nun mal Dictionary ("Wörterbuch") genannt. Das
OD enthält "Alles", auf das per SDO zugegriffen
werden kann. Eine "elektronische" Beschreibung des OD's ist das EDS file
(electronic data sheet); die konkrete Konfiguration eines bestimmten
Gerätes (mit "Werten") wird manchmal als DCF-Datei (device configuration
file) abgespeichert - allerdings nicht vom Terminal-Programmiertool.
- PDO
-
Prozessdaten-Objekt. Dient bei CANopen zur Übertragung von Messwerten.
- Procedure
-
Ein "Kommando" des im Terminal integrierten Interpreters. Eine Prozedur liefert
keinen Rückgabewert, und kann daher nicht Teil eines numerischen
Ausdrucks sein (dies unterscheidet die Prozedur von einer
Funktion). Mehrere Prozeduren können
-durch Doppelpunkt getrennt- in einer einzigen Kommandozeile stehen, die
z.B. als Reaktion auf ein bestimmtes Ereignis aufgerufen wird.
- SDO
-
Servicedaten-Objekt. Dient bei CANopen zum Zugriff auf das OD eines
Gerätes, z.B. bei der Parametrierung bzw. Konfiguration oder
"Programmierung".
- UDP
-
User Datagram Protocol. Teil der Internet-Protokoll-Suite. Im Gegensatz zum
bekannteren TCP/IP ist UDP ein verbindungsloses, unsicheres, aber vergleichsweise
einfaches Protokoll, welches aus letztgenanntem Grund gelegentlich zur
Übertragung von Prozessdaten (z.B. Sensordaten) per Standard-Ethernet
verwendet wird. Einige programmierbare Geräte können (mit
Einschränkungen) UDP-Pakete senden und empfangen, wobei die
Blockgröße -im Gegensatz zur UDP-Spezifikation- auf ein einziges
Ethernet-Paket beschränkt ist. Weitere Details zur UDP-Implementierung
finden Sie hier .
- UPT
-
User Programmable Terminal. Dies war das erste CAN-Terminal von MKT,
welches ohne Kenntnisse einer echten Programmiersprache programmiert werden
konnte. Das erste Modell (UPT515) hatte einen 8051-kompatiblen 8-Bit-Prozessor,
ein einfarbiges LCD mit 128*64 Pixeln, Cursortasten und ein paar Funktiontasten
unterhalb des Displays. "UPT" wurde auch als Dateinamenserweiterung (extension)
für "UPT-Programme" verwendet.
Das UPT515 diente als Grundgerüst für das später entwickelte MKT-View.
- Variable
-
Ein Element des numerischen Interpreters zum Speichern eines einzelnen Wertes.
Kann Teil eines numerischen Ausdrucks sein. Der Variablenname beginnt immer
mit einem Großbuchstaben, um Variablen von Funktionen und Prozeduren
zu unterscheiden. Beispiel für eine Variablenzuweisung:
@MeinWert = MeinWert+1
(das "at"-Zeichen dient hier als Zuweisungsoperator)
Kontaktaufnahme mit dem Autor
-
Vermuten Sie einen Fehler in diesem Dokument oder in der Software ?
Prüfen Sie bitte zunächst ob Sie wirklich die aktuelle Software (und deren Dokumentation) verwenden - dies gilt für Programmiertool und Firmware. Ist das der Fall, senden Sie die detailierte Fehlerbeschreibung bzw. Ihren Verbesserungsvorschlag bitte an den Autor: -
Wolfgang Büscher
- Softwareentwicklung -
MKT Systemtechnik
Mail: b u e s c h e r (at) m k t (minus) s y s (dot) d e
Internet: www.mkt-sys.de
Bitte fügen Sie der Beschreibung Folgendes hinzu:
- Die Information über das verwendete Programmiertool (CANopen ? "CANdb" ?), im Hauptmenü abrufbar per "Hilfe..Version". Das Kompilationsdatum nicht vergessen !
- Den Typ des verwendeten CAN-Interfaces
- Das Kompilationsdatum der Gerätefirmware. Diese wird beim Aufruf des Systemmenüs im Display angezeigt (z.B. beim gleichzeitigen Drücken von F2 und F3, bis zum Loslassen dieser beiden Funktionstasten am MKT-View).
- Das verwendete Betriebssystem des PCs (speziell bei Problemen mit dem Programmiertool)
Hinweis: Bei Problemen mit der Installation der Treibersoftware für das CAN-Interface eines Drittanbieters können wir Ihnen leider nicht weiterhelfen. Wenden Sie sich in solchen Fällen bitte an den Hersteller des CAN-Interfaces (Peak, ESD, Kvaser, Vector, ..) .
Versionshistorie der UPT-Familie
Nur in englischer Sprache verfügbar !Die im Originaldokument vorhandene Liste kann beim Aufspüren von Kompatibilitätsproblemen helfen. Falls Ihre Applikation auch auf "alten" UPT's (mit alter Firmware) laufen muß, verwenden Sie die neueren Funktionen nicht ! Alle programmierbaren Terminals zeigen das Kompilationsdatum der Firmware beim Einschalten kurz auf dem LCD an, oder während des Aufrufs des Systemmenüs.
Siehe auch: Troubleshooting and FAQs, Inhalt .
Bei Geräten mit 16 Bit pro Pixel (z.B. MKT-View IV) können auch
Bitmaps mit 65536 Farben direkt in die UPT-Applikation importiert werden.
Bilder mit 16 Bit pro Pixel belegen allerdings entsprechend viel Speicher
(der dann nicht für Scripte und andere Elemente der Applikation zur Verfügung stehen);
eine 'bildschirmfüllene' Bitmap-Grafik für das MKT-View IV mit 800 * 480 Pixeln
benötigt z.B. etwa 750 kByte im 'kostbaren' CPU-eigenen Flash. Die im nächsten Absatz
erwähnte Möglichkeit des Ladens von Grafiken von einem geeigneten Speichermedium
(während der Laufzeit, im Display) vermeidet dieses Problem, denn auf einer
Speicherkarte stehen nicht nur wenige MByte, sondern etliche GByte an Speicherplatz
zur Verfügung.
Nach dem Import von Icons können diese (wie hier beschrieben)
im Anzeigeprogramm verwendet werden.
Bei neueren Geräten (z.B. MKT-View III) können Icons
alternativ, statt sie direkt in die Applikation (*.cvt / *.upt) einzubinden,
auch wie hier beschrieben
von einem geeigneten Speichermedium geladen werden.
Siehe auch (ähnliche Themen) :
Icons als Anzeige- und Bedienelemente,
"Boot-Screen" (beim Einschalten des Gerätes angezeigte Grafik, nicht in der *.cvt-Applikation),
Canvas-Objekte ("Leinwand" zum Zeichnen von Grafiken per Script während der Laufzeit).
Reservieren von Speicher für Icons (und andere Spezialfunktionen)
Bevor Sie Icons in Ihrer Applikation verwenden können, müssen Sie bei älteren Geräten (mit 8- oder 16-Bit-CPU) dafür ausreichenden Speicher reservieren, z.B. indem Sie einige Anzeigeseiten des Terminals "opfern". Klicken Sie dazu auf "Icon Memory". Dadurch wird das weiter Unten beschriebene Dialogfenster geöffnet.Icons, Anzeigeseiten und das Text-Array müssen sich den im Terminal verfügbaren Speicher teilen. Die Aufteilung des Speichers kann den Erfordernissen angepaßt werden. Dabei gibt es gravierende Unterschiede zwischen älteren und neueren Geräten (auch von der verwendeten Firmware abhängig), die in den folgenden Kapiteln erläutert werden.
Welche Flash-Speicher-Verwaltung für ein bestimmtes Gerät verwendet wird, kann nach der Geräteauswahl (bei der nicht nur die Displaygröße, sondern auch einige Informationen über die Geräte-Firmware aktualisiert werden) auf der Registerkarte 'Einstellungen' unter Terminal-Konstanten / Flash-Speicherverwaltung abgefragt werden:
Speicheraufteilung bei älteren Geräten (z.B. MKT-View I)
Bei dieser Geräteklasse haben alle Anzeigeseiten eine feste Größe (bei der Ablage im FLASH-Speicher des Terminals). Enthält ein Anzeigeprogramm die maximale Anzahl" von Anzeigeseiten, bleibt nur wenig Platz für andere Objekte (wie Textzeilen und Icons).
Aus diesem Grund müssen Sie einige Anzeigeseiten "opfern", wenn Sie mehr Icons und/oder Text-Array-Zeilen benötigen.
Wenn Sie die Anzahl von Anzeigeseiten verringern, bleibt mehr Speicher für Icons.
Wenn das Terminal z.B. Speicher für 50 Anzeigeseiten (display pages) bietet, Sie aber nur 40 nutzen wollen, bleiben circa (50-40) * 1600 Bytes die zur Speicherung von Icons verwendet werden können.
Dialog 'Speicheraufteilung im Terminal' für ältere Geräte,
mit konstanter Größe von Anzeigeseiten bei der Ablage im Flash-Speicher.
Klicken Sie auf den Button "Icon Memory" (auf der Registerkarte "Icons")
um diesen Dialog zu starten.
Flexible Speicheraufteilung bei neueren Geräten (z.B. MKT-View II, III, IV)
Bei dieser Geräteklasse wird ein völlig anderes Verfahren zur Ablage von Anzeigeseiten, Text-Array-Zeilen, Icons und anderen Objekten im FLASH-Speicher verwendet. Dabei belegt jedes Objekt im Speicher nur so viel Platz wie unbedingt nötig. Anzeigeseiten mit weniger Zeilen pro Seite, oder kürzeren Zeilen belegen weniger Speicher als bei älteren Geräten.Im Normalfall steht daher immer genug Speicher zur Verfügung, und die "maximale Anzahl Anzeigeseiten" wie auch die Länge des Text-Arrays kann im oben abgebildeten Dialogfenster 'großzügig' eingestellt werden.
Damit das Programmiertool die Größe des verbleibenden freien Speichers (im Terminal) abschätzen kann, müssen einige Informationen über das Zielsystem bekannt sein. Dazu gehört unter Anderem die maximal für Anzeigeseiten + Textzeilen + Icons nutzbare Größe des FLASH-Speichers, und weitere hard- und firmwarespezifische Details, die auch in der *.CVT bzw. *.UPT-Datei im Abschnitt "Terminal Constants" abgespeichert sind.
Beim Umstieg von einer Geräteklasse zu einer anderen (z.B. vom MKT-View I / "+" zum MKT-View II / III / IV) können diese Informationen notfalls mit einem geeigneten Text-Editor, oder mit dem Programmiertool auf der im folgenden Kapitel vorgestellten Registerkarte Einstellungen angepasst werden.
Die Unterscheidung von "alten" und "neueren" Geräten wird in Form der folgenden Parameter mit in der Applikation (*.cvt bzw. *.upt) abgespeichert:
Hinweis: Die Berechnung des verbleibenden, freien Speichers im Programmiertool kann (geringfügig) vom Speicherbedarf im "echten" Terminal abweichen. Der tatsächlich verbleibende freie Speicher im Terminal wird für einen kurzen Moment beim Hochfahren des Terminals angezeigt, z.B.:
CANdb Display Terminal (...) Compiled: Aug 5 2009 (...) Loading .... ( unused : 761 kByte ) |
Ein ähnlicher Wert sollte im Programmiertool auf der Registerkarte "Symbole" (Icons) neben dem Button "Icon-Speicher" angezeigt werden.
Bei größeren Abweichungen stimmt z.B. der Wert des Parameters "max_free_mem_kbyte" in der *.UPT bzw. *.CVT-Datei nicht mit dem tatsächlichen Wert (im "echten" Terminal) überein. Diese Diskrepanz kann, wie oben erwähnt, manuell korrigiert werden, oder durch Zurücklesen der Applikation aus dem "echten" Terminal (weil das Terminal in diesem Fall dem Programmiertool alle benötigten Informationen mitteilen kann, was bei Übertragung per Speicherkarte nicht möglich ist).
Um dies Problem (der fehlenden "bidirektionalen Kommunikation" zwischen Programmiertool und zu programmierendem Gerät) zu umgehen,
wählen Sie Optionen ..
LCD-Einstellungen /
Geräteauswahl im Hauptmenü des Programmiertools,
und wählen die Ziel-Hardware erneut an (selbst wenn bereits die passende
Hardware markiert ist).
Das Programmiertool überträgt daraufhin einige Informationen über
das zu programmierende Gerät aus einer internen Datenbank in die
Terminal-Konfiguration, und passt gegebenenfalls die Parameter zur Berechnung
des freien Speichers automatisch an.
Ermitteln des Flash-Speicher-Bedarfs im Zielsystem
Wird beim Hinzufügen neuer Display-Seiten oder Bitmaps (Icons) der Speicher knapp, kann das Programmiertool auf Wunsch (per Hauptmenü: Ansicht : Aktueller Flash-Speicher-Bedarf im Target) einen 'Bericht' mit der mutmaßlichen Speicherbelegung im Zielsystem erstellen. Die Anzeige erfolgt in einem Editorfenster, aus dem der Bericht als Text per Copy & Paste in eigene Dokumentationen oder Emails übernommen werden.Geschätzter Speicherbedarf Element Größe Display pages : 38 kByte Display vars : 6 kByte Global events : 21 kByte Text array : 1 kByte Icons, Bitmaps : 142 kByte User def'd fonts: 1 kByte Script Sourcecode: 0 kByte CAN databases : 8 kByte CANopen (config): 1 kByte Target Size : 832 kByte Total USED Size : 214 kByte Remaining, free : 618 kByte ... |
Siehe auch: Speicher für Scripts (der aus Sicherheitsgründen von der Speicherverwaltung des Displays abgetrennt ist),
Storage Directory (Speicheranzeige im 'System Menu' des Gerätes unter 'Diagnostics').
Zurück zum Inhaltsverzeichnis
Benutzerdefinierte Zeichensätze
Dieses Kapitel wurde wegen ausufernder Dateigröße in eine eigene Datei (ufont_49.htm) verschoben.Seit der Integration von frei skalierbaren Vektor-Zeichensätzen sind selbstdefinierte Zeichensätze nur noch selten nötig.
Debugging
Um die Fehlersuche im Anzeigeprogramm zu vereinfachen, verfügt das Programmiertool über die folgenden Debugging-Hilfen:
Darüberhinaus stehen (ohne Programmiertool) die folgenden Möglichkeiten zum Debuggen zur Verfügung:
Siehe auch: Inhaltsverzeichnis, Einstellungen des Programmiertools
Watch-Fenster
Das Watch-Fenster ist eine Hilfe zur Fehlersuche. Darin kann der Wert einiger numerischer Ausdrücke angezeigt werden (z.B. mit Variablen des Anwenderprogramms). Es wird über das Hauptmenü des Programmiertools geöffnet ("View").
In der linken Spalte der Tabelle kann ein beliebiger
numerischer Ausdruck eingegeben werden,
dabei sollten Sie allerdings darauf achten keine Unterprogramme mit
"Nebeneffekten" aufzurufen. Dies gilt auch für selbstdefinierte Script-Funktionen.
Für die Anzeige von Werten aus dem im Hintergrund laufenden Script
stellen Sie auch hier dem Namen der Script-Variablen bzw. -Funktion
den Präfix 'script.' voran.
Die Anzeige von kompletten Strukturen oder Arrays wird vom einfachen Watch-Fenster nicht unterstützt -
verwenden Sie dazu den Script-Debugger.
In der nächsten (optionalen) Spalte mit der Überschrift "Format" kann definiert werden, wie der angezeigte Wert formatiert werden soll (Anzeigeart und Anzahl Ziffern). Mögliche Formate für die Anzeige im Watch-Fenster sind:
Wenn nötig, kann die Anzahl der Ziffern für die Anzeige direkt nach dem Formatbuchstaben eingegeben werden. Beispiele:
Ausdruck | Format | Ergebnis (Wert) |
script.Math.sqrt(2) | d20 | + 1.414214 |
script.display.EditValueMin | d7 | - 100.00 |
script.display.EditValueMax | d7 | + 100.00 |
10 / 3 | +00000003 (Ergebnis : Integer) | |
1.0 / 3 | + 0.333 (Ergebnis : Fliesskomma) |
Ist ein Ausdruck im Watch-Fenster fehlerhaft, erzeugt der Interpreter Fehlermeldungen die auch auf der Fehler-Anzeige-Seite des Hauptfensters angezeigt werden.
In der Spalte "Ergebnis" wird der ständig neu berechnete Wert des in der ersten Spalte eingegebenen Ausdrucks angezeigt. In bestimmten Fällen (z.B. wenn der Ausdruck aus einer einfachen Variablen besteht) ist es sogar möglich, den Wert zu Testzwecken im Watch-Fenster zu editieren.
Klicken Sie dazu in die entsprechende Zelle der Tabelle, überschreiben den Wert, und drücken die ENTER-Taste zum Abschluß der Eingabe.
Screenshot des Watch-Fensters mit erweitertem Control-Menü
(Öffnen durch Anklicken des Icons in der linken oberen Ecke)
Im Control-Menü des Fensters kann die Aktualisier-Rate der Anzeige
umgeschaltet werden. In den meisten Fällen ist die 'langsame'
Einstellung ausreichend. Die 'schnelle' Einstellung hilft z.B. um
auf den ersten Blick zu erkennen, welche Werte bzw. Variablen
besonders oft (z.B. per CAN-Bus) aktualisiert werden.
Per Watch-Fenster kann auch das 'globale' Array
des Display-Interpreters beobachtet werden. Da ein 'komplettes' Array i.A. nicht
in eine einzelne Zelle der Watch-Tabelle passt, kann der Inhalt
des Arrays per Kontext-Menü (Klick mit der rechten Maustaste
in die entsprechende Tabellenzeile) auch in einem mehrzeiligen Textfenster
angezeigt werden. Wählen Sie dazu die Funktion 'Mehrzeilig anzeigen'.
Siehe auch: Inspizieren von: Arrays,
Script-Variablen, Diagramm-Kanal-Speichern;
weitere Debugging-Hilfen, CAN-Bus-Simulator, Inhaltsverzeichnis .
Fenster zur Eingabe von 'Test-Kommandos'
Das "Test-Kommando-Fenster" dient nur zur Fehlersuche. Es enthält ein mehrzeiliges Eingabefeld, in dem u.A. Interpreterkommandos eingegeben werden können. Durch Drücken der Funktionstaste F2 wird das Kommando in der Zeile ausgeführt, in der momentan der Eingabecursor steht.Das Fenster wird aus dem Hauptmenü des Programmiertools geöffnet ("Ansicht".."Test-Kommando-Fenster").
In der oberen Fensterhälfte werden die auszuführenden Testkommandos eingegeben,
z.B. "sim_rx" zur Simulation des Empfangs einer bestimmten Botschaft, z.B.:
sim_rx <CAN-Message-Identifier> <erstes Datenbyte> <zweites Datenbyte> ....
oder
sim_rx serial1 <erstes Datenbyte> <zweites Datenbyte> ....
In der unteren Fensterhälfte werden die Ausgaben ("Resultate") von einigen Kommandos angezeigt, z.B. mit dem Kommando "print" abgefragte Werte, aber auch Fehlermeldungen (wenn diese vom Testkommando hervorgerufen wurden).
Hinweis: Die in diesem Fenster eingegebenen Kommandos werden nur "lokal" durch den Interpreter im Programmiertool / Simulator abgearbeitet. Es wird keine 'echte' Hardware benötigt, um damit eine Applikation zu testen.
Siehe auch: Übersicht zum Thema 'Debugging',
Inhalt
Abspielen von CAN-Logfiles im Display-Simulator
Das Werkzeug zum 'Abspielen von (CAN-)Logfiles' dient zum Testen der Display-Applikation im Simulatorbetrieb, als Ersatz für einen 'echten' CAN-Bus. Es ist nur im Programmiertool für Anzeigen mit 'CANdb'-Support (DBC), aber nicht für CANopen verfügbar.Sie können damit vorher aufgezeichnete CAN-Telegramme abspielen. Der Simulator verhält sich dabei so als ob die CAN-Messages von einem 'echten' Bus empfangen wurden. Die Testdaten werden aus einer einfachen Textdatei eingelesen. Das verwendete Format ist mit Vector's 'ASCII'-Format kompatibel. Viele CAN-Analsator-Programme (darunter auch MKT's eigenes CAN-Logger-Utility) unterstützen dieses Format. Der in einigen Geräten mit 32-Bit-CPU integrierte CAN-Snooper (z.B. MKT-View II / III / IV) kann den Verkehr auf dem CAN-Bus direkt in diesem Format aufzeichnen.
Diese Funktion eignet sich zum Testen von Display-Applikationen, selbst wenn kein geeignetes CAN-Interface, oder/und keine geeignete Hardware zur Verfügung steht.
Für komplexere Anwendungen (die nicht mit dem einfachen 'Abspielen' eines vorher aufgezeichneten Logfiles mit festem Inhalt getestet werden können, z.B. weil höhere CAN-Protokolle abgewickelt werden müssen) bietet sich ein externer scriptfähiger CAN-Tester, oder der im Programmiertool implementierte CAN-Bus-Simulator an.
Starten des CAN-Logfile-Players
Um das Tool zum Abspielen von CAN-Logfiles zu starten, wählen Sie im Hauptmenü
Es erscheint eine Dateiauswahlbox, mit deren Hilfe Sie den
Typ, Quellpfad und Namen der abzuspielenden CAN-Datei auswählen.
Der Default-Typ ist 'Vector ASCII Logfiles / *.asc'.
Nach dem Auswählen der CAN-Datei öffnet sich ein kleines Fenster mit dem Titel 'Logfile abspielen':
Mit dem 'Play'-Button im Video-Recorder-Stil [►] wird die Wiedergabe gestartet,
d.h. CAN-Messages werden aus der Datei gelesen und in den CAN-Empfangs-Puffer injiziert.
Optional kann die Datei auch in einer Endlosschleife abgespielt werden (Loop-Modus).
Dies ist hilfreich, wenn die Aufzeichnung nur wenige Sekunden lang ist, was zum Testen
aller Display-Seiten kaum ausreichen würde.
Die Zuordnung von CAN-Bus-Nummern im abgespielten Logfile
und der CAN-Interface-Nummer im simulierten Gerät (i.A. beim MKT-View nur 1 oder 2)
kann im Fenster des Logfile-Players geändert werden (siehe Screenshot, "Source Channel for Bus 1" = 1",
"Source Channel for Bus 2" = 2).
Wenn nötig, können bis zu vier Quell-Kanäle, per Komma getrennt, definiert werden.
Per Default werden Telegramme, die im Vector-ASC-Log mit der Kanalnummer 1 aufgezeichnet
wurden, bei der Simulation an "CAN1" (im simulierten MKT-View), und Telegramme mit
Kanalnummer 2 (im Vector-ASC-Log) an "CAN2" wiedergegeben, und von der simulierten
Gerätefirmware entsprechend decodiert.
Während der Wiedergabe können die simulierten 'empfangenen' CAN-Telegramme optional auch
auf der Registerkarte 'Fehler und Meldungen' angezeigt werden.
Setzen Sie dazu die Option 'RX - Telegramme'.
Unterdrücken bestimmter CAN-Messages im Logfile-Player
Bestimmte Telegramme können bei der Wiedergabe im Logfile-Player unterdrückt werden (z.B. CAN-Telegramme mit bestimmten Identifiern, die zwar in der Aufzeichnung enthalten sind, die aber bei der Simulation stören würden). Geben Sie dazu die CAN-Message-Identifier in hexadezimaler Form im Feld 'Reject (Rx,Tx,id)' auf dem Panel des Logfile-Players ein. Sind mehrere Einträge nötig, trennen Sie diese per Komma. Darüberhinaus können durch Eingabe von 'Tx' in diesem Feld alle im (Vector-ASCI-)Logfile als 'Tx' (gesendet) markierte Messages unterdrückt werden, und durch Eingabe von 'Rx' alle als 'Rx' (empfangen) markierten Messages. Beispiel: Reject(Rx,Tx,id): 0x1CFECBFF, Tx
Unterdrückt alle CAN-Messages mit dem (29-Bit-)Identifier 0x1CFECBFF, und alle Telegramme die in der abzuspielenden Log-Datei mit der Übertragungsrichtung 'Tx' (d.h. aus Sicht des aufzeichnenden Gerätes 'gesendet') markiert sind.
Automatischer Stopp des Logfile-Players bei gestopptem Script
Der eingebaute CAN-Logfile-Player wird automatisch gestoppt, wenn während eines Script-Debugger-Laufs das Script per Haltepunkt (Breakpoint) angehalten wird. Auch bei danach folgenden 'Einzelschritten' im Script-Debugger (F7 = single step) bleibt der CAN-Logfile-Player passiv. Erst wenn das Script per Debugger weiterlaufen darf (F9 = run), arbeitet auch der CAN-Logfile-Player weiter (an der Position, an der er zuvor gestoppt wurde).So wird vermieden, dass sich bei gestopptem Debugger ein unrealistischer 'Stau' im CAN-Empfangs-Puffer des simulierten Gerätes bildet.
Darüberhinaus vereinfacht dieses Verhalten die Fehlersuche beim Implementieren eigener CAN-Empfangs-Handler, denn so kann (nachdem z.B. das Script den zum empfangenen CAN-Telegramm passenden Handler aufgerufen hat) auf der Registerkarte 'Fehler und Meldungen' das zuletzt vom CAN-Logfile-Player abgespielte CAN-Telegramme am Ende der Liste identifiziert werden.
CAN Message Generator / CAN-Simulator
Der CAN-Message-Generator / CAN-Simulator kann zum Testen der Display-Applikation CAN-Messages intern in die Simulation einspeisen, oder (optional, mit geeignetem Interface) diese auch auf einem 'echten' CAN-Bus senden. Messages werden automatisch anhand von Signal-Definitionen aus einer Datenbank (oder aus der Display-Applikation) zusammengestellt; Signalwerte können z.B. per Stimulus (Funktion) oder mit einer SPS-ähnlichen Programmierung erzeugt werden. Details zum CAN-Simulator finden Sie in einem separaten Dokument (CANSimulator_49.htm).Wireshark-kompatible 'Packet Capture'-Funktion
Wireshark ist ein Programm zur Analyse von Datenpaketen, d.h. Netzwerk-Traffic wie z.B. Ethernet. Es eignet sich zum Aufspüren von Netzwerkproblemen, kann TCP/IP-Sitzungen 'decodieren' (lesbar machen), das Timing analysieren, usw.In der Firmware vieler MKT-Geräte ist eine Funktion zum Aufzeichnen von Ethernet- und CAN-Frames in einem Wireshark-kompatiblen Format (pcapng) implementiert, so daß alle -aus Sicht des Gerätes- empfangenen und gesendeten Pakete bequem per Wireshark analysiert werden können.
(Sie könnten mit dem auf dem PC laufenden Wireshark zwar ebenfalls PCAPNG-Dateien aufzeichnen und ggf nach MAC- oder IP-Adressen filtern, die Information welche der Pakete -aus Sicht des Terminals- empfangenen und gesendeten wurden, wäre so leider nicht möglich, da eine auf dem PC installierte Ethernet-Capture-Funktion i.A. nicht die 'Übertragungsrichtung' erkennen kann).
Abhängig von der Gerätekonfiguration (am Gerät: "Main System Menu" .. "Diagnostics" .. "Ethernet Capture") kann der 'Packet Capture'-Puffer sowohl mit empfangenen und gesendeten Ethernet-Paketen, oder / und mit CAN-Bus-Telegrammen 'gefüttert' werden.
(Wireshark unterstützte in Version 1.12.0 in begrenztem Rahmen nicht nur Ethernet, sondern auch CAN / CANopen).
Steht Wireshark nicht zur Verfügung, dann kann der Ethernet-Traffic (mit weniger Komfort) auch direkt am Gerät, oder -per Embedded Web Server- als HTML im Internet-Browser beobachtet werden. Die folgenden Screenshots zeigen den gleichen Ausschnitt aus dem Capture-Puffer, links im Web-Browser, rechts in Wireshark (V 1.12.0):
Blau : Aus Sicht des Gerätes empfangene CAN-Telegramme,
Grün : Vom Gerät in das Netzwerk gesendete CAN-Telegramme.
Im Gegensatz zu Wireshark wird der CAN-Message-Identifier hier nicht im 'Info'-Feld, sondern in der Spalte 'Source' (= Quelle bei empfangenen Frames, blau) oder in der Spalte 'Destination' (= Ziel bei gesendeten Frames, grün) angezeigt. 11-Bit-Identifier werden hexadeximal mit 3 Ziffern angezeigt, 29-Bit-Identifier mit 8 Ziffern. Im 'Info'-Feld wird nur das CAN-Datenfeld angezeigt (maximal 8 Bytes, hexadezimal ohne Prefix). Beispiel:
Packet Capture Status : Running, captured 5 packets . No. Time Source Destination Prot Length Info 1 0.00000 CAN1:0x07B CAN 8 00 02 03 04 05 06 07 08 2 0.13405 CAN1:0x000003FF CAN 8 05 44 4C 34 59 48 46 20 3 0.43712 CAN1:0x07B CAN 8 01 02 03 04 05 06 07 08 4 0.53385 CAN1:0x000003FF CAN 8 05 44 4C 34 59 48 46 20 5 3.12532 192.168.0.206 192.168.0.234 TCP 117 TX "HTTP/1.0 200 OK\r\nContent-Type:"
Die direkt in der Gerätefirmware implementierte Umwandlung (von PCAPNG nach HTML) bietet nicht die von Wireshark bekannten Features (Hunderte von Protokollen, Fehlererkennung, interaktives Inspizieren einzelner Felder, etc..). Verwenden Sie daher -wenn möglich- das Programm Wireshark zur Analyse der Aufzeichnung (als PCAPNG).
Anwenderfreundliche Browser (wie Firefox) können so konfiguiert werden, dass die beim Öffnen einer PCAPNG-Datei diese auf der Festplatte speichern, und danach automatisch Wireshark starten, der dann innerhalb weniger Sekunden die zu analysierende Aufzeichnung (capture.pcapng) lädt und analysiert.
Details zum Auslesen des Capture-Puffers per HTTP-Server (als Datei "capture.pcapng") finden Sie hier (externer Link zur MKT-Dokumentation).
Einige Tipps zur Arbeit mit Wireshark:
Siehe auch:
Übersicht zum Thema Debugging;
Anzeige 'Fehler & Meldungen' mit Trace-Historie;
CAN-Funktionen in der Script-Sprache;
Gesamt-Übersicht .
CANopen-Konfiguration
Nicht für Terminals mit ausschließlicher "CANdb"-Funktionalität wie z.B. MKT-View
Auf der Registerkarte "CANopen" können einige CANopen-spezifische
Einstellungen definiert werden, die nicht zur PDO- und SDO- Funktionalität
zählen. Im Moment können hier die folgenden Komponenten von CANopen
definiert werden:
SYNC - Message
NMT - Funktionalität
SDO-Client-Kanäle (Button zum Umschalten auf eine weitere Registerkarte)
SDO-Server-Kanäle
PDO-Kanäle
Siehe auch (zum Thema 'CANopen') : Programmierbare Terminals mit "CANopen V4"
Konfiguration des SYNC-Telegramms
CANopen verwendet das sog. SYNC-Telegramm um die Übertragung von
Prozeßdaten (PDOs) zu synchronisieren. Das UPT kann SYNC-Telegramme
senden (transmit, "produce") und empfangen (receive, "consume") wenn nötig.
Das Verhalten des UPT's in Bezug auf SYNC-Telegramme kann auf einem speziellen
Panel unter "CANopen"-Konfiguration definiert werden.
NMT Konfiguration (CANopen network management)
CANopen verwendet das NMT-Protocol um alle Knoten im CANopen-Netzwerk zu steuern. NMT-Objekte (objects) werden verwendet um NMT-Dienste (services) auszuführen bzw. deren Ausführung zu veranlassen. Mit Hilfe vom NMT-Diensten, können CANopen-Knoten initialisiert, gestartet, überwacht, zurückgesetzt(reset) oder gestoppt werden. Alle Knoten werden als NMT-Slaves aufgefaßt.NMT erfordert, daß ein Gerät im Netzwerk die Funktion des NMT masters übernimmt..
Mehr Information über NMT services finden Sie in CANopen DS301 V4.0, Kapitel 9.2.6.1.
Das UPT kann entweder NMT-Master oder NMT-Slave sein, aber nicht beides zur gleichen Zeit. Das Verhalten des UPTs bezüglich NMT kann auf einem speziellen Steuerpanel unter der "CANopen"-Konfiguration eingestellt werden. Momentan unterstützt die im UPT eingebaute NMT-Funktion nur das sogenannte "minimum NMT bootup" , kein "extended bootup" !! (Falls Sie nicht wissen, was das ist, werden Sie es vermutlich nicht brauchen. Wenn das UPT als NMT-Master konfiguriert ist, kann es einen "Start Remote Nodes"-broadcast nach einer einstellbaren "Bootup-Zeit" senden, beginnend mit dem Einschalten der Versorgungsspannung des UPTs).
Siehe auch:
Übertragung der Applikation ins das Zielsystem
Nach Erstellen und Testen der Applikation kann diese in das Ziel (Programmierbares Display) übertragen werden. Beim UPT515 ging dies mangels geeigneter Schnittstellen nur per CAN, bei anderen Terminals (z.B. MKT-View) stehen auch andere Schnittstellen dazu zur Verfügung, z.B. RS-232 oder Ethernet .Abhängig von der verfügbaren Hardware sind die folgenden Übertragungswege / Methoden zwischen Programmiertool und programmierbarem Gerät möglich :
Übertragen der Applikation per Speicherkarte
Bei Geräten mit FLASH-Speicherkarte (MKT-View Plus, MKT-View II / III) empfiehlt es sich, die Applikation als Datei (*.upt bzw *.cvt) per Speicherkarte vom PC zum Terminal zu übertragen. Speziell bei "grafiklastigen" Applikationen mit großen, farbigen Bitmaps, oder komplexen Anwendungen mit großen Scripten ist diese Art der "Übertragung" wesentlich schneller als die Übertragung per CAN oder RS-232 .Speichern Sie dazu zunächst die Applikation (*.cvt bzw. *.upt bei Geräten mit CANopen) im Wurzelverzeichnis der Speicherkarte ab. Setzen Sie die Speicherkarte in das zu programmierende Gerät ein, und rufen dort das System-Menü auf (bei den meisten Geräten durch gleichzeitiges Drücken der zweiten und dritten Funktionstaste). Wählen Sie dort 'Load program from FILE', und wählen Sie die zu ladende Datei im Wurzelverzeichnis der Speicherkarte aus. Das Gerät bootet nach dem Umkopieren von der Karte in den geräteeigenen Flash-Speicher neu. Die Karte kann dann wieder entnommen werden.
Übertragen der Applikation per CAN, RS232, Ethernet
Für die Übertragung der Applikation verbinden Sie zunächst
das Terminal über ein geeignetes Interface bzw. Kabel mit dem PC. Beim
UPT515 muß die Übertragung per CAN erfolgen, bei anderen Terminals
stehen auch andere Schnittstellen zur Verfügung (siehe Unten).
Übertragung per CAN / CANopen
Bei der Übertragung per CAN muß das Zielsystem eventuell manuell (per Systemmenü) in den Übertragungsmodus geschaltet werden. Rufen Sie dazu im Terminal das Systemmenü auf, und wählen dann (bei älteren Geräten) "Program Upload via CAN" bzw. (bei neueren Gräten) erlauben Sie den Transfer, indem Sie im 'Main System Menu' die Option 'Transfer via CAN' auf 'Auto' oder 'ON' setzen. Bei Geräten mit SDO-Server (z.B. UPT515) kann dieser Schritt entfallen, denn das Programmiertool kann in diesem Fall das Terminal per SDO in den Übertragungsmodus schalten.
Ähnliches gilt für die Übertragung per RS-232: Da die RS-232-Schnittstelle
aber oft von der Applikation verwendet wird, muss in diesem Fall der 'normale'
Datenfluss unterbrochen werden, um die RS-232-Schnittstelle für die Dateiübertragung
nutzen zu können. Wählen Sie dazu im 'Main System Menu' das Untermenü 'Other Transfers ...',
und dort die Funktion 'Transfer via RS232 (SLAVE)'.
Die im Gerät aktuell verwendete Baudrate (für CAN bzw. RS-232) wird nach dem Umschalten
in den Transfer-Modus im Display angezeigt, z.B.:
Transfer mode active Receiving PROGRAM RS232/3964R: 19200 bit/sec |
Hinweis: Eine einheitlichen 'Defaultwert' gibt es für die Baudrate der seriellen Schnittstelle nicht.
Die Baudrate könnte z.B. durch das Anzeigeprogramm per Interpreterbefehl
oder per Script-Kommando umgeschaltet worden sein.
Beim oben beschriebenen Aktivieren des Übertragungsmodus erfolgt keine Umschaltung der Baudrate
- weder für CAN, noch für RS-232. Aus diesem Grund wird auf dem Display die momentan verwendete Baudrate
angezeigt. Siehe auch: Einstellung der Baudrate für die serielle Schnittstelle auf der PC-Seite.
Falls das Terminal nur mit CANdb-Funktionalität, aber nicht mit CANopen ausgerüstet ist, muß aus oben genannten Gründen das Gerät manuell in den "Transfer-Modus" geschaltet werden. Gehen Sie dazu wie folgt vor:
Hinweis: Dieser Schritt ist in einem "generischen" CAN-Netzwerk
nötig, weil die für die Kommunikation zwischen PC und Terminal
verwendeten CAN-Identifier möglicherweise schon belegt sind, und das
Terminal im Normalbetrieb nicht auf entsprechende CAN-Telegramme reagieren
darf (um Kollisionen zu vermeiden). Bei Terminals mit CANopen-Protokoll besteht
diese Gefahr nicht, denn dort wird das Programm per CANopen-SDO (service
data object) übertragen - was immer möglich ist, weil der
Default-SDO-Kanal in einem CANopen-Knoten immer aktiv ist. Details zur Übertragung
per CAN (ohne CANopen) finden Sie in einer externen
Datei.
Die oben aufgeführten Schritte können entfallen, wenn der 'Transfer
via CAN' dauerhaft auf "ON" oder "AUTO" gesetzt wurde (z.B. "Transfer via
CAN = ON", danach "Save and Exit" im Setup-Menü). Weitere Informationen
zu den Einstellmöglichkeiten für den 'Transfer via CAN' finden
Sie in Dokument Nr. 85115 im Kapitel Funktionen im Systemmenü.
Zum Start der Übertragung wählen Sie im Hauptmenü des Programmiertools die Funktionen
Gegebenenfalls muss vor der Übertragung (einmal) eingestellt werden, auf welchem Weg das Programmiertool eine Verbindung zum programmierbaren Gerät herstellen soll. Wählen Sie dazu im Hauptmenü :
Falls das Programmiertool keine Verbindung mit dem Terminal aufbauen kann,
überprüfen Sie das Interface bzw. Verbindungskabel, bei CAN eventuell
fehlende Abschlußwiderstände, und die Kommunikationsparameter
(Baudrate, Nummer der COM-Schnittstelle, Einstellungen des CAN-Interfaces).
Falls dies nicht zum gewünschten Erfolg führt, schalten Sie auf
die Fehler-Anzeige-Seite des Programmiertools um.
Eventuell helfen Ihnen die dort angezeigten Meldungen bei der Fehlersuche.
Wenn zum ersten Mal ein Programm per CAN-Bus zum Terminal gesendet werden soll, und dabei ein Fehler auftritt, liegt vermutlich ein (Installations-)Problem mit dem CAN-Interface vor. Lesen Sie unsere Hinweise zur Installation des CAN-Interfaces, und lesen Sie die vom Hersteller des CAN-Interfaces verfassene Dokumentation sorgfältig(!) .
Zur Übertragung zwischen PC und Terminals ohne CANopen-Protokoll
(z.B. "MKT-View") lesen Sie bitte auch dieses
Dokument .
Kann bei der Übertragung per Ethernet keine Verbindung aufgebaut werden,
könnte dies an einer ungültigen oder geänderten IP-Adresse liegen. In diesem Fall
hilft as im Kapitel 'Auffinden von MKT-Geräten am Ethernet/LAN'.
Während der Übertragung wird sowohl die Software-Versions-Nummer des Programmiertools und die aus angeschlossenen Gerät ausgelesene Firmware-Versions-Nummer angezeigt. Im "Idealfall" sind beide identisch:
Weichen Haupt- oder Nebenversionsnummer voneinander ab (erste und zweite Zahl), wird dringend empfohlen, die Gerätefirmware wie hier beschrieben zu aktualisiern.
Weichen nur Revisions- oder Build-Nummer voneinander ab, dann stehen neu hinzugefügte Funktionen im Zielgerät möglicherweise nicht zur Verfügung, und ein im Programmiertool (Simulator) lauffähiges Programm funktioniert nicht (oder nicht vollständig) im Zielgerät. Eine Übersicht der Software-Versionen mit den letzten Software-Erweiterungen finden Sie hier (auf der MKT-Webseite).
Bestimmte Geräte wie z.B. das "MKT-View" müssen / können(?)
über die serielle Schnittstelle geladen werden. Eventuell ist auch die
schnellere Übertragung des Programms mit Hilfe einer Compact Flash -
Speicherkarte möglich (beim "MKT-View +" mit Logger-Firmware und
PCMCIA-Slot, siehe Feature Matrix).
Dazu muß der PC allerdings über einen Memory Card Reader / Writer
verfügen, mit dem Sie die benötigten Dateien (*.upt, *.cvt) auf
die Speicherkarte überspielen können. Die Datei kann dann manuell
im Systemmenü ausgewählt werden ('Load Program from File'), bzw. kann sogar
automatisch von der Speicherkarte geladen werden (-> "Autoload").
Bei der Entwicklung von fortschrittlichen Applikationen (mit Scripten) kann der Entwicklungszyklus, d.h. Bearbeiten-Übertragen-Testen, beschleunigt werden, indem das Programm vom Programmiertool aus nicht in den Flash-Speicher des Zielsystems, sondern nur in dessen Hauptspeicher (RAM) geladen wird. Dadurch entfällt die Zeit zum Löschen und Neuprogrammieren des Flash-Speichers, die je nach Hardware zwischen 10 und 60 Sekunden liegen kann. Details zur Script-Entwicklung, und zum "Transfer OHNE zu Flashen" finden Sie in der Dokumentation der Script-Sprache.
Andere Geräte ( z.B. 'MKT-View II' ) verfügen zusätzlich
über eine universelle
Datei-Transfer-Schnittstelle, basierend
auf YModem (?). Damit können beliebige Dateien in den internen
FLASH-Speicher des Terminals geladen werden, oder auf die FLASH-Speicherkarte
kopiert werden. Als Übertragungsmedium kann die serielle Schnittstelle
(RS-232), der CAN-Bus, oder auch Ethernet / UDP verwendet werden .
Treten während (oder kurz nach) der Übertragung Probleme im angeschlossenen
Gerät auf, so werden diese im Programmiertool in einem neuen Meldungsfenster angezeigt:
Kurz nach der Programm-Übertragung angezeigtes Meldungsfenster
mit von der Gerätefirmware erzeugtem Klartext (in englischer Sprache)
Übertragung per Ethernet / LAN ( UDP )
Zum Übertragen der Display-Applikation (und evtl. weiterer Dateien) muss dem Programmiertool die IP-Adresse und Port-Nummer des zu programmierenden Gerätes bekannt sein. Per Default (da in einigen Netzwerken kein DHCP verfügbar war) verwendeten Anzeigegeräte wie das MKT-View II per Default eine die statische IP-Adresse, und für die Programm-Übertragung UDP-Port-Nummer 55556. Abhängig von der Netzwerk-Konfiguration (siehe Screenshot) kann die IP-Adressese auch per DHCP oder openABK-'Discovery' ermittelt werden.Zum Eingeben der IP-Adresse und Port-Nummer wählen Sie die Funktion Transfer .. Verbingungs-Parameter .. Remote IP (im Hauptmenü des Programmiertools), und geben die Adresse des zu programmierenden Gerätes ein. Das Format für die Eingabe ist <IP byte 1>.<IP byte 2>.<IP byte 3>.<IP byte 4> : <Port-Nummer>. In einigen Fällen (mit DNS/DHCP) kann statt der numerischen IP(v4)-Adresse auch der Hostname vor dem Doppelpunkt verwendet werden.
|
( Eingabe der Remote-IP-Addresse und Portnummer im Programmiertool.
Diese können in den Netzwerk-Einstellungen des 'entfernten' (remote) Gerätes
ausgelesen werden, wie in der Abbildung links zu sehen ist. )
Falls der Entwicklungs-PC über mehrere Netzwerk-Schnittstellen verfügt (z.B. Netzwerkkarte und USB-Ethernet-Adapter),
dann kann die lokale IP-Addresse der zu verwendenden Ethernet-Schnittstelle ausgewählt werden.
Klicken Sie dazu im Hauptmenü des Programmiertools auf
Transfer .. Verbindungsparameter .. Local IP.
Wählen Sie danach in der Liste die PC-seitige IP-Adresse des Ethernet-Adapters aus,
an dem das zu programmierende Gerät angeschlossen ist. Wenn der PC nur über eine einzige
Ethernet-Karte (und über keine weiteren IP-fähigen Schnittstellen wie z.B. WLAN) verfügt,
dann enthält diese Liste nur einen einzigen Eintrag.
Ferner muss die IP-Adresse oder der Hostname des zu programmierenden (bzw des fernzusteuernden) Gerätes angegeben werden.
Bei Verwendung einer statischen IP-Adresse (im MKT-View) ist dies trivial: Die Adresse kann direkt im 'Network Setup' des Gerätes ausgelesen werden ('IPaddr').
Bei Verwendung einer dynamisch (per DHCP) zugewiesenen IP-Adresse kann diese mit der Funktion 'Transfer'..'MKT-Geräte im lokalen Netz (Ethernet) finden' ermittelt werden, oder notfalls wie unten beschrieben durch Auslesen der momentan verwendeten IP-Adresse am Gerät :
( Ermitteln der IP-Adresse im MKT-View bei Verwendung von DHCP.
Grau markierte Einträge im Feld 'IPaddr' bedeuten 'nicht editierbar'.
Sie zeigen in diesem Fall die momentan geleaste IP-Adresse an. )
UDP-Port 55556 wird im Terminal nicht nur für die
Dateiübertragung, sondern auch für das CAN-via-UDP-Protokoll verwendet.
Der Eintrag bei 'CAN via UDP' muss daher auf SERVER gesetzt sein (siehe Screenshots).
Dieser Server ist in den meisten Geräten von MKT Systemtechnik integriert,
er dient normalerweise nur als Ersatz für eine physikalische CAN-Schnittstelle
(Details dazu online in der MKT-Dokumentation 'CAN-via-UDP').
Das 'Vorhandensein' des CAN-via-UDP-Servers in der Firmware bedeutet allerdings
nicht, daß dieser auch aktiv ist ! Der Server könnte z.B. aus
Sicherheitsgründen (per Network Setup) deaktiviert sein. Hier eine typische
Konfiguration im MKT-View III, Oktober 2015:
|
Typische CAN-via-UDP - Konfiguration und
Netzwerk-Einstellungen im MKT-View III
Beim Verbindungsaufbau per Ethernet (UDP/IP) könnte dieser durch eine übervorsichtige 'Internet Security Suite', oder durch die Windows-Firewall blockiert werden. In manchen Fällen fragt die Software gnädigerweise, ob Sie (als Bediener) den Zugriff erlauben. Typischerweise erscheint dann eine Meldung wie "XYZ is trying to act as an internet server" - was hier in keinster Weise zutrifft..). Beispiel:
Andere Beispiele :
Erlauben Sie dem Programm in diesem Fall gnädigerweise, "als Internetserver" zu agieren (mit einem Internet-Zugriff hat dies nichts zu tun, es ist lediglich ein Austausch von UDP über das lokale Netzwerk).
Details zum Network-Setup (Netzwerkkonfiguration) finden Sie in
Dokument Nr. 85115, "System
Setup" (PDF, für Anwender) .
Das Protocol (auf Basis von UDP/IP) ist
in Dokument #85140, "CAN via
UDP" beschrieben (PDF, für Entwickler) .
Für die Übertragung anderer Dateien per Ethernet verwenden
Sie das 'File Transfer Utility / Transfer
via Ethernet' .
Siehe auch:
Dateiübertragung per Web-Browser (HTTP; externer Link),
Auffinden von MKT-Geräten am Ethernet/LAN (mittels DHCP-Server) .
Auffinden von MKT-Geräten am Ethernet/LAN (mittels DHCP-Server oder OpenABK-'Discovery')
In den meisten Fällen wird die IP-Adresse des zu programmierenden Gerätes, oder dessen Hostname bekannt sein; dann erübrigt sich die im Folgenden beschriebene Funktion zum 'Entdecken' von MKT-Geräten im lokalen Netzwerk. Wenn bekannt, geben Sie die IP-Adresse oder den Hostnamen (default: UPT) in der Adressleiste Ihres Web-Browsers ein, und fahren wie weiter Unten beschrieben fort .Um ein MKT-Gerät im Ethernet-LAN zu 'entdecken', wählen Sie im Hauptmenü des Programmiertools die Funktion Transfer .. MKT-Geräte im lokalen Netzwerk (Ethernet) finden. Das daraufhin angezeigte Dialogfenster führt Sie schrittweise durch den unten gezeigten Ablauf. Funktioniert alles wie geplant, dann erkennt das Programm das neu eingeschaltete MKT-Gerät an dessen MAC-Adresse ("Ethernet-Adresse"), und zeigt die per DHCP zugewiesene IP-Adresse an (bzw. die per OpenABK-'Discovery'-Protokoll erkannten Geräte, die sich ebenfalls mit ihrer IP-Adresse melden sollten). Sie haben dananch die Möglichkeit, per Web-Browser eine Verbindung mit im Gerät integrierten Web-Server aufzubauen.
Schritt 1:
DHCP Server / OpenABK-'Discovery'
Diese Funktion dient zum Auffinden eines MKT-Gerätes im lokalen Netzwerk, ohne Kenntnis der IP-Adresse des MKT-Gerätes. Im nächsten Schritt versucht dieses Programm, mit Hilfe des OpenABK-Discovery- Protokolls, oder per DHCP ein MKT-Gerät (z.B. MKT-View) zu finden. Dies muss eventuell erst in der Windows-Firewall erlaubt werden. Eventuell erhalten Sie im nächsten Schritt die folgende Meldung : 'Die Windows-Firewall hat einige Funktionen dieses Programms blockiert.' Name: ctptwin [= CAN-Terminal Programming Tool für Windows] . Erlauben Sie dann den Zugriff per Button 'Zugriff zulassen' . Klicken Sie auf 'OK', um dem Programmiertool zu erlauben, vorübergehend als DHCP-Empfänger und OpenABK-Client zu agieren. Alternative: Falls aus einer älteren Sitzung noch IP-Adressen von MKT-Geräten bekannt sind, können Sie sich mit einer dieser Adressen verbinden zu lassen. |
Schritt 2:
Warte auf Empfang von DHCP-Paketen
Der DHCP-Server wurde erfolgreich gestartet, und wartet nun auf den Empfang eines 'DHCP-Discover'-Paketes von einem MKT-Gerät. DAZU MUSS DAS MKT-GERÄT JETZT NEU EINGESCHALTET WERDEN. Stellen Sie sicher, daß das Gerät per DHCP konfiguriert werden möchte, verbinden Sie das Gerät per Ethernet-Kabel mit dem PC, und schalten es ein. Kurz nach dem Einschalten sollten die Kontroll-LEDs am Ethernet-Port aufleuchten, und der Empfang eines DHCP-Discover-Paketes sollte in diesem Fenster gemeldet werden. Klicken sie auf 'Abbrechen', wenn Sie den Verbindungsaufbau abbrechen wollen. Rx:DHCP-Request cip=192.168.0.106 mac=00:21:00:DD:19:A1 (etc) |
Schritt 3:
MKT-Gerät wurde erkannt - Verbindung aufbauen ?
Ein DHCP-Server hat ein 'DHCP-Discover'-Paket von einem MKT-Gerät empfangen, und diesem die IP-Adresse 192.168.0.101 zugewiesen. Klicken sie auf 'Verbinden', um per Web-Browser eine Verbindung aufzubauen, oder 'Ok', um dieses Gerät als Zielsystem auszuwählen, oder 'Abbrechen', um dieses Fenster zu schliessen. ____________ ___________ ___________ ___________ | | | | | | | | | OK | | Verbinden | | Abbrechen | | Hilfe | |____________| |___________| |___________| |___________| |
Der Button 'Verbinden' stellt eine Verbindung zwischen PC und dem programmierbaren Gerät
per Web-Browser her.
Sie können z.B. per Web-Browser die Display-Applikation (*.upt bzw *.cvt),
aber auch andere Dateien in das Gerät hochladen, einen Firmware-Update durchführen, das Gerät per TCP/IP
fernbedienen, per Copy-and-Paste den aktuellen Bildschirminhalt 'abfotografieren',
den aktuellen Inhalt von Variablen auslesen, die Trace-Historie inspizieren, usw.
Beispiel zum Übertragen von Dateien:
Alle Details zum in den meisten UPTs (und MKT-Views) integrierten Web-Server finden Sie
hier (externer Link).
Das Default-Passwort für den Web-Server ist das gleiche wie beim
Firmware-Update.
Der 'OK'-Button im weiter oben imitierten 'Discovery'-Fenster stellt keine
Verbindung per Web-Browser mit dem Zielsystem her, sondern übernimmt das selektierte Gerät (bzw. dessen IP-Adresse)
als neue 'Zieladresse' in die Konfiguration des Programmiertools.
Das UPT-Programmiertool kann z.B. die gefundene IP-Adresse verwenden, um die Display-Applikation
(und andere Dateien) wie im vorherigen Kapitel beschrieben
per UDP(!) oder TCP/IP in das Zielsystem zu laden.
Als (UDP-)Portnummer wird i.A. der Defaultwert (55556) eingestellt.
Anschließend kann (wenn im Zielsystem das CAN-via-UDP-Protokoll aktiviert ist)
die Applikation wie gewohnt per Transfer ... Applikation ins Terminal laden in das
Zielsystem übertragen werden.
OpenABK-'Discovery' (Protokoll zum Auffinden von IP-Adressen)
Neben dem im vorhergehenden Kapitel erwähnten 'Mitlauschen' von DHCP-Paketen können MKT-Geräte seit November 2015 auch per openABK-'Discovery'-Prokoll im lokalen Netzwerk gefunden werden. Das Programmiertool kann damit eine Liste mit den IP-Adressen aller vorhandenen Geräte erstellen, selbst wenn diese keine per DHCP zugewiesene dynamische, sondern eine statische IP-Adresse verwenden.( Zur Erinnering: DHCP kann im 'Network Setup' am Gerät konfiguriert werden. )
Das Aus- und Wiedereinschalten des Gerätes (um das Senden einer DHCP-Abfrage zu erzwingen) ist beim Einsatz des 'Discovery'-Protokolls nicht mehr erforderlich.
Hinweis: Die hier beschriebene Funktionalität steht nur bei Geräten mit Firmware-Compilation-Datum 2015-11-26 (oder später) zur Verfügung.
Details zur Funktion und Verwendung des openABK-'Discovery'-Protokolls im Programmiertool finden Sie hier .
Siehe auch (zum Thema 'openABK') :
Variablen mit Anbindung an 'openABK' im Programmiertool,
openABK-Support für programmierbare Displays und Gateways von MKT Systemtechnik.
Automatische Aktualisierung des Anzeigeprogramms per FLASH-Speicherkarte
Beim Einschalten prüft die Firmware im Terminal, ob eine Speicherkarte eingesetzt ist, und ob auf dieser Karte eine bestimmte Datei vorhanden ist. Der Name dieser Datei ist :
Falls die Datei mit dem oben angegebenen Namen gefunden wird, wird deren
DOS-Dateidatum und -Uhrzeit mit der aktuell im Terminal geladenen Applikation
verglichen. Weichen Datum oder Uhrzeit ab, lädt die Firmware automatisch
die Datei von der Karte und überschreibt damit Inhalt des
onboard-FLASH-Speichers. Diese Funktion kann z.B. verwendet werden, um Ihrem
Kunden (oder einem "ungeschulten Bediener") eine komplette Konfiguration
per Speicherkarte zukommen zu lassen, mit dem Hinweis: "Stecken Sie diese Karte
in das Terminal (bei abgeschalteter Spannung), dann starten Sie und beginnen
mit der Testfahrt". Dazu können Sie auch die passende Konfigurationsdatei
für den CAN-Logger mit
auf die Karte packen. Das Terminal erledigt dann den Rest automatisch, ohne
daß der Bediener eine einzige Taste drücken muss um die neue
Applikation zu laden.
Firmware-Update
Beim Überspielen der "Applikation" in das Terminal könnte das Programmiertool anzeigen, daß die Firmware im Terminal zu alt ist. In diesem Fall sollten Sie ein Firmware-Update durchführen, um die Kompatibilität zwischen Programmiertool und programmierbarem Terminal zu gewährleisten.Eine kurze Anleitung zur Durchführung des Updates finden Sie im Firmware-Verzeichnis in der Datei fwupdate.htm . Dort finden Sie auch das Paßwort, welches Sie für die Übertragung eingeben müssen (z.B. "s...... ..t", das Paßwort kann aber geräteabhängig sein) .
Vor dem Firmware-Update lesen Sie bitte auch die Firmware-Release-Notes sorgfältig. Dort sind evtl. hardwarespezifische Einschränkungen beschrieben, die Sie im allgemeinen Handbuch des Programmiertools nicht finden werden !
Bei alten Geräten (z.B. UPT ohne Speicherkarte und CAN-Bootloader) wählen Sie anschließend im Menü "Transfer" des Programmiertools die Funktion "FIRMWARE per RS-232 aktualisieren". Das Programmiertool wird Sie daraufhin nach dem Paßwort fragen, welches Sie in der oben erwähnten Anleitung gefunden haben.
Hinweise:
Screen Snapshot via CAN
(sorry .. wurde noch nicht ins Deutsche übersetzt)
To generate a printed documentation for the user of your UPT application, you may include "screen photographs" of the real terminal's displays. You don't need a camera for that purpose, it is possible to take a screen "snapshot" via CAN-Bus.
Start the "Snapshot" dialog from the "Transfer" menu of the programming tool.
The parameters on the right side are used for the communication between the tool and the terminal. You will usually not have to modify these values (only if you want to make snapshots from devices that are not UPTs).
All you have to do is click on the "Start !"-button to freeze the actual LCD-contents in an internal buffer of the connected terminal. The buffered data will then be transferred to the snapshot utility (pixel by pixel). After completion of the transfer, you may click "OK" to save the received image as a bitmap-file, or click "CANCEL" to discard the received image.
Hinweis: Der Screen-Snapshot-via-CAN funktioniert (noch) nicht bei Geräten mit CANopen V4; bei Geräten mit "CANdb" (wie MKT-View) ist diese Funktion mangels eines geeigneten Übertragungsprotokolls generell nicht verfügbar !
Bei Geräten mit Ethernet-Interface, TCP/IP-Protokoll, und internem HTTP-Server (z.B. MKT-View II/III/IV) kann der Bildschirminhalt per Web-Browser ausgelesen werden. Geben Sie dazu im Browser die IP-Adresse des Terminals ein.
Zurück zum Inhaltsverzeichnis
Das CAN-Interface im/am PC
Um vom PC aus mit dem CAN-Bus kommunizieren zu können, benötigt das Programmiertool ein geeignetes CAN-Interface, inklusive der dazu passenden Treibersoftware.
Bevor Sie irgendeine CAN-Hardware in ihrem PC installieren, lesen Sie die
Anweisungen des Herstellers sorgfältig durch ! (Die Firma MKT
Systemtechnik stellt selbst keine CAN-Interfaces für den PC her).
Weder Hersteller noch MKT Systemtechnik wird für irgendwelche Schäden
haftbar sein. Weiterführende Informationen finden Sie in einer gesonderten
Datei.
Die folgenden CAN-Interfaces können für das UPT/CVT-Programmiertool verwendet werden:
Allgemeine Hinweise zur Installation eines CAN-Interfaces finden Sie hier.
Wir empfehlen generell, andere Schnittstellen zu verwenden (die am PC einfacher
zu installieren und zu verwenden sind als CAN), z.B. serielle Schnittstellen wie
RS-232 bzw VCP, wie im folgenden Kapitel beschrieben. Fast alle neueren
Geräte mit 32-Bit-CPU und Farbdisplay bieten mindestens eine 'gängige'
Schnittstelle, die direkt (ohne spezielle Interfaces) an den PC angeschlossen
werden kann.
Hinweis: Die Konfiguration des CAN-Interfaces "im" (bzw. am) PC hat nichts mit der Konfiguration der beiden (?) CAN-Busse im programmierbaren Gerät zu tun. Die Konfiguration der CAN-Busse "im Gerät" erfolgt über das System-Menü des Terminals, oder mit Hilfe des hier beschriebenen Einstell-Dialogs.
Konfiguration des CAN-Interfaces für die Programm-Übertragung
Für eine erfolgreiche Programm-Übertragung per CAN müssen die Parameter zwischen Programmiertool und zu programmierendem Gerät 'hinreichend kompatibel' sein. Nach dem Laden einer neuen Konfiguration (z.B. aus einer *.cvt-Datei) könnte allerdings die Konfiguration des ersten CAN-Interfaces im zu programmierenden Gerät von der Konfiguration des vom Programmiertool verwendeten CAN-Interfaces am PC abweichen. Auf der Registerkarte 'Settings' / 'Programming Tool Settings' (bzw. 'Einstellungen' / 'Einstellungen des Programmiertools' .Siehe auch :
Dialog zum Konfigurieren der vier (?) CAN-Schnittstellen im zu programmierenden Gerät,
Details zu CAN FD in den programmierbaren Anzeigegeräten von MKT Systemtechnik.
USB-nach-Seriell-Adapter (Virtual COM Ports)
Einige Geräte (z.B. "CVT-MIL 320") verfügen über einen internen USB-nach-Seriell-Adapter, der sich aus Sicht des PCs als Virtueller COM-Port (VCP) präsentieren sollte. Aktuelle Windows-Versionen sollten diesen Chip (FT232R) erkennen, und beim ersten Anschliessen automatisch die für Ihr Betriebssystem passenden Treiber (FTDI, FT232R, VCP) installieren.
Falls Windows Probleme hat, die neu angeschlossene USB-Hardware zu erkennen,
können Sie versuchen den passenden
VCP
-Treiber auf der
FTDI-Webseite, zu finden
und manuell zu installieren. Bitte haben Sie Verständnis dafür,
daß wir (MKT Systemtechnik) nicht in der Lage sind, den/die VCP-Treiber
auf jedem der vierzehn verschiedenen Windows-Versionen, die im Januar
2010 den FTDI-Chip (FT232R) unterstützten, selbst zu testen.
Bei Problemen mit den USB-Treibern kann es helfen, den USB-Stecker auf der
PC-Seite in einen anderen USB-Port zu stecken (geeignete PCs haben definitiv
mehr als einen USB-Anschluss .. notfalls hilft ein Hub).
Offenbar verliert Windows gelegentlich die Übersicht über alle
installierten USB-Geräte, und nervt Sie (den Anwender) mit Fehlermeldungen
wie dieser:
(Haben Sie wirklich erwartet, durch Anklicken dieser Meldung den Fehler
im USB-Treiber zu beheben ? Viel Erfolg damit !
Der Fehler liegt natürlich nicht am angeschlossenen USB-Gerät,
sondern an Windows' unüberschaubarem USB-Treiber-Salat . )
Immerhin gelang es dem Autor dieses Dokuments, durch mehrfaches Umstecken des USB-Adapters (auf der PC-Seite) das Problem vorübergehend zu beheben. In einem hartnäckigeren Fall war es nötig, den USB-Treiber-Schrott, der sich im Laufe der Jahre auf einem Rechner ansammeln kann, zu entrümpeln. Dazu eignen sich Hilfsprogramme wie z.B. Microsoft's "USBView.exe", welches im Januar 2010 auf der FTDI-Webseite(!) unter " Microsoft USBView - USB Connection Viewer" heruntergeladen werden konnte. Im USB-View sollte irgendwo ein "USB Serial Converter" angezeigt werden, dessen Connection Status auf 'DeviceConnected' stehen sollte. Um nicht mehr benötigte USB-Treiber loszuwerden (die, wie schon gesagt, Probleme verursachen können), fragen Sie ihre freundliche Suchmaschine "how to get rid of unused USB drivers" / "Windows Ungenutzte Treiber und Geräte entfernen".
Falls die Verbindung zwischen PC (Programmiertool) und programmierbarem Terminal
per USB mit Virtual COM Port hergestellt wird, kann die Baudrate unter
'Einstellungen des Programmiertools' auch auf -für den COM-Port-
unüblich hohe Werte wie z.B. 230400 oder 460800 Bit/Sekunde eingestellt
werden.
Siehe auch:
Das System-Menü im Terminal
(Siehe auch: Beschreibung des System-Menüs im 'druckbaren' Dokument Nr. 85115)
Die meisten programmierbaren Anzeigesysteme von MKT (z.B. "UPTs" und "MKT-Views") verfügen über ein internes System-Menü, welches i.A. mit einer bestimmten Tastenkombination aufgerufen werden kann (z.B. gleichzeitiges Drücken der Funktionstasten F2 und F3, bzw. mit der unter general terminal options definierten Tastenkombination).
|
Bei Geräten die ausschließlich über einen Touchscreen (aber keine "echten" Tasten) verfügen, kann das Systemmenü per Touchscreen-Geste "eckiges U" aufgerufen werden:
|
|
Bei vielen Geräten kann das Systemmenü auch per Fernsteuerung bedient werden,
z.B. per RS-232 mit einem "Terminal-Programm", per CAN mit MKT's
CAN-Tester,
oder per Ethernet mit TCP/IP und TELNET. In fast allen Fällen muss die
Tastenkombination "F2 + F3" durch CTRL-S (STRG-S) ersetzt werden, weil
in üblichen Terminalprogrammen das gleichzeitige Drücken zweier Funktionstasten
leider keine Funktion hat.
Hier als Beispiel das Systemmenü im "alten" UPT 515. Je nach Bildschirm könnte
das Systemmenü ganz anders aussehen, das Prinzip der Bedienung bleibt aber gleich:
Prinzipielle Bedienung des Systemmenüs (am/im programmierbaren Terminal):
Display-, Audio-, CAN-Bus-, und weitere Einstellungen im System-Setup
Einige wichtige Parameter, die im System-Menü ("Setup") des UPTs eingestellt werden können:Hinweis: CAN-Baudrate und (bei CANopen) Node-ID müssen im Setup-Menü des Gerätes (UPT, MKT-View, o.Ä.) und in der Konfiguration des Programmiertools kompatibel eingestellt werden. Andernfalls kann das 'Anzeigeprogramm' nicht per CAN-Bus in das Gerät geladen werden (siehe 'Einstellungen' bzw. 'Settings' ).
Einige Geräte enthalten einen Menü-Eintrag namens "User settings" mit folgenden Funktionen..
Geräte wie z.B. die meisten "MKT-Views" enthalten einen CAN-Logger/CAN-Snooper. Der Snooper kann -wenn in der Firmware vorhanden- durch das Systemmenü aktiviert werden.
Bei Geräten, die weder über eine Tastatur, noch einen Drehknopf zur Bedienung, noch über einen Touchscreen verfügen, muss das Systemmenü notfalls per Fernsteuerung aufgerufen werden.
Einige Funktionen des Systemmenüs können auch direkt aus dem Anwenderprogramm per Interpreterkommando aufgerufen werden, z.B. die Kontrasteinstellung und das Einstellen der batteriegepufferten Uhr (falls vorhanden).
Weitere Informationen zu dem im Terminal eingebauten "System-Menü" finden Sie auch in Dokument Nr. 85115 (PDF) .
Geräte mit Ethernet und TCP/IP können auch per
Web-Server (HTTP) konfiguriert werden.
Netzwerk-Setup (im Systemmenü der programmierbaren Terminals, nur für Geräte mit Ethernet / TCP/IP)
Bei Geräten mit Ethernet-Port und TCP/IP-Protokoll kann aus dem Main System Menu das Untermenü Network Setup aufgerufen werden.Dort kann u.A. der Name und die IP-Adresse des Gerätes eingestellt werden, wie auch weitere für die Kommunikation per TCP/IP (und, z.T. UDP) relevante Parameter.
Im 'Network Setup' konfigurierbare Parameter :
Hinweis: Folgen Sie den externen Links, falls Ihnen Begriffe wie TCP, IP,
Subnet-Maske, Gateways, HTTP, Telnet, FTP, etc nicht geläufig sind.
Wir empfehlen darüberhinaus dringend die Konsultation einschlägiger
Literatur, wenn die Nutzung von TCP/IP über ein paar Mausklicks im Web-Browser
hinausgehen soll.
Durch Drücken der Enter-Taste (bzw. des Drehknopfes) wird innerhalb
des Network-Setup-Menüs zwischen 'Navigate' ("NAV", d.h. Bewegen des
Selektionsbalkens) und 'Edit' (d.h. Ändern des grade selektierten
Parameters) umgeschaltet. Ein kurzer Hinweis zur Bedeutung des momentan
markierten Feldes wird in der unteren Zeile angezeigt.
Details zu den Einstellmöglichkeiten im "Network Setup" entnehmen Sie
bitte der bereits erwähnten Dokumentation des System-Menüs (Dokument
Nr. 85115).
Alternativ können die Netzwerk-Einstellungen auch per
Web-Interface
geändert werden.
Siehe auch: Unterdrücken der Popup-Fenster beim Starten bestimmter Services (z.B. DHCP, CAN-via-UDP, WLAN)
Wireless LAN Setup (bei Geräten mit WLAN statt Ethernet, z.B. MKT-View V)
Ein- und Ausschalten des Gerätes; automatisches 'Aufwecken' z.B. per CAN
Hinweis: Die in diesem Unterkapitel beschriebenen Features beziehen sich nur auf Geräte mit einem integriertem 'Standby-Controller', wie z.B. im MKT-View II / III / IV / V. Andere Geräte verfügen z.T. nicht über die Möglichkeit, sich automatisch bei CAN-Bus-Aktivität einzuschalten.Im Normalfall (Default-Einstellung) wird das Gerät mit der Power-Taste ein- und ausgeschaltet (oft mit der Funktionstaste F1 kombiniert; langes Drücken der Taste öffnet dann zunächst das 'Shutdown'-Menü). Darüberhinaus kann auch die Applikation das Gerät herunterfahren (Script-Befehl system.shutdown).
Im 'abgeschalteten' Zustand ist nur noch der von einem stromsparenden Längsregler versorgte 'Standby-Controller' aktiv (Stromverbrauch i.A. unter einem Milliampere). Dessen Verhalten bezüglich des Wiedereinschaltens kann im 'System Setup' wie folgt konfiguriert werden:
|
Konfiguration 'Wake-Up' (manuelles oder automatisches Einschalten) beim MKT-View
Freischaltung von Sonderfunktionen
Dieses Unterkapitel wurde wegen ausufernder Dateigröße in eine eigene Datei (unlock_49.htm) verschoben.Storage Directory (im 'System Menu' unter 'Diagnostics' abrufbar)
Im Normalfall brauchen Sie sich nicht um den Speicherbedarf im Flash des Zielsystems zu kümmern. Solange keine Warnungen wegen 'knappem Speicher' auftreten, können Sie dieses Unterkapitel daher überspringen.Die Anzeige des für verschiedene Teile der Applikation benötigten Speichers könnte wichtig werden, wenn Sie z.B. eine ursprünglich für ein Gerät mit 'großem' Speicher entwickelte Applikation auf einem 'kleineren' Gerät laufen lassen wollen, und dabei Probleme wegen eines zu kleinen Flash-Speichers auftreten. Die im folgenden beschriebene Anzeige kann Ihnen bei der Entscheidung helfen, welche Objekte (z.B. Bitmaps) in der Applikation verkleinert oder entfernt werden müssen, damit die Applikation auch auf dem 'kleineren' Gerät lauffähig wird.
Das 'Storage Directory' wird am Gerät in Form einer scrollbaren Tabelle mit den folgenden Spalten angezeigt:
Beispiel (man beachte die Abweichungen zur 'Schätzung' durch das Programmiertool):
Nr Type Count kByte FirstAddr LastAddr 01 GENS 1 1 0x29873BA4 0x29873BA4 02 SDOs 0 0 0x00000000 0x00000000 03 PDOs 0 0 0x00000000 0x00000000 04 VARI 40 7 0x2986CDBC 0x2986E6B8 05 G_EV 31 22 0x2986E75C 0x298738EC 06 CANO 0 0 0x00000000 0x00000000 07 user 0 0 0x00000000 0x00000000 08 CdbH 1 2 0x29873EF4 0x29873EF4 09 CdbS 21 2 0x2986C034 0x2986C82C 10 ufnt 0 0 0x00000000 0x00000000 11 ufre 1 1 0x29873EA8 0x29873EA8 12 FREF 0 0 0x00000000 0x00000000 13 FLEX 0 0 0x00000000 0x00000000 14 STRG 242 9 0x29840198 0x2986CD94 15 ICON 99 143 0x29848828 0x2986B680 16 PAGE 20 27 0x29840000 0x2986C89C 17 TEXT 1 1 0x29848810 0x29848810 18 SCRI 0 0 0x00000000 0x00000000 19 DYNA 0 0 0x00000000 0x00000000 Entries=19 used: 215; unused: 814 kByte |
Diese Angabe ermöglicht eine Abschätzung, wie viele Anzeigeseiten, Script-Quelltext, Icons/Bitmaps usw. einer bereits existierenden Applikation noch hinzugefügt werden können, bevor der Flash-Speicher im Zielsystem knapp wird.
Die Auflistung nach Element-Typ erleichtert die Entscheidung, welche Elemente ggf. aus der Applikation entfernt oder verkleinert werden müssten, um die Applikation auch auf Systemen mit kleinerem Speicher lauffähig zu machen.
Siehe auch: Ermitteln des Flash-Speicher-Bedarfs durch das Programmiertool.
Fernbedienung (für das Systemmenü im programmierbaren Gerät)
Einige "Anzeige-Terminals" von MKT Systemtechnik verfügen weder über eine Tastatur, noch Touchscreen, noch über einen Drehknopf zur Bedienung. Um solche Geräte trotzdem bedienen zu können (speziell das System-Menü), verfügen diese über eine primitive Fernsteuerfunktion (bislang nur per CAN oder RS-232) .
Geräte mit integrierten Web-Server (z.B. MKT-View II, MKT-View III) können alternativ auch per Web-Server überwacht und konfiguiert werden. Abhängig von der Netzwerk- Konfiguration (DHCP, NetBIOS, etc) können diese Geräte im Web-Browser über ihren Host-Namen angesprochen, z.B. UPT (UPT=Default-Host-Name für alle User Programmable Terminals, zu denen auch die 'MKT-View'-Familie gehört).
Details zur Bedienung des System-Menüs per Fernsteuerung und zur Konfiguration per Web-Browser finden Sie in einem externen Dokument mit dem Titel Fernbedienung für programmierbare Displays ohne Tastatur.
Zurück zur Übersicht
Die Fehler-Anzeige-Seite ("Fehler & Meldungen")
Auf der Registerkarte 'Fehler und Meldungen' werden Fehlermeldungen (und Warnungen) angezeigt, die während der Programmeingabe, der Simulation, beim Übersetzen von Scripten, oder der Übertragung des fertigen Programms in das Terminal auftreten könnten. Darüberhinaus können hier empfangene und gesendete CAN-Telegramme, und die Ergebnisse der globalen Suche aufgelistet werden. Auch Meldungen, die zu Testzwecken per Script in die Trace-Historie 'gedruckt' werden, werden hier angezeigt (oder in einem separaten Fenster, zu öffnen über das Kontext-Menü des Editors).Der Inhalt der Meldungsliste kann mit dem Button "Löschen" (Delete) geleert werden. Der "Stop"-Button über der Fehlermeldungs-Anzeige stoppt nur die Fehlermeldungs-Liste, aber nicht die simulierte Applikation !
Als Alternative zur Anzeige auf der o.g. Registerkarte können alle Fehlermeldungen, Warnungen, Suchergebnisse, die TRACE-Historie, usw. auch in einem eigenständigen Fenster angezeigt werden (im Hauptmenü: Ansicht .. Trace-Historie, Fehler, Warnungen .. in einem separaten Fenster anzeigen). Steht ein ausreichend großer 'Desktop' zur Verfügung, kann der Entwickler so im Hauptfenster das Script-Fenster oder den Display-Seiten-Editor sichtbar halten, während CAN-Telegramme, Trace-History-Einträge, Fehler, Warnungen, und weitere Meldungen ständig 'im Blick' bleiben.
Sprung zur Fehlerursache per Mausklick
Wenn eine Fehlermeldung die Nummer der Displayseite und -zeile enthält, auf der dieser Fehler auftrat, können Sie durch Anklicken der Meldung mit der rechten Maustaste oder per Doppelklick direkt zur Fehlerursache springen. Beispiel für eine derartige Meldung:INTP: (page 2, line 5) Variable 'Call' not found.
Dies funktioniert auch bei Meldungen der Seitenumschaltungs-Verfolgung (page-switch trace), und bei 'Fundstellen' aus der globalen Suche, z.B.:
Switched from page 0 to page 2 ("Engine"), reason: GOTO on page 0, line 9
Globale Textsuche nach 'ISO15765_ADDR_FORMAT_FIXED_NORMAL' :
Script-Quelltext, Zeile 133 : ISO15765_ADDR_FORMAT_FIXED_NORMAL = 2;
Script-Quelltext, Zeile 617 : iAddrFormat := ISO15765_ADDR_FORMAT_FIXED_NORMAL;
Es wurden 2 Vorkommen von 'ISO15765_ADDR_FORMAT_FIXED_NORMAL' gefunden.
Fehlerklassen und weitere angezeigte Meldungen (CAN, CANopen, ..)
Treten z.B. während der Programmübertragung Fehler auf, können -je nach Übertragungsmedium bzw Protokoll- in der Fehlerliste auch hexadezimal codierte SDO-Fehlercodes, zusammen mit dem CANopen-index des Objektes bei dem der Fehler auftrat, angezeigt werden.Falls Fehler durch Zugriff auf "nicht existierende Objekte" im CANopen-Objektverzeichnis des Terminals auftreten, könnte ein Kompatibilitätsproblem zwischen alter Firmware und neuem Programmiertool die Ursache sein.
Andere Fehler, die bei der Simulation der Terminal-Anwendung auftreten könnten, liegen (beim UPT515) oft an falsch verbundenen Variablen (z.B. SDO-Kanal mit falschem Index und/oder Subindex.
Die Fehlermeldungs-Liste kann auch als einfacher CAN-Monitor eingesetzt werden. Per Voreinstellung sind die Häkchen "RX-Telegramme" und "TX-Telegramme" abgeschaltet. Wenn Sie testen wollen, welche Telegramme gesendet und/oder empfangen werden, schalten Sie die entsprechenden Häkchen ein. (Vorsicht: manche PC's sind für diese Funktion zu langsam - das für die Anzeige verwendete RichEdit-Control ist nicht in der Lage, hunderte von Textzeilen pro Sekunde an die Liste anzuhängen !)
Wenn die Option "Error Frames anzeigen" 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
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 CAN-Bit-Timing-Register, oder ein
"babbling idiot" in einem der CAN-Knoten
sein).
Steht kein geeignetes CAN-Interface zur Verfügung, können CAN-Telegramme auch per
CAN-Logfile-Player für die Simulation eingespeist werden. Die vom
Player 'abgespielten' Telegramme werden ebenfalls -optional- auf der Registerkarte
'Fehler und Meldungen' angezeigt.
Anzeige der Trace-Historie unter 'Fehler & Meldungen'
Seit 07/2021 durchlaufen sämtliche Meldungen auf der Registerkarte 'Fehler & Meldungen' (bzw. im separaten Fenster mit dem Titel 'Fehler, Meldungen, Trace-Historie'), optional angezeigte CAN-Messages, Meldungen vom Programmiertool (Fehler, Hinweise, Suchergebnisse), vom Script-Laufzeitsystem, und von der Applikation per trace.print "gedruckte" Hinweise den früher nur für die Trace-Historie genutzten Ringspeicher.Alle Meldungen werden daher chronologisch sortiert angezeigt. Das System fügt den meisten Meldungen einen Zeitstempel hinzu, der per Default dezimal (in Sekunden seit dem Start des Programmiertools) angezeigt wird. So kann auch nach einem längeren Testlauf anhand der Zeitstempel auf etwaige Abhängigkeiten geschlossen werden, z.B. "3 Sekunden nach Senden von Kommando XYZ traten vermehrt Error-Frames auf dem CAN-Bus auf, 1 Sekunde danach ging der Controller in den Bus-Off-Zustand, und 10 Sekunden später bemerkte das Script (d.h. die Applikation) einen Kommunikations-Timeout".
Siehe auch: Debugging, Trace, Troubleshooting und FAQs .
Zurück zur Beschreibung des Hauptfensters
Kommando-Interpreter
Der Kommando-Interpreter ist Teil der UPT-Firmware, aber der weitgehend identische Code steckt auch im UPT-Programmiertool. Der größte Teil Ihres "Anwenderprogramms" wird von diesem Interpreter abgearbeitet. Der Interpreter wird intern zum Auswerten von Formeln (numerischen Ausdrücken), Ereignis-Definitionen und zum Abarbeiten von Grafikbefehlen (nicht zu verwechseln mit den Backslash-Sequenzen) und den Grafikbefehlen in der Script-Sprache) verwendet.Im Interpreter sind verschiedene Kommandos (alias "Prozeduren") und Funktionen implementiert. Funktionen geben einen Wert zurück, und können daher als Teil eines numerischen Ausdrucks verwendet werden. Kommandos liefern dagegen keinen Wert zurück (und können daher nicht als Operand in numerischen Ausdrücken verwendet werden).
Sie können zu Testzwecken ein einzelnes Interpreterkommando abarbeiten lassen, indem Sie es in der Statuszeile des Programmiertools eingeben (dort wo normalerweise Fehlermeldungen und Warnungen angezeigt werden).
So können Interpreterbefehle (etwas komfortabler) auch in einem speziellen Test-Kommando-Fenster eingeben, und diese Kommndoliste für später in einer Datei abspeichern.
Kommandos die nur vom Programmiertool, aber nicht vom "echten" Terminal ausgeführt werden können, sind:
Alle Kommandos die nicht direkt vom Programmiertool verarbeitet werden können werden zum Interpreter des (simulierten) Terminals durchgereicht. Das Format dieser Kommandos entspricht der Syntax die für Ereignis-Reaktions-Methoden verwendet wird, z.B. "g" für "goto" usw.
Auch der anno 2021 erweiterte CAN-Simulator verwendet den in diesem Kapitel vorgestellten Kommando-Interpreter zum Abarbeiten der frei programmierbaren Ablaufsteuerung, deren Funktionsprinzip den programmierbaren Ereignis-Definitionen in der Display-Applikation entspricht.
Siehe auch:
Numerische Ausdrücke (expressions)
Die UPT-Firmware enthält einen Interpreter für numerische Ausdrücke ("Formeln"). Diese Ausdrücke dienen als...Ausdrücke können aus den folgenden Elementen bestehen:
Siehe auch: Interpreter-Kommandos, numerische Ausdrücke in der Script-Sprache .
Feste Zahlenwerte (Konstanten)
Der Interpreter für numerische Ausdrücke akzeptiert Zahlenwerte (Konstanten) in den folgenden Formaten:
Dezimale Konstanten können auch ein Vorzeichen (-) erhalten.
Als hexadezimale Ziffern dürfen Groß- oder Kleinbuchstaben verwendet werden.
Verknüfungsoperatoren (numeric operators)
Verknüpfungsoperatoren können Teil von numerischen(*) Ausdrücken sein. Lediglich die Addition ist auch in String-Ausdrücken erlaubt.Der Interpreter für numerische Ausdrücke kann die folgenden einfachen Operatoren verarbeiten (mit zwei "Eingängen" und einem "Ausgang"):
+ Addition
- Subtraktion
* Multiplikation
/ Division (ohne Rest)
% Modulo (berechnet den Rest einer Division)
== "gleich"
!= "ungleich" (ehemals auch "<>")
< "kleiner als"
<= "kleiner oder gleich"
> "größer"
>= "größer oder gleich"
<< bitweise nach links schieben (nur für Integer-Werte)
>> bitweise nach rechts schieben (nur für Integer-Werte)
& bitweise UND-Verknüpfung (nur für Integer-Werte...)
&& boolesche UND-Verknüpfung
| bitweise ODER-Verknüpfung
|| boolesche ODER-Verknüpfung
^ bitweises EXKLUSIV-ODER
~ bitweises Invertieren (als Prefix)
! boolesches Invertieren (als Prefix, "nicht")
Ein besonderes Schmankerl für "C"-Programmierer ist der "arithmetische if-then-else Operator":
Boolesche Operatoren liefern entweder TRUE oder FALSE, was hier durch die Werte 1 und 0 repräsentiert wird.
Eingänge für boolesche Operatorens sind TRUE wenn das Argument nicht Null ist, andernfalls FALSE (wenn Argument Null).
Die Priorität der Operatoren legt die Reihenfolge bei der Abarbeitung fest. Der Interpreter kennt nur zwei verschiedene Prioritätsstufen, niedrige Priorität haben Addition, Subtraktion, Vergleich, "OR"-Verknüpfungen; hohe Priorität haben Multiplikation, Division, Modulo, "UND"-Verknüpfungen. Verwenden Sie im Zweifelsfall Klammern ! Ein geklammerter Teilausdruck hat immer die höchste Priorität.
Variablen als Teil eines numerischen Ausdrucks
Variablen können Teil eines numerischen Ausdrucks sein.Der Interpreter für numerische Ausdrücke erkennt eine Variable am Großbuchstaben am Anfang des Namens (dies erleichterte die Auswertung bei langsamen Prozessoren, wie anno 2003 im "UPT515").
Im "UPT515" durften Variablennamen aus maximal 8 Zeichen bestehen, Ziffern sind nur ab Position 2 zulässig. Alle Variablennamen müssen in einer Tabelle des Programmiertools definiert werden. Nur bei Firmware-Varianten mit CANdb-Funktionalität sind bis zu 16 Zeichen zulässig (abzulesen unter "General Settings").
Normalerweise stammt der "Eingangswert" einer Variablen von einem Kommunikationskanal (z.B. PDO oder SDO bei CANopen). Sie können allerdings auch neue Werte an eine Variable mit Hilfe des "@"-Kommandos des Interpreters zuweisen.
Im UPT ist eine Variable nicht nur ein simpler "Speicherplatz" für einen numerischen Wert, sondern eine komplexe Datenstruktur mit vielen Komponenten.
Ohne den optionalen Komponentennamen liefert der Interpreter den "aktuell editierten Wert" der Variablen, bzw. den zuletzt per Kommunikations- Kanal empfangenen, und für die Anzeige skalierten Wert.
Einige der "komplizierteren" Komponenten einer Variablen werden
im folgenden Abschnitt vorgestellt.
Seit Oktober 2012 sind die oben aufgeführten Komponenten auch in der
Script-Sprache nutzbar.
Siehe auch:
Inspizieren von Interpreter-Ausdrücken per Maus
In vielen Definitionstabellen des Programmiertools kann der Inhalt von Variablen oder numerischen Ausdrücken inspiziert werden, indem der Mauspfeil (ohne zu klicken) über die entsprechende Zelle bewegt wird.Die genaue Position des Mauspfeils über einem Teil des Ausdrucks bestimmt dabei, welcher Teil des Ausdrucks ausgewertet wird:
Interpreter-Funktionen
Der numerische Interpreter erkennt nur Funktionsnamen, die mit einem Kleinbuchstaben beginnen. Dies erleichtert die Syntaxanalyse für langsame CPUs (wie z.B. den im UPT515 eingesetzten 8051-kompatiblen Mikrocontroller). Für einfache Terminal-Applikationen brauchen Sie sich nicht mit dem Interpreter zu beschäftigen, weil das Programmiertool an manchen Stellen automatisch Interpreter-Code erzeugen kann. Für "knifflige" Applikationen (die eher der Arbeit eines Programmierers entsprechen) ist die Kenntnis des Interpreters aber unerlässlich.Alle Funktionen des Interpreters (auch die speziellen "Event-Abfrage-Funktionen") können Teil eines numerischen Ausdrucks sein. Der einzige Unterschied zwischen Event-Abfrage-Funktionen und den im Folgenden angeführten Funktionen ist der Typ des "Rückgabewertes" (return): Die Event-Abfrage-Funktionen liefern einen booleschen Wert (TRUE oder FALSE), die meisten "normalen" Funktionen geben einen numerischen Wert zurück.
Alphabetisch sortierte Übersicht der Interpreterfunktionen
Siehe auch:
Funktionen zum Abfragen der Tastatur
Der numerische Interpreter enthält einige Tastatur-Abfrage-Funktionen, die meistens zur Formulierung von Events verwendet werden. Sie können diese Funktionen aber auch als Teil von numerischen Ausdrücken verwenden.Bei Geräten mit Script-Sprache (z.B. MKT-View II,III,IV) wird empfohlen, wenn überhaupt eine 'eigene Tastaturabfrage' nötig ist, die Tastaturereignisse per Script zu verarbeiten.
Alle Tastatur-Abfrage-Funktionen bestehen aus zwei Buchstaben und evtl. einer direkt darauf folgenden Ziffer. Die Buchstaben bestehen aus der Abkürzung eines (englischen) Funktionsnamens. Die Ziffer gibt (meistens) an, welche Taste abgefragt werden soll. "Taste 0" ist meistens die "erste Funktionstaste" auf der linken Seite, dies hängt vom Tastaturlayout ab. In der folgenden Übersicht ist die Tastennummer durch den Buchstaben "N" ersetzt :
Für komplexere Anwendungen ist auch die Abfrage der "System-Tasten" mit drei weiteren Interpreterfunktionen möglich:
Siehe auch:
Erweiterte kb()-Funktion für Geräte mit 32-Bit-CPU
Geräte mit 32-bit-CPU und Firmware-Kompilationsdatum seit 2009-09-30
unterstützen eine erweiterte Syntax für die
kb-Funktion, mit der z.B. auch Cursortasten abgefragt, und
aus dem Tastaturpuffer entfernt werden können.
Beispiele:
Detailierte Beschreibung der Funktionen 'kh' und 'kc' (spezielle Tastaturfunktionen)
Die Funktionen "kh" (key hit) und "kc" (key code) ermöglichen eine direkte Tastaturabfrage in der Anwendung, mit der z.B. Sonderfunktionen realisiert werden können, für die die normalen Eingabefelder nicht ausreichen.
Die Funktion "kh" kann zur Formulierung eines Events verwendet werden, mit dem abgefragt wird ob irgendeine Taste (außer den Shift-Tasten) gedrückt wurde.
"kh" testet, ob irgendeine Taste seit dem letzten Aufruf der Funktion "kc" gedrückt wurde (siehe Unten). "kh" liefert den Wert "0" (Null) wenn keine Taste gedrückt wurde, oder "1" (Eins) wenn irgendeine Taste auf der UPT-Tastatur gedrückt wurde. Genaugenommen wird mit dieser Funktion abgefragt, ob Zeichen im Tastaturpuffer warten oder nicht.
"kc" holt den nächsten Tastencode aus dem Puffer (und entfernt die Taste damit aus dem Puffer!). Für ehemalige DOS-Programmierer: "kh" = "kbhit()", und "kc" = "getkey()" aus Borland's CONIO.
Die folgenden Ereignisdefinitionen stammen aus einem Beispiel im Verzeichnis "Programs":
Das Ereignis (event) "kh" löst die Reaktion "@Key=kc" aus, wenn eine Taste im Tastaturpuffer wartet. Der Tastencode wird dann aus dem Puffer geholt und an die Variable "Key" zugewiesen (die Variable "Key" muß dazu in der Variablentabelle definiert sein).
Falls die Variable "Key" beispielsweise per SDO-Kommunikationskanal mit einem externen Gerät (außerhalb des UPTs) verbunden ist, kann der Wert in der Variablen "Key" wieder auf Null gesetzt werden, sobald sie erfolgreich per SDO an die "Außenwelt" weitergegeben wurde (und vom Partner per SDO quittiert wurde).
Das Event
(Key!=0)&&(Key.od)
wird TRUE(1) wenn der aktuelle Wert der Variablen "Key" NICHT NULL ist und der Inhalt der Variablen bereits erfolgreich über den mit "Key" verbundenen Kommunikationskanal gesendet wurde (.od bedeutet "output done" bzw. "Ausgabe erledigt").
Wenn wir "Key" in diesem Beispiel wieder auf Null setzen würden, sobald "kein Tastendruck" vorliegt, könnten Tastenereignisse verlorengehen. Dieses Beispiel stellt sicher, daß der Partner den Tastencode erhalten wird, egal wie lange die Taste gedrückt wurde und wie langsam der Übertragungskanal arbeitet.
Wir empfehlen, die Funktion "kc" nach Möglichkeit nicht zu verwenden,
weil sich die Tastencodes die von dieser Funktion geliefert werden von der
verwendeten Tastatur abhängen, die sich in zukünftigen Firmware-
oder Hardware-Versionen ändern könnten.
Von der Funktion "kc" gelieferte System-Tastencodes
Einige Tasten mit fest zugeordneten Spezialfunktionen können von der Applikation mit den Funktionen "kc" (keyboard code) und "kcb" (keyboard code, buffered) abgefragt werden. Wir versuchen, diese Tastencodes -unabhängig von der Tastatur-Hardware- auch in zukünftigen Geräten beizubehalten. Die unten folgende Tabelle enthält die Tastencodes, die sich mit hoher Wahrscheinlichkeit nicht ändern werden.(Hinweis: Um mit dem Programmiertool "hotkeys" für Menüs und Schaltflächen zu definieren, brauchen Sie diese numerischen Werte nicht ! Geben Sie besser den NAMEN der Tasten in der entsprechenden Definitionstabelle ein )
Die folgende Tabelle stellt eine Vereinigungsmenge aller bislang verfügbaren Tastaturen dar; möglicherweise verfügt die von Ihnen eingesetzte Tastatur nur über wenige der hier aufgeführten Tasten ! Einige der unten aufgeführten Codes können als Parameter für die Funktion "hk" (handle key) eingesetzt werden, falls Ihre Tastatur nicht über bestimmte, für Ihre Anwendung wichtige Tasten verfügt.
Code | Tastenname | Hinweise |
Tasten mit Sonderfunktionen, nur wenige davon werden bei einem bestimmten Gerät wirklich existieren: |
||
8 | BACKSPACE | short name BS |
9 | TAB | |
10 | EDIT | |
11 | CLEAR | |
12 | QUESTIONMARK | because ASCII-'?' is MF2-scancode for "F5" (#63) |
13 | ENTER | alias RETURN |
14 | SAVE | rhombic shape with arrow |
15 | HELP | sometimes labelled "Help", customer specific |
16 | MODE | |
17 | ALPHA | often labelled "A...Z" |
18 | LIGHT | sometimes lightbulb symbol, customer specific |
19 | CONTRAST | no unified symbol for this yet |
20 | INSERT | |
21 | DELETE | |
22 | POS1 | |
23 | END | |
24 | PAGE_UP | encoder may be mapped to this key |
25 | PAGE_DOWN | encoder may be mapped to this key |
26 | (reserved) | |
27 | ESCAPE | |
28 | SHIFT1 | usually NOT placed in keyboard buffer |
29 | SHIFT2 | usually NOT placed in keyboard buffer |
Tasten mit ASCII-equivalenten Zeichen | ||
32 | SPACE | |
43 | PLUS | |
46 | DOT | |
48 | DIGIT_0 | short key names 0 .. 9 for numeric digits |
49 | DIGIT_1 | |
50 | DIGIT_2 | |
51 | DIGIT_3 | |
52 | DIGIT_4 | |
53 | DIGIT_5 | |
54 | DIGIT_6 | |
55 | DIGIT_7 | |
56 | DIGIT_8 | |
57 | DIGIT_9 | |
Codes 59 bis 68 sind SCANCODES der FUNKTIONSTASTEN bei
MF2-Tastaturen. F1..F3 könnten die einzigen "Tasten" sein, die bei Ihrer Tastatur wirklich existieren (MKT-View) ! |
||
59 | F1 | |
60 | F2 | |
61 | F3 | |
62 | F4 | |
63 | F5 | |
64 | F6 | |
65 | F7 | |
66 | F8 | |
67 | F9 | |
68 | F10 | |
69 | F10 | |
70 | F12 | |
Weitere Sonderfunktionen... | ||
71 | DOUBLECLICK | Doppelklick mit Drehknopf ("Encoder") |
Codes 77,75,72,80 sind SCANCODES des CURSORBLOCKS bei MF2-Tastaturen: | ||
77 | RIGHT | |
75 | LEFT | |
72 | UP | |
80 | DOWN | |
"Geshiftete" Cursortasten: | ||
81 | SH_RIGHT | |
82 | SH_LEFT | |
83 | SH_UP | |
84 | SH_DOWN | |
Eines Tages wird es möglicherweise ein "UPT" mit
alphanumerischer Tastatur geben... ...welches dann die folgenden Codes für die BUCHSTABEN verwendet (ASCII lower case): |
||
97 | ASCII_a | |
... | ||
122 | ASCII_z | |
Einige Hintergrundinformationen zu den System-Tasten-Codes:
Siehe auch: Übersicht der
Tastaturfunktionen, Funktionen zur Abfrage
des Drehknopfes .
Arithmetische und andere numerische Funktionen
isin(X) Integer-Sinus aus ROM-Tabelle
X=0...1023 liefert eine volle Sinus-Periode. Wertebereich (aus Tabelle)
+/- 32767. Nicht für UPT515. Kann für die Implementierung von
"Drehzeiger-Instrumenten" verwendet werden, wie z.B. bei der Analoguhr im
Programm "cdb_test1.cvt". Liegt das Argument (X) ausserhalb des Bereichs
0..1023, wird intern eine Modulo-Operation eingesetzt um die Sinus-Funktion
periodisch fortzusetzen.
Hinweis: Bei Geräten mit 32-Bit-CPU (z.B. MKT-View III,IV) stehen in der Script-Sprache
auch trigonometrische Funktionen mit 32-Bit-Fließkomma-Arithmetik zur Verfügung.
Limit-Funktion.
pn (page number), pcnt (page count)
Diese Funktionen liefern die aktuellen Seitennummer, bzw der Anzahl vorhandener
Anzeigeseiten. Beachten Sie bitte, dass -wie bei allen Array-ähnlichen
Datentypen- die Seitennummern von 0 (Null) bis <Anzahl Seiten MINUS
EINS> laufen. Besteht ein Anzeigeprogramm z.B. aus zehn Seiten
(pcnt
=10), liegt pn
(page number)
zwischen 0 und 9. Diese Funktionen sind im Zusammenhang mit dem
goto-Kommando hilfreich, um z.B. per Softkey zur
"vorhergehenden" oder zur "nachfolgenden" Anzeigeseite umzuschalten.
Zusätzlich zum Ermitteln der aktuellen Seitennummer kann die
pn-F
unktion auch die Nummer einer beliebigen, durch
ihren Namen definierten Seite liefern. Beispiel:
Diese Funktion wird z.B. in globalen Events verwendet, wenn das Terminal
momentan nicht eine bestimmte Seite anzeigt. Mit anderen
Worten, wenn "irgendwas" getan werden soll, außer wenn im
Moment eine bestimmte (spezielle) Seite angezeigt wird. Hier ein Beispiel,
mit dem zu einer bestimmten Anzeigeseite (namens "BusOff") umgeschaltet wird,
wenn sich der CAN-Controller im Zustand
"Bus-Off" befindet; aber nur wenn das Programm nicht sowieso schon die
Seite "BusOff" anzeigt :
puc (page update counter), pur (page update rate)
> zurück zur Übersicht numerischer Interfunktionen
Liefert den aktuellen numerischen Wert ("value") innerhalb
einer Anzeigezeile, der sich aus dem Feld
"var/expr" field ergibt (als Teil einer
Display-Zeilen-Definition). Diese Funktion wurde implementiert, um ein Icon
(in Backslash-Sequenz) abhängig vom Wert einer Variablen invertieren
zu können, ohne den Namen der Variablen (o.ae.) in der Sequenz duplizieren
zu müssen. Ein Beispiel finden Sie in der Erklärung der
Icon-Backslash-Sequenz,
ein weiteres im Beispielprogramm für 'Check-Buttons'.
Konvertierungsfunktionen 'val' (value) und 'eval' (evaluate)
val(s)
(value, Interpreter-Funktion zum
Umwandeln einer Zeichenkette in eine Zahl)
Wandelt den String (s) in einen numerischen Wert um. Beispiele:
Hinweis: Die val()-Funktion wurde im Juli 2005 für eine spezielle Anwendung
implementiert (um einen Teil der Text-Tabelle zur Speicherung von Zahlen
einzusetzen) . Ältere Terminals (und ältere Firmware-Versionen)
enthalten diese Funktion nicht ! Bei manchen Geräten existiert
zusätzlich zur einfachen "val"-Funktion noch die im nächsten Absatz
beschriebene Funktion eval
.
eval(string,pos,ndigis,type,default)
(extended value-function)
Wandelt eine Zeichenkette -ähnlich vie val()- in einen numerischen Wert um, bietet allerdings erweiterte Möglichkeiten. Verfügbar seit 09/2005 in Geräten mit 16-bit-CPU und erweiterten String-Verarbeitungs-Funktionen.
Syntax #1: eval(<source-string>, <number of chars to be skipped>, <number of chars to parse> [,<type> [,<default>]])
Beispiele für "eval", Syntax #1 :
Syntax #2 : eval(<source-string>, <substring>, <number of chars to parse> [,<type> [,<default>]])
Hier wird die Anzahl zu überlesender Zeichen (vor der gesuchten Zahl)
nicht als numerischer Wert im zweiten Argument übergeben, sondern als
Sub-String (token), der den Anfang der gesuchten Zahl markiert. Der Interpreter
sucht zunächst nach <substring> in <source-string>,
überspringt die entsprechende Anzahl Zeichen, und konvertiert die danach
folgende Zahl aus dem String. Daher liefert der Ausdruck eval("x=0
t=1234","t=",4)
das gleiche Resultat wie eval("y=3 t=1234",6,4),
nämlich 1234, denn beiden Fällen werden erst 6 Zeichen
überlesen bevor die Zahl aus dem Quell-String konvertiert wird. Der
Vorteil von Syntax #2 ist, dass dies unabhängig von der Anzahl Zeichen
*vor* der Zahl funktioniert (d.h. wenn die Länge des Quellstrings nicht
konstant ist, was z.B. beim Empfang von Daten über die serielle
Schnittstelle vorkommt).
Beispiele für "eval", Syntax #2 :
Zurück zur Übersicht der Funktionen des Interpreters
CANopen-spezifische Funktionen des UPT-Display-Interpreters
PDO-Funktionen des UPT-Display-Interpreters
Hinweis: nicht alle Geräte unterstützen PDOs (process data objects) !
Der Interpreter enthält einige Funktionen (und Prozeduren) zum Zugriff auf die PDO-Kanäle. Einige davon können für Event-Definitionen und als Teil numerischer Ausdrücke verwendet werden.In der Script-Sprache existieren keine äquivalenten Funktionen - Sie können die Prozessdatenobjekte allerdings per Script steuern (und auch notfalls 'umprogrammieren'), indem Sie per Script auf die PDO-Mapping- und -Kommunikationsparameter zugreifen. Verwenden Sie im Script dazu das Kommando cop.obd(index,subindex).
Sie benötigen diese Funktionen im Normalfall nicht, um Werte aus einem empfangenen PDO zu lesen bzw. um Variableninhalte als Teil eines PDOs zu senden ! (verbinden Sie zu diesem Zweck Variablen mit einem PDO-Kanal wie im Kapitel "Variablen an PDO-Kanälen" beschrieben)
Alle hier beschriebenen PDO-Funktionen erfordern die Angabe eines "Indexes" um zu definieren, welcher PDO-Kanal verwendet werden soll.
Sie können pdo0, pdo1, pdo2 oder pdo3 verwenden. Falls der Index variabel sein muß, verwenden Sie einen Ausdruck wie pdo[PdoNr] oder ähnlich.
Ein Punkt (.) dient als Trenner zwischen dem Schlüsselwort "pdo" von der PDO-Struktur-Komponente, die weiter Unten beschrieben wird. Die meisten drei-Buchstaben-Komponenten-Namen können durch zwei Buchstaben abgekürzt werden, z.B. pdo[0].cyc ist das Gleiche wie pdo[0].cy usw.
Übersicht der PDO-Funktionen im Display-Interpreter:
Einige Beispiele zu den PDO-Funktionen finden Sie in den Beispielprogrammen .
SDO-Zugriffsfunktionen
Hinweis: Nicht alle Terminals unterstützen diese Kommandos - nur Geräte mit CANopen (siehe Feature Matrix) !
Dieses Kapitel wurde in ein eigenes Dokument ausgelagert als die Datei zu groß wurde !SYNC-Funktionen des UPT-Interpreters
Hinweis: Nicht alle Terminals unterstützen SYNC-Telegramme !
Der Interpreter bietet einige Funktionen zum Steuern und Empfangen der SYNC-Message (von CANopen). Einige dieser Funktionen sind zum Einsatz in Event-Definitionen vorgesehen.Sie benötigen diese Funktionen nicht, um die SYNC-Message nach CANopen-Standard zu verarbeiten ! Alle PDO-Kanäle mit synchroner Übertragung verarbeiten das SYNC-Telegramm selbst und reagieren passend darauf)
Übersicht der SYNC-Funktionen:
Zurück zur Übersicht der numerischen Funktionen
Generische CAN-Funktionen und -Kommandos
Die folgenden 'generischen' (d.h. nicht CANopen-spezifischen) CAN-Funktionen und -Kommandos existieren nur noch aus Gründen der Abwärtskompatibilität mit alten Geräten (z.B. MKT-View I / MKT-View "Plus") ohne Script-Sprache. Für neue Projekte sollten stattdessen die CAN-Funktionen im Script verwendet werden - wenn überhaupt ein 'selbst programmierter' CAN-Zugriff auf niedrigem Level nötig ist.cs : CAN-Status, bitweise codierter Status des CAN-Controllers.
Für die meisten CAN-Fehler-Bits gibt es spezielle Abfragefunktionen,
die jeweils nur einen Fehlertyp abfragen, z.B.
cb (CAN busoff), ce (CAN
error), cw (CAN warning), ch
(CAN hardware fault), co (CAN 'other error'),
ct (CAN transmit error). Siehe auch:
crx (Test ob ein bestimmtes CAN-Telegramm empfangen
wurde).
cr : CAN Reset
Dient zum Rücksetzen (Neu-Initialisieren) des CAN-Controllers.
Dieses Kommando sollte nur verwendet werden, um den Controller aus dem
'Bus-Off'-Zustand nach einer großzügig dimensionierten Wartezeit wieder
'zum Laufen' zu bringen.
Hinweis: Sie sollten nach dem Erkennen des 'Bus-Off'-Zustandes
den CAN-Controller nicht 'sofort' zurücksetzen, denn normalerweise wird
der Grund für den 'Bus-Off'-Fehler (z.B. EMV, Störimpulse,..) noch andauern.
Die URSACHE für den Bus-Off sollte geklärt werden, wenn der Controller
häufiger in den Bus-Off-Zustand umschaltet.
Bei Geräten mit zwei CAN-Schnittstellen kann ab Firmwarestand 2012-11-26
ein 'CAN-Reset' auch selektiv nur für eins der beiden Interfaces ausgelöst werden:
cr1
Reset des ersten CAN-Controllers (selbst wenn dieser nicht im Zustand 'Bus-Off' ist)
cr2
Reset des zweiten CAN-Controllers (selbst wenn dieser nicht im Zustand 'Bus-Off' ist)
Siehe auch: Beispielprogramme
"demo1.upt" oder "demo2.upt" (zum Einsatz des Kommandos 'CAN
Reset'), oder das kurze Beispiel zum Abfragen
von "CAN-Bus-OFF" in der pn-Funktion .
crx : CAN-Receive test (crx)
Ebenso wie 'ctx' ist dies eine sehr selten verwendete Sonderfunktion, denn "normalerweise" werden empfangene CAN-Telegramme von einem wie auch immer gearteten CAN-Protokoll-Handler verarbeitet, aber (fast) nie direkt durch das Anzeigeprogramm. Zur Anzeige von 'CAN-Signalen' (die idealerweise in einer CAN-Datenbasis alias "CANdb" / *.dbc definiert sind) brauchen Sie diese Funktion nicht .
Wichtiger Hinweis: Statt des Empfanges von CAN-Telegrammen mit der im Folgenden beschriebenen crx-Funktion (die zum Display-Interpreter gehört), sollten Sie besser die in der Script-Sprache nutzbare can_receive-Funktion verwenden ! Da die Script-Sprache vor dem Ablauf compiliert (nicht interpretiert) wird, laufen Scripts wesentlich schneller als die Event-Abfrage-Definitionen des Anzeigeprogramms. Nur mit der Script-Sprache ist es daher möglich, eigene CAN-Protokoll-Handler zu programmieren .. falls dies nötig sein sollte.
Syntax der crx-Funktion des Display-Interpreters :
Ursprünglich (im Februar 2010) war die crx-Funktion nur dafür vorgesehen, bei Geräten ohne CANopen (stattdessem mit "CANdb"-Support) den Empfang von CAN-Telegrammen mit Null Bytes Nutzdaten (d.h. mit Data Length Code = 0) zu empfangen, da derartige Telegramme nicht in Form von CAN-Signaldefinitionen beschrieben werden können. Dazu wurde die crx-Funktion als 'Ereignis' in einer globalen Event-Definition eingesetzt, und in der Reaktion -ggf. nach Verarbeitung der empfangenen Datenbytes- der Empfang quittiert (damit die crx-Funktion wieder den Wert 0 d.h. "nichts neues empfangen" liefert, bis das nächste CAN-Telegramm empfangen wird).
Tipps und Hinweise zur 'crx'-Funktion:
ctx : CAN Transmit ('Senden')
Kann verwendet werden, um ein einzelnes CAN-Telegram mit beliebigem Identifier
(11- oder 29-bit) und beliebigem Datenfeld zu senden.
Bessere Alternative: Bei Geräten mit 32-Bit-CPU und Support für
'CANdb' können Signale direkt
im Programmiertool als 'zu sendendes Signal' deklariert werden.
Wir raten dringend davon ab, dieses Kommando zu verwenden, denn es kann sehr
gefährlich sein ein CAN-Telegramm in ein "nur teilweise bekanntes"
CAN-Netzwerk zu senden, d.h. ohne Kenntnis des verwendeten "CAN ID - Managements"
(welches z.B. bei CANopen in einem Kommunikationsprofil definiert ist, oder in einer
CANdb-Datei, etc). Denken Sie daran, wenn sich die Laufkatze des CAN-gesteuerten
Krans unerwartet mit Vollgas in die Hallenwand bohrt !
Die von 'ctx' unterstützte Syntax kann auch für den Befehl
can_tx() des CAN-Simulators
verwendet werden.
Der Identifier kann den Zusatz ".x" erhalten wenn ein eXtended frame (29-bit-ID) gesendet werden soll. Ohne Präfix erwartet der Interpreter den CAN-Identifier in hexadezimaler Schreibweise; wenn nötig verwenden Sie das Zeichen '#' wenn der ID in dezimaler Form geschrieben werden muß. Wenn Bit 29 im Identifier gesetzt ist (hexadezimale Maske 0x20000000), wird ebenfalls ein extended frame gesendet (beachten Sie, daß Bits immer von 0 bis N gezählt werden, eine Integer-Zahl im Interpreter besteht aus Bits 0..31) .
Die Datenbytes (max. 8) sind im einfachsten Fall hexadezimale Konstanten, oder dezimale Werte (wenn das '#'-Zeichen vorangestellt wird). Darüberhinaus sind auch numerische Ausdrücke möglich, mit Variablen und Funktionsaufrufen (Achtung, alles was nicht eine "einfache Zahl" ist, muss geklammert werden). Ein ganz besonderer Service wurde noch eingebaut: Es ist möglich, 16- und 32-bit Werte mit INTEL- oder MOTOROLA-Byte-Reihenfolge zu senden:
Hinweis: Das Senden von Fliesskommazahlen wird erst seit 2009-08-13 unterstützt, und nur von Geräten mit 32-bit-CPU.
Weitere Beispiele zum Einsatz des "ctx"-Kommandos finden Sie im Programm 'ctxfloat.cvt' (im Installationsarchiv enthalten).
Per Default erwartet das Kommando ctx hexadezimale Zahlen. Es empfiehlt sich
aber, auch bei hexadezimalen Zahlen immer den Prefix '0x' voranzustellen,
um eine Verwechslung zwischen Zahlenwerten und Variablen zu vermeiden.
Beispielsweise kann 'A1' der Name einer Variablen, oder
auch eine hexadezimale Zahl sein. Der Ausdruck 0xA1
ist
dagegen sofort (auch für den Interpreter) als Hex-Zahl erkennbar.
Bei Terminals mit zwei CAN-Schnittstellen existieren zwei CAN-Sende-Kommandos.
Das Kommando ctx
sendet immer mit der ersten Schnittstelle (ebenso
wie das Kommando ctx1
).
Warnung: Wie oben erwähnt, kann es sehr
gefährlich sein auf diese Art CAN-Telegramme zu senden !
String-Funktionen
Neben den zahlreichen numerischen Funktionen verfügt der Interpreter auch über einige (wenige) String-Funktionen. Sie können eine diese Funktionen pro Anzeigezeile aufrufen, indem Sie ihrem Namen in der Spalte "Var/Expr" in der Displayzeilen-Definitions-Tabelle eingeben.Die bislang implementierten Stringfunktionen sind:
(möglicherweise gibt es bei bestimmten Geräten noch andere Stringfunktionen, die hier nicht beschrieben sind !)
Siehe auch: Übersicht Interpreter-Funktionen .
String-Ausdrücke (String Expressions)
(Hier: "String-Ausdruck" := "Formel, die als Ergebnis eine Zeichenkette liefert".)
Unter bestimmten Voraussetzungen (s.U.) können ganze String-Ausdrücke statt einzelner Zeichenkonstanten oder Stringfunktionen verwendet werden. In derartigen Ausdrücken dient das Plus-Zeichen (+) als Operator zum Addieren (Anhängen) von Teilstrings. Einige Beispiele für solche String-Ausdrücke :
Tip: Um solche String-Ausdrücke statt eines 'festen' Format-Strings in Display-Zeilen-Definitionen einzusetzen, verwenden Sie die Sequenz Backslash-e um dem Anzeigemodul klarzumachen, dass die Definition keinen festen Text, sondern einen String-Ausdruck enthält.
Hinweis zur erweiterten
String-Verarbeitung :
Die erweiterte String-Verarbeitung ist nur in neueren Terminals mit 16-bit
CPU und Firmware ab 2005-09-09 verfügbar ! Sie wurde ursprünglich
implementiert, um flexible Kommandos über die serielle Schnittstelle
auszugeben; kann aber auch für die Ausgabe auf dem Display verwendet
werden. Die erweiterte String-Verarbeitung umfaßt:
- Die Addition von Zeichenketten mit dem Plus-Operator
(String-Ausdrücke)
- Die Funktionen a2t (ansi-to-terminal),
eval (erweiterte val-Funktion), und einige Funktionen
für die serielle Schnittstelle .
Siehe auch : Übersicht numerischer
Interpreter-Funktionen
Funktionen zur Abfrage der Echtzeituhr (real time clock)
Hinweis: Nicht alle Geräte verfügen über eine batteriegepufferte Echtzeituhr ! Siehe Feature-Matrix.Falls die UPT-Firmware die Echtzeituhr unterstützt, wird der aktuelle Wert der Uhr in jeder "Hauptschleife" einmal ausgelesen und in einem Zwischenspeicher abgelegt. Dadurch werden "Übertragsprobleme" vermieden, wenn Sie beispielsweise um 23:59:59.999 die Uhrzeit auslesen (und auf dem Display anzeigen) und kurz danach das Datum, weil Datum und Uhrzeit intern immer gleichzeitig ausgelesen werden, auch wenn die folgenden Funktionen so aussehen als würden Sie per Interpreter auf die einzelnen Werte getrennt zugreifen können (intern erfolgt das Lesen der RTC immer kurz vor einer Anzeige-Seiten-Aktualisierung).
Die folgenden numerischen
Funktionen lesen Werte aus dem Zwischenspeicher der Echtzeituhr (nicht
direkt aus den Zählregistern der Uhr) :
Auf der Uhrenplatine sitzt eine kleine Batterie. Ist diese Batterie entladen (oder die RTC defekt), muß nach der Reparatur oder bei zu großer Abweichung das Datum und die Uhrzeit neu gestellt werden. Dies kann im System/Setup Menu des Terminals erfolgen (aber nicht durch das Programmiertool !). Aus dem Anwenderprogramm kann der Einstelldialog per Kommando sys.set_time aufgerufen werden.
Tip: Wenn Sie statt Tages- und Monatszahl lieber entsprechende Namen auf dem Display anzeigen wollen, verwenden Sie dazu ein paar Zeilen des Textarrays.
Format der "gepackten" Datum-und-Uhrzeit-Struktur
Die Funktion rtc.packed
liefert das aktuelle Datum (mit Uhrzeit)
im folgenden Format:
Inhalt | Bits | Wertebereich |
Seconds / 2 | 4..0 | 0..29 (5 bit) |
Minutes | 10..5 | 0..59 (6 bit) |
Hours | 15..11 | 0..23 (5 bit) |
Day of Month | 20..16 | 1(!)..31 (5 bit) |
Month of Year | 24..21 | 1(!)..12 (4 bit) |
Year - 1980 | 31..25 | 7 bit: 0(=year 1980)...127(=year 2107) |
Siehe auch: Funktionen für Datum und Uhrzeit in der Script-Sprache.
Timer-Kommandos und -Funktionen
Der Display-Interpreter(*) enthält
Funktionen und Prozeduren mit denen vier unabhängige "Timer" gesteuert werden können.
Diese Timer können Zeitintervalle bis
zu 65534*100ms (> 1 Stunde) mit einer Auflösung von 100 Millisekunden
erzeugen. Normalerweise werden die Timer mit den programmierbaren
Events abgefragt, sie können jedoch auch für
andere Zwecke eingesetzt werden.
(*) In Geräten mit Script-Sprache stehen noch wesentlich flexiblere Timer zur Verfügung.
Der CAN-Simulator bietet ähnliche Timer-Funktionen.
Starten und Stoppen von Timern
Timer-Abfrage-Funktionen
Die folgenden Timer-Funktionen sind derzeit im Display-Interpreter(*) implementiert. Sie liefern einen booleschen oder numerischen Rückgabewert an den Aufrufer.
Siehe auch: Überblick der numerischen Funktionen .
Bit-Abzähl-Funktion ("nbit")
Die Funktion "nbit" ("next bit" oder "number of bits") liefert die Nummer (1..32) des nächsten GESETZTEN Bits in einer 32-Bit-Matrix, oder zählt wie viele Bits in einer Matrix gesetzt sind. Das erste Funktionsargument (<matrix>) ist ein Integerwert (Ganzzahl) mit bis zu 32 Bit.Syntax und Beispiele:
Hinweis: Normalerweise werden die Bits in einer 32-Bit-Zahl von 0 bis 31 numeriert; ABER HIER wird von 1 bis 32 gezählt, denn der Ergebniswert 0 (Null) bedeutet "das Bit gibt's nicht".
Normalerweise ist <matrix> eine Variable, und <index> eine Konstante. Die Übergabe eines Fließkommawertes (z.B. skaliertem CAN-Signal) an diese Funktion ist i.A. sinnlos, und wird möglicherweise ein fehlerhaftes Ergebnis liefern. Grund: Die Mantisse einer Fließkommazahl (im intern verwendeten Format) besteht nur aus ca. 24 Datenbits, der Rest wird für Exponenten und Vorzeichen benötigt.
Verwenden Sie daher im bei Variablen, die mit CAN-Signalen verbunden sind, nicht den skalierten Wert, sondern den Rohwert als Integerzahl (z.B. "Sensorstatus.in" statt "Sensorstatus").
zurück zur Übersicht der numerischen Funktionen
Funktionen zum Zugriff auf nichtflüchtige Werte (nv[0..31])
Sie können bis zu 32 nichtflüchtige numerische Werte in Ihrer Anwendung einsetzen. Diese Werte können mit dem Programmiertool vorbesetzt werden, und mit Hilfe des Interpreters gelesen und modifiziert werden.Syntax und Beispiele (in Scripten bitte nur "system.nv" verwenden):
Um die "Startwerte" des nichtflüchtigen Arrays für Ihre Anwendung
zu definieren, verwenden Sie die Registerkarte
General Settings des Programmiertools, oder
das UPT-Systemmenü (bei bestimmten
Geräten wie dem MTG320 / MKT-View).
Um zu vermeiden, dass ein bestimmter nv[]-Wert im EEPROM beim Laden einer Applikation (*.cvt bzw. *.upt) überschrieben wird, löschen Sie die enstprechende Zelle in der Tabelle 'Terminal-Einstellungen' auf der Registerkarte 'Einstellungen'. Leere Zellen (ohne numerische Werte) werden beim Import der Applikation im Zielsystem nicht übernommen; der Wert im EEPROM bleibt dann unverändert.
Befehle zum Zugriff auf das 'nichtflüchtige Array' (EEPROM) stehen auch in der Script-Sprache zur Verfügung.
Funktionen zum Lesen der digitalen und analogen Eingänge (onboard)
Hinweise:Syntax:
Die Anzahl verfügbarer digitaler Eingänge, deren Klemmen-Nummern,
und die zulässigen Eingangspegel sind der Hardwarebeschreibung des
verwendeten Terminals zu entnehmen (nicht Bestandteil dieses Dokuments !).
Entsprechendes gilt auch für die analogen Eingänge:
Siehe auch: Übersicht numerischer
Interpreterfunktionen ; Kommandos zum Ansteuern der
digitalen Ausgänge .
Funktionen zur Abfrage des Drehknopfes (rotary encoder, rot.xxx)
Hinweis: Nicht alle Terminals verfügen über einen Drehknopf !Normalerweise wird der Drehknopf als Ersatz für die Cursortasten (UP/DOWN) verwendet, um sich durch die Menüs zu bewegen. Drücken des Knopfes hat den gleichen Effekt wie die ENTER-Taste bei anderen Terminals (identischer Tastencode!). Ein kurzer "Doppelklick" des Drehknopfes schaltet bei Geräten ohne Touchscreen(*) die Funktion des Knopfes zwischen "Cursor hoch/runter" und "Cursor links/rechts" um (wichtig in manchen Editierfeldern). Wenn der Bediener den Knopf dreht oder drückt, trägt die Terminal-Firmware normalerweise entsprechende Tastencodes im Tastaturpuffer ein, so daß der Unterschied zwischen "Knopf" und "normaler Tastatur mit Cursorblock" aus Sicht der Applikation minimal ist - solange Sie auf den Einsatz der folgenden Drehknopf-Abfrage-Funktionen verzichten .
Falls ein Drehknopf vorhanden ist, bietet der Interpreter die folgenden Funktionen (und Prozeduren) um den Drehknopf für "spezielle Zwecke" einzusetzen:
Hinweis: Im Simulatorfenster wird der Drehknopf durch STRG-Cursor Up/Down ersetzt, oder (optional) durch Drehen des Mausrades. Dies funktioniert nur, während der Simulator läuft ("Running"), und das Simulatorfenster den Eingabefokus hat.
(*) Bei Geräten mit Touchscreen öffnet ein Drehknopf-Doppelklick die virtuelle Tastatur. Um den Editiercursor links oder rechts zu bewegen (innerhalb eines Editierfeldes), tippen Sie einmal auf das entsprechende Zeichen.
Siehe auch: Übersicht
Tastatur-Abfrage-Funktionen,
Interpreter-Kommandos,
Interpreter-Funktionen
Abfangen von Encoder-Ereignissen per Script .
Funktionen zur Abfrage eines analogen Joysticks (optional ! )
Da nur wenige Geräte über einen analogen Joystick verfügen, wurde dieses Kapitel in ein separates Dokument (joyst_01.htm) verschoben.Interpreter-Kommandos
Im Gegensatz zu Funktionen liefern Kommandos (Prozeduren) keinen 'Return'-Wert an den Aufrufer zurück.Die UPT-Firmware enthält einen Kommando-Interpreter für die folgenden Zwecke (sortiert nach Kategorie) :
(verwenden Sie den "Zurück"-Button des Browsers um hierher zurück zu gelangen !)
Siehe auch:
Übersicht Interpreter-Kommandos (sortiert nach Alphabet),
Übersicht Interpreter-Funktionen,
Anwenderdefinierte Funktionen und Prozeduren in der Script-Sprache.
Einige Interpreterkommandos erwarten eine Liste von Parametern (Argumenten), andere benötigen dies nicht.
Die meisten Parameter können numerische Ausdrücke (expressions) sein.
Zu Testzwecken können Sie Kommandos an den Interpreter senden, indem Sie diese in der Statuszeile des Programmiertools eingeben.
Im Programmiertool können Sie zu vielen Interpreterkommandos kommando-spezifische Hilfe durch Drücken von F2 erhalten, wenn Cursor und Maus über einem Editierfeld mit einem gültigen Interpreterkommando stehen.
Übersicht Interpreter-Kommandos
(alphabetisch sortiert. Sortierung nach Kategorie siehe Oben)
Siehe auch:
Nach Kategorien sortierte Übersicht,
Übersicht Interpreter-Funktionen,
Anwenderdefinierte Funktionen und Prozeduren in der Script-Sprache.
Goto, Call and Return-Command
(g,c,r)Diese Kommandos des Interpreters dienen zum Umschalten zwischen den Anzeigeseiten Ihrer Applikation. Alle Kommandos müssen in der abgekürzten Form (als EIN Buchstabe) eingegeben werden.
"Goto" und "Call" schalten beide zu einer anderen Anzeigeseite um, die durch ihre Seitennummer oder (vorzugsweise) durch den Seitennamen definiert wird.
"Call" speichert darüberhinaus auch die Nummer der aktuellen ("alten") Seite in einem speziellen Stapelspeicher (call-stack) bevor die Umschaltung zur "neuen" Seite erfolgt. Die so aufgerufene Seite kann später zum "Aufrufer" mit Hilfe des return-Kommandos zurückspringen.
"Call" + "Return" müssen immer zusammen verwendet werden. Wenn Sie eine Seite per "call" aufrufen, müssen Sie später auch per "return" wieder zum Aufrufer zurückkehren, keinesfalls mit per "goto" zurück zum Aufrufer ! (dies würde einen Überlauf des Interpreter-call-stacks verursachen, und ergibt darüberhinaus auch keinen Sinn).
Ein sinnvoller Einsatz für "call" + "return" statt "goto" ist z.B. eine von vielen Aufrufern (hier: Display-Seiten) genutzte gemeinsame "Unter-Seite" (ähnlich wie ein Unterprogramm). Nachdem das "Unterprogramm" seine Arbeit erledigt hat (zum Beispiel eine Fehlermeldung angezeigt und auf eine Taste gewartet hat), kann der Normalbetrieb auf einer der "Hauptseiten" fortgesetzt werden.
Hinweis: Weder "goto" noch "call" haben einen Effekt wenn das Sprungziel (=die "neue" Seite) mit der aktuellen Seite identisch ist, egal ob per Seitennummer oder per Seitenname aufgerufen wird.
Kommandos zum Setzen von Menu Mode und Menu Index (mm, mi)
Diese Kommandos können das Menü auf der aktuellen Seite in den Editier- oder Navigations-Modus setzen, und den aktuellen Menüpunkt programmgesteuert umsetzen (dazu gehören auch Editierfelder, die intern mit derselben Routine verwaltet werden).
(der "Menü-Index" (mi) ist die laufende Nummer des Menüpunktes, abhängig von der Reihenfolge der Menüzeilen bei der Definition der Anzeigeseite)
Gültige Menü-Modi (mm) sind:
Normalerweise wird beim Zurückschalten von "Editieren" nach "Selektieren/Navigieren" der Inhalt des Editierfeldes in die damit verbundene Variable übertragen (d.h. wie beim Drücken der ENTER-Taste). Um das Editeren abzubrechen (d.h. zurückschalten ohne den Inhalt des Editierfeldes zu übernehmen), verwenden Sie das Kommando mm(8) statt mm(0) . Hinweis: Dies funktioniert nur bei Geräten mit Firmware-Kompilations-Datum 2008-11-04 oder später.
In der Script-Sprache wird statt "mi" die Funktion display.menu_index verwendet; "mm" wird durch display.menu_mode ersetzt.
Siehe auch: Verwendung von Anzeigezeilen als Menüeinträge
Kommandos zum Ansteuern der LEDs
Bei manchen Terminals verfügt der Interpreter über ein Kommando zum Ansteuern der eingebauten Leuchtdioden:<led-output-pattern> ist ein acht-Phasen-Code (Bitmasken) mit dem ein bestimmter Blinkrhytmus definiert werden kann. Jedes Bit des Codes steuert ein 100-Millisekunden-Intervall. Nach einem Zyklus von 8 * 100ms beginnt der Blinkzyklus wieder von vorne. Alle LED-Blink-Zyklen sind miteinander "synchonisiert", d.h. wenn zwei LEDs mit den gleichen Bitmasken angesteuert werden, blinken sie exakt zur gleichen Zeit.
Hier einige oft verwendete Bitmasken:
Manche Terminals sind mit RGB-LEDs ("Vollfarb-LEDs") ausgerüstet,
z.B. MKT-View II / III / IV .
Mit der folgenden Syntax können dann nahezu beliebige Farbmischungen erzielt werden:
Die Rot-, Grün- und Blau-Komponenten werden auf einer Skala von 0...255 definiert (meistens hexadezimal wie in den folgenden Beispielen). Wird die Intensität einer Farbkomponente nicht angegeben, bleibt der alte Farbwert erhalten. Der Defaultwert für alle drei Komponenten ist 127 (= 0x7F, bzw. 50 Prozent). Daraus resultiert eine weißliche Farbe für alle drei LEDs, wenn zum Einschalten nur die LED-Nummer und das Blinkmuster angegeben wird, aber keine Farbmischung.
Beispiele zum Ansteuern der RGB-LEDs:
Hinweise:
Kommandos zur Steuerung der Hintergrundbeleuchtung (bl, kl)
Bei manchen Geräten kann die Beleuchtung des LCDs vom Terminalprogramm
gesteuert werden (seit Mai 2002).
Je nach Hardware kann die Beleuchtung ("bl" = "backlight") nur
ein/aus-geschaltet werden, oder auch in der Helligkeit variiert werden (MTG320).
Hinweis: Sie können den Default-Wert der Helligkeit im
Setup-Menü des Terminals auf einen
bestimmten Wert setzen.
Bei alten Geräten mit Tastaturbeleuchtung per EL-Folie gibt es weitere Kommandos mit denen die Tastatur-EL-Folie gesteuert werden kann. Wegen der begrenzten Lebensdauer von EL-Folien schaltet sich die EL-Beleuchtung nach einer bestimmten Zeit ohne Tastenbetätigung automatisch ab.
Der Defaultwert für die Zeitautomatik beträgt 600 Sekunden. Diese Intervallzeit kann per kl-Kommando überschrieben werden. Eine Änderung per Systemmenü (wie bei der LCD-Hintergrundbeleuchtung) ist nicht möglich.
Siehe auch: weitere Interpreter-Kommandos
Aufruf der Script-Sprache aus dem Display-Interpreter
Mit dem Prefix 'script.
' vor dem Namen einer
anwenderdefinierten Script-Prozedur kann
diese ausnahmsweise auch aus dem Display-Interpreter aufgerufen
werden.
Im oben gezeigten Beispiel ist 'SetLanguage
' der Name einer
in
der Script-Sprache programmierten Prozedur, die als Übergabe-Parameter
z.B. einen Integer-Wert erwartet. In diesem Fall wird als Wert eine symbolische
Konstante übergeben ( LANG_GER, als Konstante im Script-Quelltext
definiert):
Details zur Script-Sprache finden Sie hier.
Bitte beachten Sie, daß die Script-Sprache nur in Geräten mit
32-Bit-CPU verfügbar ist !
Grafik-Kommandos
Die folgenden Kommandos dienten früher zur Anzeige von graphischen (Grund-)Elementen, als diese nicht mit den 'fest eingebauten' Funktionen realisiert werden können.Sie existieren heute nur noch aus Kompatibilitätsgründen. Für Geräte mit 32-Bit-CPU empfehlen wir stattdessem den Einsatz von Script-gesteuerten Grafiken, z.B. mit dem 'Canvas'-Element ("Leinwand", auf der per Script gezeichnet werden kann).
Die im Folgenden aufgeführten "Grafik-Kommandos" sind nicht mit den z.T. ähnlich aufgebauten Backslash-Sequenzen zu verwechseln !
Einige Parameter, die die nachfolgenden Ausgabekommandos beeinflussen, können mit den folgenden Kommandos gesetzt werden:
Diese Kommandos müssen in abgekürzter Form in einer Anzweisungszeile (command line) eingegeben werden.
Wenn sich graphische Elemente oder/und Textzeilen auf dem Bildschirm überlappen, sollten Sie die Hinweise zu überlappender oder bewegter Grafik beachten !
Nur bei einigen Geräten mit 32-Bit-CPU (z.B. "MKT-View II") existieren die folgenden Kommandos/Funktionen:
Siehe auch:
Definieren von Vorder- und Hintergrundfarbe : "co" (colour)
Mit diesem Kommando werden die Vorder- und Hintergrundfarbe für einige
der folgenden Grafikkommandos definiert. Eine Liste zulässiger Farbwerte
finden Sie hier.
Zeichnen eines einzelnen Icons (ic)
Dieses Grafik-Kommando zeichnet ein kleines Bild ("icon") auf dem Bildschirm.
Syntax:
ic(<icon-name>, <x-position>, <y-position>)
Der Icon-Namen muss einem auf der icon-page definierten Symbole entsprechen. Andernfalls erzeugt der Kommando-Interpreter eine Fehlermeldung. Ist der Icon-Name eine einfache Zeichenkonstante, muss diese -wie üblich- in Anführungszeichen geschrieben werden.
Hinweis: Sie können Icons auch per Backslash-Sequenz im Format-String einer normalen Display-Zeile anzeigen. Dies ist wesentlich einfacher, denn die Position der Displayzeile (und damit die des Icons) kann per Maus im LCD-Simulatorfenster geändert werden.
Bei Geräten mit Farb-Display werden auch transparente Bitmap unterstützt. Dazu muss der Farbwert aller transparenten Pixel in der Parameterliste des Icon-Kommandos angegeben werden (siehe Beispiel). Als Farbwert dient einer der hier definierten Farbwerte.
Bei Geräten mit Script-Sprache kann der erste Parameter (statt "icon-name") alternativ auch der Name eines im Script deklarierten Objektes vom Typ tCanvas sein. Dieses erst zur Laufzeit erzeugte Grafikobjekt wird dann an der angegebenen Position (x,y) sichtbar.
Zeichnen einer einzelnen Linie (li)
Dieses Grafikkommando zeichnet eine dünne Linie auf dem Grafikbildschirm.Syntax:
Hinweis: Auch Grafik-Linien können per
Backslash-Sequenz im Format-String einer
normalen Display-Zeile angezeigt werden. Im Gegensatz zum Interpreter-Befehl
"li" sind die Koordinaten dann 'relativ' zur Koordinate der Display-Zeile.
Setzen eines einzelnen Pixels (pi)
Dieses Kommando setzt ein einzelnes Pixel auf dem Grafikbildschirm.
Tip: Um 'portable' Anwendungen zu erstellen, die auf Displays mit
unterschiedlicher Größe funktionieren, können seit 03/2011
die Funktionen xmax und ymax eingesetzt werden.
Diese liefern die maximal zulässige Koordinate. Beachten Sie, daß
die Zählung grundsätzlich bei Null beginnt. Beim "MKT-View II"
liegen die zulässigen Werte für x zwischen 0 und 479
(=xmax), für y zwischen 0 und 271
(=ymax).
Zeichnen eines rechtechigen Rahmens (fr, frame)
Dieses Grafikkommando zeichnet einen rechtechigen Rahmen.Das Innere des Rahmens wird nicht beeinflusst (es wird weder gelöscht noch gefüllt).
Hinweis: Auch rechteckige Rahmen können mittlerweile als
Backslash-Sequenz innerhalb einer "normalen"
Display-Zeile erzeugt werden.
Zeichnen eines gefüllten Rechtecks (fi, fill)
Füllt einen rechteckigen Bereich des Bildschirms.Der alte Inhalt der gefüllten Fläche wird überschreiben, außer in einem Spezialfall: Bei Zeichenmodi, die nicht in beide alternierenden Display-"Pages" schreiben, bleibt der alte Inhalt während einer der beiden Blink-Phasen erhalten. Dies eignet sich z.B. als Warnmarkierung (sparsam einsetzen !).
Das optionale Füllmuster ermöglicht auch bei monochromen Displays, verschiedene Schattierungen zu realisieren. Beide Füllmuster sind 8-Bit-Masken; ein "1"-Bit entspricht einem gesetzten, ein "0"-Bit einem gelöschten Pixel. <Pattern0> wird in allen Grafikzeilen mit grader Y-Koordinate verwendet, <Pattern1> für alle ungraden Zeilen.
Wird kein Füllmuster angegeben, zeichnet der Interpreter ein schwarz gefülltes Rechteck (wie mit dem Füllmuster 0xFF, 0xFF).
Hinweis: Bei Geräten mit 32-Bit-CPU und TFT-Farbdisplay steht (zusätzlich zum "fi"-Kommando) noch das "gf"-Kommando (gradient fill) zur Verfügung, mit dem rechteckige Farbverläufe gezeichnet werden können.
Setzen des Zeichenmodus (dm, draw mode)
Dieses Grafik-Kommando setzt den Zeichenmodus (draw mode) für die folgenden Grafik-Zeichen-Kommandos.
Der Bildschirm in alten Geräten (mit kleinen Monochrom-Displays) verfügte über zwei "Video-Seiten" (video pages), die alle 0.5 Sekunden umgeschaltet wurden. Damit liessen sich verschiedene Blink-Effekte erzielen. Bei neueren Geräten mit Farbdisplays besteht diese Möglichkeit nicht mehr.
Syntax:
dm( <neuer Zeichenmodus> )
Gültige Parameter für den Zeichenmodus finden Sie ausschliesslich im
englischsprachigen Originaldokument.
Hinweis: Zum Einstellen des Zeichenmodus innerhalb einer Textzeile dient
die Backlash-Sequenz 'm'.
Invertierung der Anzeige (Display Inversion, "di")
Bei bestimmten Geräten mit 16-bit CPU ist es möglich, per Interpreterbefehl das komplette Display zu invertieren.
Im Gegensatz zum Kommando "dm" (welches nur die danach ausgegebenen Zeichen beinflußt) wirkt sich "di" immer auf den gesamten Bildschirm aus. Die Invertierung wird z.T. auf Hardware-Ebene durchgeführt, das Kommando ist dadurch relativ schnell und kann z.B. dazu verwendet werden, den Bildschirm ein paarmal "aufblitzen" zu lassen, um die Aufmerksamkeit des Bedieners auf sich zu lenken.
Löschen des Bildschirms (CLearScreen) (cls)
Dieses ebenfalls veraltete Kommando zum "Löschen" des Bildschirms führt während des nächsten Bildaufbaus die folgenden Aktionen durch:Dieses Kommando wird nur für komplexe Anzeigeseiten benötigt, z.B. wenn sie eine per Interpreterkommandos gezeichnete Grafik wieder löschen wollen (wie z.B. im Beispiel "Pixel Plot"). Während der Ausführung des "cls"-Kommandos ist das Event-Flag "pr" (page redraw) gesetzt, was für einige sehr spezielle Anwendungen nötig ist.
Im Normalfall benötigen Sie dieses Kommando nicht, weil der Bildschirm bei einer Seitenumschaltung automatisch gelöscht wird.
Siehe auch: Weitere Interpreter-Kommandos
Zeichnen eines Farbverlaufes (Gradient Fill, Kommando gf)
Geräte mit 32-Bit-CPU und TFT-Farbdisplay bieten ein Interpreterkommando
zum Zeichnen eines mit einem Farbverlauf gefüllten Rechtecks. Die Syntax
ähnelt dem Kommando "fi" (filled rectangle) .
Als Farbwerte können die UPT-"Standard"-Farben verwendet werden, oder -abhängig von der verwendeten Hardware- auch beliebige RGB-Farbmischungen. Details zu den Farbwerten finden Sie hier .
Hinweis: Graphische Schaltflächen ("Buttons") können ebenfalls
mit einem Farbverlauf als Hintergrund gefüllt werden, wie
hier beschrieben. Das "gf"-Kommando wird daher
nicht benötigt, um derartige Buttons zu realisieren. Allerdings
funktionieren auch Buttons mit Farbverläufen nur bei Geräten mit
32-bit CPU und TFT Farbdisplay !
Abfrage von Informationen über den Grafik-Bildschirm (für Grafikbefehle)
Hinweis: Die unten aufgeführten Funktionen wurden anno 2011 implementiert. Auf älteren Geräten, z.B. MKT-View 1, funktionieren sie nicht.Kommandos zum Starten / Stoppen von Timern
Die Kommandos zum Starten und Stoppen von Timern wurden mit der Beschreibung 'Timer-Kommandos und -Funktionen' zusammengeführt.Page-Scan (pscan)
Im Page-Scan-Modus schaltet das Terminal zyklisch zwischen verschiedenen Anzeigeseiten um. Dazu werden keine "Event"-Definitionen benötigt. Der Page-Scan-Modus kann per Interpreter gesteuert werden:Hinweise und Tips:
Das Zuweisungs-Kommando (assign, @) (veraltet, nur noch aus Kompatibilitätsgründen dokumentiert)
Dieses Kommando weist einer Variablen einen neuen Wert zu. Seit einer Überarbeitung des Display-Interpreters reicht dazu der Zuweisungsoperator ( := ), es ist kein spezielles Kommando mehr für eine Variablenzuweisung nötig.Syntax:
@<Varname> := <expression>
Beispiel:
@Ypos := (Voltage*63)/230
Hinweise:
Ansteuern digitaler Ausgänge (on-board, optional)
Das Kommando "out" dient zum Setzen der in manchen Terminals vorhandenen digitalen Ausgänge. Es ist zum gleichzeitigen Ansteuern mehrerer Ausgänge, aber auch zum gezielten Ansteuern eines einzelnen Ausgangs verwendbar:Beispiele:
Hinweise:
"System"-Funktionen und -Kommandos des Display-Interpreters
Diesystem-
Funktionen des Interpreters dienen zum Zugriff
Systemparameter und Funktionen, die normalerweise nur im
Systemmenü des Terminals angezeigt bzw
von dort aufgerufen werden können. Sie dienen im Allgemeinen nur zu
Test- und Debugging-Zwecken, können aber auch im Anwenderprogramm eingesetzt
werden. Nur die hier dokumentierten Funktionen dürfen in Ihrem
Anwenderprogramm eingesetzt werden (darüberhinaus existieren einige
hier nicht dokumentierte Funktionen, die ohne Rücksicht auf
Kompatibilität irgendwann geändert oder sogar entfernt werden
könnten).Bei Geräten mit Script-Sprache existieren ähnliche Funktionen mit dem Prefix 'system'.
Weitere spezielle Interpreter-Kommandos
beep, play (be, pl)
Erzeugt einzelne Töne oder Tonfolgen mit dem eingebauten Pieper.
Verschiedene Töne sind möglich. Da nur bestimmte Geräte einen
Pieper enthalten (z.B. Terminals mit C167-Prozessor), finden Sie die Beschreibung
der Pieper-Kommandos in einer anderen Datei.
Zum Abfragen und programmgesteuerten Umschalten der graphischen Buttons.
Nicht in allen Firmware-Varianten vorhanden, darum: Beschreibung in einer
anderen Datei.
Diese Kommando ermöglicht es, den Druck bestimmter Tasten zu "simulieren", die physikalisch auf der Tastatur nicht vorhanden sind. Z.B. könnten Sie mit dem Kommando hk("-") den Code für die Minus-Taste an den Tasten-Handler des Systems senden, was die Invertierung des Vorzeichens der grade editierten Zahl zur Folge haben könnte (falls sich ein Eingabefeld grade im Editiermodus befindet). Der Übergabeparameter kann als Kette von ASCII-Zeichen notiert werden, oder als numerischer Wert aus der Tabelle der System-Tastencodes. Hinweis: Nicht alle dieser Codes haben eine bestimmte Funktion, wie Sie sie vielleicht von der PC-Tastatur erwarten würden !
Setzt die Anwendung (und einige CAN-Protokoll-Schichten) zurück. Alle variables werden auf ihre Defaultwerte gesetzt (sofern definierbar). Alle Timer werden zurückgesetzt. Alle Display-Seiten werden neu aus dem dauerhaften Speichermedium (i.A. FLASH) geladen. Das Programm wird auf Seite 0 (Null) umgeschaltet, wie direkt nach dem Einschalten.
Kommandos zum Steuern des CAN-Loggers
Beschreibung in einer anderen Datei,
weil der CAN-Logger nicht zur Standardausstattung der programmierbaren Terminals
zählt.
Kommando zum Setzen des 'Power'-Flags
Bei alten Geräten (wie z.B. MKT-View "Plus") war noch keine interne USV
(unterbrechungsfreie Stromversorgung) vorhanden, was zum folgenden Problem führte:
Beim Anlassen des Motors brach die Versorgungsspannung für kurze Zeit so tief ein,
dass ein unplanmäßiger Reset (d.h. Neustart) des Gerätes ausgelöst wurde.
Dadurch konnte (bei frühzeitig gestartetem Logger) das Dateisystem auf der Speicherkarte,
oder sogar die Karte selbst beschädigt werden.
Abhilfe: Bei diesen alten Geräten musste im ANWENDERPROGRAMM (*.cvt) das sogenannte
Power-Good-Flag gesetzt werden, per Interpreterkommando:
power=1 : REM Spannungsversorgung ist jetzt 'sicher genug' für den Logger
Erst danach waren Zugriffe auf die Speicherkarte (auch für den CAN-Logger) möglich.
Bei moderneren Geräten (wie z.B. MKT-View II) braucht das Power-Flag nicht mehr
per Applikation gesetzt werden, weil dort eine interne USV das ordnungsgemässe Schliessen
aller Dateien auf der Speicherkarte ermöglicht, unabhängig von der Spannungsversorgung.
Zum Abfragen des aktuellen Ladezustands der USV-Kondensatoren kann die Funktion
sys.vcap (im Display-Interpreter)
bzw. system.vcap (in der Script-Sprache)
verwendet werden.
Sucht den CAN-Bus nach CANopen-Geräten ab. Beschreibung in einer externen Datei, da diese Funktionalität nicht zum Standardumfang der programmierbaren Terminals gehört.
Siehe auch: Weitere
Interpreterkommandos
Der Script-Editor / Compiler / Debugger
Die in neueren Geräten (ab MKT-View II) integrierte Script-Sprache ermöglicht das Entwickeln komplexerer Anwendungen. Als Script programmierte Abläufe sind wesentlich übersichtlicher als die im 'Telegrammstil' mit Hilfe des Display-Interpreters formulierten Event-Definitionen.
Screenshot des Script-Editors (im Programmiertool auf der Registerkarte 'Script')