Virtuelle Konsole: Unterschied zwischen den Versionen

Aus CANopen-Lift
Zur Navigation springen Zur Suche springen
(Zeichensatz)
(Vorschlag für Geräteinformation)
 
(15 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== CANopen Konsole nach CiA DS-301, Objekt 1026h ==
[[en:Virtual_Console]]
[[Datei:canopen-terminal.png|right]]
== CANopen virtuelles Terminal nach CiA 417, Objekt 600Ah ==
<div style="border:1px solid #8080FF; background:#E0E0FF; font-size:100%; padding:5px; margin-top:5px;">Hinweis: Ab CiA 417 V 1.0.5 wurde das Objekt 600Ah für das virtuelle Terminal definiert. Damit gibt es einige Änderungen gegenüber dem ersten Vorschlag mit dem Objekt 1026h (nach CiA 301).</div>




=== Allgemeines ===
=== Allgemeines ===
Mittels des Objekts 600Ah kann man ein CANopen-Gerät fernbedienen bzw. fernparametrieren. Die Anzeige und die Tastatur befindet sich dazu in einem anderen CANopen-Gerät (Virtuelles Terminal).


Mittels des Objekts 1026h kann man ein CANopen-Gerät fernbedienen bzw. -parametrieren. Die Anzeige und die Tastatur befindet sich dazu in einem anderen CANopen-Gerät (Virtuelle Konsole).
Das virtuelle Gerät ''Antrieb'' (Drive unit) sollte dieses Objekt immer beinhalten.
 
Das virtuelle Gerät Antrieb (Drive unit) sollte dieses Objekt immer beinhalten.


Zum Fernbedienen gibt es zwei Kanäle:  
Zum Fernbedienen gibt es zwei Kanäle:  
* einen Eingabe-Kanal (stdin), und
* einen Eingabe-Kanal (stdin), und
* einen Ausgabe-Kanal (stdout)
* einen Ausgabe-Kanal (stdout)


Optional gibt es noch einen Fehlerausgabe-Kanal (stderr).


   Objekt 1026h Subindex 1 ist stdin (Standard-Eingabe)
   Objekt 600Ah Subindex 1 ist stdin (Standard-Eingabe: Tastatur)
   Objekt 1026h Subindex 2 ist stdout (Standard-Ausgabe)
   Objekt 600Ah Subindex 2 ist stdout (Standard-Ausgabe: Bildschirm)
  Objekt 1026h Subindex 3 ist stderr (Fehler-Ausgabe)


Möchte das Gerät Ausgaben in einer virtuellen Konsole (z. B. das Steuerungs-Display) tätigen, so stellt es die Zeichen für die Ausgabe im Objekt 1026h, Subindex 2 bereit. Eine Null bedeutet, kein Zeichen verfügbar. Zur Steuerung des Cursors können die Steuersequenzen nach VT-52 benutz werden.
Hat das Gerät Ausgaben für das virtuelle Terminal (z. B. das Steuerungs-Display), so stellt es die Zeichen für die Ausgabe im Objekt 600Ah, Subindex 2 bereit. Das NUL-Zeichen (0) bedeutet, kein Zeichen verfügbar. Zur Steuerung des Cursors können die Steuersequenzen nach VT-52 benutzt werden.


Betätigt der Anwender eine Taste, so wird der Tastencode (1 .. 255) in das Objekt 1026h, Subindex 1 geschrieben. Sonder-Tasten werden dabei als Escape-Sequenzen (VT-52) gesendet.
Betätigt der Anwender eine Taste, so wird der Tastencode (1 .. 255) in das Objekt 600Ah, Subindex 1 geschrieben. Sondertasten werden dabei als Escape-Sequenzen (VT-52) gesendet.




=== Ablauf des Datenaustausches via SDO ===
=== Ablauf des Datenaustausches via SDO ===


Das Ausgabegerät (virtuelle Konsole) pollt zyklisch das Objekt 1026h, Subindex 2. Wird ein Zeichen ungleich Null gelesen, so wird dieses in der Konsole (Display) ausgegeben. Für die Steuerung des Cursors werden VT-52 Steuersequenzen ausgewertet.
Das Ausgabegerät (virtuelles Terminal) pollt zyklisch das Objekt 600Ah, Subindex 2. Wird ein Zeichen ungleich NUL (0) gelesen, so wird dieses im Terminal (Display) ausgegeben. Für die Steuerung des Cursors werden VT-52 Steuersequenzen ausgewertet.


Liegt kein Zeichen vor, kann die Pollzeit langsamer sein.
Liegt kein Zeichen vor, kann die Pollzeit kürzer sein.


Wird eine Taste betätigt, so wird der Tastencode in das Objekt 1026h, Subindex 1 geschrieben.
Wird eine Taste betätigt, so wird der Tastencode in das Objekt 600Ah, Subindex 1 geschrieben.




Zeile 37: Zeile 36:
Um die Kommunikation zu beschleunigen, besteht die Möglichkeit, die Ein- und Ausgabedaten per MPDO zu versenden.  
Um die Kommunikation zu beschleunigen, besteht die Möglichkeit, die Ein- und Ausgabedaten per MPDO zu versenden.  


Display-Ausgaben (Gerät -> Virtuelle Konsole):
Display-Ausgaben (Gerät -> Virtuelles Terminal):


   COB-ID:      0x500 + Node-ID Gerät
   COB-ID:      0x500 + Node-ID Gerät
   Länge:        8 Bytes
   Länge:        8 Bytes
   Address:      Node-ID Gerät (Source)
   Address:      Node-ID Gerät (Source)
   Multiplexor:  0x1026, 0x02
   Multiplexor:  600Ah, Subindex 2
   Data:        1 Zeichen (optional bis zu 4 Zeichen)
   Data:        DWORD mit bis zu 4 Zeichen


Tastatur-Eingaben (Virtuelle Konsole -> Gerät):
Tastatur-Eingaben (Virtuelles Terminal -> Gerät):


   COB-ID:      0x500 + Node-ID virtuelle Konsole
   COB-ID:      0x500 + Node-ID virtuelles Terminal
   Länge:        8 Bytes  
   Länge:        8 Bytes  
   Address:      0x80 + Node-ID Gerät (Destination)
   Address:      0x80 + Node-ID Gerät (Destination)
   Multiplexor:  0x1026, 0x01
   Multiplexor:  600Ah, Subindex 1
   Data:        1 Zeichen (Tastencode)
   Data:        DWORD mit bis zu 4 Zeichen
 
Zum Einschalten der Display-Ausgabe via MPDO schickt die virtuelle Konsole entweder ein beliebiges Zeichen ungleich Null oder Cntrl-A (0x01). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. die virtuelle Konsole muß mind. jede Sekunde einen Tasten-Code schicken (z. B. Cntrl-A). Bekommt in diesem Mode das Gerät innerhalb von 4 s kein Zeichen, wird die Display-Ausgabe via MPDO abgeschaltet. Alternativ zu Cntrl-A kann man Cntrl-B (0x02) schicken, um dem Gerät mitzuteilen, daß auch 4 Zeichen pro MPDO
zugelassen sind und ausgewertet werden. Bei Cntrl-B ist ebenfalls die Zeitüberwachung zu aktivieren.


Zum Deaktivieren der Display-Ausgabe schickt die virtuelle Konsole Cntrl-D (0x04) oder wenn die Zeitüberwachung (Cntrl-A) aktiv ist, beendet das Gerät automatisch die Ausgabe, wenn kein Zeichen mehr empfangen wurde.
Zum Einschalten der Display-Ausgabe via MPDO schickt das virtuelle Terminal entweder ein beliebiges Zeichen ungleich NUL (0) oder Cntrl-A (01h). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. das virtuelle Terminal muss mindestens jede Sekunde einen Tasten-Code schicken (z. B. Cntrl-A). Bekommt in diesem Mode das Gerät innerhalb von 4 s kein Zeichen, wird die Display-Ausgabe via MPDO abgeschaltet.  


Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei Zeichen in 10 ms ausgegeben werden (inhibit Timer).
Zum Deaktivieren der Display-Ausgabe schickt das virtuelle Terminal Cntrl-D (04h) oder wenn die Zeitüberwachung (Cntrl-A) aktiv ist, beendet das Gerät automatisch die Ausgabe, wenn kein Zeichen mehr empfangen wurde.


Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei MPDO pro 10 ms ausgegeben werden (inhibit Timer 5 ms).


== Zeichensatz ==
== Zeichensatz ==


Für die Kodierung der Zeichen (Umlaute) wird der Zeichensatz ISO-8859-1 (siehe [[wpde:ISO_8859-1|ISO-8859-1]]) verwendet.
Für die Kodierung der Zeichen (Umlaute) wird der Zeichensatz ISO-8859-15 (siehe [[wpde:ISO_8859-15|ISO-8859-15]]) verwendet.




== Tastaturcodes ==
== Tastaturcodes (Virtuelle Tasten) ==


Folgende ASCII-Codes können für eine Menü-Steuerung verwendet werden:
Folgende ASCII-Codes können für eine Menü-Steuerung verwendet werden:


{| border="1" cellspacing="0"
{| border="1" cellspacing="0" cellpadding="3"
! Dez. !! Hex !! Char !! Bedeutung
! Dez. !! Hex       !! Char !! Bedeutung
|-
|-
| 24 || 0x18 || CAN || End/Cancel (Cntrl-X)
| 24   || 0x18     || CAN   || End Taste (Cntrl-X)
|-
|-
| 45 || 0x2D || '-' || Minus
| 45   || 0x2D     || '-'   || Minus Taste
|-
|-
| 43 || 0x2B || '+' || Plus
| 43   || 0x2B     || '+'   || Plus Taste
|-
|-
| 13 || 0x0D || CR || CR/Enter
| 13   || 0x0D     || CR   || Enter Taste
|-
| 27 65 || 0x1B 0x41 || ESC A || Pfeil Auf Taste
|-
| 27 66 || 0x1B 0x42 || ESC B || Pfeil Ab Taste
|-
| 27 67 || 0x1B 0x43 || ESC C || Pfeil Rechts Taste
|-
| 27 68 || 0x1B 0x44 || ESC D || Pfeil Links Taste
|-
| 27 80 || 0x1B 0x50 || ESC P || F1 Taste
|-
| 27 81 || 0x1B 0x51 || ESC Q || F2 Taste
|-
| 27 82 || 0x1B 0x52 || ESC R || F3 Taste
|-
| 27 83 || 0x1B 0x53 || ESC S || F4 Taste
|}
|}
Das Gerät entscheidet selbstständig, wie die Tasten zu interpretieren sind. Dabei ist davon auszugehen, dass nicht alle virtuellen Terminals alle Tasten senden.




== Mindestanforderung an VT52 Steuersequenzen ==
== Mindestanforderung an VT52 Steuersequenzen ==


{| border="1" cellspacing="0"
{| border="1" cellspacing="0" cellpadding="3"
! Code !! Name !! Bedeutung
! Code !! Name !! Bedeutung
|-
|-
Zeile 110: Zeile 125:
| ESC M || Delete line || Löscht die Zeile, in der sich der Cursor befindet. Die anderen Zeilen rücken auf. Die letzte Zeile wird leer.
| ESC M || Delete line || Löscht die Zeile, in der sich der Cursor befindet. Die anderen Zeilen rücken auf. Die letzte Zeile wird leer.
|-
|-
| ESC Yyx || Move Cursor || Bewegt den Cursor auf Zeile y und Spalte x. Auf die y- und x-Position muß immer 32 addiert werden. (x = 0 ... 19, y = 0 ... 3)
| ESC Yyx || Move Cursor || Bewegt den Cursor auf Zeile y und Spalte x. Auf die y- und x-Position muss immer 32 addiert werden. (x = 0 ... 19, y = 0 ... 3)
|-
|-
| ESC e || Cursor on || Cursor einschalten
| ESC e || Cursor on || Cursor einschalten
Zeile 125: Zeile 140:
|-
|-
|}
|}
== Vorschläge für neue Steuersequenzen ==
Mit einem neuen Kommando sollte die Möglichkeit geschaffen werden, die Eigenschaften des Aus- und Eingabegerätes (Terminal) zu erfragen.
So könnte z. B. das Gerät senden:
  ESC Z = Identify terminal type
Folgende Antwortmöglichkeiten gäbe es:
  ESC [<a_rows>;<a_colums>;<g_rows>;<g_colums>;<keymap>] = Terminal features
 
  a_rows, a_columns:  ASCII-Mode Anzahl Zeilen/Spalten
  g_rows, g_colums:  Graphik-Mode Anzahl Zeilen/Spalten
  keymap:            0 = normal/standard, 1 = cursor keys (up, down, left right), 2 = +/- keys (end, -, +, CR)
Beispiele:
  Nur ASCII-Mode und Standard-Tasten:  ESC [4;20]
  Nur ASCII-Mode und Cursor-Tasten:    ESC [4;20;;;1] oder ESC [4;20;0;0;1]
  Auch Grafik-Mode und Standard-Tasten: ESC [4;20;64;128]
  Auch Grafik-Mode und Cursor-Tasten:  ESC [4;20;64;128;1]
Weiterhin wird ein Kommando benötigt, um in den Grafik-Mode zu wechseln:
  ESC g = Enter graphic mode
[[Kategorie:Erweiterungen des Profils]]
[[Kategorie:Empfehlungen]]
[[Category:Application Notes]]

Aktuelle Version vom 25. November 2013, 16:29 Uhr

CANopen virtuelles Terminal nach CiA 417, Objekt 600Ah

Hinweis: Ab CiA 417 V 1.0.5 wurde das Objekt 600Ah für das virtuelle Terminal definiert. Damit gibt es einige Änderungen gegenüber dem ersten Vorschlag mit dem Objekt 1026h (nach CiA 301).


Allgemeines

Mittels des Objekts 600Ah kann man ein CANopen-Gerät fernbedienen bzw. fernparametrieren. Die Anzeige und die Tastatur befindet sich dazu in einem anderen CANopen-Gerät (Virtuelles Terminal).

Das virtuelle Gerät Antrieb (Drive unit) sollte dieses Objekt immer beinhalten.

Zum Fernbedienen gibt es zwei Kanäle:

  • einen Eingabe-Kanal (stdin), und
  • einen Ausgabe-Kanal (stdout)


 Objekt 600Ah Subindex 1 ist stdin (Standard-Eingabe: Tastatur)
 Objekt 600Ah Subindex 2 ist stdout (Standard-Ausgabe: Bildschirm)

Hat das Gerät Ausgaben für das virtuelle Terminal (z. B. das Steuerungs-Display), so stellt es die Zeichen für die Ausgabe im Objekt 600Ah, Subindex 2 bereit. Das NUL-Zeichen (0) bedeutet, kein Zeichen verfügbar. Zur Steuerung des Cursors können die Steuersequenzen nach VT-52 benutzt werden.

Betätigt der Anwender eine Taste, so wird der Tastencode (1 .. 255) in das Objekt 600Ah, Subindex 1 geschrieben. Sondertasten werden dabei als Escape-Sequenzen (VT-52) gesendet.


Ablauf des Datenaustausches via SDO

Das Ausgabegerät (virtuelles Terminal) pollt zyklisch das Objekt 600Ah, Subindex 2. Wird ein Zeichen ungleich NUL (0) gelesen, so wird dieses im Terminal (Display) ausgegeben. Für die Steuerung des Cursors werden VT-52 Steuersequenzen ausgewertet.

Liegt kein Zeichen vor, kann die Pollzeit kürzer sein.

Wird eine Taste betätigt, so wird der Tastencode in das Objekt 600Ah, Subindex 1 geschrieben.


Ablauf des Datenaustausches via MPDO

Um die Kommunikation zu beschleunigen, besteht die Möglichkeit, die Ein- und Ausgabedaten per MPDO zu versenden.

Display-Ausgaben (Gerät -> Virtuelles Terminal):

 COB-ID:       0x500 + Node-ID Gerät
 Länge:        8 Bytes
 Address:      Node-ID Gerät (Source)
 Multiplexor:  600Ah, Subindex 2
 Data:         DWORD mit bis zu 4 Zeichen

Tastatur-Eingaben (Virtuelles Terminal -> Gerät):

 COB-ID:       0x500 + Node-ID virtuelles Terminal
 Länge:        8 Bytes 
 Address:      0x80 + Node-ID Gerät (Destination)
 Multiplexor:  600Ah, Subindex 1
 Data:         DWORD mit bis zu 4 Zeichen

Zum Einschalten der Display-Ausgabe via MPDO schickt das virtuelle Terminal entweder ein beliebiges Zeichen ungleich NUL (0) oder Cntrl-A (01h). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. das virtuelle Terminal muss mindestens jede Sekunde einen Tasten-Code schicken (z. B. Cntrl-A). Bekommt in diesem Mode das Gerät innerhalb von 4 s kein Zeichen, wird die Display-Ausgabe via MPDO abgeschaltet.

Zum Deaktivieren der Display-Ausgabe schickt das virtuelle Terminal Cntrl-D (04h) oder wenn die Zeitüberwachung (Cntrl-A) aktiv ist, beendet das Gerät automatisch die Ausgabe, wenn kein Zeichen mehr empfangen wurde.

Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei MPDO pro 10 ms ausgegeben werden (inhibit Timer 5 ms).

Zeichensatz

Für die Kodierung der Zeichen (Umlaute) wird der Zeichensatz ISO-8859-15 (siehe ISO-8859-15) verwendet.


Tastaturcodes (Virtuelle Tasten)

Folgende ASCII-Codes können für eine Menü-Steuerung verwendet werden:

Dez. Hex Char Bedeutung
24 0x18 CAN End Taste (Cntrl-X)
45 0x2D '-' Minus Taste
43 0x2B '+' Plus Taste
13 0x0D CR Enter Taste
27 65 0x1B 0x41 ESC A Pfeil Auf Taste
27 66 0x1B 0x42 ESC B Pfeil Ab Taste
27 67 0x1B 0x43 ESC C Pfeil Rechts Taste
27 68 0x1B 0x44 ESC D Pfeil Links Taste
27 80 0x1B 0x50 ESC P F1 Taste
27 81 0x1B 0x51 ESC Q F2 Taste
27 82 0x1B 0x52 ESC R F3 Taste
27 83 0x1B 0x53 ESC S F4 Taste

Das Gerät entscheidet selbstständig, wie die Tasten zu interpretieren sind. Dabei ist davon auszugehen, dass nicht alle virtuellen Terminals alle Tasten senden.


Mindestanforderung an VT52 Steuersequenzen

Code Name Bedeutung
ESC A Cursor up Der Cursor wird eine Zeile nach oben bewegt. Ist er schon in der ersten Zeile, erfolgt keine Reaktion.
ESC B Cursor down Der Cursor wird eine Zeile nach unten bewegt. Ist er schon in der letzten Zeile, erfolgt keine Reaktion.
ESC C Cursor right Der Cursor wird um eine Spalte nach rechts bewegt. Ist er schon ganz rechts, erfolgt keine Reaktion.
ESC D Cursor left Der Cursor wird um eine Spalte nach links bewegt. Ist er schon ganz links, erfolgt keine Reaktion.
ESC E Clear home Der Bildschirm wird gelöscht, der Cursor geht nach links oben.
ESC H Cursor home Der Cursor geht nach links oben.
ESC I Cursor up and insert Der Cursor geht um eine Zeile nach oben. Ist er schon in der ersten Zeile, wird eine Leerzeile eingefügt. Die Folgezeilen rücken dann nach unten.
ESC J Clear to end of frame Der Bildschirm wird ab Cursor bis zum Ende gelöscht.
ESC K Clear to end of line Die Zeile wird ab Cursor gelöscht.
ESC L Inser line Leerzeile wird an aktueller Cursor-Zeile eingefügt. Der Rest des Bildschirms wir um eine Zeile nach unten geschoben.
ESC M Delete line Löscht die Zeile, in der sich der Cursor befindet. Die anderen Zeilen rücken auf. Die letzte Zeile wird leer.
ESC Yyx Move Cursor Bewegt den Cursor auf Zeile y und Spalte x. Auf die y- und x-Position muss immer 32 addiert werden. (x = 0 ... 19, y = 0 ... 3)
ESC e Cursor on Cursor einschalten
ESC f Cursor off Cursor ausschalten
ESC j Store cursor Die aktuelle Cursor-Position wird gespeichert.
ESC k Restore cursor Der Cursor wird auf die mit ESC j gespeicherte Position bewegt.
ESC l Clear line Die Cursor-Zeile wird gelöscht. Der Cursor geht dann auf den Zeilenanfang.
ESC o Clear line to cursor Die Cursor-Zeile wird vom Anfang bis zum Cursor gelöscht.


Vorschläge für neue Steuersequenzen

Mit einem neuen Kommando sollte die Möglichkeit geschaffen werden, die Eigenschaften des Aus- und Eingabegerätes (Terminal) zu erfragen.

So könnte z. B. das Gerät senden:

 ESC Z = Identify terminal type

Folgende Antwortmöglichkeiten gäbe es:

 ESC [<a_rows>;<a_colums>;<g_rows>;<g_colums>;<keymap>] = Terminal features
 
 a_rows, a_columns:  ASCII-Mode Anzahl Zeilen/Spalten
 g_rows, g_colums:   Graphik-Mode Anzahl Zeilen/Spalten
 keymap:             0 = normal/standard, 1 = cursor keys (up, down, left right), 2 = +/- keys (end, -, +, CR)

Beispiele:

 Nur ASCII-Mode und Standard-Tasten:   ESC [4;20]
 Nur ASCII-Mode und Cursor-Tasten:     ESC [4;20;;;1] oder ESC [4;20;0;0;1]
 Auch Grafik-Mode und Standard-Tasten: ESC [4;20;64;128]
 Auch Grafik-Mode und Cursor-Tasten:   ESC [4;20;64;128;1]

Weiterhin wird ein Kommando benötigt, um in den Grafik-Mode zu wechseln:

 ESC g = Enter graphic mode