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;
}