-> Hier kostenlos registrieren
S7-1212C: Fragen zu Modbus/TCP-Kommunikation mittels MB_Client
Guten Tag
Zunächst eine Vorabinformation:
Zur eingesetzten Technik:
Zu den Umständen:
Was möchte ich nun tun?
Was funktioniert bereits?
Welches Problem habe ich?
Vorab Vielen Dank!
Grüße, Xaar.
Guten Tag
Zunächst eine Vorabinformation:
Ich bin noch ein rechter Neuling, was die S7-1200-Serie angeht. In meiner Ausbildung (ist über 8 Jahre her) hatte ich mit dem Step 7 V5.1 und einer S7-300 zu tun. Nach der Ausbildung hatte ich dann auf Arbeit mit Step 7 V5.4 und diversen S7-400 zu tun - allerdings nur zur Störungssuche im Programm, nicht zur Programmierung. Mit der S7-1200 habe ich mich kurz schon befasst, aber mehr als ein paar Ein- und Ausgänge einzulesen bzw. zu setzen ist da auch noch nicht passiert. Was Modbus/TCP angeht, habe ich bisher noch gar keine Erfahrung.
Zur eingesetzten Technik:
- Siemens S7-1212C
- Siemens KTP400 Basic PN
- Siemens TIA-Portal V13 (Step 7 Basic V13, WinCC Basic V13)
- Emerson Smart Wireless Gateway 1420 (Gateway für WirelessHART)
Zu den Umständen:
Hier ist ein WirelessHART-Gateway der Firma Emerson Process Management, was einige Jahre lang im Einsatz war und nun schon eine Weile ungenutzt in der Ecke steht. Da ich mich im Rahmen meiner Abschlussarbeit u. A. mit WirelessHART befassen will, möchte ich mich dahingehend mal etwas einarbeiten. Außerdem ist es eine willkommene Gelegenheit, sich mit dem TIA-Portal auseinander zu setzen.
Was möchte ich nun tun?
Am WirelessHART-Gateway sind einige Sensoren eingerichtet und eingeloggt, deren Prozesswerte auf Modbus-Register gelegt werden können (ist frei konfigurierbar). Diese Register will ich per Modbus/TCP auslesen und auf dem KTP400 darstellen.
Was funktioniert bereits?
An sich klappt die Kommunikation. Mit dem Baustein "MB_Client" kann ich die Register auslesen und lege die Werte auf einen Merkerbereich ab. Ein Beispielnetzwerk habe ich angehangen. Der FC besteht aus mehreren solchen Abfragen, jeweils für ein anderes Register. Die Connect_ID ist im ganzen FC für alle Aufrufe von MB_Client gleich. Die Ablage in einem Datenbaustein habe ich nach vielen Anläufen auch hinbekommen, allerdings bereitet das unten genannte Problem 1 Sorgen.
Welches Problem habe ich?
Nun, eigentlich habe ich zwei Probleme.
Problem 1:
Lese ich mit der S7 Doppelworte (d. h. zwei Modbus-Register) aus, so werden die Daten "verkehrt herum" abgelegt, d. h. im Doppelwort sind die ersten 16 mit den zweiten 16 Bit vertauscht. Aktuell tausche ich die Werte über zwei MOVEs, was aber etwas umständlich ist. Für die Datenablage im Datenbaustein ist das auch nicht praktikabel. Als Anweisung habe ich auch bereits SWAP DWord versucht, aber hier werden ja die Bytes neu angeordnet - so dass es am Ende wiederum nicht passt. Gibt es hier eine Möglichkeit seitens der S7-1200, "Low-Wort" und "High-Wort" zu tauschen?
Problem 2:
Da die Aktualisierungsrate von den Sensoren am Gateway relativ gering ist, möchte ich die Modbus/TCP-Abfragen nicht bei jedem CPU-Zyklus durchführen, sondern nur in bestimmten Intervallen (bspw. alle zwei Sekunden). Hierzu hatte ich testweise den Aufruf des FCs, in dem ich die Kommunikation eingebaut habe, in einen Weckalarm-OB (OB30) gepackt. Leider funktioniert das nicht so - ich bekomme nur von einem MB_Client Daten, die anderen melden immer, dass der Instanz-DB für die Connect_ID belegt ist (MB_Client-Status-Parameter 8200). Welche Möglichkeit besteht hier?
Vorab Vielen Dank!
Grüße, Xaar.
Anhänge
Zuletzt bearbeitet: