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
(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 (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?
hallo
inwieweit unterscheidet sich dein gewünschtes Art-Net-Protokoll von dem Wago-DMX Programm (Beispiel) ?
Bin noch auf der Suche zu Art-Net habe ich folgendes gefunden:
http://www.delphipraxis.net/topic123317,0,asc,0.html (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.
bei dem Wago->DMX Beispiel-Projekt fehlt die DMXStageProfi_01.lib
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?
Hi
ZitatDarf sie aber hier sicher nicht veröffentlichen?
Peewit hat eine PM :D
Auch ich habe eine PM :)
Hallo Peewit
Schau doch mal in den "Development Area" (Entwicklerbereich rein)
Hier habe ich Infos für dich hinterlegt.
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
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
Hallo annD,
ich hab als Controller den 750-8202 und das Programm ist mit Codesys 2.3 erstellt.
Gruß
barthezz
barthezz,
du hast eine PM ;-)
Gruß
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 (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
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]
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
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]
ZitatGerne 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.
Die Bytes im Sendebuffer bleiben erhalten da sie vom ip_control nicht verändert werden
Wenn ich diesen Teil vom Buffer nur einmal beschreiben möchte, wo müsste ich das machen? Derzeit geschieht es bei jedem Senden - wenn ich es außerhalb der IF-Abfrage mache, dann geschieht es bei jedem Zyklus. Muss ich mir dafür eine zusätzliche Abfrage machen, ob die Daten schon im Puffer stehen und nur bei Unterschied beschreiben? Es soll ja nur beim ersten Aufruf geschehen. Am Schönsten wäre, wenn ich es bereits bei der Variablendeklaration befüllen könnte.
am bausteinanfang das einfügen
IF init = false THEN
init := TRUE;
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*)
END_IF;
Super, danke. Ich habe die Änderung erfolgreich übernommen.
Ich hätte noch eine kleine Frage zum IP_CONTROL2: Ich erhalte nach einem neuen Download bzw. nach einem Reset den Error 33554432 (decimal) bzw. 16#02000000 (hexadecimal). In der Doku habe einen systemspezifischen Fehler (Codesys) "SysSockBind nicht erfolgreich ausgeführt" herausgelesen. Lässt sich das irgendwie vermeiden? Nach einem Neustart der Steuerung läuft alles wieder normal.
Gruß annD