DE-Interface Erweiterung

  • Hallo,


    Bin grad dabei einen für meine Lichtanlage spezifisches Digital-Enlightenment Ausgabeplugin für DMX-C zu schreiben.


    Schreibe das ganze in VB6 und die Ausgabe funktioniert auch schon so weit.


    Nun habe ich Probleme beim DMX-In:


    Wenn ich das richtig verstanden hab dan Ruft der DE-Treiber bei jeder Input veränderung eine Funktion im DMX-C Ausgabeplugin auf bei der der Wert an DMX-C übergeben wird.


    hier der Code:


    Definition:

    Code
    Public Declare Function RegisterInputChangeNotification Lib "usbdmx.dll" (ByVal ProcPtr As Long) As LongPublic Declare Function UnregisterInputChangeNotification Lib "usbdmx.dll" () As Long


    Sobald das Ausgabeplugin initiert wird:


    Code
    ...RegisterInputChangeNotification AddressOf DMXIn_Changed_Callback...


    Funktion:

    Code
    Public Function DMXIn_Changed_Callback() As Boolean
    Dim i As Long
    
    
    For i = 0 To i = 511
      mHelper.DMXC_DMXIn_SetChannel i, DMXIn(i)
    Next
    
    
    End Function


    Da ich noch nicht sehr vertraut mit VB bin weis ich auch nicht genau ob die Funktion im Hauptmodul stehen muss oder in einer Klasse.


    Wenn die Funktion in der Klasse Steht, meckert der Kompiler.
    Wenn sie im Hauptmodul steht hat DMX-C einen Fehler.


    Hat sich jemand von euch schon mit dem DE-IF auseinandergesetzt?

  • Quote

    Original von huma6
    Wenn die Funktion in der Klasse Steht, meckert der Kompiler.
    Wenn sie im Hauptmodul steht hat DMX-C einen Fehler.


    Hat sich jemand von euch schon mit dem DE-IF auseinandergesetzt?


    Ich, als ich das existierende Ausgabeplugin geschrieben habe ;)
    Das Problem ist, dass du in dem Callback kaum Möglichkeiten hast auf VB-Interne Dinge zuzugreifen, da hier verschiedene Threads am Werk sind. Ich habe das Problem gelöst, indem der Callback nur per PostMessage eine Nachricht an ein Form übermittelt. Dieses kann man dann entweder subclassen oder man benutzt eine Nachricht, die gleich ein VB-Event zur Folge hat (z.B. MouseDown oder so etwas).


    Stefan

  • Ist soviel aufwand nötig? Für das DigitalEnlightenment Plugin für meinen PC_DIMMER habe ich einfach das Eingangs-Array auf Änderungen geprüft und bei einer Änderung die geänderten Daten an mein Hauptprogramm mit ner eigenen Funktion weitergeleitet. Fertig... die USBDMX.dll greift ja per Pointer direkt auf die Inhalte des Eingangs-Arrays zu. Ist halt Polling und kein Interrupting :)

    Mein aktuelles Video auf Youtube: Movingheads ohne Kopfschmerzen!

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

  • Die Callback Rountinen sind Hilfen, nötig sind sie nicht unbedingt. Grundsätzlich aktualisiert die DLL das Eingangsarray in einem eigenen Thread dafür wenn sie Nachrichten vom Interface erhält. Da bereits das Interface auf Änderungen im DMX Eingang checkt erhält die DLL auch nur dann eine Nachricht und kann die Info dass sich was geändert hat mit der Callbackfunktion so an die Anwendung weiter geben. Bei den heutigen Rechenleistungen spielt es aber praktisch keine Rolle mehr, wenn der PC alle paar ms nochmal die 512 Bytes durchkaut...

  • gar keine schlechte Idee mit dem Polling.


    Hab einen Timer der aufgerufen wird mit folgendem Code


    Code
    For Channel = 0 To Channel = 511
      mHelper.DMXC_DMXIn_SetChannel Channel, DMXIn(Channel)
    Next


    irgendwie funktioniert das nicht. sehe in der DMX-In anzeige keine Werte.

  • Mit dem Code wirst du DMXC gut auslasten: Es erwartet, dass nur DMX-Änderungen übergeben werden, nicht jedes mal das komplette Universe. Versuch mal sowas:

    Code
    For i = 0 To 511
       If DMXIn(i) <> DMXInLast(i) Then
        mHelper.DMXInSetChannel (i + 1), (DMXIn(i))
        DMXInLast(i) = DMXIn(i)
       End If
      Next


    Stefan

  • Hmm,
    klärt mich mal bitte auf !
    Wozu braucht die Welt ein zweites DMXControl-Ausgabeplugin für das DE-Interface? Die existierende Kombination ist nach meiner Erfahrung die stabilste DMX-Ausgabe die es in diesem Projekt gibt.


    Sollte es doch irgendwelche Einschränkungen geben, plädiere ich für eine offizielle Version 2.


    Gruss Frank

  • Die Welt braucht wahrscheinlich kein zweites Ausgabeplugin, aber ich.


    Hatte da mal eine Sache angesprochen die ich gerne umsetzten würde:
    Extended DMX-in Fernsteuerung


    wenn ich nun im Ausgabeplugin die DMX Kanäle so Patchen kann, dass ein Kanal auf mehrere aufgeteilt wird, kann ich das Problem lösen


    Bsp:


    Pult Kanal 1:


    0-50 EffektX,
    51-100 EffektY


    DMX-C In Kanäle:


    Kanal 10 EffektX
    Kanal 11 EffektY


    Somit möchte ich das lösen, dass ich wenn die DMX-Kanalwerte eines Geräts für z.B. das Farbrad dicht zusammenliegen, und mann direkt die DMX-Werte an einem Kanal verändert, man ein ziemlich ruhiges händchen braucht wenn der Pult Fader 10cm lang ist und auf 1cm 6 Farben einzustellen sind.


    Durch meine Lösung kann ich auf einem 10cm Fader alle 1,5cm eine andere Farbe wählen.


    Hab die Lösung von Stefan versucht.


    wenn ich die Zeile


    Code
    mHelper.DMXInSetChannel (i + 1), (DMXIn(i))


    nicht auskommentier meckert DMX-C wenn ich den Fader am Pult bewege


    hab Screenshots der Fehlermeldungen angehängt.


    Sample ist der Dateiname der Ausgabeplugin-DLL

  • Newly created posts will remain inaccessible for others until approved by a moderator.

    The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.