Intern DMXC de PluginTutorial 2 9
aus dem DMXControl-Wiki
| DMXControl 2.9 Plugin-Fibel |
![]() |
| www.dmxcontrol.de |
|
Dieses Handbuch entspricht dem Wiki-Stand vom Juli 2010. Anregungen und Ergänzungen bitte direkt über das DMXControl-Wiki (http://www.dmxcontrol.de/wiki/) oder an info@dmxcontrol.de. |
|
Copyright 2010 DMXControl |
1. Einleitung
1.1 Zielstellung
DMIXControl bietet als offene DMX-Plattform Schnittstellen zur Funktionserweiterung durch beliebige Nutzer an. Diese Plugin-Fibel gibt im ersten Teil einen Überblick über die existierenden Plugins und deren Bedienung. Im zweiten Teil werden die Grundmechanismen zur Erstellung eines eigenen Plugins erläutert. Dabei verweisen wir speziell auf das "DMXControl-Tutorial-Plugin", welches zwar keine wirklich als LJ nutzbare Funktion bringt, aber für jede Schnittstellenfunktion ein Implementierungsbeispiel bereit stellt. Ein zweites Beispiel, das "DMXControl-Demo-Plugin" beschreibt dann schon ein anwendungsbereites Beispiel für ein Lauflicht.
Somit richtet sich diese DMXC-Plugin-Fibel sowohl an Anwender als auch Entwickler und erweitert das eigentliche DMXControl-Handbuch.
1.2 Definition DMXControl Plugin
Übersicht
DMXControl definiert zwei Arten von Plugins zur Erweiterung der Funktionalität:
- Ausgabeplugins zur Unterstützung verschiedener neuer DMX Interfaces
- Anwendungsplugins zum Einfügen neuer Tools und Funktionen in DMXControl
Zweiteres sieht mann hier
Das entsprechende Ausgabe-Interface wurde bisher lediglich ausgewählten Hardwareentwicklern zur Verfügung gestellt. Nun ist dieses externe Interface auch dem gesamten Nutzerkreis von DMXControl zur Verfügung gestellt. Darüberhinaus wurde der Umfang durch zusätzliche Funktionen für die eigenständige Programmerweiterungen ergänzt.
Ein DMXControl-Plugin kann DMX-Signale generieren oder verarbeiteten und sendet das Ergebnis immer zu DMXControl zurück, welches die Signale in den allgemeinen Mixer integriert. Ein Plugin muss aber nicht notwendigerweise in den DMX- (oder MIDI Strom) eingreifen, es kann auch beliebigen anderen funktionalen Mehrwert für DMXControl beibringen, z.B. reine Visualisierung.
Mögliche Anwendungsfälle für Plugins sind u.a.:
- vereinfachte anwendungsspezifische Bedienabläufe mittels einer eigenen Oberfläche
- Automatisierung häufig wiederkehrender Aufgaben mit einen separaten Tool
- Simulation eines Hardwarepultes oder beliebiger Steuerelemente
- Anpassung Ihrer eigenen DMX-Software über DMXControl an alle von DMXC unterstützten DMX-Sender inkl. Artnet
Unser Demo-Plugin stellt z.B. eine Oberfläche für ein sehr leicht konfigurierbares Lauflicht (Chaser) bereit:
Aus Sicht von DMXControl ist ein Plugin eine blackbox mit beliebiger Anzahl privater Funktionen, also ein Ergänzungstool. DMXControl hat keine Information darüber, welchen Algorithmus das Plugin ausführt. Das Plugin kann seine eigenen internen Parameter, die über die Plugin-GUI ("Plugin konfigurieren") eingegeben werden und bestimmte Daten von DMXControl verwenden, die über die Plugin-Schnittstelle bereitgestellt werden. Das Hostprogramm (DMXControl) entscheidet aber letztendlich, ob und wann die Rückgabe-Daten des Plugins verarbeitet werden.
Die DMXControl Plugin-Schnittstelle liefert verschiedene Funktionalitäten, siehe auch Plugin_Interface_Referenz:
- Senden von DMX-Werten
- Empfangen von DMX-Werten (beliebige messages/events)
- zielgerichtetes Abfragen bestimmter DMX-Kanäle
- Einbindung in die GUI-Steuerung von DMXControl bzw. Aktivierungssteuerung
- Abfragen von Geräteeigenschaften
Zukünftig werden diese Interfaces schrittweise erweitert, z.B.
- Integration in die Szenen/Effektliste (z.Z. noch nicht verfügbar)
- Definition eigener Befehle
Eine Plugin-Beschreibung (Tutorial) kann hier im Wiki gelesen werden. (Das Dokument auf der home page ist oft schon etwas veraltet).
Installation
Ein DMXControl-Plugin ist kein eigenständiges Programm. Es benötigt immer DMXControl als Host-Programm.
Ein Plugin wird als dll bereitgestellt, da DMXControl in der Windows-Welt läuft. Die geeigneten dll’s für Anwendungsplugins, müssen in das Unterverzeichnis des DMXControl-Installationsverzeichnisses namens "plugins" kopiert werden (ggfls. selbst erstellen). Die Plugins werden beim Programmstart erkannt und können unter dem Menüpunkt "Plugins" aktiviert und konfiguriert werden.
Das DMXC Plugin-Archiv enthält eine aktuelle Übersicht über alle verfügbaren Plugins.
2. DMXControl Plugins
Zum Starten eines Plugins benötigen Sie DMXControl 2.9. Die Dll-Datei eines Plugins muß in das Unterverzeichnis "plugins" des DMXControl-Installationsverzeichnisses kopiert werden.
2.1 Tutorial-Plugins
DMXC Plugin Tutorial
- Datum/Zeit: Juni 2007
- Autor: Frank Brüggemann
- Status: -
- Dateien (ab DMXControl 2.9):
- Kompiliert: DMXC-Plugin-Tutorial-dll
- Sourcecode: DMXC-Plugin-Tutorial-Source
- Beschreibung:
Dieses Plugin demonstriert alle Funktionen der Pluginschnittstelle. Sie finden für jede Schnittstelle ein Codebeispiel. Ausführliche Beschreibung...
Demo-Plugin
- Datum/Zeit: Dezember 2006
- Autor: DMXControl Team
- Status: -
- Beschreibung:
siehe Kapitel xx
2.2 Zusätzliche Steuerungs-Plugins
MusicFlash
Plugin MusicFlash
Versions Information
- Version 2.9.0 (ab DMXC 2.9)
- Autor: Frank Brüggemann (über frank.brueggemann@DMXControl.de erreichbar)
Beschreibung
Dieses Plugin lässt bis zu 16 Kanäle bei jedem Beat für 10-1000 Millisekunden flashen. Die DMX-Werte für die einzelnen Kanäle werden im Konfigurationsmenü eingestellt.
Wird eine der Checkboxen aktiviert, merkt sich das Plugin den aktuellen DMX-Wert des Kanals Dieser wrd beim Deaktivieren wieder hergestellt. Mit Testflash kann ein Flash manuell gestartet werden. Die "keep"-Fläche zeigt an, on das Plugin beim Schließen des Fensters weiter aktiv (Grün) bleibt oder nicht (rot) Die Dauer des Flashs in Millisekunden steht rechts unten.
Plugin Konfiguration
Für jeden der 16 Kanäle können der Name, die Farbe, der DMX-Kanal, der Flashwert und der Off-Wert festgelegt werden. Der Flashwert ist der Wert, auf den der Kanal beim Flashen gesetzt wird. Der Offwert ist der Wert, auf den er danach zurückgesetzt wird.
Globale Parameter sind die Flashdauer (zwischen 10 und 1000 Millisekunden) und die keep-Funktion. Alle Konfigurationsdaten werden entweder in der Datei MusicFlash.ini im Pluginverzeichnis abgelegt oder wahlweise im Projekt-Verzeichnis als "<Projekt-Name>.MusicFlash". Beim Einlesen wird erst nach einer projektspezifischen und dann nach einer allgemeinen ini-Datei gesucht.
bekannte Probleme
keine
Planung für nächste Versionen und Wünsche
keine
Download
- Dateien Version 2.9.0 (für DMXC 2.9):
- Kompiliert: MusicFlash.dll
- Sourcecode: MusicFlash_source.zip
FollowSpot
Plugin FollowSpot
Versions Information
- Version 0.2 (experimentell)
- Version vom: 09.Okt. 2005
- Autor: Frank Burghardt (frank.burghardt@DMXControl.de)
Beschreibung
Dieses Plugin liefert einen FollowSpot-Modus für bis zu 4 MovingLights. (leider konnte ich das bisher nur mit meinen beiden PocketScans ausprobieren.)
Markieren Sie sich 4 Eckpunkte ihrer Bühne und den Mittelpunkt (ich habe mir dazu Trinkbecher an die Positiuonen gestellt). Kalibrieren Sie nun jedes gewünschte Moving Light auf diese Punkte. Dazu wird das der Position entsprechende Textfeld markiert und mit dem Get_Value-Button der Wert eingelesen. Das gerade selektierte Feld,auf das sich der Get-Value-Button auswirkt, ist gelb angezeigt. Wenn ein Wert erfasst ist, wird das Feld grün hinterlegt.
Wenn alle Geräte eingestellt sind, wird das Mastergerät gewählt und das Plugin mit dem Button "EnableFS" aktiv geschaltet. Nun sollten alle kalibrierten Geräte den Masterbewegungen folgen.
Mit dem Clear-Button werden sämtliche Kalibrierungs-Einstellungen aller Geräte gelöscht.
Das Plugin aktualisiert alle Zehntel-Sekunde die Positionen.
In der Version 0.2 wird nur ein sehr einfacher linearer Approximationsmode unterstützt.
Plugin Konfiguration
Leider kann z.Z. die Geräteliste noch nicht importiert werden, so dass im Konfigurationsmenü die Geräteparameter zu definieren sind. Tragen Sie hier bis zu 4 Geräte ein. Bitte verwenden Sie sinnvollerweise die gleichen Namen und natürlich Pan- und Tilt-Kanalwerte wie im DMXC-Projekt konfiguriert.
Klicken Sie zweimal (nicht zu schnell hintereinander) in das zu ändernde Feld um den Wert zu modifizieren.
Alle Konfigurationsdaten werden in der Datei FollowSpot.ini im Pluginverzeichnis abgelegt.
bekannte Probleme
keine
Planung für nächste Versionen und Wünsche
- Übergabe einer Geräteliste von DMXC
- Unterstützung von FinePan und Fine Tilt
- Implementierung eines genaueren Distance-Algorithmus
- Implementierung eines sehr genauen trigonometrischen Algorithmus
- Konfiguration der Aktualisierungszeit
Download
- Kompiliert: FollowSpot.dll
- Sourcecode: FollowSpot02.zip
Duplicate
Plugin Duplicate
Versions Information
- Version 2.9.1 vom Februar 2008
- Autor: Frank Brüggemann (über frank.brueggemann(@)DMXControl.de erreichbar)
Beschreibung
Dieses Plugin kann die DMXC-Werte mehrerer Kanäle duplizieren und diese Duplikate dabei noch skalieren, bzw. invertieren. Typische Anwendungsfälle für das Plugin sind:
- Leichte Übertragung von Szenen und Effekten auf zusätzliche Geräte.
- Softwaremäßige Parallelschaltung von Geräten, Alternative zur Hardcodierung über gleiche DMX-Adressen.
Im normalen Betrieb kann das Plugin nur aktiviert bzw. deaktiviert werden. Alle Einstellungen werden in der Plugin-Konfiguration vorgenommen (s. unten).
Plugin Konfiguration
Jeder DMXC-Kanal kann auf einen anderen Kanal dupliziert werden. Dabei gibt es folgende Einschränkungen:
- Ein Kanal kann nicht auf einen Kanal dupliziert werden, der auch als Eingangskanal definiert ist (dies erzeugt eine Endlosschleife und würde DMXControl zum Absturz bringen).
- Es können nicht mehrere Eingangskanäle auf einen Ausgangskanal dupliziert werden.
Mittels des + -Buttons können Datensätze hinzugefügt werden und mit dem - -Button können Einträge aus der Liste entfernt werden.
bekannte Probleme
zur Zeit keine
Planung für nächste Versionen und Wünsche
Download
- Kompiliert: duplicate.dll
- Source: duplicate_source.zip
ColorChange & 4xColorChange
Plugin 4xColorChange
Versions Information
- Version 2.9.1 vom: Februar 2008
- Autor: Frank Brüggemann (über frank.brueggemann(@)DMXControl.de erreichbar)
Beschreibung
Dieses Plugin kann bis zu vier RGB-Leuchten jeweils einen frei definierbaren Farbverlauf durchfahren lassen. Die DMX-Kanäle für die einzelnen RGB-Leuchten werden im Konfigurationsmenü eingestellt.
Die Farbverläufe werden in den 4 oberen Balken dargestellt. Vorhandene Farben können durch Anklicken geändert werden und durch einen Rechtsklick gelöscht werden. Neue Farben werden durch einen Klick in den Farbbalken erstellt. Es sind maximal 20 Farben pro Farbverlauf möglich. Eine Änderung der Farbverläufe während des Betriebs ist nicht möglich. Die Dauer des Verlaufs wird im Feld Dauer (Stunden:Minuten:Sekunden) angegeben. Mit dem Repeat-Schalter kann der Farbverlauf in einer Endlosschleife gefahren werden. Mit dem "Mode" und mit dem "change direction"-Button kann die Richtung des Verlaufs gesteuert werden (vorwärts-rückwärts-reversierend). Der "keep active"-Schalter bewirkt, daß der ColorChange weiterläuft, wenn man das Fenster schließt. Die "keep position"- und "keep values"-Schalter steuern das Pluginverhalten, wenn der ColorChange gestoppt wird. "keep position" merkt sich die aktuelle Position im Farbverlauf und "keep values" hält die RGB-Werte auf dem gerade eingestellten Wert und setzt sie nicht auf die Werte vor dem Pluginstart zurück. Die vier RGB-Devices können im laufenden Plugin-Betrieb dazu- bzw. abgeschaltet werden. Alle Einstellungen bis auf den Status der vier RGB-Leuchten können mit "Save Color Change" gesichert werden. Die Dateien werden standardmäßig im aktuellen Projektverzeichnis gesichert und haben die Endung *.cci. Diese Farbverläufe können mit "Load Color Change" natürlich wieder geladen werden. Durch einen Klick in den obersten Balken werden alle aktiven Geräte auf die an dieser Position vorhandenen Werte gesetzt (dies funktioniert nur wenn der Farbverlauf nicht aktiv ist).
Plugin Konfiguration
Für jedes der vier RGB-Devices können die RGB-DMX-Kanäle, ein Name, der Status und für jeden RGB-Kanal ein Korrekturfaktor festgelegt werden. Diese Daten können mit Save im aktuellen Projektverzeichnis unter "Projektname".Ccini gespeichert werden.
bekannte Probleme
zur Zeit keine
Planung für nächste Versionen und Wünsche
Download
- 4xColorChange Dateien Version 2.9.1:
- Kompiliert: 4xColorChange.dll
- Source: 4xColorChange_source.zip
Das einfache ColorChange-Plugin verhält sich analog.
Matrix
Plugin Matrix
Versions Information
- Version 2.9.1 vom: 14. März 2007
- Autor: Frank Brüggemann (über frank.brueggemann@DMXControl.de erreichbar)
Beschreibung
Mit diesem Plugin können Szenen erstellt werden für eine Matrix aus bis zu 12x12 RGB-Leuchten. Die DMX-Kanäle für die einzelnen RGB-Leuchten werden im Konfigurationsmenü eingestellt.
Das Matrix-Fenster zeigt eine Matrix von RGB-Lampen an. Die Dimensionen (hier 5x5) der Matrix werden im Konfigurationsteil eingestellt. Mit einem Doppelclick auf ein Feld der Matrix, öffnet sich ein Fenster, in dem man eine Farbe für die Lampe auswählt. Wenn man sich sein Bild erstellt hat, kann man mit dem "Set"-Button alle DMX-Werte an DMXControl übergeben und das Muster anzeigen. Danach muß man dieses Bild in DMXControl als Szene speichern. Mit dem "Get"-Button werden die aktuellen RGB-Werte aus DMXControl ausgelesen und in der Matrix entsprechend angezeigt. Zur schnellen Veränderung der Matrix dienen die Buttons zum Verschieben (rechts,links,oben & unten, diagonal), zum Spiegeln (waagerecht und senkrecht) und zum Drehen (um 90°). Das Drehen ist nur aktiv, wenn die Dimensionen in Höhe und Breite der Matrix identisch sind. Mit dem Fillbutton läßt sich die Matrix komplett mit einer Farbe einfärben. Bei Click auf den "Advanced Functions"-Button erscheint folgendes Fenster:
Dabei wird die derzeit aktuelle Matrix in das linke Bild übernommen und kann mit den Reglern darunter verändert werden (drehen, kippen, zoomen und verschieben). Mit einem Click auf den Preview-Button wird aus dem linken Bild eine Vorschau der daraus entstehenden Matrix berechnet. Die Option "Color Amp." verstärkt die kräftigeren Farbwerte zusätzlich, da sonst häufig recht blasse und dunkle Bilder entstehen. Mit "Send to Matrix" wird die Vorschau an das Matrix-Hauptfenster übertragen. Eine weitere Möglichkeit ist es, mit "Load Image from File" eine BMP, JPG, GIF oder ICO-Datei in das linke Bild zu laden und aus diesem dann wie oben beschrieben eine Matrix zu berechnen.
Plugin Konfiguration
Mit der Plugin-Konfiguration legt man die Dimensionen der Matrix, den Namen und die Kanäle der Matrix fest. Jede Konfiguration kann gespeichert und wieder geladen werden. Bei Aufruf des Plugins ohne vorheriger Konfiguration wird nach einer Konfigurationsdatei mit dem Namen "Projektname".rgbmatrix im aktuellen Projektverzeichnis gesucht. Ist diese nicht vorhanden wird eine Standard-Matrix erzeugt.
Für jedes der 12x12 RGB-Devices können die RGB-DMX-Kanäle, ein Name, der Status und für jeden RGB-Kanal ein Korrekturfaktor festgelegt werden. Dies geschieht durch einen Doppelklick auf das entsprechende Feld der Matrix. RGB-Lampen, die konfiguriert und aktiv sind erscheinen in der Konfiguration mit weißen Hintergrund, nicht konfigurierte sind grau hinterlegt.
bekannte Probleme
bis jetzt keine
Planung für nächste Versionen und Wünsche
- Konfiguration des Plugins mit Erkennung von vorhandenen RGB-Devices aus der Gerätebibliothek
- Umbau des Plugins in ein aktives Tool (kommt in V2.9.2)
Download
- Dateien Version 2.9.1 (ab DMXControl 2.9):
- Plugin: Matrix.2.9.1.zip
- Sourcecode: MatrixSource.2.9.1.zip
- Demo-Projekt: MatrixDemo.2.9.1.zip
MinMaxChannel
- Datum/Zeit: 31.05.2007
- Autor: Florian Seewig
- Status: Experimentell
- Dateien Version 2.9.1 (ab DMXControl 2.9):
- Plugin: MinMaxChannel07.zip
- Beschreibung:
Mit diesem Plugin kann für beliebige Kanäle ein Minimal- und Maximalwert festgelegt werden.
Mediasteuerungs-Plugins
MediaCenter Plugin
- Datum/Zeit: Mai 2007
- Autor: Arne Lüdtke
- Status: experimentell
- Dateien:
- Kompiliert: [1]
- Beschreibung:
Ansteuerung des MediaCenters von www.digital-enlightenment.de [2] aus DMXControl heraus zum Abspielen von Medien wie Video, Bildern und Musik. Hier gibt es ein Tutorial. Das zugehörige DDF befindet sich im zip-file.
| | Dies ist ein Draft-Artikel zur Beta-Version von Arnes Mediacenter-Plugin |
Überblick
DMXControl bietet ein Plugin um innerhalb einer DMX-gesteuerten Show auch die Präsentation von Medien mittels des Mediacenters von Digital Enlightenment [[3]] zu steuern. Dieser Mediaserver erlaubt die Steuerung der Wiedergabe von Videos, Bildern, Audio und PowerPoint-Präsentationen. Es können entsprechende Szenen definiert werden, die in den DMXControl-Tools wie Audioplayer, Textbuch oder Kommandobox verwendet werden können.
Die Konfiguration des MediaCenters
Typischerweise läuft der Mediaserver auf einem anderen PC als das Mediacenter und DMXControl. Ein Anwendungsbeispiel wird hier auf der Homepage von Digital Enlightenment [[4]] gezeigt.
Hier wird eine Testkonfiguration beschrieben, in der der Mediaserver in einer VM gestartet wird, die den externen Mediaserver-PC simuliert. Allerdings hat die VM teilweise noch Probleme mit der Wiedergabe von Videos (spielt bei mir nur MPEG-1). Im Extremfall können sogar alle drei Programme auf einer Maschine gestartet werden (dann muß der Mediaserver mit <Strg-Esc> umgeschaltet werden.
Hier wird vom Mediacenter auf dem host ein Bild im Mediaserver auf der VM (VM rechts unten) zur Anzeige gebracht.
Wir setzen voraus, dass die IP-Verbindung zwischen host und VM funktioniert, d.h. ein ping abgeschickt werden kann (und beantwortet wird). In unserem Fall hat die VM die Adresse 2.0.0.1 und der Network-Connector des hostes die Adresse 2.0.0.2. Die Installation des MediaCenters ist ausführlich in der Beschreibung von Digital Enlightenment beschrieben.
Im Mediacenter muss die Option "Enable Remote Control" aktiviert werden, sonst kann DMXC nicht mit dem Mediacenter kommunizieren.
Die Konfiguration von DMXControl
Arne hat sowohl ein MediaCenter-Plugin als auch ein Mediacenter-DDF erstellt, welche beide als beta-Version in einem Forumsthread bereitgestellt wurden. (Kurzfristig wird man beide Elemente nach ihrer Überarbeitung von der DMXControl homepage laden können.)
Wie üblich werden das DDF (.xml) in das "device"-Verzeichnis und das Plugin (.dll) in das Plugins"-Verzeichnis kopiert. Letzteres wird über die Plugin-Verwaltung aktiviert. Das Plugin bietet vorerst keine Standardkonfiguration:
Dafür müssen DMX-Adresse und IP-Adresse direkt nach dem Start des Plugins (über das Menü) dort eingetragen werden.
Hierbei ist zu beachten, dass die IP-Adresse des MediaCenters und nicht die des Media-Servers einzutragen ist. In 99% der Anwendungen ist das Mediacenter auf dem gleichen PC, wie DMXC,was bedeutet, dass "localhost" als IP Adresse reicht.
Bedienung
Das Gerät/DDF belegt 4 DMX-Kanäle mit folgender Bedeutung:
- Code des Steuerebefehl
- Parameter (z.B. Index der Datei, Lautstärke)
- Suchen high (schnelles Positionieren innerhalb einer Videodatei, "Suchen" muss auf dem Command Kanal aktiviert sein)
- Suchen Low (langsames Positionieren innerhalb einer Videodatei, "Suchen" muss auf dem Command Kanal aktiviert sein)
Das DDF bietet prinzipiell die Kommandos des Mediacenters an. Über die 3 Parameterwerte wird z.B. die Datei aus dem Mediacenter adressiert. Wenn man die Datei 5 laden will, stellt man die Combo Boxen auf 0 0 5. Bei der Datei 105 eben auf 1 0 5 usw.:
Wenn man die Zahl 105 auswählt und als Befehl "Lautstärke einstellen" auswählt, dann wird halt dieser Wert übertragen. Das gesendete Kommando wird wird auch im Plugin und im MediaCenter angezeigt.
Einrichten von Szenen und Nutzung in der Szenenliste
Die Einstellung eines Kommandos im DDF erzeugt eine DMX-Wert-Konstellation, die dann als Szene wie üblich im Szenenrepository gespeichert werden kann. Die genauen Werte kann man in der Kanalübersicht überprüfen:
Dieses Bild zeigt die Ausgabe des Kommandos "Load 1", also 16-1-0-0
Der Ablauf ist folgender. Das Plugin erkennt, wenn sich auf dem Befehlskanal was ändert, und sendet dann den Befehl, mit den eingestellten Parametern. Ergo muss man die Parameter einstellen, UND DANACH den Befehl auswählen. Der Senden Button macht nichts anderes, als die ausgewählten Einstellungen zu senden, und spart dadurch den Umweg über kein Befehl. Im Endeffekt macht die Sequenz, die dem Senden Button hinterlegt ist aber nichts anderes als kurz "Kein Befehl" anzuwählen und dann zurückzuschalten.
Zum Aufbau einer Show sollte man sich ein Szenenrepository aufbauen, wie folgende Abbildung zeigt. Dazu reicht es, im DDF die Parameter und das Kommando einzustellen und die Szene mit dem grünen "+"-Button zu speichern. Nach meiner Erfahrung reichen die Szenen:
- show, hide
- Load1, load2,....,loadn
- play, stop
Diese Szenen können dann im Audioplayer, Textbuch oder in der Kommandobox verwendet werden. Allerdings habe ich festgestellt, dass das Laden eines Videos erst beendet sein muß, bevor das Play-Kommando akzeptiert wird. Daher immer ca. 1 sec. warten.
Eine Multimedia-Show
Nach diesen Vorbereitungen kann nun der Einsatz von Lichtgeräten mit der Präsentation von Medien gekoppelt werden. Wer wissen möchte, wozu das gut ist, sollte sich mal die legendäre p.u.l.s.e Show von Pink Floyd anschauen. ;-)
Hier wollen wir einige Ideen zur Gestaltung der Show vermitteln: - Einsatz einfacher Beamer - Einsatz doppelte Beamer
Tipps
Wenn man beim Einfügen des Gerätes als Name "MediaCenterPlugin" einträgt, findet das Plugin die Startadresse von alleine.
Weiterführende Infos
Gegenwärtig wird auch eine remote Steuerung des MediaCenters über PDA entwickelt, siehe PDA Steuerung
wird fortgesetzt bitte helft mir mit Euren Erfahrungen
Beameransteuerung
- Datum/Zeit: -
- Autor: Andreas Gundelach
- Status: -
- Dateien:
- in Arbeit, kommt mittelfristig
- Beschreibung:
Videobeamer-Ansteuerung, siehe Videobeamer-Ansteuerung
Visualisierungs-Plugins
MxSim
Plugin MxSim
Versions Information
- Version 2.9.1 vom: Februar 2008
- Autor: Frank Brüggemann (über frank.brueggemann(@)DMXControl.de erreichbar)
Beschreibung
Mit diesem Plugin kann eine Matrix mit bis zu 12x12 RGB-Leuchten simuliert werden. Speziell beim Einsatz mit einem Beamer als zweiter Bildschirm soll dieses Plugin einen Ersatz für eine echte RGB-Matrix sein. Das Plugin wird mit der Escape-Taste geschlossen.
Plugin Konfiguration
Mit der Plugin-Konfiguration legt man die Dimensionen des Matrix-Simulators und die Startadresse fest. Zusätzlich dazu kann automatisch ein DDF für die entsprechende Konfiguration erstellt werden.
bekannte Probleme
bis jetzt keine
Planung für nächste Versionen und Wünsche
- Entfernung des Rahmens
- Umbau des Plugins in ein netzwerkfähiges Programm, so daß der Simulator auf einem anderen Rechner als DMXControl laufen kann.
Download
- Dateien Version 2.9.1:
- Kompiliert: MxSim.dll
- Source: MxSim_source.zip
DMXControl SoftScanner DSS100
Plugin DMXControl SoftScanner DSS100
Versions Information
- Version 1.0 vom: Mai 2007
- Autor: DMXControl Team (über info@DMXControl.de)
Beschreibung
Dieses Plugin simuliert einen Scanner. Die Ausgabe erfolgt z.B. über einen Beamer. Damit hat dieser SoftScanner zwar eine eingeschränkte Helligkeit und einen eingeschränkten Bewegungsradius, aber andererseits bietet er Funktionen wie
- austauschbare Gobos
- Rotation der Gobos
- Zoom-Funktion
- RGB-Mixer
Der SoftScanner kann innerhalb von DMXControl wie ein normales DMX-Gerät verwendet werden, indem das zugehörige DDF und Gerät installiert wird.
Danach erfolgt die Bedienung über das DDF wie bei jedem anderen Scanner.
Alternativ kann (notfallmäßig) auch das vom Plugin angezeigte Pult verwendet werden.
Der einzige Vorteil in diesem Modus ist, dass beliebig nachgeladene Gobos angezeigt und aufgerufen werden können, auch wenn sie noch nicht im DDF vereinbart sind.
Plugin Konfiguration
Mit der Plugin-Konfiguration legt man die Startadresse des SoftScanners DSS100 fest.
Beschreibung DSS100
siehe "Description_DSS100.txt" in zip file
bekannte Probleme
- Performance auf langsamen Rechnern nicht ausreichend
Planung für nächste Versionen und Wünsche
- siehe Plugin_DSS200
- Keine Weiterentwicklung mehr, da BeamerTool leistungsfähiger ist
Download
- Dateien Version 1.0 (ab DMXControl 2.9):
- Plugin: [5]
- Sourcecode: ---
Ballonglühen 1
- Datum/Zeit: Januar 2007
- Autor: Frank Burghardt
- Status: -
- Dateien Version 2.9.0 (ab DMXControl 2.9):
- Kompiliert: heissluft.dll
- Sourcecode: HeissluftballonSource2.9.0.zip
- Beschreibung:
Das Plugin visualisiert das Leuchten der Heissluftballons.
Ballonglühen 2
- Datum/Zeit: Januar 2007
- Autor: Frank Brüggemann
- Status: fertig
- Dateien Version 2.9.0 (ab DMXControl 2.9):
- Kompiliert: BallonGlow.zip
- Sourcecode: BallonSource.zip
- Beschreibung:
Bitte das image-Verzeichnis im Plugin-Ordner installieren. Das Plugin visualisiert das Leuchten der Heissluftballons.
Game-Plugins
Flaschendrehen
- Datum/Zeit: Februar 2007
- Autor: Marten Jahn
- Status: Version 1.0 fertig
- Dateien Version 2.9.0 (ab DMXControl 2.9):
- Kompiliert: Flaschendrehen.dll
- Sourcecode: Flaschendrehen.zip
- Beschreibung:
Bei diesem Plugin handelt es sich um das Spiel Flaschendrehen. Jeder Farbkreis ist einem DMX-Kanal und im Sinne des Spiels einem Spieler zugeordnet. Die Lampe, welche zum Schluss leuchtet, entspricht dem auserwählten Spieler.
Remote Steuerungstools
PC_DIMMER Bridge
- Datum/Zeit: Mai 2007
- Autor: Christian Nöding
- Status: Version 1.2
- Hauptseite: http://www.pcdimmer.de
- Dateien Version 2.9.1 (ab DMXControl 2.9):
- Kompiliert: pc_dimmer_bridge.zip
- Sourcecode: pc_dimmer_bridge_src.zip
- Beschreibung:
Mit diesem Plugin können DMXControl und der PC_DIMMER parallel betrieben werden. Jede Kanalwertänderung wird dem anderen Programm mitgeteilt. Ebenso kann auf einen gemeinsamen Beatimpuls reagiert werden, welcher von DMXControl generiert wird.
PDA/XDA Remote
- Datum/Zeit: 27.09.2006
- Autor: Christian Nöding
- Status: Version 1.0 Fertig
- Dateien Version 2.8.x (bis DMXControl 2.8):
- Kompiliert: PDA-Remote inkl. PDA-Software
- Beschreibung: Kanalwertänderung mit PDA/XDA über WLAN oder GPRS
PDA Steuerung
Hinweis:Die PDA Steuerung ist kein wirkliches Pligin im obigen Sinne, sondern ein Zusatztool, welches mit DMXControl kommuniziert.
PDA-2-DMXC --- Die PDA Steuerung für DMXControl und das MediaCenter von Digital-Enlightenment
Dieser Artikel dient als Bedienungsanleitung für das Programm PDA-2-DMXC, welches die Steuerung von DMXControl und des MediaCenter über einen PDA ermöglicht. PDA-2-DMXC ist wie DMXControl Freeware. Der Download ist auf der DMXControl Homepage möglich.
Vorwort
PDA-2-DMXC ist eine kleine Anwendung, mit welcher es möglich ist die Basisfunktionen von DMXControl über einen PDA zu steuern. PDA-2-DMXC kommuniziert mit DMXControl über die Terminal Schnittstelle.
PDA-2-DMXC entpacken und starten
Für den Betrieb von PDA-2-DMXC ist das .Net Compact Framework ab Version 1.0 erforderlich. Das .Net Compact Framework ist auf allen PDAs mit Windows Mobile ab Version 2000 lauffähig. Sie können dieses auf der Microsoft Homepage herunterladen. Installiert wird es über ActiveSynch.
Anschließend alle Dateien und Ordner aus dem Archiv von PDA-2-DMXC in ein Verzeichniss ihrer Wahl entpacken. Danach müssen Sie alle Dateien und Unterordner auf den PDA kopieren. Wie Sie das anstellen, ist von PDA zu PDA unterschiedlich. Sie können die Dateien mit ActiveSynch oder über WLAN übertragen. Alternativ kann das Programm auch auf eine Speicherkarte kopiert werden, welche Sie im PDA verwenden können. Legen Sie alle Dateien auf dem PDA in einem Verzeichniss ihrer Wahl ab. Alternativ kann auch das Setup Programm verwendet werden. Das Programm wird dann automatisch durch ActiveSynch installiert, wenn sich der PDA das nächste mal synchronisiert
Starten Sie das Programm "PDA-2-DMXC.exe".
Die Oberfläche von PDA-2-DMXC besteht aus mehreren Tab Seiten, wobei jede Seite für eine Funktion steht. Im folgenden sind die einzelnen Funktionen sowie deren Bedienung erläutert.
Login auf den DMXControl / MediaCenter Server
Auf der Loginseite müssen Sie einstellen, wie Sie auf DMXControl zugreifen wollen. In Version 1.0 von PDA-2-DMXC stehen eine TCP/IP Verbindung und eine Serielle Verbindung (z.B. über Bluetooth) zur verfügung. Benutzer deren PDA über WLAN verfügt, können PDA-2-DMXC direkt verwenden. Sollte ihr PDA kein WLAN besitzen, sondern nur mit Bluetooth ausgestattet sein, können sie über Bluetooth ein Netzwerk (PAN) aufbauen oder die Serielle Verbindung nutzen. Wie das funktioniert ist von PDA zu PDA unterschiedlich. Entsprechende Informationen finden finden sich im Internet, oder in der Bedienungsanleitung des PDA.
Es besteht die Möglichkeit unter Einstellungen PDA-2-DMXC so zu konfigurieren, dass es gleichzeitig als Fernsteuerung für das MediaCenter von Digital-Enlightenment (www.digital-enlightenment.de) verwendet werden kann. In diesem fall können Sie auf der Login Seite in einer zweiten Textbox die IP Adresse des Rechners eintragen, auf welchem das MediaCenter läuft. Sollten MediaCenter und DMXControl auf dem gleichen Rechner laufen, können Sie durch setzen des Hackens die IP Adresse kopieren. Über die Serielle Verbindung ist keine MediaCenter Steuerung möglich.
Geben Sie in der Textbox für den Server die IP Adresse des Rechners ein, auf dem DMXControl läuft. Klicken Sie anschließend auf "Verbinden". Sollte auf dem DMXControl Rechner eine Firewall laufen, müssen Sie den Port 2145 freigeben. Wie das geht entnehmen Sie der Bedienungsanleitung ihrer Firewall. Für das MediaCenter muss der Port 12679 freigegeben sein.
Die Kommunikation zu DMXControl basiert auf der Terminal Schnittstelle. Weitere Informationen dazu finden Sie hier: Terminal Schnittstelle
Geräte Steuern
Über die Seite "Geräte" können alle Geräte welche in der grafischen Ansicht von DMXControl enthalten sind gesteuert werden. PDA-2-DMXC empfängt dabei die Liste der Geräte von DMXControl. Bei Änderungen in DMXControl wird die Liste automatisch aktualisiert. Über eine Dropdown Box kann das Gerät ausgewählt werden. Die grafische Steueroberfläche wird automatisch generiert. Dabei wird nicht das DDF von DMXControl übertragen, sondern es wird für die PAN / TILT Kanäle das Positions Steuerelement angezeigt, und für alle anderen Kanäle ein Schieberegler. Wenn das Gerät entsprechend viele Kanäle hat, werden diese auf mehrere Tab Seiten verteilt.
Befehle ausführen
Über die Seite "Befehle" können alle Befehle für DMXControl ausgeführt werden. Dabei kann der Befehl wie in DMXControl zusammengesetzt werden. Mit dem Button "Senden" wird der Befehl abgeschickt.
Kanalübersicht
Die Kanalübersicht ist der von DMXControl nachempfunden. Die einzelnen Kanalwerte werden angezeigt. Über den Schieberegler kann der gewählte Kanal gesteuert werden.
Tools
Auf der Tools Seite stehen nützliche Funktionen bereit, die Sie bei der Arbeit mit DMXControl und ihren DMX Geräten unterstützen sollen. In Version 1.0 ist auf der Seite ein Dip Schalterblock dargestellt. Über die Textbox kann eine Zahl eingetragen werden. Das Programm rechnet diesen in binäre Dip-Schalter Stellungen um. Anderstherum kann auch der Dip-Schalter bedient werden, um auszulesen, welche Adresse eingestellt ist.
MediaCenter (Optional falls aktiviert)
Über diese Seite kann das MediaCenter von Digital-Enlightenment gesteuert werden. Die Liste der Dateien wird vom MediaCenter gesendet. Sie kann am PDA nicht geändert werden. Über einen Doppelklick auf eine Datei wird diese im MediaCenter geladen. Die Knöpfe sowie Steuerelemente sind denen vom MediaCenter nachempfunden und haben die gleiche Funktion. Entnehmen Sie diese bitte der Dokumentation des MediaCenter.
Einstellungen
Auf der Einstellungs Seite kann die Sprache eingestellt werden. Desweiteren ist das ein / ausschalten der MediaCenter Option möglich. Der Hacken für die erweiterten Optionen aktiviert eine zusätzliche Seite, welche Informationen über die Verbindung liefert. Alle Einstellungen werden erst nach einem Neustart des Programms übernommen.
Bedienhinweise
Einige Bedienhinweise:
- Beenden Sie das Programm über den Menüpunkt "Datei" -> "Programm beenden". Wenn Sie das Fenster durch klicken auf das X oben rechts in der Ecke schließen, wird das Programm NICHT beendet, sondern nur in den Hintergrund geschoben.
- Mit den Tasten links - rechts ihres PDAs können Sie durch die Tab Seiten scrollen.
- In der Kanalübersicht können Sie mit den Tasten hoch - runter ihres PDAs durch die Kanäle scrollen
Geplante Erweiterungen
In Version 1.1 von PDA-2-DMXC sind folgende Erweiterungen geplant:
- Erweiterung der Gerätesteuerung um Dropdown Controls.
- Speichern von Szenen über den PDA.
- Übertragung der Kommandobox auf den PDA.
- Einbau der Kommandozeile.
Ausgabe-Plugins
Laden Sie einfach die DLL herunter und kopieren Sie diese in das DMXControl-Programmverzeichnis.
PC_DIMMER Pluginloader
- Datum/Zeit: Mai 2007
- Autor: Christian Nöding
- Status: Version 3.0 Fertig
- Hauptseite: http://www.pcdimmer.de
- Dateien Version 2.9.1 (ab DMXControl 2.9):
- Kompiliert: pc_dimmer_pluginloader.zip
- Beschreibung:
Das PC_DIMMER System bietet (anders als bei DMX) eine eigenständige, controllerinterne Dimmfunktion von 1ms bis zu 5h, die es einem ermöglicht, über geringsten Hardwareaufwand komplexe Steuerungen aufzubauen. DMXControl kann über diesen Pluginloader die PC_DIMMER Plugins laden und somit die Hardwarekanäle 1 bis 128 direkt ansteuern. Die Hardwaredimmerfunktion wird jedoch hierbei nicht angesprochen, da vom DMXC-Interface keine Einblendzeiten übergeben werden; stattdessen wird die DMXControl-interne Dimmroutine verwendet.
DiscoLiteZ Deluxe32
- Datum/Zeit: 19.10.2005/14:46
- Autor: Christian Nöding
- Status: Stabil
- Hauptseite: http://www.discolitez.com
- Dateien:
- Kompiliert: discolitez_deluxe32.out.rar
- Beschreibung:
Das DiscoLiteZ Deluxe32 System ist eine Multiplexerschaltung, die es einem ermöglicht, bis zu 32 Schalter, TRIACs, etc. an einem LPT-Port zu schalten. Das Plugin schaltet ab einem einzustellenden Schwellwert eines Kanals in DMXControl den jeweiligen Kanal ein, bzw. aus.
Designprinzipien
2.2 Elementare Programmierelemente und Konventionen
Wir empfehlen ein 3 schichtiges Design, d.h. für ein Plugin sollten mindestens 3 Module erstellt bzw. angepasst werden.
[[Bild:]]
Daneben sollte wie in diesem Beispiel jedes Plugin ein Hilfefenster besitzen, in dem die Version, der Autor und eine kurze Beschreibung gegeben werden (frmAbout-Form).
Je nach Plugin können natürlich weitere Klassen oder Module hinzukommen, falls Sie vorhandene Controls wiederverwenden möchten.
Der GUI- Modul besteht in VB6 aus einer Form und dazugehörigem Programmcode. Man sollte darauf achten, dass in diesem Modul möglichst nur die Oberflächenaspekte implementiert werden und keine DMX-Wert-Bearbeitung. Das hat zwei Vorteile:
- man kann leichter die GUI ändern, ohne dass die DMX-Logik „Schaden nimmt“
- die separat implementierte DMX-Logik kann besser wiederverwendet werden
Der Plugin-Logik Modul befasst sich mit den Algorithmen der Verarbeitung, Analyse und Generierung von DMX-Werten. Dazu empfängt er die von DMXControl ausgegebenen DMX-Werte über interface C und manuelle DMX-Wertänderungen über Interface A. Anderererseits kann dieser Modul über Interface B Werte an DMXControl senden oder über Interface D im GUI-Modul visualisieren lassen.
Der Plugin Interface Klassenmodul hat zwei Aufgaben:
- Hier werden die call back calls von DMXControl aufgenommen und ausgewertet.
- Alle notwendigen Konfigurationswerte für die Integration des Plugins in DMXControl werden hier gesetzt, z.B. Name des Plugins oder Verhalten bei der Aktivierung.
Die Klasse DMXCPlugin_Helper liefert das Interface zum Aufruf der Kommandos durch ein Plugin. Dieses Interface ist im Anhang 1 beschrieben. Ist das Plugin aktiv, werden bestimmte Überwachungen durchgeführt ("Sicherheitsfunktionen" für plug-ins), die die Stabilität des DMXC kernels gewährleisten sollen. Insbesondere entscheidet DMXC, ob aufgrund gewisser Bedingungen bestimmte Operationen überhaupt ausgeführt werden dürfen. (Bisher noch nicht, müsste man überlegen was man sinnvoll kontrollieren kann, ohne zu viele Ressourcen zu verschwenden)
Alle Ausgabe-Plugins unterliegen einer Namenskonvention: Sie müssen mit „.out.dll“ enden. Beispiel: Dmx4All.out.dll Dies gilt nicht für Anwendungsplugins.
Hier geht es zum Plugin Tutorial 1
Tutorial 1
3 Tutorial Teil 1
Dieses Tutorial zeigt Ihnen die Erstellung und praktische Anwendung eines DMXC-PlugIns für eine einfache Lauflichtsteuerung.
3.1 Funktionalitätsspezifikation
Wir wollen ein Tool als PlugIn erstellen, dass die Erstellung von Szenen für ein 4-kanaliges Lauflicht sehr einfach über eine grafische Eingabe ermöglichen soll. Die Idee ist, dass jede Sekunde eine Szene ausgegeben wird, dabei sind 60 Szenen möglich und graphisch dargestellt. Die Abarbeitung läuft zyklisch, d.h. nach einer Minute (also Ablauf der 60 Szenen) wird mit der ersten Szenen wieder erneut begonnen.
Die 4 Zeilen entsprechen den Kanälen eines Dimmerpacks. Die Spalten stellen die Szenen im Sekundentakt dar. Die
gewünschte Szene kann durch Anklicken der Felder mit der linken Maustaste gesetzt werden, wobei in diesem
Beispiel zur Vereinfachung jedem Kanal fest eine Farbe in der GUI zugewiesen wurde. Dabei wird mit dem linken
Kommando-Button (der zwischen den Modes "Full" und "Dim" wechselt) gewählt, ob halbe oder volle Helligkeit
verwendet wird. Ein gedimmter Wert erscheint in der Grafik nur halb gefüllt.
Die Startadresse des Dimmerpacks wird über die Plugin-Konfiguration eingegeben. Mit dem Startbutton wird das Senden der DMX-Werte gestartet. Gleichzeitig wird auch die Ausgabe der Werte an der Oberfläche simuliert, indem die aktuelle Szene in leuchtenden Farben dargestellt wird. Zusätzlich wird die aktuelle Szene durch eine rote Signal-LED dargestellt.
Das Beispiel ist bewußt einfach gehalten, um die Grundkonzepte der PlugIns zu demonstrieren und Sie nicht mit
Programmierdetails zu verwirren.
Somit wurden alle Funktionalitäten weggelassen, die reine Programmierarbeit sind und nichts mit der
unmittelbaren PlugIn-Funktion zu tun haben. Sie können also z.B.
- nicht die erstellten Lauflichtszenen abspeichern,
- nicht den Dimmerkanälen über die GUI ihre eigentlichen Farben zuordnen und
- nicht mehrere Felder gleichzeitig mit der Maus markieren.
Da der Quelltext des Tutorial-PlugIns verfügbar ist, können Sie aber dieses Plugin beliebig erweitern.
In einer zweiten Stufe wird das Plugin mit einen "Rückkanal" erweitert, d.h. es werde nicht nur DMX-Signale gesendet, sondern auch empfangen. Diese Werte können dann vom Plugin ermittelt und ausgewertet werden. Die Signale können durch parallele Ausgabe anderer Tools oder Plugins auftreten.
3.2 Das Grundgerüst des PlugIn-Programms
Der Programmcode besteht im wesentlichen aus drei Teilen, siehe auch Abb. 2.:
- die GUI (hier: frmTutorMain)
- der PlugIn-Logikmodule (DMXCTutorLL.bas)
- die PlugIN driver Klasse (clsDMXCPlugin)
Entsprechend unserer Konvention haben wir natürlich auch ein Hilfefenster, damit andere Nutzer erste Hinweise zur Funktionalität erhalten können.
Abbildung 2 zeigt im Projektfenster alle Bestandteile unseres Plugins.
Abbildung 2: Entwicklung in VB6
3.3 Die GUI
In diesem Abschnitt werden nur Grundzüge der Oberfläche dargestellt, da die eigentliche Basic-Programmierung als bekannt vorausgesetzt wird bzw. genügend Literatur dazu existiert. Mit Hilfe des GUI-Editors sind die Buttons und der Timer schnell erstellt (siehe Abbildung 2). Diesen Elementen sind über VB entsprechende callback-Routinen zugeordnet. (Hinweis: Dazu hat Microsoft GUI-Design-Regeln veröffentlicht.)
Ab DMX-Control V2.9 müssen Plugins, die eine graphische Oberfläche haben, in der GUI die Klasse IDMXCTool implementieren. Diese Klasse enthält Funktionen, die die Reaktion des Plugins auf Projektwechsel und die Änderung der Ansicht steuern.
Private Function IDMXCTool_AskToSaveProjectData() As Boolean
'should the plugin be asked to save data or configuration when
'the project is changed.
'Debug.Print "[frmTutorMaim] IDMXCTool_AskToSaveProjectData()"
IDMXCTool_AskToSaveProjectData = False
End Function
Private Sub IDMXCTool_ClearProjectData()
'function is called, when the user makes a new project
'msgbox ("[frmTutorMaim] IDMXCTool_ClearProjectData()")
End Sub
Private Sub IDMXCTool_LoadProjectData()
'function is called, when the user loads an other project
'MsgBox ("[frmTutorMaim] IDMXCTool_LoadProjectData()")
End Sub
Private Sub IDMXCTool_SaveProjectData()
'function is called, when the user saves the project
'MsgBox ("[frmTutorMaim] IDMXCTool_SaveProjectData()")
End Sub
Private Property Let IDMXCTool_ViewMode(ByVal RHS As DMXCTypeLib.View)
'Property, which controls the ViewMode of the plugin (Edit-Mode or Execute-Mode)
'Debug.Print "[frmTutorMaim] IDMXCTool_ViewMode"
myViewmode = RHS
End Property
Die Grafik des Matrixfeldes wird zur Laufzeit erzeugt. Innerhalb des Matrixfeldes werden die Mauskoordinaten beim Klick in der Prozedur "Form_MouseDown" ausgewertet und die Nummer der zugehörigen LED-Zelle in der Prozedur "ComputeCellNumber" bestimmt. Alles weitere ist nur noch Zuordnen eines entsprechenden Status der LED-Zelle in Abhängigkeit vom ursprünglichen Status, z.B. LED_On wechselt immer bein Anklicken nach LED_Off.
Über die Plugin-Konfiguration wird die Startadresse des Dimmerpacks zugeordnet. Hier gehört es zum guten Stil, dass Sie jede Eingabe soweit wie möglich prüfen, um spätere Laufzeitfehler auszuschliessen. Sie sollten mindestens den Wertebereich und den Typ des Eingabefeldes prüfen.
Public Sub readTutorLLConfigurationData()
' read only configuration data - start address
' no special form is required for this demo plugin
Dim AddressText As String
Dim ok As Boolean
While Not ok
AddressText = InputBox$("Start Address:", "Demo Plugin Configuration")
ok = True
'make plausibility test
If IsNumeric(AddressText) = False Then
MsgBox Prompt:="Please enter an integer for start address!"
ok = False
End If
If AddressText > 252 Then
MsgBox Prompt:="Please insert a value lower than 252"
ok = False
End If
Wend
For i = 0 To 3
mDimmerAddr = Int(AddressText)
If Not mHelper.DMXC_Channel_IsDimmer(mDimmerAddr + i) Then
MsgBox ("Warning : Channel " & mDimmerAddr + i & " not dimmable")
End If
Next
End Sub
In der For-Schleife wird zusätzlich geprüft, ob die 4 Kanäle auch verwendet werden und die Helligkeit regeln können (is_Dimmer), also wirklich zu einem Dimmerpack gehören (der mHelper-Mechanismus wird im nächsten Kapitel erklärt). Später werden über die DMXC_PluginHelper-class weitere Methoden verfügbar sein, die zusätzliche Plausibilitätstests erlauben.
Der Start-Button, der Stop-Button und das Timer Control interagieren untereinander über das Setzen des "Enabled"-Attributes des Timers ("timLLTimer"). Der Timer ist auf die Reaktionszeit von 1000ms = 1 sec. gesetzt und weckt nach Ablauf dieser Zeit seine zugehörige Routine timLLTimer_Timer().
Mit dem linken Kommando-Button wird lediglich der Editiermodus über die globale Variable mblnHalfDensity" umgeschaltet. Je nach Wert, der bis zur nächsten Ändereung permanent eingestellt bleibt, bekommen die Matrixfelder beim Anklicken den Zustandswert LED_on oder LED_dimmed. Sie sehen also, dass sich dieser Modul wirklich weitestgehend nur mit dem Verhalten der Oberfläche beschäftigt. Hier erfolgt keine direkte Steuerung der DMX Signale.
Tipps: - Redraw-Eigenschaft des Fensters auf True setzen, sonst verschwinden Teile der laufzeit-generierten Oberfläche, wenn ein anderes Fenster überlappt
3.4 Der DMX Logikmodul
Dieser Modul dient dazu, die wesentlichen Algorithmen zur DMX Steuerung zu implementieren. Unser einfaches Tutorial-Beispiel ist diesbezüglich vom Umfang etwas eingeschränkt, aber bei funktionell hochwertigen PlugIns werden sich viele Funktionen wie Filterung, Korrelation, Auswertung und algorithmische Berechnungen finden.
Außerdem gehören in diesen Modul alle Geräte-spezifischen Operationen. Der Modul stellt eine Referenz zum eigentlichen DMXC-Interface mit der Klasse mHelper zur Verfügung.
Public mHelper
Diese Referenz wird im Interfacemodul clsDMXCPlugIn initialisiert (und muss beim Terminieren auch wieder aufgelöst werden!).
Zwecks Implementierung der DMX Logik wird hier auch die "DMXSignalmatrix" , also das eigentliche PlugIn-spezifische Szenenrepository gehalten. Dazu werden im Array "gLED_matrix" die Beschreibungen der Szenen gespeichert. Sie werden in Ihrem PlugIn analoge Mittel benötigen.
Public Enum LED_status LED_off 'LED cell is off - zero signal for this scene LED_dimmed 'LED cell is dimmed - any mid value for this scene LED_on 'LED cell is on - maximum signal for this scene End Enum Public LED_matrix(1To60, 1To4)As LED_status 'storage of LED statis
Unser DMX-Logigmodul muss nun für die LED-Status-Werte die geeigneten DMX-Werte berechnen. Natürlich ist das in unserem Fall kein Problem, weil wir hier mit einer fixen Zuordnung auskommen, z.B.
LED_off -> 0 LED_dim -> 128 LED_on -> 255
Aber man kann sich leicht kompliziertere Beispiele mit komplizierten Algorithmen ausdenken, in denen man wirklich Intelligenz benötigt, insbesondere wenn man zusätzlich empfangene Signale auswerten will.
Wir stellen in diesem Modul eine TutorLLSetDMXValue-Routine bereit, die vom Timer gerufen wird, "wenn es was zu tun gibt":
Public Sub TutorLLSetDMXvalue(ByVal scenenb As Integer)
Dim i As Integer
Dim dmxv As Long
Call mHelper.MyStream.UserInteraction ' new for DMXControl 2.9,
' enables the plugin to send values, independent
' from the active program module
For i = 1 To 4
Select Case gLED_matrix(sceenb, i)
Case LED_off
dmxv = 0
Case LED_dimmed
dmxv = 128
Case LED_on
dmxv = 255
End Select
Call mHelper.MyStream.SetChannel(mDimmerAddr + i - 1, dmxv, True) ' sends the DMX-values to
' DMXControl
Next
End Sub
Diese Prozedur berechnet für alle 4 Kanäle die aktuell auszugebenden DMX-Werte und sendet sie mit der SetChannel-Methode.
Bevor ein Plugin DMX-Werte an DMXControl senden kann, muss dieses noch zum gerade aktive Modul erklärt werden. Dies geschieht mit dem Aufruf der UserInteraction-Methode. Dies hängt zusammen mit dem Wegfall der Prioritäten in DMXControl V2.9, wo das gerade vom Anwender benutzte Modul jetzt die Kontrolle hat.
Call mHelper.MyStream.UserInteraction
Beim Senden der DMX-Werte könnte eine Optimierung durchgeführt werden. Eigentlich müssten die Werte nur dann neu gesendet werden, wenn sie sich verändert haben. Dies kann natürlich die DMXLogik im Plugin einfach überprüfen.
Die Kernfunktion hierbei ist die SetChannel Methode der Klasse mHelper:
SetChannel(Channel As Long, Value As Long, IgnoreChange As Boolean)
Bitte achten Sie hier auf die erforderlichen Parametertypen (Long), da es sonst zu Laufzeitfehlern kommt.
Der erste und zweite Parameter "Channel" und "Value" sind selbsterklärend.
Der dritte Parameter "IgnoreChange" hat Einfluß auf die Änderungsmarkierungen bei der Szenenspeicherung in DMXControl. Dort wird im Fenster "Speicherung einer Szene" bekanntlich angezeigt, welche Werte sich geändert haben. Mit dem Parameterwert „True“ wird dieses Verhalten ignoriert, d.h. es wird so getan, als ob es eigentlich keine Änderung gegeben hätte.
3.5 Die DMXControl Interface Klasse
Hier erfolgt die eigentliche Einbindung des PlugIns in DMXControl, d.h. es werden verschieden Methoden zur Aktivierung, namentliche Bekanntmachung, Konfiguration und Deaktivierung ausimplementiert. Die Interfaces sind in in zwei Modulen definiert, daher importieren wir diese mit
Implements IDMXCPlugin Implements IDMXCModule
Die benötigten Typdefinitionen befinden sich in DMXCTypeLib.dll. Daher muss dieser Modul sowohl im Programmverzeichnis von DMXControl als auch in Ihrer VB6-Umgebung bekannt gemacht werden. Dazu müssen Sie in VB6 unter dem Projektmenü den Punkt "References" aufrufen und die Verknüpfung zu DMXCTypeLib.dll herstellen. Man kann sich z.B. eine lokale Kopie im VB6-Arbeitsverzeichnis erstellen.
Die erforderlichen Implementierungsaufgaben in diesem Modul werden am Tutorialbeispiel sehr deutlich. Die GET-Methode IDMXCModule_ModuleInfo liefert DMXControl Informationen über das neue Plugin, z.B. Daten die in den Menüs oder Dialogen eingeblendet werden. Die meisten Attributnamen sind selbsterklärend, bitte paasen Sie die Attributwerte entsprechend an.
Private Property Get IDMXCModule_ModuleInfo() As DMXCTypeLib.Type_Module_Info
Set IDMXCModule_ModuleInfo = New Type_Module_Info: With IDMXCModule_ModuleInfo
.Guid = "{b61b4c42-17ed-11da-94c3-00e08161165f}" 'adapt this line with unique GUID
.Name = "Lauflicht Demo Plugin"
.Description = "GUI für Lauflichter"
.Author = "Frank Burghardt"
.Experimental = True
.ProvidesToolWindow = True
.Category = CAT_Control
.FormName = "frmTutorMain"
Set .Frm = frmTutorMain
.ProvidesCommand = False
.ProvidesSceneType = False
.UsesProvidedOutput = True
.UsesMessaging = True
With .Messages
.Add MSG_Channel_Set
.Add MSG_Channel_Send
End With
End With
End Property
Hier noch einige zusätzliche Erklärungen. Der GUID (Global Unique Identifier) liefert eine eindeutige Modul-Id. Die GUID können sie z.B. von http://www.guidgen.com/Index.aspx beziehen. Die Attribute ProvidesCommand / ProvidesScenetype sind für zukünftige Erweiterungen vorgesehen, wenn DMXControl neue dynamische Befehle und Szenetypen unterstützen wird. Unter benutzten Messagetypen müssen Sie vereinbaren, auf welche Nachrichten das Plugin reagieren soll. Bisher wird das Senden von DMXSignalen ("MSG_Channel_Send") und das Empfangen ("MSG_Channel_Set") unterstützt.
Weiterhin müssen folgende Methoden angepasst werden:
- IDMXCPlugin_Enable() - Aktion beim Aufruf des Plugins (aus der Menüliste)
- IDMXCPlugin_Disable() - Aktionen beim Deaktivieren des Plugins (Schließen des Fensters)
- PlugInName 'Liefert den Namen des Plugins zurück, der im Pluginmanager angezeigt wird
Mit der Methode Configure() kann man einstellen, ob ein Konfigurationsdialog/GUI existiert und welche Aktion dazu auszuführen ist. In userem Beispiel wird die oben erwähnte Funktion Call frmTutorMain.readTutorLLConfigurationData aufgerufen.
IDMXCPlugin_Init definiert allgemeine einmalige Aktionen beim Laden des Plugins, z.B. Setzen der Referenzen zum
DMXControl-Interface-Objekt. (Das Plugin ist dann aber noch nicht aktiv, sondern erst mit dem Aufruf aus der
Menüliste) Hier können Sie normalerweise den vorgegebenen Code komplett übernehmen.
Die Methode liefert drei Werte:
- Name der Aufrufenden Applikation, wird bei Registryeinträgen benutzt
- Mein Dateiname, wird vom Caller geliefert (Dateiname der aktuellen Instanz, wichtig wenn es mehrere Kopien eines Plugins gibt, damit jedes seine eigenen Einstellungen speichern kann. Zukünftig werden aber Funktionen zum Lesen/Schreiben von Registry-Einstellungen in der HelperClass exportiert werden, die dann gleich den richtigen Pfad verwenden) und schließlich
- als wichtigste Information die Referenz mHelper auf die DMXCPluginHelper-Klasse, die sämtliche benötigten Methoden im Logikmodule bereitstellt.
IDMXCPlugin_Term() wird immer aufgerufen, wenn DMXC beendet wird, hier können Sie z.B. geteilte Resourcen mit anderen Tools freigeben.
Die Funktion IDMXCPlugin_MessageHandle legt fest, was das Plugin tut, wenn eine ( DMXControl-Nachricht) eintrifft, z.B. zur Übermittlung eines DMX-Signals, also dass irgendein Kanal seinen Wert geändert hat. Dies ist sozusagen die “call back”-Funktion von DMXControl, um dem Plugin die Wertänderung mitzuteilen. Man beachte, dass diverse Messagetypen existieren.
In unserem Falle werden nur die "Message_Channel_Send"-Nachrichten ausgewertet (falls der Receivemode) aktiviert ist) und die Methode TutorLLGetDMXValue aus dem Logikmodul aufgerufen. Letztere Methode entscheidet dann, ob die Wertänderungen Auswirkung auf die GUI hat und initiiert gegebenenfalls entsprechende Aktivitäten.
Private Function IDMXCPlugin_MessageHandle(Msg As DMXCTypeLib.MSGs, Arg1 As Long, Arg2 As Long) As Long Select Case Msg Case MSG_Channel_Send If gblnReceiveMode Then TutorLLGetDMXvalue Arg1, Arg2 End If End Select End Function
3.6 Die Erzeugung der DLL
Eine Übersicht über mögliche Entwicklungsumgebungen enthält der Artikel Plugin_Entwicklungsumgebung. In diesem Tutorial bleiben wir bei VB6.
Zu Beginn bietet es sich an, das PlugIn als normales Projekt in VB6 zu entwickeln und somit "offline (von DMXControl)" die GUI und die DMXLogik zu testen.
Spätestens mit der Einbindung der SetChannel-Methode hat man ein Problem, weil man natürlich ohne DMXControl kein Object von DMXCPluginHelper zur Verfügung hat. Also müssen wir nachdem das PlugIn eine gewisse Reife hat, nun die dll erzeugen.
Als erstes müssen wir der Entwicklungsumgebung mitteilen, dass wir eine dll erzeugen wollen. Dies passiert mit folgenden Einstellungen: (hier das Beispiel aus Visual Basic 6)
Abbildung 3: Projekt Konfiguration
Weiterhin sollten angegeben sein:
- im Registerblatt "Compile": Compile to native code
- im Registerblatt "Component": No Compatibility oder Project Compatibility
Die Eigenschaft "Instancing" von clsDMXCPlugin muss unbedingt auf "5 - MultiUse" stehen, sonst wird keine dll erzeugt.
Nun muss man nur noch darauf achten, dass die Compilierung jetzt über das Datei-Menü gestartet wird: Dort gibt es jetzt den Eintrag "Make TutorLL.dll".
Bitte beim Speichern auf die Namenskonvention achten und den Dateinamen der dll auf "TutorLL.dll" ändern (was dauerhaft
gespeichert wird).
Abbildung 4: Make Projekt
Tipps: Weitere Fallen, die man beachten muss: - Man muss unbedingt ein Sub Main() vereinbart haben (kann leer sein)
Es ist theoretisch auch möglich, zum Testen des Plugins im Debugger_mode zu arbeiten. Dazu geben Sie in der Registerkarte "Debugging" unter der Option "Start Program" den Pfad von DMXControl.exe an und fügen den Kommandoparameter
-debugdll:TutorLL.dll
an (bzw. natürlich den Namen der neuen dll)
Hinweis: Die Meldung "Not registered DLL xxx.dll for debug purposes!" ist keine Fehlermeldung und sollte nicht vom Debuggen abschrecken. Man sollte auch dringend vermeiden, alte Versionen des Plugins (z.B. ) unter einem anderen Namen im Plugin-Verzeichnis zu haben. In der Praxis gibt es aber dennoch leider manchmal Probleme mit externen Referenzen, so dass der Debug-Mode nicht immer funktioniert.
3.7 Die Integration in DMXControl
Nachdem die dll erzeugt wurde, muss sie nun noch in das Unterverzeichnis „plugins“ von DMXControl kopiert werden (Wenn es noch nicht vorhanden ist, muss das Unterverzeichnis erst händisch erstellt werden: C:\Programme\DMXControl\plugins ).
Nach dem Aufruf von DMXControl können Sie die erfolgreiche Einbindung überprüfen, indem Sie die Einträge unter Konfiguration->Plugins... überprüfen.
Abbildung 5: Erfolgreich erkanntes Plugin "Tutorial Lauflicht PlugIn"
Nachdem das Plugin aktiviert wurde, erscheint es in DMXControl im Menü "Fenster" und kann über den entsprechenden Menüpunkt aufgerufen werden (Falls das Plugin nicht im Menü "Fenster" erscheint, dann muss wahrscheinlich in DMXControl im Menü "Konfiguration" noch der Punkt "experimentelle Programmteile anzeigen" aktiviert werden).
Die erfolgreiche Arbeitsweise unseres Plugins kann man z.B. auch im Tool "Kanalübersicht" überprüfen, wo die ausgegebenen Lauflichtwerte angezeigt werden.
Abbildung 6: Das Tutorial plugin arbeitet in der DMXC-Umgebung
3.8 Die Konfiguration des Plugins
Spezielle Parameter, die nicht ständig an der Oberfläche benötigt werden, sollten über die Plugin-Konfiguration administriert werden. Dieses wird über den Button "Gewähltes Plugin konfigurieren" aufgerufen. In unserem Falle erscheint ein einfaches Input-Fenster für die Dimmerpack-Startadresse.
Hier kann man sich beliebige Erweiterungen vorstellen, z.B. für die Konfiguration von Signalpegel und Farbe.
3.9 Der Sourcecode des Plugins
Sie können den Sourcecode des Demo-Plugins im File DMXC_Demo_Plugin.zip komplett ansehen.
Alle APIs finden Sie in der Plugin Interface Referenz
Wer nur die dll benötigt, lädt dieses file: TutorLL.dll
Wir wünschen Ihnen nun viel Spaß und Erfolg bei der Erstellung Ihres eigenen Plugins.
Hier geht es weiter zum Plugin Tutorial 2
Tutorial 2
Plugin Tutorial 2
4.1 Überblick
In diesem Teil des Tutorials wird auch die Rückrichtung realisiert, d.h. auch die von DMXControl gesendeten DMX Werte können empfangen werden.
Auch hier gilt, dass das Plugin in die gleichen drei Teile dekomponiert werden sollte, d.h. wir unterscheiden wieder in
- GUI
- Logik des Plugins
- Interface zu DMXControl.
Diese werden im folgenden beispielhaft beschrieben. Dazu wird unser Plugin aus dem ersten Teil um den Empfang von DMX-Signalen erweitert. Diese Signale, die z.B. vom Submaster oder Sound Analyzer für die 4 Dimmerkanäle ausgelöst werden können, werden dann im GUI-Matrixfeld in einer Art Lichtorgel visualisiert. Wie schon im ersten Teil wird hier im Sinne der Einfachheit und Übersichtlichkeit die einfachste Variante demonstriert, indem je nach Signalwert die Zellen eines Kanals in drei Stufen gefärbt werden. Natürlich können Sie dieses Beispiel erweitern, indem z.B. RGB-Werte zur Darstellung einzelner Kanäle oder der gesamten Matrix verwendet werden.
4.2 GUI Administration
In der Plugin-Oberfläche gibt es nur eine Änderung, ein zusätzlicher Kommando-Button wurde eingeführt, der als Umschaltbutton zwischen Sendemode (unveränderter erster Teil des Tutorials) und Empfangsmode (dieser Teil) fungiert. Das Tutorialbeispiel ist zur besseren Klarheit so konstruiert, dass entweder Signale gesendet oder empfangen werden können (Umschalten mit dem Send/Receive-Button). Diese Einschränkung ist nicht zwingend. Sie können also in Ihrem Plugin beide Modes kombinieren.
Den anderen Pluginteilen wird über die Variable "gblnReceiveMode" mitgeteilt, welcher Mode gerade aktiviert ist.
Abbildung 7: DMX-Receive Mode für das Plugin
4.3. Interface zu DMXControl
Die Methode "IDMXCPlugin_MessageHandle" im Modul clsDMXCPlugIn wird von DMXControl jedesmal aufgerufen, wenn ein DMX-Kanal einen neuen Wert erhält. Da dieser Modul nur das Interface zu DMXControl implementieren sollte, wird hier lediglich anhand des Wertes der Variable "gblnReceiveMode" geprüft, ob die empfangenen Signale an die Logik weitergeleitet werden sollen. Im Falle des Sendemodus werden die Signale einfach ignoriert, ansonsten wird die Routine "TutorLLGetDMXValue" im Modul DMXCTutorLL aufgerufen, weil dort die Logik implementiert ist, was mit dem empfangenen Signal zu geschehen hat. Natürlich können Sie in Ihrem Plugin die Signale feiner filtern oder auch andere Messages empfangen.
Private Function IDMXCPlugin_MessageHandle(Msg As DMXCTypeLib.MSGs, Arg1 As Long, Arg2 As Long) As Long
Select Case Msg
Case MSG_Channel_Send
If gblnReceiveMode Then
TutorLLGetDMXvalue Arg1, Arg2
End If
End Select
End Function
4.4 Logik
Im Modul DMXCTutorLL (Routine "TutorLLGetDMXValue") müssen also alle Operationen gestartet werden, die sich mit der Auswertung und Analyse der emfangenen Werte beschäftigen.
Public Sub TutorLLGetDMXvalue(ByVal Ch As Integer, ByVal Value As Long)
Dim i, Channel As Integer
If Ch >= mDimmerAddr And Ch < mDimmerAddr + 4 Then
Channel = Ch - mDimmerAddr + 1 'map to 1..4
If Value >= 128 Then
If mcurDMXValues(Channel) < 128 Then
Call frmTutorMain.enlightChannel(Channel, LED_on)
End If
mcurDMXValues(Channel) = Value
Exit Sub 'ready
Else
If Value >= 25 Then
If mcurDMXValues(Channel) > 128 Or mcurDMXValues(Channel) < 25 Then
Call frmTutorMain.enlightChannel(Channel, LED_off) 'reset cell
Call frmTutorMain.enlightChannel(Channel, LED_dimmed)
End If
mcurDMXValues(Channel) = Value
Exit Sub 'ready
Else
' Value < 25
If mcurDMXValues(Channel) >= 25 Then
Call frmTutorMain.enlightChannel(Channel, LED_off)
End If
mcurDMXValues(Channel) = Value
End If
End If
End If
End Sub
Die Logik ist in unserem Beispiel wieder extrem einfach. Das empfangene Signal wird auf 3 Zustände abgebildet:
Wert 0-25 -> entsprechender Kanal wird logisch auf "aus" gesetzt Wert 26-127 -> entsprechender Kanal wird logisch auf "dimmed" gesetzt Wert 128-255 -> entsprechender Kanal wird logisch auf "on" gesetzt
Daher prüft diese Prozedur, in welcher der drei Kategorien der aktuellen Wert liegt. In unserem Beispiel ist es erneut nicht
nötig, dem GUI Modul einen DMX-Wert zu übergeben, sondern es werden wiederum die drei bekannten Zustände verwendet. Dieser
berechnete Zustand wird dem GUI-Teil mitgeteilt, indem die Routine "enligthChannel" gerufen wird.
Es gibt einer zweiten Weg. DMX-Werte zu empfangen, nämlich durch explizite Abfrage, z.B.
dmxValue = mHelper.ChannelGetValue(currentChannel)
Ursprünglich war diese Methode dazu gedacht, bei der Initialisierung des Plugins die aktuellen Werte zu übernehmen.Es gibt aber auch Anwendungsfälle, wo das zielgerichtete Abfragen ("polling") viel effektiver und weniger Performance-fressend ist, als ständig auf alle "push"-Werte von DMXControl zu reagieren.
4.5 GUI Anzeige
Schliesslich bleibt die Aufgabe, anhand des übermittelten Zustandes eine Visualisierung in der Matrix vorzunehmen. Hierzu werden die bereits bekannten Methoden "colorizeCell" wiederverwendet.
Public Sub enlightChannel(ByVal ch As Integer, ByVal Status As LED_status)
Dim i As Integer
For i = 1 To 60
LED_matrix(i, ch) = Status
Call ColorizeCurrentCell(i, ch, True)
Next
End Sub
Auch für dieses Tutorialbeispiel gilt, dass vieles optimierter programmiert werden könnte, z.B. Änderung der Zellfarbe nur, wenn sich wirklich der Wert ändern. Aber das würde die Verständlichkeit des Beispiels verringern.
4.6 Integration in DMXControl
Da sich an der Modul-Struktur des Plugins nichts geändert hat, gilt hier alles, was im Kapitel 3.6 und 3.7 (Plugin Tutorial 1) beschrieben wurde. Vergessen Sie beim Ausprobieren nicht, die Startadresse des Dimmerpacks einzustellen und den "Receive"-Mode zu aktivieren.
Mit Hilfe des Submasters können Sie die Änderung der DMX-Werte auf den Dimmerpack-Kanälen vornehmen und dann die visuelle Anzeige in unserem Plugin bestaunen. Es ergibt sich auch tatsächlich ein Lichtorgel-Effekt bei der Benutzung des Sound Analyzers.
Wir wünschen Ihnen nun viel Spaß und Erfolg bei der Erstellung Ihres eigenen Plugins.
Sie können den Sourcecode des Demo-Plugins im File DMXC_Demo_Plugin.zip komplett ansehen.
Alle APIs finden Sie in der Plugin Interface Referenz
Entwicklungsumgebung
Plugin Programmiersprachen
In welcher Umgebung kann man eine Plugin-dll entwickeln?
In unserem Projekt arbeiten wir mit Visual Basic 6. [| Microsoft] stellte ein kostenloses Ablaufmodell zur Verfügung, (welche ich leider nicht mehr finde und die man heute wohl nur noch auf CDs alter PC-Zeitschriften bekommt). Das ist ein vollwertiges Basic, aber leider kann man damit keine .exe oder dll erzeugen, sondern der Code wird in einer Interpreterumgebung ausgeführt.
Zur Erzeugung von dlls benötigt man z.B. die "Visual Basic Enterprise Edition", die aber nicht mehr im Handel ist, aber sehr häufig bei ebay legal angeboten wird. Für Schüler und Studenten gibt es auch eine günstige Version bei [| Amazon]. Möglicherweise können sich einige Nutzer sich diese Version aber auch über das MSDN beziehen.
Alternativ gibt es folgende potenzielle Möglichkeiten zur Erzegung von dlls:
- Es gab von Microsoft auch die kostenlose "Control Creation Edition". Auch diese gibt es anscheinend nicht mehr offiziell, aber dank google findet man das noch im Internet. Im Internet und in PC-Zeitschriften kursieren legale Tricks, wie man damit auch .exe generiert. Welcher Entwickler probiert mal aus, ob das auch für plugins funktioniert?
- Plugins können prinzipiell auch in jeder anderen Sprache geschrieben werden, in der ein Compiler zur Verfügung steht. Wir probieren das im Projekt z.Z. mit Delphi.
- Man verwendet das .NET Framework SDK, welches viele kostenlose hilfreiche Tools enthält, z.B. einen Compiler für Visual Basic.NET. Leider ist die zugehörige Entwicklungsumgebung nicht kostenlos, da schafft aber der nächste Punkt eventuell Abhilfe.
- Es gibt die kostenlose Entwicklungsumgebung SharpDevelop als (wie ich gelesen habe) hervorragende Alternative. Der Name täuscht - diese Umgebung unterstützt auch Visual Basic und liefert einen komfortablen Editor. Leider gibt es wohl noch keinen integrierten Debugger. Man fidet die aktuellste Version unter [| SharpDevelop]. Zur Unterstützung wird hier auch die Magic Library genannt, die es unter diesem [| link] gibt. Aber auch diesen Weg habe ich noch nicht probieren können.
Interface Reference
Plugin Interface Referenzen
Alle hier genannten Methoden gehören zur Klasse DMXCPlugin_Helper. Daher sind die folgenden Schnittstellen als Methode eines Objektes dieser Klasse aufzurufen.
Die Interfaces sind in in zwei Modulen definiert, diese müssen im Interface-Modul mit importiert werden
Implements IDMXCPlugin Implements IDMXCModule
Die benötigten Typdefinitionen befinden sich in DMXCTypeLib.dll. Daher muss dieser Modul sowohl im Programmverzeichnis von DMXControl als auch in Ihrer VB6-Umgebung bekannt gemacht werden. Dazu müssen Sie in VB6 unter dem Projektmenü den Punkt "References" aufrufen und die Verknüpfung zu DMXCTypeLib.dll herstellen. Man kann sich z.B. eine lokale Kopie im VB6-Arbeitsverzeichnis erstellen.
Public mHelper
Folgende Interfaces müssen in einem Plugin implementiert werden:
| Methode | Aufgerufen von | Beschreibung | Parameter/Variable/Returnwert |
|---|---|---|---|
| Private Function IDMXCPlugin_Configure() As Boolean | Plugin-Konfiguration (Button "Konfigurieren") | Ruft die GUI für ggfs. erforderliche Plugin-Konfiguration | IDMXCPlugin_Configure (Boolean) teilt mit, ob ein Konfigurationsmemü existiert |
| Private Function IDMXCPlugin_Enable() As Boolean | Plugin-Konfiguration/Starten aus dem Menü "Fenster" | Kann Funktionsrufe für das Aktivieren des Plugins enthalten (Aktivieren = Haken in Plugin-Liste setzen) | IDMXCPlugin_Enable (Boolean) teilt mit, ob die Operationen beim Aktivieren erfolgreich waren |
| Private Function IDMXCPlugin_Disable() As Boolean | DMXControl | Kann Funktionsrufe für das Deaktivieren des Plugins enthalten (Deaktivieren = Haken in Plugin-Liste entfernen) | IDMXCPlugin_Disable (Boolean) teilt mit, ob die Operationen beim Deaktivieren erfolgreich waren |
| Private Function IDMXCPlugin_Init(CallingAppTitle As String, MyFilename As String, DMXCPluginHelper As DMXCTypeLib.IPluginHelper) As Boolean | DMXControl (Laden beim Programmstart) | Kann Funktionsrufe für das Initialisieren des Plugins enthalten (Initialisieren = Laden beim Programmstart) | |
| Private Function IDMXCPlugin_Term() As Boolean | DMXControl (Schließen des Plugins) | Kann Funktionsrufe für das Terminieren des Plugins enthalten (Terminieren = Schließen des Plugins) | |
| Private Property Get IDMXCPlugin_PluginName() As String | Plugin-Konfiguration | übergibt der Plugin-Konfiguration den Namen des Plugins | IDMXCPlugin_PluginName (String) |
| Private Property Get IDMXCModule_ModuleInfo() As DMXCTypeLib.Type_Module_Info | DMXControl beim Laden des Programms | übergibt diverse Informationen über das Plugin (siehe Tabelle unten) |
In der Methode IDMXCModule_ModuleInfo sind folgende Datenfelder anzupassen:
| Attribut | Beschreibung | Kommentar/Beispiel |
|---|---|---|
| GUID | eindeutige ID für das Plugin | "{b61b4c42-17ed-11da-94c3-00e08161165f}" (GUID-Generator) |
| Name | Bezeichnung des Plugins in Konfigurationsliste, Menübaum und Kanalübersicht (Mixerkanäle) | "Lauflicht Demo Plugin" |
| Description | zusätzliche Beschreibung, z.Z. ungenutzt | "Simple GUI für Lauflichter" |
| Author | Name des Programmierers, z.Z. ungenutzt | "Max Mustermann" |
| Experimental | zeigt experimentellen Status im Menübaum an, falls noch nicht ausführlich getestet | True/False |
| ProvidesToolWindow | gibt an, ob separates GUI-Fenster für Plugin existiert | True/False |
| Category | gibt an, in welche der Kategorien des Menübaums das Plugin einsortiert wird | CAT_Control |
| FormName | übergibt VB-Name des Plugin-Formulars (Oberfläche) | "frmTutorMain" |
| Frm | übergibt eine Referenz auf das Plugin-Formular | Set .Frm = frmTutorMain |
| ProvidesCommand | gibt an, ob Befehl für die Plugin-Funktionalität definiert wird, z.Z. noch nicht unterstützt | False |
| ProvidesSceneType | gibt an, ob Plugin neuen Szenentype definiert, z.Z. noch nicht unterstützt | False |
| UsesProvidedOutput | gibt an, ob Plugin Signale an den Mixer senden möchte | True |
| UsesMessaging | gibt an, ob Plugin DMXControl-Messages empfangen möchte | True/False |
| Messages | Collection, zu der alle zu empfangenden Messages hinzugefügt werden | Messages.Add MSG_Channel_Set |
Aus der Plugin-Anwendung können folgende Funktionen gerufen werden:
| Methode | Beispiel | Beschreibung |
|---|---|---|
| Public Function SetChannel(Channel As Long, Value As Long, IgnoreChange As Boolean) | Call mHelper.MyStream.SetChannel(mDimmerAddr, dmxv, True) | Ausgeben eines DMX Wertes auf dem angegebenen Kanal. Der dritte Parameter gibt an, ob diese Wertänderung in der Szenenverwaltung ignoriert werden soll. |
| Public Function DMXC_Channel_IsDimmer(Channel As Long) As Boolean . | Abfrage, ob der Kanal für die Helligkeit eines Gerätes zuständig ist | |
| Public Property Get DMXC_CHANNEL_MAXCHANNELS() As Long | Gibt die Nummer des höchsten verwendbaren Kanals zurück | |
| Public Function DMXC_Channel_GetValue(Channel As Long) As Long | dmxValue = mHelper.ChannelGetValue(currentChannel) | Hiermit kann das Plugin den aktuellen Wert abfragen. Wird z.B. bei der Plugin-Initialisierung benötigt. |
Die Interfaces werden laufend erweitert. Bitte diskutiert hier (oder schreibt uns), welche Funktionen ihr für Eure Plugins benötigt.











































