DMX-Plugin:Scripted-Gerät: Unterschied zwischen den Versionen

Aus PyroNeo Wiki
Zur Navigation springenZur Suche springen
(Die Seite wurde neu angelegt: „Das DMX-Plugin für SkyConductor besteht aus mehreren Einzel-Plugins. Eines davon ist das sogenannte "Scripted device"-DMX-Plugin. Dieses Plugin ermög…“)
 
Zeile 5: Zeile 5:
 
Das ''Scripted Device''-Plugin verwendet Standardmäßig alle Gerätedefinitionen die im Anwendungsdaten-Verzeichnis "SkyConductor\dmx" gefunden werden. Pro Gerät muss eine eigene Datei in diesem Verzeichnis angelegt werden, der Dateiname muss auf ''.scd'' enden. Die Liste der unterstützten DMX-Geräte wird von SkyConductor beim Start des Programms geladen. Bevor eine Show an das Zündsystem übertragen wird (z.B. Export in eine Datei, Programmieren der Module etc) werden die Informationen jeder Gerätedatei neu geladen, so dass bei Veränderungen in einer Datei im Normalfall ein erneuter Export der Daten ausreicht um die letzte Änderung testen zu können.
 
Das ''Scripted Device''-Plugin verwendet Standardmäßig alle Gerätedefinitionen die im Anwendungsdaten-Verzeichnis "SkyConductor\dmx" gefunden werden. Pro Gerät muss eine eigene Datei in diesem Verzeichnis angelegt werden, der Dateiname muss auf ''.scd'' enden. Die Liste der unterstützten DMX-Geräte wird von SkyConductor beim Start des Programms geladen. Bevor eine Show an das Zündsystem übertragen wird (z.B. Export in eine Datei, Programmieren der Module etc) werden die Informationen jeder Gerätedatei neu geladen, so dass bei Veränderungen in einer Datei im Normalfall ein erneuter Export der Daten ausreicht um die letzte Änderung testen zu können.
 
Bei Bedarf kann der genaue Pfad im Registry-Editor ("regedit.exe") im Pfad ''HKEY_CURRENT_USER\Software\VB and VBA Program Settings\SC DMX Custom Script\Path\PresetPath'' nachgesehen bzw. für den angemeldeten Nutzer verändert werden.
 
Bei Bedarf kann der genaue Pfad im Registry-Editor ("regedit.exe") im Pfad ''HKEY_CURRENT_USER\Software\VB and VBA Program Settings\SC DMX Custom Script\Path\PresetPath'' nachgesehen bzw. für den angemeldeten Nutzer verändert werden.
 +
 +
= Aufbau einer .dms-Gerätedatei =
 +
In den folgenden Bereichen wird der Aufbau einer .scd-Gerätedefinition erklärt. Die Datei besteht, anders als beim [[DMX-Plugin:Custom-Device|''Custom Device''-Plugin]], aus nur einem einzigen Abschnitt, welcher als VB-Script interpretiert und ausgeführt wird. Insofern wird empfohlen, sich vor dem Start mit dem grundsätzlichen Aufbau und der Funktionsweise von VB-Script vertraut zu machen. Eine gute (englische) Quelle dazu ist [http://www.tutorialspoint.com/vbscript/vbscript_overview.htm hier] zu finden, Google liefert unter dem Stichwort VBScript oder VBS jedoch auch viele deutsche Treffer.
 +
 +
== Abruf der Script-Identität ==
 +
Jedes Script hat eine eigenen Identität, so dass verschiedene Gerätedateien vom System einfacher unterschieden werden können. Der zurückgegebene Name muss zwischen allen Scriptdateien eindeutig sein, darf sich also nicht wiederholen. Am besten sollte eine Kombination aus Datum, Uhrzeit, Autoren-Name und Script-Name verwendet werden.
 +
<pre>
 +
Function GetScriptIdentity()
 +
GetScriptIdentity = "01.09.2015_15:04:16_Tobias_Hagemeier_DEMO"
 +
End Function
 +
</pre>
 +
 +
== Abruf von Gerätedaten ==
 +
Da mehrere Geräte innerhalb einer Datei definiert werden dürfen, ist eine Routine zum Abruf der Gerätedaten erforderlich. Diese sieht wie folgt aus:
 +
<pre>
 +
Sub AddDMXDevices()
 +
Container.AddDMXDevice "Hersteller", "Gerätename 1", 5, "Hersteller_Gerätename1_ID1"
 +
Container.AddDMXDevice "Hersteller", "Gerätename 2", 3, "Hersteller_Gerätename2_ID2"
 +
End Sub
 +
</pre>
 +
Für jedes unterstützte Gerät muss eine ''Container.AddDMXDevice''-Zeile hinzugefügt werden. Die Definition der aufgerufenen Funktion AddDMXDevice lautet dabei wie folgt:
 +
 +
'''Public Sub AddDMXDevice(Manufacturer As String, DeviceName As String, NumChannels As Integer, Optional ID As String, Optional flags As String)'''
 +
 +
Der Parameter ''Manufacturer'' gibt dabei den Hersteller des Gerätes an nach dem der Gerätebaum in Unterkategorien gruppiert wird. Der Parameter ''DeviceName'' sollte den Namen des Gerätes enthalten wie er auch vom Hersteller verwendet wird um eine einfache Identifizierung des Geräts durch den Nutzer zu ermöglichen. ''NumChannels'' gibt an, wie viele aufeinander folgende DMX-Kanäle das Gerät belegt. Sind die Kanäle frei konfigurierbar sollte davon ausgegangen werden, dass die Kanäle am Gerät auf fortlaufende Nummern vergeben werden. Der Parameter ''ID'' dient der Unterscheidung mehrerer Geräte im Script - wenn mehrere Geräte definiert sind wird die ''ID'' später wieder als Gerätetyp übergeben. Die ID sollte somit innerhalb eines Scripts jeweils eindeutig sein.
 +
Das DMX-Script-Plugin ruft diese Funktion auf, um heraus zu finden welche Geräte von der entsprechenden Datei überhaupt behandelt werden können.
 +
 +
== Das DMXDevice-Objekt ==
 +
Das DMXDevice-Objekt wird verschiedenen Funktionen übergeben welche sich auf ein bestimmtes, definiertes DMX-Gerät beziehen. Es besitzt Eigenschaften die es ermöglichen, Parameter eines Geräts zu erfragen die für die Erzeugung von DMX-Sequenzen benötigt werden. Das DMXDevice-Objekt besitzt die folgenden Eigenschaften auf mittels der Notation DMXDevice.Eigenschaft zugegriffen werden können:
 +
; StartAddress
 +
: Variablentyp Integer - Der erste Kanal der für das Gerät verwendet wird
 +
; AddressCount
 +
: Variablentyp Integer - Die Anzahl an Adressen die für das Gerät vorgesehen ist
 +
 +
== Das DMXSequenceStore-Objekt ==
 +
Das DMXSequenceStore-Objekt verwaltet alle angelegten Sequenzen und ermöglicht es, beliebige Sequezen abzurufen oder ihre Eigenschaften zu verändern. Es ermöglicht außerdem den Zugriff auf die DMX-Kanaleigenschaften welche in der CompileBaseSequences-Funktion für das DMX-Gerät gesetzt werden sollten. Beispiele zur Anwendung folgen weiter unten. Folgende Parameter und Funktionen stehen zur Verfügung:
 +
; Sub ClearChannelFlag(Ch As Integer, Flag As Integer)
 +
: Markiert das angegebene Flag für den angegebenen Kanal als "nicht erwünscht". Je nach Kanaleigenschaft bekommst später die Angabe, dass eine Eigenschaft nicht erwünscht ist oder die Angabe (von einem anderen Plugin) das die Eigenschaft erwünscht sei Priorität.
 +
; Sub SetChannelFlag(Ch As Integer, Flag As Integer)
 +
: Markiert das angegebene Flag für den angegebenen Kanal als "erwünscht". Je nach Kanaleigenschaft bekommst später die Angabe, dass eine Eigenschaft nicht erwünscht ist oder die Angabe (von einem anderen Plugin) das die Eigenschaft erwünscht sei Priorität.
 +
; Function GetOrAdd(SequenceNumber As Long) As DMXSequence
 +
: Ruft die DMX-Sequenz mit der angegebenen Nummer ab. Sollte die DMX-Sequenz noch nicht existieren wird sie erstellt und in die Liste der Sequenzen eingefügt so dass jede Sequenz nur einmal existieren kann und zwischen verschiedenen DMX-Plugins und auch DMX-Geräten geteilt wird. Die Funktion gibt die entsprechende Sequenz zurück mit welcher dann weiter gearbeitet werden kann.
 +
; Function GetPrivateSequence() As DMXSequence
 +
: Ruft eine private DMX-Sequenz ab. Bei jedem Aufruf wird eine neue DMX-Sequenz erzeugt und zurück gegeben, diese Sequenzen sind also bei jedem Aufruf "privat" und nur die anfragende Funktion kann damit arbeiten. Private Sequenzen werden üblicherweise für Servicesequenzen genutzt. Intern erhalten sie die Sequenznummern 50000..60000.
 +
 +
== Das DMXSequence-Objekt ==
 +
Jedes Mal wenn vom DMXSequenceStore-Objekt eine DMX-Sequenz angefragt wird, wird ein DMXSequence-Objekt zurück gegeben. Dieses repräsentiert eine einzelne Sequenz des DMX-Moduls. Die Sequenz kann mit den folgenden Funktionen bearbeitet werden:
 +
 +
 +
 +
== Erzeugung von Basis-Gerätesequenzen ==
 +
Für jedes Gerät müssen einige Basis-Sequenzen angelegt werden. Hierunter fallen vor allem folgende Sequenzen:
 +
; Scharfschalte-Sequenze (Nummer 65535)
 +
: Muss sämtliche Geräte in einen Zustand bringen in dem eine Auslösung/Ansteuerung möglich ist und wo dies nicht vor jeder Auslösung erfolgen darf weil z.B. das Erreichen des betriebsbereiten Zustandes länger als eine halbe Sekunde dauert oder das wiederholte Scharf schalten und unscharf schalten Resourcen verbraucht
 +
; Die ''Paused''-Sequenz (Nummer 65534)
 +
: Wird aufgerufen wenn eine Show pausiert wird. Sollte jedes Gerät, welches nur eine begrenzte Zeit eingeschaltet bleiben darf, abschalten. Beispielsweise zu verwenden für Flammenprojektoren oder Nebelmaschinen
 +
; Service-Sequenzen (spezieller Abruf)
 +
: Über Service-Sequenzen können Sonderfunktionen eines Geräts abgerufen werden um zum Beispiel einen Gerätetest durchzuführen oder das System herunter zu fahren (entlüften etc).
 +
 +
<pre>
 +
Function CompileBaseSequences(DeviceType, DMXDevice, DMXSequences)
 +
With DMXSequences.GetOrAdd(65535)
 +
  .AddDMXEvent 0, DMXDevice.StartAddress, 255, 0, "ARMING"
 +
End With
 +
CompileBaseSequences = True
 +
End Function
 +
</pre>
 +
 +
Die Parameter der ''CompileBaseSequences''-Funktion:
 +
; DeviceType
 +
: Typ ''String'', die in der AddDMXDevice angegebene ID. Dient zur Unterscheidung mehrerer von der Gerätedefinition unterstützter Gerätetypen
 +
; DMXDevice
 +
: Typ ''DMXDevice'', das interne DMX-Geräteobjekt welches das spezifische zu behandelnde Gerät abbildet. Beschreibung siehe oben.
 +
; DMXSequences
 +
: Typ ''DMXSequenceStore''. Dieses Objekt verwaltet alle angelegten Sequenzen und ermöglicht es, beliebige Sequezen abzurufen oder ihre Eigenschaften zu verändern. Es ermöglicht außerdem den Zugriff auf die DMX-Kanaldaten welche in der CompileBaseSequences-Funktion für das DMX-Gerät gesetzt werden sollten.

Version vom 6. September 2015, 11:23 Uhr

Das DMX-Plugin für SkyConductor besteht aus mehreren Einzel-Plugins. Eines davon ist das sogenannte "Scripted device"-DMX-Plugin. Dieses Plugin ermöglicht es, auch komplexe Geräte in der DMX-Programmierung von SkyConductor zu verwenden. Die Erstellung eines solchen Gerätes erfordert dafür jedoch auch tieferes Wissen der internen Strukturen von SkyConductor sowie etwas Programmierpraxis da die Ansteuerung der DMX-Kanäle programm- und nicht mustergesteuert erzeugt wird.


Geräte-Definitionen

Das Scripted Device-Plugin verwendet Standardmäßig alle Gerätedefinitionen die im Anwendungsdaten-Verzeichnis "SkyConductor\dmx" gefunden werden. Pro Gerät muss eine eigene Datei in diesem Verzeichnis angelegt werden, der Dateiname muss auf .scd enden. Die Liste der unterstützten DMX-Geräte wird von SkyConductor beim Start des Programms geladen. Bevor eine Show an das Zündsystem übertragen wird (z.B. Export in eine Datei, Programmieren der Module etc) werden die Informationen jeder Gerätedatei neu geladen, so dass bei Veränderungen in einer Datei im Normalfall ein erneuter Export der Daten ausreicht um die letzte Änderung testen zu können. Bei Bedarf kann der genaue Pfad im Registry-Editor ("regedit.exe") im Pfad HKEY_CURRENT_USER\Software\VB and VBA Program Settings\SC DMX Custom Script\Path\PresetPath nachgesehen bzw. für den angemeldeten Nutzer verändert werden.

Aufbau einer .dms-Gerätedatei

In den folgenden Bereichen wird der Aufbau einer .scd-Gerätedefinition erklärt. Die Datei besteht, anders als beim Custom Device-Plugin, aus nur einem einzigen Abschnitt, welcher als VB-Script interpretiert und ausgeführt wird. Insofern wird empfohlen, sich vor dem Start mit dem grundsätzlichen Aufbau und der Funktionsweise von VB-Script vertraut zu machen. Eine gute (englische) Quelle dazu ist hier zu finden, Google liefert unter dem Stichwort VBScript oder VBS jedoch auch viele deutsche Treffer.

Abruf der Script-Identität

Jedes Script hat eine eigenen Identität, so dass verschiedene Gerätedateien vom System einfacher unterschieden werden können. Der zurückgegebene Name muss zwischen allen Scriptdateien eindeutig sein, darf sich also nicht wiederholen. Am besten sollte eine Kombination aus Datum, Uhrzeit, Autoren-Name und Script-Name verwendet werden.

Function GetScriptIdentity()
 GetScriptIdentity = "01.09.2015_15:04:16_Tobias_Hagemeier_DEMO"
End Function

Abruf von Gerätedaten

Da mehrere Geräte innerhalb einer Datei definiert werden dürfen, ist eine Routine zum Abruf der Gerätedaten erforderlich. Diese sieht wie folgt aus:

Sub AddDMXDevices()
 Container.AddDMXDevice "Hersteller", "Gerätename 1", 5, "Hersteller_Gerätename1_ID1"
 Container.AddDMXDevice "Hersteller", "Gerätename 2", 3, "Hersteller_Gerätename2_ID2"
End Sub

Für jedes unterstützte Gerät muss eine Container.AddDMXDevice-Zeile hinzugefügt werden. Die Definition der aufgerufenen Funktion AddDMXDevice lautet dabei wie folgt:

Public Sub AddDMXDevice(Manufacturer As String, DeviceName As String, NumChannels As Integer, Optional ID As String, Optional flags As String)

Der Parameter Manufacturer gibt dabei den Hersteller des Gerätes an nach dem der Gerätebaum in Unterkategorien gruppiert wird. Der Parameter DeviceName sollte den Namen des Gerätes enthalten wie er auch vom Hersteller verwendet wird um eine einfache Identifizierung des Geräts durch den Nutzer zu ermöglichen. NumChannels gibt an, wie viele aufeinander folgende DMX-Kanäle das Gerät belegt. Sind die Kanäle frei konfigurierbar sollte davon ausgegangen werden, dass die Kanäle am Gerät auf fortlaufende Nummern vergeben werden. Der Parameter ID dient der Unterscheidung mehrerer Geräte im Script - wenn mehrere Geräte definiert sind wird die ID später wieder als Gerätetyp übergeben. Die ID sollte somit innerhalb eines Scripts jeweils eindeutig sein. Das DMX-Script-Plugin ruft diese Funktion auf, um heraus zu finden welche Geräte von der entsprechenden Datei überhaupt behandelt werden können.

Das DMXDevice-Objekt

Das DMXDevice-Objekt wird verschiedenen Funktionen übergeben welche sich auf ein bestimmtes, definiertes DMX-Gerät beziehen. Es besitzt Eigenschaften die es ermöglichen, Parameter eines Geräts zu erfragen die für die Erzeugung von DMX-Sequenzen benötigt werden. Das DMXDevice-Objekt besitzt die folgenden Eigenschaften auf mittels der Notation DMXDevice.Eigenschaft zugegriffen werden können:

StartAddress
Variablentyp Integer - Der erste Kanal der für das Gerät verwendet wird
AddressCount
Variablentyp Integer - Die Anzahl an Adressen die für das Gerät vorgesehen ist

Das DMXSequenceStore-Objekt

Das DMXSequenceStore-Objekt verwaltet alle angelegten Sequenzen und ermöglicht es, beliebige Sequezen abzurufen oder ihre Eigenschaften zu verändern. Es ermöglicht außerdem den Zugriff auf die DMX-Kanaleigenschaften welche in der CompileBaseSequences-Funktion für das DMX-Gerät gesetzt werden sollten. Beispiele zur Anwendung folgen weiter unten. Folgende Parameter und Funktionen stehen zur Verfügung:

Sub ClearChannelFlag(Ch As Integer, Flag As Integer)
Markiert das angegebene Flag für den angegebenen Kanal als "nicht erwünscht". Je nach Kanaleigenschaft bekommst später die Angabe, dass eine Eigenschaft nicht erwünscht ist oder die Angabe (von einem anderen Plugin) das die Eigenschaft erwünscht sei Priorität.
Sub SetChannelFlag(Ch As Integer, Flag As Integer)
Markiert das angegebene Flag für den angegebenen Kanal als "erwünscht". Je nach Kanaleigenschaft bekommst später die Angabe, dass eine Eigenschaft nicht erwünscht ist oder die Angabe (von einem anderen Plugin) das die Eigenschaft erwünscht sei Priorität.
Function GetOrAdd(SequenceNumber As Long) As DMXSequence
Ruft die DMX-Sequenz mit der angegebenen Nummer ab. Sollte die DMX-Sequenz noch nicht existieren wird sie erstellt und in die Liste der Sequenzen eingefügt so dass jede Sequenz nur einmal existieren kann und zwischen verschiedenen DMX-Plugins und auch DMX-Geräten geteilt wird. Die Funktion gibt die entsprechende Sequenz zurück mit welcher dann weiter gearbeitet werden kann.
Function GetPrivateSequence() As DMXSequence
Ruft eine private DMX-Sequenz ab. Bei jedem Aufruf wird eine neue DMX-Sequenz erzeugt und zurück gegeben, diese Sequenzen sind also bei jedem Aufruf "privat" und nur die anfragende Funktion kann damit arbeiten. Private Sequenzen werden üblicherweise für Servicesequenzen genutzt. Intern erhalten sie die Sequenznummern 50000..60000.

Das DMXSequence-Objekt

Jedes Mal wenn vom DMXSequenceStore-Objekt eine DMX-Sequenz angefragt wird, wird ein DMXSequence-Objekt zurück gegeben. Dieses repräsentiert eine einzelne Sequenz des DMX-Moduls. Die Sequenz kann mit den folgenden Funktionen bearbeitet werden:


Erzeugung von Basis-Gerätesequenzen

Für jedes Gerät müssen einige Basis-Sequenzen angelegt werden. Hierunter fallen vor allem folgende Sequenzen:

Scharfschalte-Sequenze (Nummer 65535)
Muss sämtliche Geräte in einen Zustand bringen in dem eine Auslösung/Ansteuerung möglich ist und wo dies nicht vor jeder Auslösung erfolgen darf weil z.B. das Erreichen des betriebsbereiten Zustandes länger als eine halbe Sekunde dauert oder das wiederholte Scharf schalten und unscharf schalten Resourcen verbraucht
Die Paused-Sequenz (Nummer 65534)
Wird aufgerufen wenn eine Show pausiert wird. Sollte jedes Gerät, welches nur eine begrenzte Zeit eingeschaltet bleiben darf, abschalten. Beispielsweise zu verwenden für Flammenprojektoren oder Nebelmaschinen
Service-Sequenzen (spezieller Abruf)
Über Service-Sequenzen können Sonderfunktionen eines Geräts abgerufen werden um zum Beispiel einen Gerätetest durchzuführen oder das System herunter zu fahren (entlüften etc).
Function CompileBaseSequences(DeviceType, DMXDevice, DMXSequences)
 With DMXSequences.GetOrAdd(65535)
  .AddDMXEvent 0, DMXDevice.StartAddress, 255, 0, "ARMING"
 End With
 CompileBaseSequences = True
End Function

Die Parameter der CompileBaseSequences-Funktion:

DeviceType
Typ String, die in der AddDMXDevice angegebene ID. Dient zur Unterscheidung mehrerer von der Gerätedefinition unterstützter Gerätetypen
DMXDevice
Typ DMXDevice, das interne DMX-Geräteobjekt welches das spezifische zu behandelnde Gerät abbildet. Beschreibung siehe oben.
DMXSequences
Typ DMXSequenceStore. Dieses Objekt verwaltet alle angelegten Sequenzen und ermöglicht es, beliebige Sequezen abzurufen oder ihre Eigenschaften zu verändern. Es ermöglicht außerdem den Zugriff auf die DMX-Kanaldaten welche in der CompileBaseSequences-Funktion für das DMX-Gerät gesetzt werden sollten.