Aktuelle Änderungen - Suchen:

MiniDMX

Empfohlene Links

MiniDMX-Protokoll

Ursprünglich wurde dieses serielle Protokoll von mir für die Anbindung des MiniDMX an den PC entwickelt. Das Protokoll dient zur Übertragung von Kanälen zugeordneten Werten. Je Kanal kann ein Wert zwischen 0 und 255 übertragen werden. Es können mehrere hundert Kanäle übertragen werden. Ein Kanalwert kann z.B. die Helligkeit eines Scheinwerfers oder zwei Kanalwerte können die X-Position (0 bis 65535) eines Scanners repräsentieren.

Die Hardware des MiniDMX ist inzwischen durch weiterentwickelte Nachbauten abgelöst worden. Doch das verwendete Protokoll hat sich bei der Anbindung von Lichttechnik an den PC etabliert. Dies kommt auch durch die weitreichende Verwendung in vielen anderen Software- und Hardware-Projekten zum Ausdruck.

Für die Übertragung wird eine einfache serielle Strecke benötigt. Das kann eine serielle Schnittstelle (RS232), das serielle Profil von USB oder auch eine TCP/IP-Verbindung sein. Der Übertragungsweg sollte hinreichend fehlerfrei sein, da das MiniDMX-Protokoll selbst keine Übertragungsfehler erkennt. Allerdings sind in dem Protokoll Maßnahmen vorgesehen, die den Sender und den Empfänger automatisch neu synchronisieren, falls Teile der Übertragung ungültig sind. In sicherheitskritischen Anwendungen darf das Protokoll natürlich nicht verwendet werden.

Wird das MiniDMX-Protokoll über eine serielle Schnittstelle (RS232) verwendet, sind die Schnittstelleneinstellungen 115,2 kbits/s, 8 Datenbits, kein Paritätsbit und 1 Stopbit zu verwenden.

Aktuell ist die Version 2 des Protokolls, die auch zurzeit die größte Verbreitung besitzt. Eine stark erweiterte Version 3 ist in Arbeit.

Zeitverhalten

Für die Synchronisation von Sender und Empfänger müssen bei der Implementierung des Protokolls einige Vorgaben bezüglich des Zeitverhaltens eingehalten werden. Dieses Zeitverhalten gilt für alle Protokoll-Versionen.

  1. Der Sender schickt ein Paket an den Empfänger und wartet mindestens 100 ms (Millisekunden) nach dem Ende des Pakets auf eine Antwort. Falls keine Antwort innerhalb der Wartezeit empfangen wird, kann von einem Übertragungsfehler ausgegangen werden. Ein neues Paket kann direkt nach der Antwort des Empfängers oder nach der Wartezeit verschickt werden.
  2. Der Empfänger überprüft die empfangenen Werte für Blockstart, Befehlsnummer und Blockende. Sobald ein Wert fehlerhaft ist, kann von einem Übertragungsfehler ausgegangen werden, und es wird wieder auf einen Blockstart gewartet. Die bisher empfangenen Daten werden verworfen.
  3. Wenn der Empfänger 100 ms lang nichts vom Sender hört, auch z.B. mitten in einem angebrochenen Block, dann wartet der Empfänger wieder auf den nächsten Blockstart. Die bisher empfangenen Daten werden verworfen.
  4. Der Empfänger sollte natürlich Antwort-Pakete verschicken, damit die Aktualisierungsrate größer als 10 Hertz ist.

Protokoll Version 2

Alle Pakete, die der Sender zum Empänger schickt, haben folgenden Aufbau: 5A für den Blockstart, eine Befehlsnummer, Kanaldaten und A5 für das Blockende. Die einzelnen Bytes des Paketes müssen direkt hintereinander versendet werden und müssen einen zeitlichen Abstand unter 50 ms besitzen.

Befehl: 96 Kanäle senden

Dieser Befehl existiert ab der Version 1 des Protokolls. Er wurde für Mikrocontroller mit nur 128 Bytes RAM entworfen.

Wert (hex)Bedeutung
5ABlockstart
A0Befehlsnummer für 96 Kanäle senden
96 BytesKanalwerte 1 bis 96
A5Blockende

Befehl: 256 Kanäle senden

Dieser Befehl existiert ab der Version 2 des Protokolls. Durch die Beschränkung auf die Hälfte der maximal möglichen Kanalanzahl, ist eine doppelt so hohe Refresh-Rate (ca. 44 Hz) möglich.

Wert (hex)Bedeutung
5ABlockstart
A1Befehlsnummer für 256 Kanäle senden
256 BytesKanalwerte 1 bis 256
A5Blockende

Befehl: 512 Kanäle senden

Dieser Befehl existiert ab der Version 2 des Protokolls. Es wird die maximale Anzahl an Kanälen gesendet. Die Refresh-Rate der DMX-Kanäle liegt bei ca. 22 Hz.

Wert (hex)Bedeutung
5ABlockstart
A2Befehlsnummer für 512 Kanäle senden
512 BytesKanalwerte 1 bis 512
A5Blockende

Antworten des Empfängers

Die Antwortpakete bestehen aus 3 Bytes: 5A für den Blockstart, C0 oder C1 für das Ergebnis des Sendevorgangs und A5 für das Blockenden. Die einzelnen Bytes des Paketes müssen direkt hintereinander versendet werden und müssen einen zeitlichen Abstand unter 50 ms besitzen.

Antwort: Senden erfolgreich ausgeführt

Dieser Befehl existiert ab der Version 1 des Protokolls.

Wert (hex)Bedeutung
5ABlockstart
C1Befehl erfolgreich ausgeführt
A5Blockende

Antwort: Fehler beim Senden

Dieser Befehl existiert ab der Version 2 des Protokolls.

Wert (hex)Bedeutung
5ABlockstart
C0Allgemeiner Fehler
A5Blockende

Unterschiede zu älteren Versionen

Die Versionen 1 des Protokolls kennt nur den Block-Typ A0 (96 Kanäle senden). Im Fehlerfall wird keine Antwort zurückgesendet, es wird also kein Block-Typ C0 (allgemeiner Fehler) gesendet. Ein Fehler ist nur durch eine Zeitüberschreitung beim Warten auf die Antwort (max. 100 ms) zu erkennen.

Übersicht über die unterstützten Befehle in jeder Version:

Befehlsnummer (hex)BeschreibungV1V2V3 (in Arbeit)
Vom Sender zum Empfänger
A096 Kanäle sendenXX-
A1256 Kanäle senden-XX
A2512 Kanäle senden-XX
Vom Empfänger zum Sender
C0Allgemeiner Fehler-XX
C1Befehl erfolgreich ausgeführtXXX

Variante ohne Rückkanal

Es existieren Implementierungen des Protokolls, die auf einen Rückkanal verzichten, also auch das beschriebene Zeitverhalten nicht verwenden. Der Sender schickt unbeirrt seine Datenblöcke auf die serielle Leitung. Der Empfänger versucht sich durch Erkennung des Blockstarts 5A zu synchronisieren. Ein Vorteil ist der eingesparte Rückkanal, ein Nachteil ist die erschwerte Synchronisation, wenn in den Nutzdaten das Blockstart-Kennzeichen 5A vorkommt. Zudem sind diese Sender und Empfänger nur eingeschränkt mit Sendern und Empfängern verwendbar, die sich an den Standard halten. Falls diese Variante zum Einsatz kommt, sollte also ausdrücklich darauf hingewiesen werden.

MiniDMX / Protokoll - Zuletzt geändert am 12.01.2016 22:03 Uhr