Virtuelle Konsole: Unterschied zwischen den Versionen

Aus CANopen-Lift
Zur Navigation springen Zur Suche springen
(Neuer Artikel)
 
(Tastencodes und VT-52 Steuersequenzen)
Zeile 43: Zeile 43:
   Address:      Node-ID Gerät (Source)
   Address:      Node-ID Gerät (Source)
   Multiplexor:  0x1026, 0x02
   Multiplexor:  0x1026, 0x02
   Data:        1 Zeichen
   Data:        1 Zeichen (opt. 4 Zeichen)


Tastatur-Eingaben:
Tastatur-Eingaben:
Zeile 53: Zeile 53:
   Data:        1 Zeichen (Tastencode)
   Data:        1 Zeichen (Tastencode)


Zum Einschalten der Display-Ausgabe via MPDO schickt die Konsole entweder ein beliebiges Zeichen ungleich Null oder Cntrl-A (0x01). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. die 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.
Zum Einschalten der Display-Ausgabe via MPDO schickt die Konsole entweder ein beliebiges Zeichen ungleich Null oder Cntrl-A (0x01). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. die 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 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 Deaktivieren der Display-Ausgabe schickt die 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.


Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei Zeichen in 10 ms ausgegeben werden.
Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei Zeichen in 10 ms ausgegeben werden.
== Tastaturcodes ==
Folgende ASCII-Codes können für eine Menü-Steuerung verwendet werden:
{| border="1" cellspacing="0"
! Dez. !! Hex !! Char !! Bedeutung
|-
| 24 || 0x18 || CAN || End/Cancel (Cntrl-X)
|-
| 45 || 0x2D || '-' || Minus
|-
| 43 || 0x2B || '+' || Plus
|-
| 13 || 0x0D || CR || CR/Enter
|}
== Mindestanforderung an VT52 Steuersequenzen ==
{| border="1" cellspacing="0"
! 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 muß 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.
|-
|}

Version vom 11. August 2006, 13:50 Uhr

CANopen Konsole nach CiA DS-301, Objekt 1026

Allgemeines

Mittels des Objekts 1026 kann man ein CANopen-Gerät fernbedienen bzw. -parametrieren. Die Anzeige und die Tastatur befindet sich dazu in einem anderen CANopen-Gerät (Ausgabegerät/Konsole).

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)

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

 Objekt 1026 Subindex 1 ist stdin (Standard-Eingabe)
 Objekt 1026 Subindex 2 ist stdout (Standard-Ausgabe)
 Objekt 1026 Subindex 3 ist stderr (Fehler-Ausgabe)

Möchte das Gerät Ausgaben in einer Konsole oder Display (z. B. das Steuerungs-Display) tätigen, so stellt es die Zeichen für die Ausgabe im Objekt 1026:2 bereit. Eine Null bedeutet kein Zeichen verfügbar. Zur Steuerung des Cursors können die Steuersequenzen nach VT-52 benutz werden.

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


Ablauf des Datenaustausches via SDO

Das Ausgabegerät (Konsole) pollt zyklisch das Objekt 1026: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.

Liegt kein Zeichen vor, kann die Pollzeit langsamer sein.

Wird eine Taste betätigt, so wird der Tastencode in das Objekt 1026:1 geschrieben.


Ablauf des Datenaustausches via MPDO

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

Konsole-/Display-Ausgaben:

 COB-ID:       0x500 + Node-ID Gerät
 Länge:        8 Bytes
 Address:      Node-ID Gerät (Source)
 Multiplexor:  0x1026, 0x02
 Data:         1 Zeichen (opt. 4 Zeichen)

Tastatur-Eingaben:

 COB-ID:       0x500 + Node-ID Konsole 
 Länge:        8 Bytes 
 Address:      0x80 + Node-ID Gerät (Destination)
 Multiplexor:  0x1026, 0x01
 Data:         1 Zeichen (Tastencode)

Zum Einschalten der Display-Ausgabe via MPDO schickt die Konsole entweder ein beliebiges Zeichen ungleich Null oder Cntrl-A (0x01). Mit Cntrl-A wird die Zeitüberwachung aktiviert, d. h. die 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 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.

Damit es bei der Zeichenausgabe per MPDO nicht zu einer zu hohen Buslast kommt, sollten maximal zwei Zeichen in 10 ms ausgegeben werden.


Tastaturcodes

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

Dez. Hex Char Bedeutung
24 0x18 CAN End/Cancel (Cntrl-X)
45 0x2D '-' Minus
43 0x2B '+' Plus
13 0x0D CR CR/Enter


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 muß 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.