TIA Janitza UMG-604-PRO mit S7 1200 Modbus TCP Client auslesen

manni199

Level-2
Beiträge
9
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Ich versuche gerade ein Janitza UMG604-PRO über eine S7 1200 (Modbus TCP) auszulesen.
Die CPU ist eine S7 1200 G2 (6ES7 212-1AG50-0XB0). Ich nutze TIA Portal V20 Basic.
Dazu hab ich mir einige Tutorials angeschaut. Hab leider keine mit S7 1200 gefunden, die auf ein UMG604 zugreifen.
Dazu reichlich PDF-Handbücher von Janitza und natürlich Siemens.

Mein Problem:
Ich bekomme Verbindung zum UMG604. Es wird '7004' am Ausgang 'STATUS' den Bausteins 'MB_CLIEDNT' angezeigt.
Das bedeutet lt. TIA Onlinehilfe 'Verbindung hergestellt und überwacht. Keine Auftragsbearbeitung aktiv.'
Das ist ja erstmal positiv.
Starte ich jetzt ein Telegram, wird am Ausgang 'STATUS' eine '7006' angezeigt.
'7006' bedeutet lt. TIA Onlinehilfe 'Daten werden empfangen.' Also auch positiv.
Aber es werden keine Daten im EmpfangsDB abgelegt.
Am BUSY-Ausgang wird für gute 5s 'TRUE' angezeigt, parallel zu '7006' am STATUS Ausgang.
Das dauert eindeutig zu lange, aber Fehlermeldungen sind nicht erkennbar.

An den Eingängen MB_MODE, MB_DATA_ADR, MB_DATA_LEN und MB_DATA_PTR hab ich schon alles erdenkliche probiert.
Im ersten Ansatz wollte ich das Register 19000 (Spannung L1-N) lesen.
In den Screenshots hab ich MB_MODE=104 mit MB_DATA_ADR=19000 verwendet, was mir am plausibelsten erscheint. (Dazu MB_DATA_LEN=2 und MB_DATA_PTR=P#DB5.DBX0.0 INT 2).
Ich hab aber auch MB_MODE=0 mit MB_DATA_ADR=419000 (400000+19000) versucht. Auch 419001 (400001+19000) hab ich getestet.

Das ModBus Tool von Janitza (Modbus-Diagnostic_4_2) greift erfolgreich auf das UMG604 zu und zeigt Messwerte wie z.B. die Spannung L1-N (Reg.19000) an (siehe Screenshot).
Ping geht sauber durch, auf UMG604 und SPS. Die SPS 'sieht' also das UMG604.

Hier gibts Doku von Janitza:

Dann hänge ich noch einige Screenshots an.
Die Werte 1,2,3,4 in DB5 habe ich dort abgelegt um zu erkennen falls mir nur Nullen über ein Modbus-Telegramm in DB5 abgelegt werden.
 

Anhänge

  • Screenshot 2025-07-09 103736.png
    Screenshot 2025-07-09 103736.png
    101,1 KB · Aufrufe: 12
  • Screenshot 2025-07-09 103905.png
    Screenshot 2025-07-09 103905.png
    75,7 KB · Aufrufe: 11
  • Screenshot 2025-07-09 103948.png
    Screenshot 2025-07-09 103948.png
    66 KB · Aufrufe: 10
  • Screenshot 2025-07-09 104510.png
    Screenshot 2025-07-09 104510.png
    107 KB · Aufrufe: 9
  • Screenshot 2025-07-09 104610.png
    Screenshot 2025-07-09 104610.png
    81,9 KB · Aufrufe: 9
  • Screenshot 2025-07-09 112456.png
    Screenshot 2025-07-09 112456.png
    38,3 KB · Aufrufe: 9
  • Screenshot 2025-07-09 112537.png
    Screenshot 2025-07-09 112537.png
    102,1 KB · Aufrufe: 9
  • S7 1200 Testprojekt Forum.zip
    S7 1200 Testprojekt Forum.zip
    822,6 KB · Aufrufe: 0
  • Screenshot 2025-07-09 115118.png
    Screenshot 2025-07-09 115118.png
    21,7 KB · Aufrufe: 11
Zuletzt bearbeitet:
Spontan: welche MB_Unit_ID verwendest du für die Abfrage? Ich habe da was im Hinterkopf, dass das UMG 604 die Unit ID 32 verwendet.
(zu MB_Unit_ID im Instanz-DB von MB_CLIENT siehe TIA Hilfe und die Forumsuche)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Spontan: welche MB_Unit_ID verwendest du für die Abfrage? Ich habe da was im Hinterkopf, dass das UMG 604 die Unit ID 32 verwendet.
(zu MB_Unit_ID im Instanz-DB von MB_CLIENT siehe TIA Hilfe und die Forumsuche)
Im DB1 findet sich 16#FF, also 255.
Der DB1 wird aber automatisch generiert, wenn ich 'MB_CLIENT' aufrufe.
MB_UNIT_ID wird auch nirgends als Parameter abgefragt.


Ich hab ihn mal auf 16#20 bzw. 32 gesetzt und getestet.
Das hat keine Verbesserung/Änderung gebracht.
(Mit MB_MODE=0 und MB_DATA_ADR=419000/419001 auch nicht).
 
Zuletzt bearbeitet:
Im DB1 findet sich 16#FF, also 255.
Der DB1 wird aber automatisch generiert, wenn ich 'MB_CLIENT' aufrufe.
MB_UNIT_ID wird auch nirgends als Parameter abgefragt.
nochmal:
(zu MB_Unit_ID im Instanz-DB von MB_CLIENT siehe TIA Hilfe und die Forumsuche)
Mit der Forumsuche solltest du ganz schnell dieses Thema gefunden haben:
Einfach direkt vor einem Kommunikationsauftrag die gewünschte Unit_ID in die Variable MB_Unit_ID im Instanz-DB schreiben.
z.B. im Programm mit MOVE oder in SCL "MB_CLIENT_DB".MB_Unit_ID := 2;


Am BUSY-Ausgang wird für gute 5s 'TRUE' angezeigt, parallel zu '7006' am STATUS Ausgang.
und am Ende des Auftrags erhälts du ein ERROR oder DONE und einen Fehler-STATUS. Die sind nur 1 Zyklus lang - die kannst du also sehr wahrscheinlich gar nicht sehen. Deshalb: wenn ERROR = 1 oder DONE = 1, dann den STATUS auf eine Merk-Variable umspeichern, dann kannst du den Wert beobachten solange bis der nächste Auftrag beendet ist.


Das ModBus Tool von Janitza (Modbus-Diagnostic_4_2) greift erfolgreich auf das UMG604 zu und zeigt Messwerte wie z.B. die Spannung L1-N (Reg.19000) an (siehe Screenshot).
In deinem Bild vom Janitza Tool verwendest du die Unit ID = 1 ("Client Adress"). Also versuche es auch mal bei deinem MB_CLIENT-Auftrag mit MB_Unit_ID = 1


Hintergrund der Unit ID: das Janitza UMG 604 kann auch als Gateway zu Geräten am RS485-Bus des UMG 604 verwendet werden. Wenn auf Geräte an dem RS485 zugegriffen werden soll, dann muss die Busadresse des RS485-Gerätes (z.B. 1 .. 31) als MB_UNIT_ID angegeben werden. Wenn das UMG 604 selbst abgefragt werden soll, dann muß bei MB_UNIT_ID die vom UMG 604 selbst verwendete Unit ID angegeben werden - vermutlich muss die im Gerät eingestellt werden --> siehe Handbuch des UMG 604. Wahrscheinlich habe ich da wegen der Gateway-Funktion immer 32 eingestellt (oder ist das Werkseinstellung?).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Super,
Vielen Dank @PN/DP.
Das hat funktioniert.

Als ich das Programm angesetzt habe, da hab ich mich noch gewundert das der Aufruf von "MB_CLIENT" nicht nach der Geräteadresse fragt.
Denn im Tool von Janitza war die ja anzugeben.
Ich hab mir aber nichts weiter dabei gedacht.

Eigentlich hab ich mir alles durchgelesen.
Der Hinweis, das bei Modbus TCP keine Geräteadresse erforderlich ist, hat mich davon abgehalten weiter zu lesen.
Aber in der TIA Hilfe wird darauf hingewiesen, wenn ich nur weiter gelesen hätte.
(siehe Screenshot)

Vielen Dank noch einmal.

PS: Meine Nominierung für den User des Jahres 2025 hast Du sicher.
:-))
 

Anhänge

  • Screenshot 2025-07-09 150049.png
    Screenshot 2025-07-09 150049.png
    72,9 KB · Aufrufe: 11
Schön dass es nun funktioniert.

Der Hinweis, das bei Modbus TCP keine Geräteadresse erforderlich ist, hat mich davon abgehalten weiter zu lesen.
Aber in der TIA Hilfe wird darauf hingewiesen, wenn ich nur weiter gelesen hätte.
Es ist mir unverständlich, wieso Siemens den Parameter MB_UNIT_ID so versteckt und als "wird nicht verwendet" bezeichnet. Nur damit die Standard MB_CLIENT-Anwender nicht über diesen "unnötigen" Parameter nachdenken müssen und einem Übergabeparameter mehr "irgendwas" zuweisen müssen ... ist das wirklich zu viel verlangt?
Meine Erfahrung: ich kann mich an kein ModbusTCP-Gerät erinnern, was nicht einen bestimmten Wert für MB_UNIT_ID erwartet. Selbst wenn die Geräte gar keine Gateways sind. Meistens wird da der Wert 1 erwartet. Der von Siemens festgelegte Wert 255 passt vermutlich nie (jedenfalls kenne ich kein Gerät, was die 255 erwartet).
 
Hallo Zusammen,

ich habe mit Siemens und Modbus TCP bereits mehrfach die Zähne ausgebissen.
Die "fertigen" Funktionen wie MB_Client / MB_Server sind echt schlecht gemacht.

Alle wichtigen Parameter werden "versteckt", die ID (muss eindeutig sein) nicht verwechseln mit der Unit ID,
Remote IP als hex..., ActivEstablich, UDP/TCP, Remote Port, Local Port, ......
Eine Änderung am Instanz DB, alles wieder auf default, nichts geht mehr, ein Graus.

In der Hoffnung, die von Siemens lesen so was mal,
eine Modbus TCP Anbindung mit der Codesys ist eine Sache von Stunden,
eine Anbindung mit TIA, eine Sache von Tagen....
Beispiel download, Probieren, Support anrufen, hier in Forum suchen, dann von Siemesn Support eine Rückmeldung nach Tagen,
nicht weiterkommen, Wire shark installieren, mithören, Siemens Fehlernummern dann in irgendwelchen Baustein intern verwendeten Funktionen zu finden, wasted Lifetime............

Warum nicht einfach ein paar richtige und funktionierende Beispielprogramme als Download bereitstellen,
so machen es andere Hersteller....

Leid geklagt ;-)
Zum Thema:
255 ist broadcast, die Unit ID ist ein Überbleibsel vom Modbus RTU (RS485),
wird bei Janitza aber bei mehrfach Messstellen (z.B. UMG801) verwendet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
255 ist broadcast, die Unit ID ist ein Überbleibsel vom Modbus RTU (RS485)
255 ist reserviert, Broadcast Adresse ist 0
Die Unit ID ist extra designed für Adressierung von Geräten hinter Gateways oder allgemein zu mehreren Endpunkten unter derselben IP-Adresse
 

Anhänge

  • Modbus_Address.jpg
    Modbus_Address.jpg
    33,8 KB · Aufrufe: 10
  • MBAP_Header_1.jpg
    MBAP_Header_1.jpg
    90,4 KB · Aufrufe: 10
  • MBAP_Header_2.jpg
    MBAP_Header_2.jpg
    106 KB · Aufrufe: 10
Meine Erfahrung: ich kann mich an kein ModbusTCP-Gerät erinnern, was nicht einen bestimmten Wert für MB_UNIT_ID erwartet. Selbst wenn die Geräte gar keine Gateways sind. Meistens wird da der Wert 1 erwartet. Der von Siemens festgelegte Wert 255 passt vermutlich nie (jedenfalls kenne ich kein Gerät, was die 255 erwartet).
Meine bisherige Erfahrung ist genau andersherum, ich nutze eigentlich immer 255 und das erfolgreich, allerdings bei Beckhoff.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Modbus TCP ist, wenn es kein Gateway ist, eigentlich die 255 vorgegeben.

Anhang anzeigen 88989
Hast du mal eine Quelle zu dem von dir gezeigten Dokument?

PS: OK, ich habe es gefunden. Es ist dasselbe Dokument (auf Seite 23), aus dem ich zitiert habe (von Seite 4).
"MODBUS Messaging on TCP/IP Implementation Guide V1.0b"

Die 0xFF (255) ist eine Empfehlung, welchen Wert ein Modbus-Client in seinem Modbus-Request an einen Modbus-Server bei Unit ID eintragen soll, wenn die Unit ID im Server nicht verwendet wird. Und daran hat sich Siemens bei MB_CLIENT gehalten. Für Modbus/TCP-Geräte ist allerdings auch die 0 zulässig.
0xFF is recommended for the “Unit Identifier" as non-significant value.
Remark : The value 0 is also accepted to communicate directly to a MODBUS/TCP device.

PPS: Welchen Wert Hersteller von Modbus/TCP-Geräten für die Unit ID festlegen/erwarten sollen, ist damit nicht gemeint. Hersteller können selbst festlegen was sie wollen. Sie können sogar mehrere Unit IDs im selben Gerät verwenden, um damit verschiedene Dienste/Zugangspunkte/End points adressierbar machen zu können.
Also: der Anwender eines Modbus Clients muss sich in der Dokumentation des Modbus-Gerätes kundig machen, welche Unit ID er verwenden muss, und im Falle von Siemens MB_CLIENT muss er Unit IDs <> 255 direkt in den Instanz-DB eintragen. Empfehlung: mit einer Zuweisung zur Laufzeit (im Programmcode, nicht nur als Aktualwert im TIA-Projekt), damit eine Initialisierung des Instanz-DB keine Probleme für das Programm macht.
 
Zuletzt bearbeitet:
Zurück
Oben