DMX über Ethernet (Art-Net-Node)

Begonnen von McBain2k, 07. März 2010, 17:52:05

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

McBain2k

Hallo habe leider noch keiner Ahnung wie man ein Modul selbst entwickelt, aber folgendes Projekt schwebt mir im Kopf.

Mit einer Wago 750-841 über Ethernet einen DMX-Art-Net-Node ansteuern, an diesen Node hängen dann ganz normale DMX-Komponeneten.

Für eine Wago->DMX Verbindung existiert schon eine Anwendung nur leider nicht mit dem Art-Net-Protokoll.
http://www.wagocatalog.com/okv3/Download_files/Anwendungshinweis_DMX_STAGE_PROFI.zip


Hier noch der Art-Net-Node den ich gerne einsetzen würde:
http://www.dmxcontrol.de/wiki/Art-Net-Node_f%C3%BCr_25_Euro

Ich wäre Dankbar wenn man mir mal eine grobe Richtung für die Entwicklung vorgibt und evtl. etwas unter die arme greifen würde.


eventuell könnte man das anpassen?

peewit

hallo

inwieweit unterscheidet sich dein gewünschtes Art-Net-Protokoll von dem Wago-DMX Programm (Beispiel) ?



McBain2k

Bin noch auf der Suche zu Art-Net habe ich folgendes gefunden:
http://www.delphipraxis.net/topic123317,0,asc,0.html

Das von dem DMX4All-StageProfi ist ein proprietäres Protokoll wozu ich leider noch nichts gefunden hab als den Wagobaustein FbDMX_StageProfi.

peewit

bei dem Wago->DMX Beispiel-Projekt fehlt die DMXStageProfi_01.lib


McBain2k

Was hat sich wago denn da erlaubt?
Als ich damals das Anwendungsbeispiel heruntergeladen habe war die lib noch drin, hab sie also.
Darf sie aber hier sicher nicht veröffentlichen?

gravieren

#5
Hi

ZitatDarf sie aber hier sicher nicht veröffentlichen?
Peewit hat eine PM   :D


Auch ich habe eine PM   :)

gravieren

Hallo Peewit


Schau doch mal in den "Development Area" (Entwicklerbereich rein)


Hier habe ich Infos für dich hinterlegt.


barthezz

Hallo,

würde auch gerne einen ART NET Node per WAGO Controller ansteuern.

Gibt es da mittlerweile einen Baustein? Habe per Google leider nichts gefunden :(

Gruß
barthezz

annD

#8
Hallo barthezz,

auf welcher Version vom Codesys läuft dein System bzw. was ist es für ein Wago-Controller? Ein anderer User hat eine Variante mit Codesys 2.3 bzw. mit e!COCKPIT realisiert. Ich möchte dieselbe Lösung gerne mit dem freiem Codesys 3.5 realisieren. Dabei habe ich noch das Problem, dass ich dort die Wago-Bibliotheken zum Senden über Ethernet (UDP-Befehle) nicht einbinden kann.

Gruß, annD

barthezz

Hallo annD,

ich hab als Controller den 750-8202 und das Programm ist mit Codesys 2.3 erstellt.

Gruß
barthezz

annD


annD

Hallo,

es gibt hier zwei auf Wago-Bibliotheken basierende Versionen zum Senden von Art-Net über Ethernet:
https://www.symcon.de/forum/threads/25156-DMX-lib-f%C3%BCr-Wago-SPS

Könnte man diese Funktionsweise auch mit freien Bibliotheken von Oscat bzw. 3S umsetzen, damit es auf dem aktuellen Codesys 3.5 lauffähig wird?

Gruß annD

annD

Hallo,

ich versuche ein paar Werte per UDP mit dem IP_CONTROL bzw. IP_CONTROL2 zu senden. Ich arbeite zwar mit Codesys v3 - aber z.B. der aktuelle Yahoo_Weather Baustein funktioniert hier auch. Mit dem Beispiel anbei setze ich send auf TRUE und sehe auch bei s_done ein TRUE und keine Fehlermeldung. Im wireshark bzw. auf einem udp-testtool sehe ich aber keine gesendeten Daten. Hat jemand eine Ahnung, wie ich den Fehler eingrenzen bzw. das Senden hinbringen kann?

Als Ziel möchte ich eine Art-Net Zeichenfolge wie folgt senden:
41 72 74 2D 4E 65 74 00 00 50 50 0E 00 00 00 00 02 00 8B 84 00 5E 5C 5D 00 00 00 00 8D 00 8F 90 94 9A 00 00 00 00 00 00 74 00 00 68 69 68 90 8F 8F 8E 00 00 00 00 00 00 00 00 00 06 06 00 E1 E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...

Dabei sind die ersten 18 Werte immer gleich und die Werte ab 8B stehen für die einzelnen DMX-Kanäle (z.B. 8B ist der Kanal 1 mit 139, Kanal 2 mit 132 usw.). Diese Kanäle möchte ich in einem Array ablegen und dann bei Änderung jeweils die Anfangszeichen hinzufügen und per UDP an eine IP-Adresse und Port senden.

Wäre toll, wenn mir jemand auf die Sprünge helfen könnte.

Gruß annD

[gelöscht durch Administrator]

peewit

hallo

1. in den online variablen sieht man
    c_port = 1024
    c_ip = 167772169 = 10.0.0.9

    das entspricht gar nicht dem was man im programm code sieht
    es muss wohl in deinem programm etwas geben das diese werte ausgibt !

2. du parametrierst den IP_CONTROL zum teil über die Datenschnittstelle aber auch direkt über den IP_CONTROL
    das verwirrt eher als das es etwas nützt
    ich empfehle dir nur über die datenschnittstelle zu arbeiten !


du kannst dir ja mal den baustein SNTP_CLIENT ansehen
der arbeitet auch mit udp protokoll
dann hast du schon einen funktionierenden rahmen den du auf deine bedürnisse anpassen kannst

annD

Hallo,

ich habe hier ein funktionierendes Modul zum Senden von DMX-Werten über Art-Net an ein beliebiges Art-Net-Node. Es prüft eine globale Variable mit den DMX-Werten und sendet diese bei Veränderung an eine bestimmte IP-Adresse. Ich habe es hier mal mit 100 Kanälen erstellt - sollte aber mit allen 512 Kanälen genauso laufen. Für Verbesserungsvorschläge bin ich gerne offen:

PROGRAM DMX_SEND
VAR
   IP_CONTROL1:oscat_network.IP_CONTROL2;
   IP_C1:oscat_network.IP_C;
   S_BUF1: oscat_network.NETWORK_BUFFER_SHORT;
   R_BUF1: oscat_network.NETWORK_BUFFER_SHORT;
   send : BOOL;
   i: INT;
END_VAR

FOR i := 18 TO 118 DO (*prüfen ob sich die DMX-Werte in der globalen Variable geändert haben*)
   IF GVL.DMX[i-17]<>S_BUF1.BUFFER THEN
      S_BUF1.BUFFER := GVL.DMX[i-17]; (*wenn sich etwas geändert hat, dann in den Puffer kopieren und senden*)
      send := TRUE;
   END_IF
END_FOR

IF send THEN
   IP_C1.C_MODE := 3;
   IP_C1.C_ENABLE := TRUE; (* Verbindungsaufbau freigeben *)
   IP_C1.TIME_RESET := TRUE;
   IP_C1.R_OBSERVE := FALSE; (* Datenempfang überwachen *)
   IP_C1.C_IP:=oscat_network.IP4_DECODE('10.0.0.90');
   IP_C1.C_PORT := WORD#6454;
   S_BUF1.BUFFER[0] := BYTE#16#41; (*DMX-Kopfzeichen in den Puffer schreiben*)
   S_BUF1.BUFFER[1] := BYTE#16#72;
   S_BUF1.BUFFER[2] := BYTE#16#74;
   S_BUF1.BUFFER[3] := BYTE#16#2D;
   S_BUF1.BUFFER[4] := BYTE#16#4E;
   S_BUF1.BUFFER[5] := BYTE#16#65;
   S_BUF1.BUFFER[6] := BYTE#16#74;
   S_BUF1.BUFFER[7] := BYTE#16#00;
   S_BUF1.BUFFER[8] := BYTE#16#00;
   S_BUF1.BUFFER[9] := BYTE#16#50;
   S_BUF1.BUFFER[10] := BYTE#16#50;
   S_BUF1.BUFFER[11] := BYTE#16#0E;
   S_BUF1.BUFFER[12] := BYTE#16#00;
   S_BUF1.BUFFER[13] := BYTE#16#00;
   S_BUF1.BUFFER[14] := BYTE#16#00;
   S_BUF1.BUFFER[15] := BYTE#16#00;
   S_BUF1.BUFFER[16] := BYTE#16#02;
   S_BUF1.BUFFER[17] := BYTE#16#00; (*die folgenden DMX-Kanäle wurden schon in den Puffer geschrieben*)
   S_BUF1.SIZE :=118;
   send := FALSE;
END_IF;

IP_CONTROL1(TIME_OUT:=T#1S,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1);

Gerne würde ich noch die ersten 18 Werte im Sendepuffer fix vorbelegen und nicht bei jedem Senden neu schreiben. Das habe ich aber noch nicht hinbekommen.

Gruß annD


[gelöscht durch Administrator]