Dieses Kapitel behandelt den Aufbau der älteren *.ptd-Treiber von Wings Platinum. Wenn Sie einen neuen Treiber erstellen möchten, sollten Sie das neuere Avio-Treibermodell verwenden, siehe Avio-Treiber selbst erstellen.
Wenn Sie einen bestehenden *.ptd-Treiber mit einem Texteditor öffnen, können Sie seinen Aufbau erkennen. Verfügbare Treiber finden Sie, indem Sie im Hauptmenü auf Extras - Ordner öffnen Treiber klicken. Der Treiber enthält am Anfang eine Beschreibung und dann folgen die Befehle in der Reihenfolge, wie sie im Auswahlmenü erscheinen sollen. Jede Zeile kann einen beliebigen Kommentar enthalten, der durch zwei Schrägstriche getrennt sein muss, Beispiel: //Dieser Kommentar dient nur zu Ihrer Information und wird nicht ausgewertet.
[Driver]
Diese Kennung ist in der ersten Zeile zwingend erforderlich.
Name=XXX
Name des Treibers bzw. des zu steuernden Gerätes
Date=XXX
Datum der Erstellung
Author=XXX
Name des Treiberautors
Comment=XXX
Kommentar zum Treiber
Alle obenstehenden Informationen sind in Wings Vioso RX im Eigenschaften-Dialog Serielle Schnittstelle sichtbar, wenn der Treiber ausgewählt wurde.
ID used last=XXX
Gibt an, welches die letzte benutzte ID ist. Dadurch weiß der Autor beim Ergänzen weiterer Befehle, welche IDs schon belegt sind. Diese Angabe sollte immer aktuell gehalten werden, sie dient ausschließlich zur Information des Autors.
Es folgen Parameter für die Schnittstellenkonfiguration. Wenn die für ein Gerät erforderlichen Parameter bekannt sind, ist es sinnvoll diese hier vorzugeben.
Network=X
Bei X=1 ist LAN-Schnittstelle vorgegeben; bei X=0 oder wenn der Parameter weggelassen wird, ist die Schnittstelle RS232.
NetworkIP=XXX.XXX.XXX.XXX
Die angegebene IP-Adresse erscheint als Standardvorgabe im Dialog.
NetworkPort=XXXXX
Der angegebene Port erscheint als Standardvorgabe im Dialog.
NetworkUDP=X
Bei X=1 wird das UPD-Protokoll verwendet, bei X=0 das TCP-Protokoll
DefaultPollInterval=X
Bestimmt das Standard-Interval, mit dem Parameter abgefragt werden sollen; X wird in Sekunden angegeben. Wenn dieser Parameter fehlt, ist das Standard-Intervall 20 Sekunden.
In der Treiberdatei sieht ein kompletter Informationsblock dann beispielsweise so aus:
[Driver]
Name=AV Stumpfl EventPlayer
Version=1.00
Date=26.04.2004
Author=Christoph Hilger
Comment=Basic control of EventPlayer software
ID used last=10
Network=1
NetworkIP=10.10.68.11
NetworkPort=18000
NetworkUDP=0
DefaultPollInterval=20
Getrennt durch eine Leerzeile folgt ein obligatorischer Befehlsblock zum Senden von beliebigen Zeichenfolgen, die später im Treiberdialog eingegeben werden können:
[SendData]
Info=Sends raw data
ID=1
SubID=0
Par1=Data, Data to be sent to Device
Send=#Data(Par1)
Danach können weitere Befehlsblöcke folgen, die jeweils durch eine Leerzeile getrennt sind.
Zeichenfolgen für serielle Befehle können Sie in verschiedener Form eingeben, auch gemischte Schreibweise ist möglich:
Dezimale Schreibweise wird direkt akzeptiert.
ASCII-Zeichen müssen in Anführungszeichen stehen. Die Bytes müssen durch Trennzeichen (Leerzeichen oder Komma) voneinander getrennt sein.
Bei hexadezimaler Eingabe muss jedes Byte als "Hexbyte" gekennzeichnet werden. Dafür stehen Ihnen übliche Formatierungen zur Verfügung: 0x12, h12, 12h oder $12 (in den Beispielen ist 12 die Information des Bytes).
Wir erläutern Ihnen zunächst den prinzipiellen Aufbau von Befehlen im Treiber. Am Ende folgen einige Beispiele, die nicht alle Optionen nutzen und auch zeigen, wie einfache Befehle aufgebaut sind. Bitte denken Sie daran, alle Informationen und Kommentare möglichst in Englisch zu verfassen, damit der Treiber international einsetzbar ist.
[Befehlsbezeichnung:Unterbezeichnung]
Bezeichnung des Befehls, die im Kontextmenü zur Auswahl erscheint. Durch Doppelpunkt getrennt kann eine optionale Unterbezeichnung folgen, die als Untermenü erscheint.
ShortName=XXXX
Ermöglicht optional die Angabe eines kurzen Namens, der in Markern und in Kontrollfeldern angezeigt wird (möglichst nur 10 Zeichen). Dies ist besonders bei langen Befehlsbezeichnungen und Untermenüs sinnvoll. Wenn bei einem Befehl Parameter verwendet werden, erscheinen diese im Anschluss an den Kurznamen, also z. B. wie beim Treiber des SC Master 16 bei Card - Volume to Value, wo zwei Parameter (für Card-Player und Value) angegeben werden müssen: Vol crd 3, 25
Info=XXXX
Information, die als Kommentar bei Anwahl dieses Befehls im Treiberdialog angezeigt wird.
Icon=X
Angabe eines Icons; dabei steht X für den Index eines der hier aufgeführten Icons. Wenn kein Icon definiert worden ist, wird automatisch Icon=0 benutzt, dass zum dem Standard-Icon führt.
ID=1
Jeder Befehl muss eine eindeutige ID-Nummer zwischen 1 und 255 besitzen, sie darf also im Treiber von keinem anderen Befehl verwendet werden. Wichtig: Wenn Sie einen Treiber modifizieren, dürfen Sie IDs von bereits vorhandenen Befehlen nicht ändern, weil er sonst zu früheren Treiber-Versionen inkompatibel wird!!
SubID=1
Verwandte Befehle können mit einer Sub-ID zwischen 1 und 255 in einer zweiten Ebene strukturiert werden, wodurch sie auch im Kontextmenü im Untermenü erscheinen. Die Sub-ID muss innerhalb einer ID-Nummer eindeutig sein; SubID=0 bedeutet kein Sub-Menü. Wichtig: Wenn Sie einen Treiber modifizieren, dürfen Sie Sub-IDs von bereits vorhandenen Befehlen nicht ändern, weil er sonst zu früheren Treiber-Versionen inkompatibel wird!!
Par1=Format (VX, Y, Z), Bezeichnung des Eingabefeldes
Ermöglicht die Eingabe von Parametern im Treiberdialog. Mit "Format" wird die Art der erwarteten Information festgelegt; VX ist die Adresse für den Wert (z. B. V3); der mögliche Wertebereich wird mit Y (Minimum) und Z (Maximum) definiert. Folgende Parameter sind möglich:
Data ... max. 255 Zeichen gemäß definiertem Datenformat, gemischte Schreibweise ASCII, Hex etc. möglich
Number (Y, Z), im Treiberdialog erscheint ein Eingabefeld für Nummern, die Angabe des Wertebereichs ist erforderlich, z. B. Number(1,255)
Value (VX, Y, Z) verwendet den Wert von Adresse X bezogen auf den Wertebereich von Y und Z., wobei Y=0% und Z=100% eines Datenobjekts entsprechen, z. B. Value (V3, 1, 3456). Dadurch legen Sie also den Ausgabebereich der Datenobjekte bzw. Kontrollfelder fest, siehe auch Variable Datenausgabe per Treiber.
Auf diese Weise können bis zu acht verschiedene Parameter benutzt werden (Par1 bis Par8). Wenn Sie Value-Parameter verwenden, müssen Sie zusätzlich einen DriverLoop-Befehl zur zeitlichen Steuerung definieren. Auch in einer Parameter-Zeile folgt, getrennt durch ein Komma, die Bezeichnung des Eingabefeldes im Treiberdialog.
Wenn Sie mehr als drei Parameter verwenden und diesen Treiber in alten Projekten einsetzen möchten (...erstellt mit Wings Vioso RX 2.40 oder früher), sollten Sie die Funktionen unbedingt ausführlich testen, da es unter Umständen zu Kompatibilitätsproblemen kommen kann.
Send=Zeichenfolge
Als Zeichenfolge können bis zu 255 Zeichen gesendet werden, die Eingabe erfolgt in gemischter Schreibweise gemäß definiertem Datenformat. Durch Einfügen des Befehls
#Pause(X)
in eine Zeichenfolge entsteht beim Senden an dieser Stelle eine Pause mit der Dauer X (Eingabe in Millisekunden), die zwischen 1 und 255 Millisekunden betragen kann.
Variable Parameter (Par1 bis Par8) können auf folgende Weise einbezogen werden:
#Data(Par1)
Die Zeichenfolge von Parameter 1 wird als gemischte Schreibweise ausgewertet und hexadezimal gesendet.
#Byte(Par1)
Wie zuvor, jedoch wird nur das erste Byte von Parameter 1 gesendet.
#WordBE(Par1) oder #Word(Par1)
Wie zuvor, jedoch werden die ersten zwei Bytes von Parameter 1 in der vorgegeben Reihenfolge gesendet (Big-Endian).
#WordLE(Par1)
Wie zuvor, jedoch werden die Bytes in umgekehrter Reihenfolge gesendet (Little-Endian). Diese Variante ist für das Senden von Befehlen an Wings Vioso RX zu verwenden.
#LongBE(Par1) oder #Long(Par1)
Wie #WordBE, jedoch werden die ersten vier Bytes von Parameter 1 in der vorgegeben Reihenfolge gesendet (Big-Endian).
#LongLE(Par1)
Wie #LongBE, jedoch werden die ersten vier Bytes in umgekehrter Reihenfolge gesendet (Little-Endian). Diese Variante ist für das Senden von Befehlen an Wings Vioso RX zu verwenden.
#Decimal(Par1)
Die Zeichenfolge von Parameter 1 wird als ASCII-Zeichen ausgegeben.
#Decimal:Dezimalstelle(Par1)
Wie zuvor, jedoch wird hier die Dezimalstelle angegeben, die gesendet werden soll. Es sind Stellenangaben von 1 bis 100000 möglich. Diese Option ist nützlich, wenn Geräte quasi den Tastendruck einer Fernbedienung als einzelne Bytes haben wollen.
Wenn das Gerät Rückmeldungen nach dem Empfang bzw. nach dem Ausführen von Befehlen sendet, kann dieses sogenannte Acknowledge ausgewertet werden. Sie sollten in der Treiberbeschreibung vermerken, ob Sie dies programmiert haben, damit der Anwender weiß, dass Aktivieren von Acknowledge im Treiberdialog Sinn macht.
ReceiveAck=XXX
Hier geben Sie die Zeichenfolge ein, die das Gerät nach dem Empfang eines Befehls zurücksendet.
ReceiveTimeout=XXX
Hier wird die Zeit (Angabe in Millisekunden) festgelegt, wie lange Wings Vioso RX auf die Rückmeldung warten soll. Nach Verstreichen dieser Zeit wird ein Eintrag in die Log-Datei geschrieben und der Befehl wird ggf. erneut gesendet (Retries=?). Diese Zeit sollte so gewählt werden, dass das empfangende Gerät genügend Zeit hat, den Befehl zu erkennen und die Rückmeldung zu senden.
ExecuteAck=XXX
Hier geben Sie die Zeichenfolge ein, die das Gerät nach der Ausführung eines Befehls zurücksendet.
ExecuteTimeout=XXX
Wie ReceiveTimeout, jedoch auf die Ausführung eines Befehls bezogen.
Retries=X
Mit diesem Eintrag bestimmen Sie, wie oft der Befehl wiederholt werden soll, wenn in der vorgegebenen Zeit keine Rückmeldung erfolgt. Bei Retries=2 wird der Befehl also maximal dreimal gesendet.
PollInterval=X
Wenn bei einem Abfragebefehl das Standard-Intervall nicht zur Anwendung kommen soll, können Sie das Intervall für diesen Befehl individuell in Sekunden vorgeben. Die Abfrage wird nicht ausgeführt, wenn X=0 ist.
Wenn Sie den Parameter Value benutzen, können Sie mit dem Befehl DriverLoop bestimmen, in welchen Fällen die Daten gesendet werden sollen. Dieser Befehl ist also eine interne Anweisung zu anderen Befehlen.
[DriverLoopX]
Interner Befehl, X (1...255) ist dabei ein Index zur Unterscheidung unterschiedlicher Befehlsblöcke.
ID=X
SubID=X
Mit ID und SubID wird der Befehl definiert, auf den dieser DriverLoop-Befehl wirken soll.
Interval=XXXX
Mit diese Angabe legen Sie fest, wie häufig Werte gesendet werden sollen; die Eingabe erfolgt in Millisekunden.
SendAlways=X
Hier können Sie bestimmen, ob Werte immer gesendet werden sollen (X=1) oder nur, wenn sie sich geändert haben (X=0).
Beispiel für einen kompletten Befehl mit DriverLoop
Serielle Schnittstellen von SC Net-Komponenten sind für DriverLoop-Befehle nicht geeignet. Verwenden Sie dafür serielle Schnittstellen von PC-Hardware.
Hier zeigen wir Ihnen einige Beispiele aus dem Treiber für unsere Software EventPlayer. Der untenstehende Befehlsblock dient zum Senden eines einfachen Befehls, hier der Play-Befehl für den aktuellen Ordner der Software EventPlayer. Er lautet in Hex: FF 01 04 FE
[Play]
Info=Starts playback of current folder
Icon=1
ID=5
SubID=0
Send=0xFF 0x01 0x04 0xFE
Soll sich der Play-Befehl bei der Software EventPlayer auf einen bestimmten Ordner beziehen, muss der Remote-Index des Ordners im Befehl enthalten sein. Dies lösen wir mit der Angabe von Parameter 1. Außerdem soll im Kontextmenü Play das Untermenü Folder erscheinen, was wir durch die Angabe einer Unterbezeichnung erreichen. Der angegebene Kurzname sorgt dafür, dass im Kontrollfeld die gesamte Information inklusive Ordner-Index sichtbar ist, also z. B. Play fold 14. Da es sich ebenfalls um einen Play-Befehl handelt, wurde die gleiche ID jedoch mit anderer Sub-ID verwendet. Für die Angabe von Parameter 1 wurde das Nummernformat und ein Wertebereich von 1 bis 255 gewählt. In den Befehl wurde #Byte(Par1) zur Angabe des Remote-Index eingefügt. Diese Angabe bewirkt, dass nur das erste Byte der Information im Eingabefeld des Treiberdialogs ausgewertet wird.
[Play:Folder] //Dieser Kommentar erscheint nicht im Treiberdialog.
Info=Starts specified media folder
ShortName=Play fold
Icon=1
ID=5
SubID=1
Par1=Number(1,255), Remote index of media folder
Send=0xFF 0x02 0x04 #Byte(Par1) 0xFE
Mit diesem Befehlsblock wird auch eine Rückmeldung bei korrektem Empfang des Befehls ausgewertet. Dafür sind die letzten drei Zeilen erforderlich. Bei ReceiveAck wird einfach die vom Gerät zurückgemeldete Zeichenfolge eingetragen. ReceiveTimeout sollte nicht zu knapp gewählt werden (hier 500 ms), weil sonst unter Umständen Befehle durch Retries mehrfach gesendet werden. Wenn in der vorgegebenen Zeit die erwartete Rückmeldung nicht eintrifft, schreibt Wings Vioso RX einen Eintrag in die Log-Datei.
[Load Project]
Info=Loads predefined project
ShortName=Load P
Icon=19
ID=10
SubID=0
Par1=Number(1,255), Number of predefined project
Send=0xFF 0x02 0x0A #Byte(Par1) 0xFE
ReceiveAck="OK" 0x0D 0x0A
ReceiveTimeout=500
Retries=2
Den ersten Treiber sollten Sie für ein Gerät schreiben, dessen Protokoll Sie genau kennen. Falls die Steuerung nicht auf Anhieb funktioniert, erleichtert das die Fehlersuche, weil Sie sich auf den Treiber und dessen Syntax konzentrieren können.
Wenn Sie Änderungen an einem Treiber vorgenommen haben, der in einem geöffnetem Projekt verwendet wird, können müssen Sie das Projekt neu laden, damit auch der Treiber neu geladen wird und die Änderungen wirksam werden. Dies entfällt, wenn den Treiber auf folgende Weise öffnen:
Klicken Sie im Media-Pool auf das Pluszeichen vor der Kategorie Geräte und wählen Sie darunter den gewünschten Seriell/LAN-Port.
Klicken Sie im rechten Teil des Media-Pools mit der rechten Maustaste auf die serielle Schnittstelle und wählen Sie Eigenschaften.
Klicken Sie auf Treiber editieren, nehmen Sie die Bearbeitung vor und speichern Sie den Treiber.
Klicken Sie im Dialog von Wings Vioso RX auf OK. Danach können Sie den Treiber und seine Funktionen verwenden.
siehe auch
Icons für Treiber-Befehle auswählen