TIA S7-Verbindung mit variabler IP bzw. DNS

tomkai

Level-1
Beiträge
6
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin auf der Suche nach einer Möglichkeit, auf einer 1512SP Daten aus mehreren über WLAN verbunden CPU´s (ebenfalls 1512SP) auszulesen, ohne deren Projektierung zu ändern.
Grundsätzlich wäre hier ja eine S7-Verbindung und die Verwendung von PUT/GET am einfachsten. Da ich aber nicht für jede CPU (tlw. 100 Stk. in Summe) eine Verbindung anlegen möchte und ich auch keine fixe IP für die CPU´s habe, kann ich diesen Weg nicht gehen. Die einzelnen CPU´s haben in manchen Projekten keine fixe IP, sondern bekommen diese über DHCP und sind nur über deren Hostnamen (WLAN-Client, an dem die CPU angeschlossen ist) erreichbar.

Hat hier vl. schon jemand einmal so eine Aufgabe lösen können bzw. gibt es überhaupt eine Möglichkeit, so etwas mit einer SPS zu lösen.

Vielen Dank im Voraus für Eure Beiträge!

BG Tomkai
 
Wenn in den Stationen die du ansprechen möchtest, Put/Get nicht freigegeben ist, dann kannst du darauf auch nicht zugreifen. Ist das nicht der Fall, dann würde das dein Vorhaben schon einmal beenden und du müsstest dort Änderungen vornehmen.

Problem bei den S7-Verbindungen ist, dass diese parametriert werden müssen, und zumindest soweit ich weiß keine Möglichkeit besteht, die angelegten Verbindungen zu modifizieren. Bei Ethernet CPs für die 300/400er lässt sich zumindest mit einer Funktion der Verbindungszustand einer angelegten Verbindung steuern (aufbauen/abbauen), andernfalls versucht automatisch das Betriebssystem die Verbindung aufzubauen.

Man könnte theoretisch das Put/Get auch in Software in der SPS umsetzen, dann bist du unabhängig von den parametrierten Verbindungen. Aber bei einer S7-300 wo ich das schon einmal versucht hatte, ließ sich als Ziel-Port 102 nicht verwenden, andernfalls würde das funktionieren. Ob die 1200/1500er den Port auch noch blockieren wäre zu prüfen.

Zu DNS: Du könntest das DNS Protokoll in Software programmieren und dann die IP zu einem Namen abfragen. Mit entsprechendem Programmieraufwand.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dachte ich mir bereits. PUT/Get ist zwar aktiviert, aber ich brauche eine Möglichkeit die IP-Adresse der Verbindung zu modifizieren, und die gibt es anscheinend nicht. Vielen Dank für Deine rasche Rüme!
 
Dachte ich mir bereits. PUT/Get ist zwar aktiviert, aber ich brauche eine Möglichkeit die IP-Adresse der Verbindung zu modifizieren, und die gibt es anscheinend nicht. Vielen Dank für Deine rasche Rüme!
evtl. nen Router dazwischenschalten, der das macht...

oder nen "portmapper" auf nem PC...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Möglich wäre vermutlich, eine Iso-On-TCP Verbindung die aus dem Programm heraus konfiguriert wird dafür zu verwenden, und das S7-Protokoll eben selber in Software zu schreiben. Wenn die Datenbereiche die du lesen willst immer gleich sind, dann sind das auch alles fixe Daten die man theoretisch als Konstanten ablegen und verschicken könnte.
Wenn ein PC vorhanden ist, dann würde ich das auch alles auf dem PC machen. Mit einer Kommunikationsbibliothek die auch optmierte Datenbausteine lesen kann, bist du zumindest auch sicher, dass du auf alle Steuerungen zugreifen kannst.
 
Man könnte theoretisch das Put/Get auch in Software in der SPS umsetzen, dann bist du unabhängig von den parametrierten Verbindungen. Aber bei einer S7-300 wo ich das schon einmal versucht hatte, ließ sich als Ziel-Port 102 nicht verwenden, andernfalls würde das funktionieren. Ob die 1200/1500er den Port auch noch blockieren wäre zu prüfen.

Die in diesem Beitrag zitierte Masterarbeit lässt darauf schließen, dass zumindest in der S7-1200 der Port 102 als Ziel nicht gesperrt ist.
 
Dadurch, dass schon eine IsoOnTCP-Verbindung als OUC erstellt werden kann, muss das auf jeden Fall gehen. Machts auch insofern einfacher, als dass der Teil dann durchs Betriebssystem gehandelt wird.
 
Würde das gerne wenn dann aus bestimmten Gründen z.B. bei Github hochladen.
Bei ein paar Entscheidungen bin ich mir noch nicht sicher wie ich das am elegantesten umsetze. Z.B. Verbindung nach jedem REQ neu aufbauen, abfragen und trennen, oder verbunden lassen? Ich würde die Schnittstelle möglichst identisch zum normalen Get/Put aufbauen wollen, eben mit zusätzlichen Parametern für die IP und TSAP (Verbindungsressource, Rack/Slot).
Wenn man die IP-Adresse ändern will, dann wäre trennen besser. Aktuell teste ich an einer alten 1200er mit FW2.2, da habe ich das Phänomen, dass der Disconnect nicht richtig arbeitet, bzw. nie fertig meldet. Da weiß ich nicht ob das noch ein Bug in der Firmware ist oder ich einen Fehler drin hab.
 
Die Quick&Dirty Lösung war noch kurz und knapp, aber mit der vollen Funktionalität mit vier Bereichen und allem Drum und Dran wurde der Code doch etwas länger:


Gibt so ein paar Besonderheiten die ich im Kommentar vermerkt habe, aber grundsätzlich arbeitet der fast so wie der integrierte GET.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich jetzt noch gesehen habe ist, dass die 1500er ab Firmware 2.0 Namensauflösung schon von Haus aus unterstützt. D.h. TCP Verbindungen können auch über den Namen aufgebaut werden, zumindest vom Programm aus über die Open User Communication.

Vielleicht lässt sich das irgendwie verwenden um selber auch an die IP zu gelangen, ohne DNS selber programmieren zu müssen. Bei UDP gibt es entsprechende TADDR Strukturen mit Domainnamen, da müsste der Zielrechner aber schon zumindest auf einem UDP Port antworten, damit man die IP-Adresse aus der Antwort auslesen kann.
 
Hallo Thomas,
vielen Dank für den zur Verfügung gestellten Code.
Ich habe den GET_OUC heute mal mit 2 1500er probiert. Eine ISO-ON-TCP Verbindung konnte ich bereits aufbauen. Nach dem Senden des Jobs zum Setup der Kommunikation erhalte ich jedoch ein [ACK] über das TCP-Protokoll und kein [Ack_Data] über S7COMM.
Hättest Du da ev. eine Idee, woran dies scheitern könnte.

1640265278942.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was hast du denn am Parameter REM_TSAP angegeben? Bei der 1500er ist das Rack 0, Slot 1. Verbindungsressource 03, das wäre dann 16#0301.
Genau den habe ich in meiner Konfig übersehen. War noch mit den Startwerten belegt. Funktioniert nun einwandfrei! Vielen, vielen Dank!!
 
Was machst du nun mit der Namensauflösung? Hast du das mit der 1500er mal probiert ob das da mit den OUC-Bausteinen direkt mit dem Namen funktioniert?
Wir haben schon einige Anlagen mit den OUC-Bausteinen und DNS (TCP-TCON mit SDT TCON_QDN) am laufen. Funktioniert soweit einwandfrei. Es ist hier lediglich zu beachten, dass der Name mit einem "." enden muss. zb. "xxxx.net.".
Weiters wurde seitens Siemens mit der S7-1500 Firmware Version 2.8 das Verhalten der Kommunikationsanweisung TCON im Zusammenspiel mit DNS Namensauflösung verändert. Ab FW 2.8 muss der Parameter "interface_id" mit "0" versorgt werden (Parameterbeschreibung in der Onlinehilfe von TIA V16).
 
Zurück
Oben