TIA Kommunikation S7-1200 - ArtNet

Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich arbeite aktuell an dem Thema, mit meiner S7 1200 ArtNet bzw. DMX ausgeben zu können. Ich habe die ArtNet- Kommunikation bereits einmal aufbauen können. Leider hat diese dann am nächsten Tag komischerweise nicht mehr funktioniert, weil ich wahrscheinlich irgendetwas verstellt habe. Seitdem sitze ich vergeblich daran, diese wieder aufgebaut zu bekommen. Daher meine Frage, ob ihr mir helfen könnt?

Hier ein Überblick über mein Projekt:

Ich habe einen eigenen Datenbaustein DB ("DB_DMX") erstellt, welcher später das zu übertragende ArtNet- Protokoll darstellt.

1766442217812.png



In der Geräteübersicht habe ich meiner CPU eine UDP Broadcast Verbindung hinzugefügt und auch Partner Broadcast Adresse sowie Partner Port eingestellt:

1766442466094.png


1766442566744.png



Im Main (OB1) wird nun der Baustein "TCON" aufgerufen, welcher die Verbindung einmalig initialisiert. Da der TCON Baustein keine Antwort erhält, erhalten wir kein DONE und auch der STATUS bleibt auf 16#7000.

1766442819608.png



Anschließend wird "DMX_Send" ausgeführt. Den SCL Code dessen habe ich euch angehangen.
"TCON_UDP_Done", "TCON_UDP_Req", "TSEND_C_UDP_Done" und "TSEND_C_UDP_Req" darin sind Merker
Den IEC Timer habe ich aktuell ausgehebelt. Dieser war zum timen des sendens gedacht.

1766443232608.png


1766443498612.png



In "DMX_Steuerung" werden die Kanäle mit den entsprechenden Werten auf "DB_DMX" geschrieben.
Also hier als Beispiel:

//--- Send Data Example ---
"DB_DMX".DMX_Data[18] := 255; //Send Data (255) on Channel 1
"DB_DMX".DMX_Data[19] := 100; //Send Data (100) on Channel 2
"DB_DMX".DMX_Data[20] := 100; //Send Data (100) on Channel 3

Der "TSEND_C" sollte dann ständig das ArtNet Protokoll per UDP übertragen.

Leider scheine ich an den Bausteinen "TCON", "TSEND_C" oder "PLC_Send_DB" irgendetwas umgestellt oder angehangen zu haben, weshalb jetzt keine Kommunikation mehr funktioniert. Ich wäre sehr erfreut, wenn mir bei meinem Problem jemand helfen könnte.

PS: Meine CPU besitzt die IP Adresse 192.168.0.1 und der ArtNet Empfänger die Adresse 192.168.0.10. Beide besitzen die gleiche Subnetz Maske 255.255.255.0.
Im ursprünglichen Forenbeitrag zu den Thema scheint sich nichts mehr zu regen, weshalb ich hier ein neues Thema eröffnet habe. Der Link zum anderen Forenbeitrag ist:



Gruß
Nico
 

Anhänge

Mir fällt auf:
Wenn man mit TCON 'ne Verbindung aufbaut, sollte man TSend benutzen und nicht TSend_C. Letzteres baut eine Verbindung auf, semdet und baut die Verbindung wieder ab.

Wenn man so einen Baustein benutzt, muss man den Status immer getriggert durch DONE oder ERROR in eine separate Variable wegschreiben, sonst wird der Wert im nächsten Zyklus überschrieben. ->7000
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Ludewig für deinen Beitrag,

Ich habe es gerade durch erstellen eines neuen Projektes und sauberer Projektierung tatsächlich geschafft, die ArtNet- Verbindung wieder zum laufen zu bekommen:

Die in der Hardware der SPS konfigurierte Verbindung habe ich entfernt, da dies der TCON erledigt.

Habe den TSEND_C durch einen TUSEND ersetzt. Ursprünglich hatte ich den mal eingebaut. Warum genau ich den ausgebaut habe, weiß ich nicht mehr.

Hier meine Änderungen:

1766795078944.png

Der PLC_1_Connection_DB legt sich automatisch nach Auswahl von "Broadcast" und anschließend "Neu" an. Anschließend müssen in diesem Intern folgende Einstellungen getroffen werden:

1766795175281.png

1766795093626.png

Für die Adresse fügt man einen neuen globalen DB hinzu, fügt eine neue Variable mit dem Datentyp "TADDR_PARAM" ein und stellt folgende Werte ein:

1766795329414.png

Das abgeänderte Skript im "DMX_Send" sieht jetzt so aus:

1766795444581.png

Aktuell sendet der TUSEND also ständig ungetimed Daten. Eventuell werde ich das mit dem ungenutzten Timer oben noch ändern.

Hoffe meine Infos helfen denen, die ebenfalls ein solches Projekt angehen möchten.

LG
Nico
 
Was ich nicht ganz verstehe, warum machst du das mit dem TUSEND_UDP_Req?

Code:
If tusend_udp_Req then
tusend_udp_req := false
Else
tusend_udp_req:=true
End_if

Wäre es nicht einfacher so zu schreiben:
Tusend_udp_req := Not tusend_udp_req;

Aber was hat das für einen Sinn? Wenn du eine Anforderung hast nimmst du ihn weg und wenn du keinen hast forderst du an.

Mfg Hannes
 
Ich sehe da auch noch Optimierungspotenzial, aber wenn es läuft?
Ob ma überhaupt und wie oft man einen Broadcast dafür braucht, wäre für mich aber die wichtigste Frage. Bevor man sich eventuell unnötigerweise das Netz zumüllt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber was hat das für einen Sinn? Wenn du eine Anforderung hast nimmst du ihn weg und wenn du keinen hast forderst du an.
Das war nur provisorisch, um ein Taktsignal an den Req- Eingang des TUSEND zu geben. Das werde ich die Tage noch schöner abändern. Eventuell noch mit Timing.

Ich sehe da auch noch Optimierungspotenzial, aber wenn es läuft?
Ob ma überhaupt und wie oft man einen Broadcast dafür braucht, wäre für mich aber die wichtigste Frage. Bevor man sich eventuell unnötigerweise das Netz zumüllt.
Da gebe ich dir recht. Ob man Broadcast dafür braucht, ist fraglich, wenn man die Adresse des Art-Net Empfängers genau kennt.
Da ich neben dem Art-Net Empfänger nur noch eine Profinet- IO Insel angeschlossen habe, sehe ich da noch kein Problem mit dem zumüllen. Habe diesbezüglich auch noch keinerlei Probleme festgestellt.

Welches Optimierungspotenzial siehst du sonst noch?
 
Zurück
Oben