Einbindung der ArtNetLib in C#
Einbindung der ArtNetLib in C#
Hallo,
auf der Suche nach einer Möglichkeit in einer eigenen Anwendung Artnet-Daten an einen Artnet-Node zu senden, bin ich auf die Library von PC-Dimmer gestoßen. Jedoch bestehen Probleme bei der Anwendung. Ich würde gerne in C# programmieren, da dort die meisten Kenntnisse vorhanden sind. VB Kenntnisse sind auch vorhanden. Jedoch mangelt es mir an Delphie Kenntnissen. Deshalb werde ich auch aus dem mitgelieferten Beispielprogramm nicht wirklich schlau. Mir geht es erst einmal nur um das Senden von Informationen.
Gibt es irgendwo Beispielanwendungen oder hat jemand die lib schon einmal integriert? Beim googeln bin ich nicht fündig geworden.
In welcher Reihenfolge werden die einzelnen Funktionen aufgerufen?
1. Recieve auf off
2. Konfiguration (SetConfig)
3. aktivieren (Activate)
4. SetChannel
5. SendDMXUniverse
Das wäre meine Vorgehensweise. Dann bestehen jedoch teilweise Probleme beim Aufruf der einzelnen Funktionen.
Danke im Vorraus.
Grüße
auf der Suche nach einer Möglichkeit in einer eigenen Anwendung Artnet-Daten an einen Artnet-Node zu senden, bin ich auf die Library von PC-Dimmer gestoßen. Jedoch bestehen Probleme bei der Anwendung. Ich würde gerne in C# programmieren, da dort die meisten Kenntnisse vorhanden sind. VB Kenntnisse sind auch vorhanden. Jedoch mangelt es mir an Delphie Kenntnissen. Deshalb werde ich auch aus dem mitgelieferten Beispielprogramm nicht wirklich schlau. Mir geht es erst einmal nur um das Senden von Informationen.
Gibt es irgendwo Beispielanwendungen oder hat jemand die lib schon einmal integriert? Beim googeln bin ich nicht fündig geworden.
In welcher Reihenfolge werden die einzelnen Funktionen aufgerufen?
1. Recieve auf off
2. Konfiguration (SetConfig)
3. aktivieren (Activate)
4. SetChannel
5. SendDMXUniverse
Das wäre meine Vorgehensweise. Dann bestehen jedoch teilweise Probleme beim Aufruf der einzelnen Funktionen.
Danke im Vorraus.
Grüße
-
- Lichtchef
- Beiträge: 93
- Registriert: 20.07.2011, 12:41
Re: Einbindung der ArtNetLib in C#
Hey,
ich bin auch in C#/VB unterwegs, von daher kann ich dir evtl. helfen.
Beschreibe mal genauer was für "probleme" auftauchen.
Du kannst mir auch mal ne PM schreiben, ich hab auch Skype.
Grüße Martin
ich bin auch in C#/VB unterwegs, von daher kann ich dir evtl. helfen.
Beschreibe mal genauer was für "probleme" auftauchen.
Du kannst mir auch mal ne PM schreiben, ich hab auch Skype.
Grüße Martin
Jeglicher Text, den Ihr vor diesen Zeilen lest, ist durch Zufall generiert worden und muss nicht zwingend Sinn ergeben.
Re: Einbindung der ArtNetLib in C#
Hallo, danke für die Hilfe und die Unterstützung.
Z.B. die Datentypen, TDMXArray ist ein Array mit den zu sendenden Bytes? also z.B. ein Array mit 512 Feldern.
"PDMXArray = ^TDMXArray", dort liegt schon das erste Problem. was bedeutet das "^"? Eine XOR-Verknüpfung wird es ja sicher nicht sein oder?
Anschließend wird als erstes die SetConfig Kunktion aufgerufen?
Gruß
Z.B. die Datentypen, TDMXArray ist ein Array mit den zu sendenden Bytes? also z.B. ein Array mit 512 Feldern.
"PDMXArray = ^TDMXArray", dort liegt schon das erste Problem. was bedeutet das "^"? Eine XOR-Verknüpfung wird es ja sicher nicht sein oder?
Anschließend wird als erstes die SetConfig Kunktion aufgerufen?
Gruß
-
- Lichtchef
- Beiträge: 93
- Registriert: 20.07.2011, 12:41
Re: Einbindung der ArtNetLib in C#
Hey,
so wie ich die Dokumentation verstehe ist TDMXArray ein Array von Bytes, PDMXArray ist der Zeiger auf dieses Array. ^ist in delphi der Referenzierer.
Du müsstest zuerst ArtNet_Activate, danach ArtNet_SetConfig,
danach musst du (Wahrscheinlich) mit SetChannel die einzelnen Kanalwerte ändern und zum Schluss das mittels SendDMXUniverse absenden. Dabei dient das TDMXArray nur als Buffer.
Hoffe ich konnte helfen
Grüße Martin.
edit:
hier gibts ein stück fertigen Quellcode:
Das wäre die 2. Möglichkeit, einfach die ArtNet Spezifikation neu in C# implementieren
Viel Spass noch beim Probieren^^
so wie ich die Dokumentation verstehe ist TDMXArray ein Array von Bytes, PDMXArray ist der Zeiger auf dieses Array. ^ist in delphi der Referenzierer.
Du müsstest zuerst ArtNet_Activate, danach ArtNet_SetConfig,
danach musst du (Wahrscheinlich) mit SetChannel die einzelnen Kanalwerte ändern und zum Schluss das mittels SendDMXUniverse absenden. Dabei dient das TDMXArray nur als Buffer.
Hoffe ich konnte helfen
Grüße Martin.
edit:
hier gibts ein stück fertigen Quellcode:
Das wäre die 2. Möglichkeit, einfach die ArtNet Spezifikation neu in C# implementieren
Viel Spass noch beim Probieren^^
Jeglicher Text, den Ihr vor diesen Zeilen lest, ist durch Zufall generiert worden und muss nicht zwingend Sinn ergeben.
- Christian
- PC_DIMMER-Entwickler
- Beiträge: 1856
- Registriert: 12.11.2007, 09:30
- Wohnort: Knw.-Remsfeld
- Kontaktdaten:
Re: Einbindung der ArtNetLib in C#
Hallo,
einiges wurde ja schon erklärt. Hier nur ein paar kurze Hinweise:
"ArtNET_SetChannel" erlaubt das Ändern eines einzelnen Kanalwertes im ArtNet-Universum. Es wird zwar das gesamte Universe versendet, aber man kann so sehr einfach Kanalwertänderungen realisieren.
"ArtNET_SendDMXUniverse" ist für eine Änderung von mehreren Kanälen gleichzeitig gedacht. Man übergibt einfach ein ganzes Universe per Pointer.
Das Senden wird bei beiden Funktionen automatisch übernommen. Zusätzlich kann man dann in den Einstellungen noch definieren, dass die Übertragung der Universes per Netzwerk ununterbrochen durchgeführt werden sollen - also nicht nur bei einer Änderung.
beste Grüße,
Christian
einiges wurde ja schon erklärt. Hier nur ein paar kurze Hinweise:
"ArtNET_SetChannel" erlaubt das Ändern eines einzelnen Kanalwertes im ArtNet-Universum. Es wird zwar das gesamte Universe versendet, aber man kann so sehr einfach Kanalwertänderungen realisieren.
"ArtNET_SendDMXUniverse" ist für eine Änderung von mehreren Kanälen gleichzeitig gedacht. Man übergibt einfach ein ganzes Universe per Pointer.
Das Senden wird bei beiden Funktionen automatisch übernommen. Zusätzlich kann man dann in den Einstellungen noch definieren, dass die Übertragung der Universes per Netzwerk ununterbrochen durchgeführt werden sollen - also nicht nur bei einer Änderung.
beste Grüße,
Christian
-
- Lichtchef
- Beiträge: 93
- Registriert: 20.07.2011, 12:41
Re: Einbindung der ArtNetLib in C#
Hallo Christian,
danke für die Aufklärung.
Ich dachte dass man per SetChannel nur pluginintern den Kanal setzt.
Der Rest war soweit klar.
PS: mein Plugin läuft jetzt in den Grundzügen, der PluginLoader für .NET ist soweit fertig
Das Problem war dass du Pointer übergeben hast, aber C#/.NET Delegates erwartet (im Prinzip typisierte Pointer) Ich habs so gelöst dass ich noch eine in Delphi geschriebene DLL eingefügt habe, die deine untypisierten Pointer auf meine Delegaten castet.
@Edgar: Interesse mir zu Helfen bei der Entwicklung von einem Matrix Plugin?
Geschrieben wird in C#/VB.
Grüße, Martin
danke für die Aufklärung.
Ich dachte dass man per SetChannel nur pluginintern den Kanal setzt.
Der Rest war soweit klar.
PS: mein Plugin läuft jetzt in den Grundzügen, der PluginLoader für .NET ist soweit fertig
Das Problem war dass du Pointer übergeben hast, aber C#/.NET Delegates erwartet (im Prinzip typisierte Pointer) Ich habs so gelöst dass ich noch eine in Delphi geschriebene DLL eingefügt habe, die deine untypisierten Pointer auf meine Delegaten castet.
@Edgar: Interesse mir zu Helfen bei der Entwicklung von einem Matrix Plugin?
Geschrieben wird in C#/VB.
Grüße, Martin
Jeglicher Text, den Ihr vor diesen Zeilen lest, ist durch Zufall generiert worden und muss nicht zwingend Sinn ergeben.
Re: Einbindung der ArtNetLib in C#
Hallo
@ Christian
Danke für die näheren Erläuterungen. Ich werde es die Woche mal probieren umzusetzen.
@Martin
Die 2. Möglichkeit habe ich schon veruscht, aber eher mit mäßigem Erfolg. Mein Scheinwerfer zum Test machte sich selbstständig und leuchtete immer dann, wenn er lust und laune hatte
Interesse dir zu helfen hätte ich schon, zur Zeit sieht es ein bisschen knapp mit der Zeit bei mir, muss demnächste meine Diplomarbeit verteidigen. Abe grundlegendes Interesse besteht auf jedenfall. Bin aber nicht der beste Programmierer, mache das auch nur hobbymäßig.
Grüße
Markus
@ Christian
Danke für die näheren Erläuterungen. Ich werde es die Woche mal probieren umzusetzen.
@Martin
Die 2. Möglichkeit habe ich schon veruscht, aber eher mit mäßigem Erfolg. Mein Scheinwerfer zum Test machte sich selbstständig und leuchtete immer dann, wenn er lust und laune hatte
Interesse dir zu helfen hätte ich schon, zur Zeit sieht es ein bisschen knapp mit der Zeit bei mir, muss demnächste meine Diplomarbeit verteidigen. Abe grundlegendes Interesse besteht auf jedenfall. Bin aber nicht der beste Programmierer, mache das auch nur hobbymäßig.
Grüße
Markus
Re: Einbindung der ArtNetLib in C#
Hallo,
da ich nur DMX-Telegramme versenden möchte, sind dafür die Callbackfunktionen notwendig?
Grüße Markus
da ich nur DMX-Telegramme versenden möchte, sind dafür die Callbackfunktionen notwendig?
Grüße Markus
- Christian
- PC_DIMMER-Entwickler
- Beiträge: 1856
- Registriert: 12.11.2007, 09:30
- Wohnort: Knw.-Remsfeld
- Kontaktdaten:
Re: Einbindung der ArtNetLib in C#
Guten Morgen,
nein, die Callback-Funktionen sind nur notwendig, wenn man Daten von der ArtNet-DLL in Richtung des Host-Programmes senden möchte - z.B. für DMX-In. Man braucht also nur folgende Funktionen aufrufen:
ArtNET_Activate(@Dummy, @Dummy);
ArtNET_SetChannel(0, 0, Ch, Value);
und dann sollte es funktionieren. Ggfs. muss man vorher noch mit ArtNET_ShowConfig() die notwendigen Einstellungen vornehmen.
viele Grüße,
Christian
nein, die Callback-Funktionen sind nur notwendig, wenn man Daten von der ArtNet-DLL in Richtung des Host-Programmes senden möchte - z.B. für DMX-In. Man braucht also nur folgende Funktionen aufrufen:
ArtNET_Activate(@Dummy, @Dummy);
ArtNET_SetChannel(0, 0, Ch, Value);
und dann sollte es funktionieren. Ggfs. muss man vorher noch mit ArtNET_ShowConfig() die notwendigen Einstellungen vornehmen.
viele Grüße,
Christian
Re: Einbindung der ArtNetLib in C#
Hallo,
die Einbindung hat soweit funktioniert, großen Dank an Martin. Wenn ich aus C# die Config-Funktion aufrufe, öffnet sich kurz das Konfigfenster mit der Fehlermeldung "Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig (10013')". und dann stürzt das Problem ab.
Sendet da schon etwas auf dem Port?
Gruß Markus
die Einbindung hat soweit funktioniert, großen Dank an Martin. Wenn ich aus C# die Config-Funktion aufrufe, öffnet sich kurz das Konfigfenster mit der Fehlermeldung "Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig (10013')". und dann stürzt das Problem ab.
Sendet da schon etwas auf dem Port?
Gruß Markus
- Christian
- PC_DIMMER-Entwickler
- Beiträge: 1856
- Registriert: 12.11.2007, 09:30
- Wohnort: Knw.-Remsfeld
- Kontaktdaten:
Re: Einbindung der ArtNetLib in C#
Hallo,
ja, der Port sollte bereits nach dem Initialisieren der DLL geöffnet werden. Beim Öffnen des Config-Fensters wird dann ein "Rundruf" also ein Scan nach ArtNet Nodes gestartet. Socket-Fehler 10013 heißt laut MS-Website:
Der häufigste Fehler ist hier, dass der Port bereits auf dem Computer durch ein anderes Programm geöffnet wurde. Hast Du eventuell die DLL zweimal initialisiert?
viele Grüße,
Christian
ja, der Port sollte bereits nach dem Initialisieren der DLL geöffnet werden. Beim Öffnen des Config-Fensters wird dann ein "Rundruf" also ein Scan nach ArtNet Nodes gestartet. Socket-Fehler 10013 heißt laut MS-Website:
Permission denied.
An attempt was made to access a socket in a way forbidden by its access permissions. An example is using a broadcast address for sendto without broadcast permission being set using setsockopt(SO_BROADCAST).
Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4.0 with SP4 and later), another application, service, or kernel mode driver is bound to the same address with exclusive access. Such exclusive access is a new feature of Windows NT 4.0 with SP4 and later, and is implemented by using the SO_EXCLUSIVEADDRUSE option.
Der häufigste Fehler ist hier, dass der Port bereits auf dem Computer durch ein anderes Programm geöffnet wurde. Hast Du eventuell die DLL zweimal initialisiert?
viele Grüße,
Christian
-
- Lichtchef
- Beiträge: 93
- Registriert: 20.07.2011, 12:41
Re: Einbindung der ArtNetLib in C#
Hallo,
also den Code vom Edgar hab ich ja nur ein wenig angepasst und der sieht so aus:
Das ist der Aufrufende Code:
Grüße, Martin
also den Code vom Edgar hab ich ja nur ein wenig angepasst und der sieht so aus:
Code: Alles auswählen
[DllImport("ArtNETlib.dll",BestFitMapping=true)]
public extern static void ArtNET_ShowAbout();
[DllImport("ArtNETlib.dll", BestFitMapping = true, CallingConvention = CallingConvention.StdCall)]
public extern static void ArtNET_ShowConfig();
[DllImport("ArtNETlib.dll", BestFitMapping=true, CallingConvention = CallingConvention.StdCall)]
public extern static void ArtNET_Activate(object a, object b);
[DllImport("ArtNETlib.dll", BestFitMapping = true, CallingConvention = CallingConvention.StdCall)]
public extern static void ArtNET_Deactivate();
Code: Alles auswählen
try
{
ArtNET_Activate(null, null);
ArtNET_ShowConfig();
ArtNET_Deactivate();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Jeglicher Text, den Ihr vor diesen Zeilen lest, ist durch Zufall generiert worden und muss nicht zwingend Sinn ergeben.
- Christian
- PC_DIMMER-Entwickler
- Beiträge: 1856
- Registriert: 12.11.2007, 09:30
- Wohnort: Knw.-Remsfeld
- Kontaktdaten:
Re: Einbindung der ArtNetLib in C#
Hi,
naja, du deaktivierst das Plugin ja sofort wieder:
mit ArtNET_Deactivate(); wird sowohl die Verbindung, als auch das Config-Fenster komplett geschlossen und wieder freigegeben. ArtNET_Deactivate sollte nur beim Beenden des eigenen Programms aufgerufen werden. Den Config-Dialog beendet man in der Regel mit dem dafür vorgesehenen "OK" Button.
beste Grüße,
Christian
naja, du deaktivierst das Plugin ja sofort wieder:
Code: Alles auswählen
ArtNET_Activate(null, null);
ArtNET_ShowConfig();
ArtNET_Deactivate();
beste Grüße,
Christian
-
- Lichtchef
- Beiträge: 93
- Registriert: 20.07.2011, 12:41
Re: Einbindung der ArtNetLib in C#
Hallo Christian,
dadurch dass das ShowConfig ein Dialogfeld ist, bekommt es mit dem Aufruf in .NET die alleinige Priorität, und die Ausführung des restlichen Codes wird solange angehalten, bis der Dialog wieder geschlossen wird.
Von daher wird ArtNET_Deactivate erst _nach_ dem Schließen des Dialogs ausgeführt wird.
Grüße, Martin
dadurch dass das ShowConfig ein Dialogfeld ist, bekommt es mit dem Aufruf in .NET die alleinige Priorität, und die Ausführung des restlichen Codes wird solange angehalten, bis der Dialog wieder geschlossen wird.
Von daher wird ArtNET_Deactivate erst _nach_ dem Schließen des Dialogs ausgeführt wird.
Grüße, Martin
Jeglicher Text, den Ihr vor diesen Zeilen lest, ist durch Zufall generiert worden und muss nicht zwingend Sinn ergeben.