Small Protokoll

1. Befehle / Daten zum Modul senden

Dieser Protokoll-Befehl überträgt Daten zum Display. Es können mehrere Grafikbefehle in ein Protokollpaket verpackt werden. Sind die Daten größer als die maximale Paketgröße können die Daten auf mehrere Pakete aufgeteilt werden. Das Modul fügt die einzelnen Datenpakete wieder zusammen.


Modul empfängt

DC1

0x11

Länge (8 Bit)

0xXX

Data.......

0x....

bcc (8 Bit)

0xXX

Modul sendet

ACK

0x06




Beispiel: #XCB25 ändert z.B. die Helligkeit auf 25%. Dazu gehört am Ende ein [LF] bzw. 0x0A als Abschlusskennung

Das Paket beginnt also mit DC1 und einer Längenangabe der Nutzdaten. Am Ende steht eine Prüfsumme (8 Bit Summe, Modulo 256) über das komplette Paket. Hier finden Sie einen Online-CRC-Calculator.

In Hex: 11 07 23 58 43 42 32 35 0A 89 (hier als Datei zum Download; diese kann z.B. per Drag-and-Drop einfach auf terminal.exe geschoben werden)


Beispiel: #XCB75 ändert z.B. die Helligkeit auf 75%.

In Hex: 11 07 23 58 43 42 37 35 0A 8E (hier als Datei zum Download)

2. Inhalt des Sendepuffers anfordern

Fallen Daten im Modul an, werden diese im Sendepuffer des Moduls gespeichert. Über die seriellen Schnittstellen können die Daten angefordert werden. Ob Daten verfügbar sind kann über den Pin 20 SBUF herausgefunden werden, oder aber die übergeordnete Steuerung fragt zyklisch die Daten ab (polling).


Modul empfängt

DC2

0x12

Länge (8 Bit)

0x01

'S'

0x53

bcc (8 Bit)

0x66

Modul sendet

ACK

0x06





Modul sendet

DC1

0x11

Länge (8 Bit)

0xXX

Data.......

0x....

bcc (8 Bit)

0xXX

3. Letztes Datenpaket wiederholen

Ist ein Empfangenes Packet des Moduls fehlerhaft (falsche Länge oder Prüfsumme) kann es erneut angefordert werden:


Modul empfängt

DC2

0x12

Länge (8 Bit)

0x01

'R'

0x52

bcc (8 Bit)

0x65

Modul sendet

ACK

0x06




Modul sendet

DC1

0x11

Länge (8 Bit)

0xXX

Data.......

0x....

bcc (8 Bit)

0xXX

4. Pufferinformationen anfordern

Mit diesem Befehl wird nachgefragt, ob Nutzdaten zur Abholung bereit stehen (= Pin20 SBUF) und wie voll der Empfangspuffer des Displays bereits ist.


Modul empfängt

DC2

0x12

Länge (8 Bit)

0x01

'I'

0x49

bcc (8 Bit)

0x5C

Modul sendet

ACK

0x06




Modul sendet


DC2

0x12

Länge (8 Bit)

0x02

Sendepuffer Bytes ready (8 Bit)

0xXX

Empfangspuffer Bytes free (8 Bit)

0xXX

bcc (8 Bit)

0xXX

5. Protokolleinstellungen

Hierüber lässt sich die maximale Paketgröße welche das Display senden darf begrenzen. Voreingestellt ist eine Paketgröße mit bis zu 255 Byte Nutzdaten. Weiterhin lässt sich der Time-out in 1/100s einstellen. Der Time-out spricht an, wenn einzelne Bytes verloren gegangen sind. Danach muss das gesamte Paket nochmals übertragen werden.


Modul empfängt

Defaultwerte

DC2

0x12

Länge (8 Bit)

0x03

'D'

0x44

Paketgröße Sendepuffer (8 Bit)

0xFF

Time-out (8 Bit) in 1/100s

0xC8 (=2 Sekunden)

bcc (8 Bit)

0x20

Modul sendet

ACK

0x06




6. Protokollinformationen

Abfrage der Protokolleinstellungen (siehe 5.).


Modul empfängt

DC2

0x12

Länge (8 Bit)

0x01

'P'

0x50

bcc (8 Bit)

0x63

Modul sendet

ACK

0x06




Modul sendet


DC2

0x12

Länge (8 Bit)

0x03

Maximale Paketgröße Sendepuffer (8 Bit)

0xFF

Paketgröße Sendepuffer (8 Bit)

0xXX

Time-out (8 Bit) in ms

0xXX

bcc (8 Bit)

0xXX

7. RS485 Adresse selektieren / deselektieren

Mit diesem Befehl lässt sich ein Modul am RS485-Bus selektieren oder deselektieren. Per Default ist ein Modul mit der Adresse 7 immer aktiv.


Modul empfängt


Defaultwerte

DC2


0x12

Länge (8 Bit)


0x03

'A'


0x41

'S' (=Selektieren)

'D' (=Deselektieren)

0x53 oder 0x44

RS485-Adresse


0xXX

bcc (8 Bit)


0xXX

Modul sendet


ACK

0x06

----

Selektieren


Deselektieren



8. RS485 Verzögerung Enable Signal

Einige RS485 benötigen eine gewisse Zeit um das Enable-Signal zu verändern und z.B. vom schreibenden in den lesenden Modus umzuschalten. Um eine erfolgreiche Kommunikation mit diesen Geräten zu ermöglichen kann mit diesem Befehl die Umschaltung in den schreibenden Modus verzögert werden.


Modul empfängt

Defaultwerte

DC2

0x12

Länge (8 Bit)

0x03

'T'

0x54

Verzögerung in 10 us

0x00 0x00

bcc (8 Bit)

0x69

Modul sendet


ACK

0x06



9. Schnittstelle exklusiv anfordern

Alle 4 seriellen Schnittstellen werden parallel und gleichwertig behandelt. Um zu gewährleisten, dass eine Abfolge von Protokollpaketen ohne Unterbrechung durchgeführt wird, können die anderen seriellen Schnittstellen deaktiviert werden und die Schnittelle exklusiv angefordert werden. Dies ist zum Beispiel bei einem Projektupdate über USB sinnvoll.


Modul empfängt

DC2

0x12

Länge (8 Bit)

0x02

'G'

0x47

0x00 = Freigabe

0x01 = Anfordern

bcc (8 Bit)

0xXX

Modul sendet

ACK

0x06




Modul sendet


DC2

0x12

Länge (8 Bit)

0x01

Aktiv (8 Bit)

0x00 = alle

0x01 = RS232

0x02 = SPI

0x03 = I²C

0x04 = USB

bcc (8 Bit)

0xXX

10. Break-Kommando, Ausführung Unterbrechen / Beenden

Falls in einem Makro eine Dauerschleife programmiert wurde oder eine Unterbrechung des normalen Ablaufs gewünscht wird, kann mit diesem Befehl gezielt Unterbrochen und Beendet werden. Auch dieser Befehl eignet sich vor allem für Update-Vorgänge.


Modul empfängt

Defaultwerte

DC2

0x12

Länge (8 Bit)

0x02

'C'

0x43

break

0x01 = Wait command

0x02 = aktuelles Makrofile

0x04 = Sendepuffer löschen

0x08 = Empfangsbuffer leeren

0x10 = Makrodefiniton (z.B. Portmakros)

0xFF = Alles Unterbrechen und Beenden

bcc (8 Bit)

0xXX

Modul sendet

ACK

0x06




11. Hardware Reset

Das Modul wird mit diesem Protokollbefehl neu gestartet. Je nach Parameter wird nach dem Reset eine andere Startoption gewählt.


Modul empfängt

Defaultwerte

DC2

0x12

Länge (8 Bit)

0x02

'B'

0x42

Option

0x00 = Normaler Neustart

0x01 = Neustart im Testmode

0x02 = Neustart ohne 'start.emc'

0x03 = Neustart ohne default Styles

0x04 = Bootmenü anzeigen (Projektauswahl)

0x05 = Reserved

0x06 = Mass Storage Mode (ab V1.2)

bcc (8 Bit)

0xXX

Modul sendet

ACK

0x06




BCC-Berechnung

Für die Berechnung der Prüfsumme wird eine einfache 8-Bit Summenprüfung (Modulo 256) benötigt. Im Folgenden sehen Sie eine typische C-Implementierung.


//----------------------------------------------------------------------------

//Funktion: buffer2bcc()

//input:    ptr Datum, blocklänge

//output:   ---

//Beschr:   Byte bcc für einen Speicherbereich

//----------------------------------------------------------------------------

UBYTE buffer2bcc(UBYTE *dat, UBYTE anz)

{

 UBYTE bcc = 0;

 while(anz--)

   bcc += *dat++;

 return bcc;

}