Programmierung » ClassPad 300 » Kommunikation über 3Pol

Kommunikation über 3Pol

UNVOLLSTÄNDIG

Der ClassPad hat 4 Möglichkeiten/Protokolle, um über den 3Pol-Anschluß zu kommunizieren. Die Befehle dazu lauten: Send, Receive, Send38k/Receive38k, SendVar38k/GetVar38k. Das ist kein Tippfehler: Send und Receive sind nicht dokumentiert und verwenden (jeweils) ein anderes Protokoll.
Die Protokolle lönnen leicht mit einem FA122 Link-Kabel und einem einfachen, schnell geschriebenen Programm (am einfachsten mit Visual Basic) selbst nachvollzogen werden.

Allgemein

Der ClassPad sendet Bytes um mit seinem Partner zu kommunizieren. Hier sind jeweils das erste Byte und seine Bedeutung aufgelistet.

Byte Bedeutung
0x00 wird bei OpenComPort38k und CloseComPort38k gesendet. (Keine Reaktion nötig)
0x05 Fehler beim Empfang. Die letzte Sendung sollte wiederholt werden.
0x06 allgemeine Bestätigung für den Empfang. (Weiter nach Protokoll)
0x13 Antwort auf 0x15. (Wenn bereit für Empfang)
0x15 Bereit zum Empfang? Als Antwort (wenn bereit) folgt 0x13.
0x21 Allgemeiner Fehler, Abbruch der Kommunikation.
0x24 Unzureichender Speicher, Abbruch der Kommunikation.
0x3A Anfang eines Paketes. Es folgt ein Paket (entweder ein Header oder Daten).

Nach 0x3A kommen die Daten des Paketes und ein Byte für die Prüfsumme. Prüfsumme ist die Differenz der Summe der eizelnen Bytes zu 256 (0x0100): 256 - (s % 256).

In dem Beispiel-Strömen handelt es sich um Hex-Zahlen.

Send

Das ist das selbe Protokoll wie für den CFX (Send-Befehl). Der ClassPad führt "Send a" aus. Folgende Daten sind ein Beispiel-Strom zwischen dem ClassPad und einem externen Gerät.

Einstellungen: 9600,n,8,2 (Baud, Parität, Daten-, Stopp-Bits).

r: - das externe Gerät (PC, EA, ...) empfängt die Daten, s: - das externe Gerät (PC, EA, ...) sendet die Daten
r:    15    Bereit?
s:    13    Ja, Bereit!
r:    3A 56 41 4C 56 4D 1 1 41 FF FF FF FF FF FF FF 56 61 72 69 61 62 6C 65 52 A FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D0    Variablen-Kopf (:VAR VM)
s:    6    Empfangen
r:    3A 1 1 1 23 45 60 1 5 2F    Variablen-Daten (haben eine veränderliche Länge)
s:    3A 45 4E 44 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 56    End-Paket (:END)

Receive

Das ist das selbe Protokoll wie für den CFX (Receive-Befehl). Der ClassPad führt "Receive a" aus. Folgende Daten sind ein Beispiel-Strom zwischen dem ClassPad und einem externen Gerät.

Einstellungen: 9600,n,8,2 (Baud, Parität, Daten-, Stopp-Bits).

r: - das externe Gerät (PC, EA, ...) empfängt die Daten, s: - das externe Gerät (PC, EA, ...) sendet die Daten
r:    15    Bereit?
s:    13    Ja, Bereit!
r:    3A 52 45 51 56 4D FF FF FF FF 41 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5D    Request für Variable "A" (:REQVM)
s:    6    OK, Verstanden, Bereit für Empfang?
r:    6    Ja, Bereit für Empfang!
s:    3A 56 41 4C 0 56 4D 0 1 0 1 41 FF FF FF FF FF FF FF 56 61 72 69 61 62 6C 65 52 A FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D0    Variablen-Kopf (:VAR VM)
r:    6    Empfangen
s:    3A 0 1 0 1 1 23 45 67 89 0 0 0 1 9 9B    Variablen-Daten (haben eine veränderliche Länge)
r:    6    Empfangen
s:    3A 45 4E 44 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 56    End-Paket (:END)

Send38k/Receive38k

Einstellungen: 38400,n,8,2 (Baud, Parität, Daten-, Stopp-Bits).

r: - das externe Gerät (PC, EA, ...) empfängt die Daten, s: - das externe Gerät (PC, EA, ...) sendet die Daten
r:    0    OpenComPort38k
r:    15    Bereit?
s:    13    Ja, Bereit!
r:    3A 4E 41 56 0 1 0 0 0 1 0 8 FF 41 D1    NAV-Header (:NAV)
s:    6    OK, Verstanden, Bereit für Empfang
r:    3A 35 35 35 35 35 35 35 35 58    Daten (55555555)
s:    6    OK, Verstanden, Ende
r:    0    CloseComPort38k

SendVar38k/GetVar38k

Einstellungen: 38400,n,8,2 (Baud, Parität, Daten-, Stopp-Bits).

r: - das externe Gerät (PC, EA, ...) empfängt die Daten, s: - das externe Gerät (PC, EA, ...) sendet die Daten
r:    0    OpenComPort38k
r:    15    Bereit?
s:    13    Ja, Bereit!
r:    3A 4E 44 64 0 1 0 1 0 12 0 12 12 FF D3    NDd-Header (:NDd)
s:    6    OK, Verstanden, Bereit für Empfang
r:    3A 0 1 0 10 1 0 3 0 3 40 E2 1 0 0 0 0 0 0 C5    Daten (123456)(Intel-Format)
s:    6    OK, Verstanden, Ende
r:    0    CloseComPort38k

NDd-Header

Bytes Name Bedeutung
7 (0x07) NDd Ist immer: 0x4E446400010001
2 (0x02) Data-Length Länge des Daten-Paketes (ohne 0x34 und Prüf-Summe) (Motorola-Format)
2 (0x02) Data-Length Länge des Daten-Paketes (ohne 0x34 und Prüf-Summe) (Motorola-Format)
1 (0x01) DataType Daten-Typ (entspricht dem Daten-Typ im MCS-Image)
1 (0x01) Reserved immer: 0xFF

Data-Type kann dabei sein (siehe MCS-Spezifikation unter MCS_Mem_Image_FileList->DataType):

Data-Type Bedeutung
0x05 Strings (Variablen-Typ STR)
0x12 Formeln (Variablen-Typ EXPR)

Strings

In den folgenden Beispielen ist als erstes der Wert der Variable, in der nächsten Zeile das Header-Paket und dann das Daten-Paket angegeben. Bei den Paketen handelt es sich um Hex-Zahlen.

3A 00 01
& Daten (Byte für Byte (bei Byte > 127: 2 Byte-Zeichen)
  Länge d. Daten muss durch 4 teilbar sein (wird mit 0x00 aufgefüllt),
  das Zeichen vor der Prüfsumme muss ein 0x00 sein (evtl. mit 4 * 0x00 auffüllen)
& 1 Byte: Prüfsumme

"a"
3A 4E 44 64 0 1 0 1 0 6 0 6 5 FF F8
3A 0 1 61 0 0 0 9E

"aa"
3A 4E 44 64 0 1 0 1 0 6 0 6 5 FF F8 
3A 0 1 61 61 0 0 3D

"1234"
3A 4E 44 64 0 1 0 1 0 A 0 A 5 FF F0 
3A 0 1 31 32 33 34 0 0 0 0 35

"12345"
3A 4E 44 64 0 1 0 1 0 A 0 A 5 FF F0 
3A 0 1 31 32 33 34 35 0 0 0 0

"123456"
3A 4E 44 64 0 1 0 1 0 A 0 A 5 FF F0 
3A 0 1 31 32 33 34 35 36 0 0 CA

Formeln

In den folgenden Beispielen ist als erstes der Wert der Variable, in der nächsten Zeile das Header-Paket und dann das Daten-Paket angegeben. Bei den Paketen handelt es sich um Hex-Zahlen.

3A 00 01
& 2 Bytes: Anzahl folgende Bytes + 2 (diese Anzahl ist also mitgezählt)
& 0x01
& 2 Bytes: Länge/Anzahl der Bytes mit Daten (die in der Anzeige verwendet werden)
& 2 Bytes: Länge/Anzahl der Bytes mit Daten (erstes Byte ist für negative Zahlen 0x80)
& Daten: Intel-Notation
& 1 Byte: Prüfsumme

(Bei einer Differenz der Längen/Anzahlen (letztes Byte), dann ist die Zahl mit E [1 + Differenz] gespeichert.)

1
3A 4E 44 64 0 1 0 1 0 E 0 E 12 FF DB 
3A 00 01 00 0C 01 00 01 00 01 01 00 00 00 00 EF

  123
3A 4E 44 64 00 01 00 01 00 0E 00 0E 12 FF DB 
3A 00 01 00 0C 01 00 01 00 01 7B 00 00 00 00 75

  254
3A 4E 44 64 00 01 00 01 00 0E 00 0E 12 FF DB 
3A 00 01 00 0C 01 00 01 00 01 FE 00 00 00 00 F2

  256
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 02 00 02 00 01 00 00 00 00 00 00 00 E9

  65535
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 02 00 02 FF FF 00 00 00 00 00 00 00 EC

  65536
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 03 00 03 00 00 01 00 00 00 00 00 00 E7

  16777215
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 03 00 03 FF FF FF 00 00 00 00 00 00 EB

 16777216
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 04 00 04 00 00 00 01 00 00 00 00 00 E5

  4294967296
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 05 00 05 00 00 00 00 01 00 00 00 00 E3

  1099511627775
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 05 00 05 FF FF FF FF FF 00 00 00 00 E9

  1099511627776
3A 4E 44 64 00 01 00 01 00 16 00 16 12 FF CB 
3A 00 01 00 14 01 00 06 00 06 00 00 00 00 00 01 00 00 00 00 00 00 00 DD

  -1
3A 4E 44 64 00 01 00 01 00 0E 00 0E 12 FF DB 
3A 00 01 00 0C 01 00 01 80 01 01 00 00 00 00 6F

  -255
3A 4E 44 64 00 01 00 01 00 0E 00 0E 12 FF DB 
3A 00 01 00 0C 01 00 01 80 01 FF 00 00 00 00 71

  -256
3A 4E 44 64 00 01 00 01 00 12 00 12 12 FF D3 
3A 00 01 00 10 01 00 02 80 02 00 01 00 00 00 00 00 00 00 69

  1/2
3A 4E 44 64 00 01 00 01 00 1E 00 1E 12 FF BB 
3A 00 01 00 1C 05 00 02 01 00 01 00 01 01 00 00 00 00 01 00 01 00 01 02 00 00 00 00 00 00 00 D3

  3/2
3A 4E 44 64 00 01 00 01 00 1E 00 1E 12 FF BB 
3A 00 01 00 1C 05 00 02 01 00 01 00 01 03 00 00 00 00 01 00 01 00 01 02 00 00 00 00 00 00 00 D1

  256/15
3A 4E 44 64 00 01 00 01 00 1E 00 1E 12 FF BB 
3A 00 01 00 1C 05 00 02 01 00 02 00 02 00 01 00 00 00 00 01 00 01 00 01 0F 00 00 00 00 00 00 C4

  -256/15
3A 4E 44 64 00 01 00 01 00 1E 00 1E 12 FF BB 
3A 00 01 00 1C 05 00 02 01 00 02 80 02 00 01 00 00 00 00 01 00 01 00 01 0F 00 00 00 00 00 00 44