Fernsteuern eines TLS Pathfinder Systemteilers TLS Media Control Protocol (MCP): Informationen für Programmierer von Mediensteuerungen mit RS232-Schnittstelle Einleitung: Das MCP ist ein Busprotokoll und hat daher Adressteile, die für eine Punkt-zu-Punkt-Verbindung wie RS232 nicht notwendig wären. Um jedoch für Busanwendungen gerüstet zu sein, unterstützen alle fernsteuerbaren TLS-Geräte das MCP. Für den Betrieb der TLS-Geräte an universellen Steuerungen mit RS232 kann der Programmierer die Adressteile als festen Datensatz betrachten, der dem eigentlichen Kommando und seinen anhängenden Parametern einfach voraus gesendet wird. Die Übertragung erfolgt binär mit 4800,8,N,1. Protokoll-Format: Gesamtes Paket: DST: SRC: DATA: DST SRC DATA DestinationAddress, Zieladresse SourceAddress, Quelladresse Datenpaket DST oder SRC: ASZ: A1...Aasz: ACB: ASZ A1 A2 A3... Aasz ACB AddressSize, Anzahl Adresszeichen (1 Byte) Adresszeichen (je 1 Byte) AddressControlByte, XOR-Verknüpfung von ASZ bis Aasz (1 Byte) BROADCAST: ASZ der Zieladresse ist Null. Das ACB ist dann logischerweise auch Null. DATA: CMD: DSZ: CPD: DCB: CMD DSZ CPD DCB Command, Befehl (1 Byte) DataSize, Anzahl befehlbezogener Datenbytes (2 Bytes, HighByteFirst) CommandPrivateData, befehlbezogene Daten DataControlByte, XOR-Verknüpfung von CMD bis CPD (1 Byte) - 1 -
Allgemeines: Response: Nach Empfang eines Befehls sendet ein Gerät eine Antwort. Eine Antwort auf einen bestimmten Befehl kennzeichnet sich, indem im CMD das höchstwertigste Bit gesetzt ist die übrigen Bits enthalten den ursprünglichen Befehl. Daraus folgt, dass maximal 127 Befehle existieren können. Unbekannte Befehle werden von den Geräten ignoriert. Je nach Befehl kann die Antwort angeforderte Daten enthalten. Timeout: Alle Geräte hören auf den Bus. Während der Übertragung vergleicht ein empfangendes Gerät die Zieladresse mit seiner eigenen Adresse. Bei Nichtübereinstimmung verfällt die Schnittstelle in den Leerlauf. Im Leerlauf werden die empfangenen Daten nicht gespeichert, sondern nur der Timeout- Counter mit jedem empfangenen Byte neu gestartet. Solange der Timeout-Counter nicht abgelaufen ist, gilt der Bus als besetzt und das Gerät darf nicht senden. Der Zustand des abgelaufenen Counters wird als Medium-Timeout bezeichnet. Wenn der Timeout-Counter zur Hälfte abgelaufen ist, wird ein eventueller Leerlauf beendet und das Gerät stellt sich auf den Empfang eines neuen Protokolls ein. Dadurch wird verhindert, dass mitten in einem Protokoll der Empfang begonnen wird und es wird auf diese Art der Datenfluss überwacht. Als Medium-Timeout wird eine Zeit von 50 ms festgelegt (200 ms für Geräte bis Oktober 2002). Also: 25 ms Ruhe auf dem Bus => Gerät geht auf Empfang, falls es nichts senden will 50 ms Ruhe auf dem Bus => Gerät kann bei Bedarf senden Datenkollision: Vor dem Start einer Übertragung warten die Geräte einen Medium-Timeout ab. Falls zwei Geräte gleichzeitig zu senden beginnen, kollidieren die Daten auf dem Bus und werden zerstört. Durch zurücklesen und prüfen jedes gesendeten Bytes wird eine Datenkollision erkannt. In diesem Fall wiederholen beide Gerät die Ausgabe so oft, bis die Daten unbeschädigt ausgegeben werden konnten. Broadcast: Eine Nachricht an alle wird versendet, indem die Zieladresse auf die Größe Null gesetzt wird. Der gesamte Zieladressenteil besteht aus zwei Null-Bytes (das erste Null-Byte ist die Größenangabe der Adresse, das zweite ist das Control-Byte). - 2 -
Kommandos: Übersicht: Symbol Nummer Erläuterung M_SETCHANMASK 41 Alle Kanäle zugleich setzen/rücksetzen M_GETCHANMASK 42 Zustand aller Kanäle abfragen M_SETCHANON 43 Bestimmten Kanal aktivieren M_SETCHANOFF 44 Bestimmten Kanal deaktivieren M_SETVIDEOAMP 45 Bildverstärkung einstellen M_KEYBENABLE 103 Lokale Tasten (de-)aktivieren M_SETADDRESS 105 Geräteadresse setzen Datenteil M_SETCHANMASK in Rtg. Pathfinder Systemteiler: 41 0 1 Kanalmaske DCB Dieses Kommando setzt gleichzeitig alle Kanäle des Gerätes gemäß der Kanalmaske, die das gewünschte Aktivitätsmuster repräsentiert: Bit0=Kanal1, Bit1=Kanal2 u.s.w., Bit4 bis Bit7 sind ohne Bedeutung. Ein Bitwert 0 bedeutet Kanal ausschalten, 1 bedeutet einschalten. Datenteil M_GETCHANMASK in Rtg. Pathfinder Systemteiler: 42 0 0 DCB: 42 Dieses Kommando fragt vom Gerät die Kanalmaske ab, die das gegenwärtige Aktivitätsmuster repräsentiert. Datenteil M_SETCHANON in Rtg. Pathfinder Systemteiler: 43 0 1 Kanal DCB Hiermit wird ein bestimmter Kanal aktiviert; zulässige Werte sind 1...4. Datenteil M_SETCHANOFF in Rtg. Pathfinder Systemteiler: 44 0 1 Kanal DCB Hiermit wird ein bestimmter Kanal deaktiviert; zulässige Werte sind 1...4. Antwort für Kommandos M_SETCHANMASK, M_GETCHANMASK, M_SETCHANON, M_SETCHANOFF: CMD+128 0 1 Kanalmaske DCB Als Antwort auf alle Befehle sendet das Gerät die Kanalmaske zurück, die das aktuelle Aktivitätsmuster zeigt. - 3 -
Datenteil M_SETVIDEOAMP in Rtg. Pathfinder Systemteiler: 45 0 1 Level DCB Hiermit wird die Bildverstärkung eingestellt. Der Parameter Level kann Werte von 0 bis 3 annehmen. Die einstellbare Bildverstärkung wird nicht von jedem Pathfinder Systemteiler unterstützt. Antwort: 45+128 0 1 Level DCB Die erzielte Bildverstärkung wird in der Antwort zurückgemeldet. Datenteil M_SETADDRESS in Rtg. Pathfinder Systemteiler: 105 0 1 Address DCB Hiermit wird die Geräteadresse gesetzt. Der Parameter Address kann alle Werte von 0 bis 255 annehmen. Die Adresse muss nur gesetzt werden, wenn das Gerät zusammen mit anderen Geräten auf einem Bus betrieben wird; dann braucht jedes Gerät eine eindeutige Adresse. Wird zum Steuergerät eine Punkt-Zu-Punkt-Verbindung realisiert und Broadcast-Adressierung verwendet, dann hat die gegenwärtige Geräteadresse keine Bedeutung. Antwort: 105+128 0 1 Address DCB Die eingestellte Adresse wird in der Antwort zurückgemeldet. Datenteil M_KEYBENABLE in Rtg. Pathfinder Systemteiler: 103 0 1 EnableFlag DCB Das EnableFlag ist Null, wenn die lokalen Tasten gesperrt werden sollen oder ungleich Null, um die Tasten wieder freizugeben. Antwort: 103+128 0 1 EnableFlag DCB Der eingestellte Zustand wird in der Antwort zurückgemeldet. Automatische Meldungen: Datenteil M_IMONLINE (Code: 102) an alle: 102 0 0 DCB:102 Gerät meldet nach dem Starten sein Erwachen. Eine Mediensteuerung kann auf diese Meldung reagieren, indem sie ggf. Einstellungen am Gerät vornimmt. - 4 -
Beispiel: Programmiersprache C, Stränge des Pathfinder Systemteilers ein-/ausschalten void main( void ) char key; // Gedrueckte Taste unsigned char databuf[16]; // Protokollpuffer unsigned char n; // Zaehlvariable // Die Adressteile sind ein unveraenderlicher Datensatz: databuf[0] = 0; // Zieladr. ist 0 Byte gross => Broadcast databuf[1] = 0; // ACB ist 0 bei Broadcast databuf[2] = 1; // Die Quelladresse ist 1 Byte gross databuf[3] = 100; // Mediensteuerung hat Adr. 100 databuf[4] = 1^100; // Groesse und Adr. werden XOR verknuepft // Der Datenteil hat 2 unveraenderliche Bytes: databuf[6] = 0; // Highbyte der Datengroessenangabe databuf[7] = 1; // Lowbyte der Datengroessenangabe while(1) // Endlose Tastenauswertung key = getkey(); // Die Tastenlesefunktion des jeweiligen Systems. // Rueckgabe: ASCII-Code von Tastatur // a,b,c,d = Kanal 1-4 ausschalten // A,B,C,D = Kanal 1-4 einschalten switch( key ) // Welche Taste wurde betaetigt? case a : case b : case c : case d : databuf[5] = 44; // Kleinbuchstaben, Kommando ausschalten databuf[8] = key a + 1; // Kanalnummer ermitteln break; case A : case B : case C : case D : databuf[5] = 43; // Grossbuchstaben, Kommando einschalten databuf[8] = key A + 1; // Kanalnummer ermitteln break; default: key = 0; // Alle anderen Tastenbetaetigungen werden genullt if( key ) // Wenn eine gültige Taste gedrückt wurde... databuf[9] = 0; // Daten-Checkbyte loeschen for( n=5; n<=8; ++n ) // Daten-Checkbyte neu berechnen databuf[9] ^= databuf[n]; // Fortlaufendes XOR über den Datenteil send( databuf, 10 ); // Die Sendefunktion des jeweiligen Systems. // Es werden 10 Bytes aus databuf gesendet. Bemerkung: Die Funktionen getkey() und send() sind systemabhängig. Die Programmiersprache einer Steuerung stellt solche Funktionen in aller Regel zur Verfügung die Funktionsnamen sind hier nur stellvertretend gemeint. - 5 -
Die wichtigsten Datensätze: Es folgen hexadezimale Zeichenketten zum Einbetten in eine Steuersoftware. Wenn der Programmierer der Steuersoftware keine Gedanken über Protokolldetails des TLS-MCP investieren möchte, kann er die nachfolgenden Zeichenketten zum Steuern des Gerätes einfach in seine Software übernehmen und aussenden. Des weiteren darf die vom Gerät ausgesendete Antwort auf den Befehl ignoriert werden. Pathfinder Systemteiler: Alle Kanäle aktivieren: 00,00,01,64,65,2B,00,01,00,2A Alle Kanäle deaktivieren: 00,00,01,64,65,2C,00,01,00,2D Kanal 1 aktivieren: 00,00,01,64,65,2B,00,01,01,2B Kanal 1 deaktivieren: 00,00,01,64,65,2C,00,01,01,2C Kanal 2 aktivieren: 00,00,01,64,65,2B,00,01,02,28 Kanal 2 deaktivieren: 00,00,01,64,65,2C,00,01,02,2F Kanal 3 aktivieren: 00,00,01,64,65,2B,00,01,03,29 Kanal 3 deaktivieren: 00,00,01,64,65,2C,00,01,03,2E Kanal 4 aktivieren: 00,00,01,64,65,2B,00,01,04,2E Kanal 4 deaktivieren: 00,00,01,64,65,2C,00,01,04,29 Zustand abfragen: 00,00,01,64,65,2A,00,00,2A Tasten sperren: 00,00,01,64,65,67,00,01,00,66 Tasten freigeben: 00,00,01,64,65,67,00,01,01,67 Bildverstärkung 0: 00,00,01,64,65,2D,00,01,00,2C Bildverstärkung 1: 00,00,01,64,65,2D,00,01,01,2D Bildverstärkung 2: 00,00,01,64,65,2D,00,01,02,2E Bildverstärkung 3: 00,00,01,64,65,2D,00,01,03,2F Adresse 1 einstellen: 00,00,01,64,65,69,00,01,01,69 Adresse 2 einstellen: 00,00,01,64,65,69,00,01,02,6A Adresse 3 einstellen: 00,00,01,64,65,69,00,01,03,6B - 6 -