Intern DMXC de PluginTutorial 2 9

aus dem DMXControl-Wiki

Wechseln zu: Navigation, Suche
 
DMXControl 2.9 Plugin-Fibel

Bild:Splash29.png
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

Inhaltsverzeichnis

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

Bild:DMXC_de_plugins.JPG

Zweiteres sieht mann hier

Bild:Pluginverwaltung2.JPG

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:

Beispiel für DMXC Plugin

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

Image:DMXC-Plugin-Tutorial.jpg

Dieses Plugin demonstriert alle Funktionen der Pluginschnittstelle. Sie finden für jede Schnittstelle ein Codebeispiel. Ausführliche Beschreibung...

Demo-Plugin

bild:LauflichtDemoPluginMini.jpg

  • 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.

MusicFlash Plugin

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.

MusicFlash Konfiguration

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


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.


FollowSpot Plugin


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.

FollowSpot Konfiguration


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


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.

Duplicate Plugin

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.

Duplicate Konfiguration

Mittels des + -Buttons können Datensätze hinzugefügt werden und mit dem - -Button können Einträge aus der Liste entfernt werden.

Duplicate Kanal Konfiguration

bekannte Probleme

zur Zeit keine

Planung für nächste Versionen und Wünsche

Download


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.

4xColorChange Plugin

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.

ColorChange Konfiguration

bekannte Probleme

zur Zeit keine

Planung für nächste Versionen und Wünsche

Download

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.

Matrix Plugin

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:

Advanced Functions

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.

Beispiel: Advanced Functions

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.

Matrix Konfiguration

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.

Matrix-RGB-Device Konfiguration


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

MinMaxChannel

bild:MinMaxChannel.jpg

  • Datum/Zeit: 31.05.2007
  • Autor: Florian Seewig
  • Status: Experimentell
  • Dateien Version 2.9.1 (ab DMXControl 2.9):
  • 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.


bild:Mediacenter_command_mpshow.JPG 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:

bild:Plugin_Mediacenter_Konfig.JPG

Dafür müssen DMX-Adresse und IP-Adresse direkt nach dem Start des Plugins (über das Menü) dort eingetragen werden.

bild:MediaCenterPlugin_Connection.JPG

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.:

bild:Mediacenter_DDF_DateiLaden.JPG

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:

bild:Mediacenter channelOverview.JPG

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

Bild:Mediacenter sceneList.JPG

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.

MxSim Plugin


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.

MxSim Konfiguration


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


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

Plugin DSS100

Der SoftScanner kann innerhalb von DMXControl wie ein normales DMX-Gerät verwendet werden, indem das zugehörige DDF und Gerät installiert wird.


Add DDF DSS100


Danach erfolgt die Bedienung über das DDF wie bei jedem anderen Scanner.


DDF DSS100


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.


Pult DSS100


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

Download

  • Dateien Version 1.0 (ab DMXControl 2.9):
    • Plugin: [5]
    • Sourcecode: ---

Ballonglühen 1

bild:PluginHeissluftballon.jpg

Das Plugin visualisiert das Leuchten der Heissluftballons.


Ballonglühen 2

bild:PluginBalloonGlow.jpg

  • Datum/Zeit: Januar 2007
  • Autor: Frank Brüggemann
  • Status: fertig
  • Dateien Version 2.9.0 (ab DMXControl 2.9):
  • Beschreibung:

Bitte das image-Verzeichnis im Plugin-Ordner installieren. Das Plugin visualisiert das Leuchten der Heissluftballons.


Game-Plugins

Flaschendrehen

bild:PluginFlaschendrehen.jpg

  • Datum/Zeit: Februar 2007
  • Autor: Marten Jahn
  • Status: Version 1.0 fertig
  • Dateien Version 2.9.0 (ab DMXControl 2.9):
  • 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

bild:pc_dimmer_bridge.jpg

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):
  • 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.


Image:PDA2DMXC de LoginTCP.jpg Image:PDA2DMXC de LoginTCP MC.jpg


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.

Image:PDA2DMXC de Devices.jpg

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.

Image:PDA2DMXC de Commands.jpg

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.

Image:PDA2DMXC de Channels.jpg

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.

Image:PDA2DMXC de Tools.jpg

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.

Image:PDA2DMXC de MC.jpg

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.

Image:PDA2DMXC de Settings.jpg

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

Bild:dmxcontrol_pc_dimmer_pluginloader.jpg

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

Bild:dmxcontrol_deluxe32.jpg

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 GUI des Tutorial PlugIns


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.


Bild:Entwicklung_in_VB6.JPG

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)


Bild:Plugin_Projekt_Konfiguration.JPG

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).


Bild:Plugin_Make_Projekt.jpg

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)

Bild:plugin_debug_dll.jpg

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.

Bild:Pluginverwaltung.JPG

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.

Bild:Plugin_in_DMXC_de_Umgebung.jpg

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.

Bild:Tutorial_Plugin_output.jpg

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.

Persönliche Werkzeuge
Buch erstellen
Andere Sprachen