TIA Kommunikation zwischen S7-1511-1 PN und Modbus MGate 3170

Zuviel Werbung?
-> Hier kostenlos registrieren
mit dieser parametereinstellung wechselt er im sekundentakt die Variable ERROR zwischen true und false. Dabei sind die Werte der Variable Status wechselnd zwischen 16#7004 und 16#8200.

nach einiger Zeit ist er wieder in den Modbus BUSY dauerhaft true und Status 16#7006
 
Zuletzt bearbeitet:
allerdings gibt es ja auch noch die "alte" sps die mit dem moxa kommuniziert. welche connect ID dort verwendet wird, weiß ich nicht.
Welche ID eine andere SPS verwendet, spielt keine Rolle. Die ID muss nur in der eigenen CPU einmalig sein.

0A 03 06 40 00 04 44 2E muss man diese ID nicht auch irgendwo verwerten in dem Datenbaustein?
Nein. Das ist lediglich die Bytefolge der "Abfrage-Sequenz für Slave ID 10 = 0x0A", also der Aufbau des Modbus RTU Request zum Lesen der Halteregister 1600 bis 1603 vom Modbus RTU Slave mit der Busadresse 10, die das Moxa Gateway an den Modbus Slave senden muss.
siehe Handbuch deines Modbus Gerätes oder dein Bild im Beitrag #17.

Die Bytefolge "0A 03 06 40 00 04 44 2E" (alles in hex) bedeutet:
0A = Slave Adresse 10
03 = Modbus Function Code 0x03 Read Holding Registers
06 40 = Startregister 1600
00 04 = Anzahl 4 Register
44 2E = CRC

MB_CLIENT stellt diese Bytefolge (ohne die letzten beiden Bytes (CRC)) aus MB_Unit_ID und den Auftragsparametern MB_MODE, MB_DATA_ADDR, MB_DATA_LEN zusammen und sendet sie an das Moxa Gateway.

Probiere mal das Lesen von Registern über den Moxa mit einem Modbus TCP Test Client, kommt es da auch zu Fehlern? (Modbus Test Tools gibt es viele, auch kostenlose)
Die Firmware deiner SPS-CPU ist aktuell?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry das ich mich jetzt erst melde, ich war auf Dienstreise.
Mit der Restsoftware Simply Modbus TCP haben ein Kollege und ich letzte Woche noch getestet, ob man die Register auslesen kann, mit Erfolg. Wir konnten die Temperatur auslesen.
Allerdings habe ich in diesem Tool auch die Abfrage-Sequenz eingegeben.
Momentan bin ich auch mit dem Siemens Support in Kontakt um weitere Hilfe zu bekomnmen. Ich habe denen mein Projekt geschickt.
 
Ich wollte mich abschließend nur nochmal melden und Bescheid geben, dass die Kommunikation jetzt funktioniert. Der Fehler war die falsche MB_UNIT_ID. Hier war die 255 voreingestellt und in der TIA-Hilfe steht hier auch, dass man diese bei TCP nicht benötigt. Da der Moxa ja aber auch nur ein Umwandler von RTU zu TCP ist, gehe ich davon aus das er die ID für die Zuordnung trotzdem benötigt.
Zick Zack von 255 auf 10 geändert so wie in der PDF des Messgeräts vorgegeben und siehe da, es funktioniert.
Ich bedanke mich trotzdem für die hilfreichen Antworten von euch.
1726145271218.png
 
Ich wollte mich abschließend nur nochmal melden und Bescheid geben, dass die Kommunikation jetzt funktioniert.
Danke für die Erfolgsmeldung und die Angabe der Lösung.

Der Fehler war die falsche MB_UNIT_ID.
darauf hatte ich in meinen ersten 3 Antworten in #2 #4 #6 dreimal hingewiesen und nochmal ausführlich in #25
und die Static-Variable MB_Unit_ID auf den nötigen Wert setzen reicht.
 
Zuletzt bearbeitet:
Hallo Freunde der Automatisierung,
ich hätte doch nochmal eine kleine Frage.
momentan hab ich es ja noch so gelöst, dass das Array of real indem ich meine Messwerte erfasse, an den PTR Ausgang des MB_Client Bausteins geschaltet wird.
Nun ist es ja schön dass das geht, aber das die Daten die über Modbus kommen immer den selben Datentyp haben, ist ja unwahrscheinlich.
Bei meiner nächsten Aufgabe, habe ich genau diesen Fall.
jetzt will ich euch fragen, wie bekomme ich es hin das ich die Daten auslesen kann mit unterschiedlichen Datentypen.
Die Daten kommen so an wie in dem beigefügten Bild gezeigt.
 

Anhänge

  • Funktionsbaustein_FB.PNG
    Funktionsbaustein_FB.PNG
    20,3 KB · Aufrufe: 8
  • PDF_Modbus_Messung.PNG
    PDF_Modbus_Messung.PNG
    206,6 KB · Aufrufe: 8
  • datenbaustein.PNG
    datenbaustein.PNG
    46,9 KB · Aufrufe: 8
jetzt will ich euch fragen, wie bekomme ich es hin das ich die Daten auslesen kann mit unterschiedlichen Datentypen.
Die Daten kommen so an wie in dem beigefügten Bild gezeigt.
Die Antwort steht schon hier in deinem Thema im Beitrag #30:
Liegt dein Datenpuffer an MB_DATA_PTR in einem "optimierten" DB? Dann muss der Datenpuffer ein Array (oder eine einzelne Variable) mit elementaren Datentypen sein.
Bei einem DB mit Standard-Zugriff sind alle möglichen Datentypen und Strukturen möglich. siehe TIA Hilfe zu MB_CLIENT > Parameter MB_DATA_PTR
Also: Erstelle in einem DB mit Standard-Zugriff eine Struktur mit genau den gemischten Datentypen wie der Register-Bereich, den du dann in einem Rutsch liest. Da brauchst du die Bitmuster (WORD) der empfangenen Daten (Registerwerte) nicht noch zusätzlich umständlich (WORD_TO_..., ohne Konvertierung!) in Variablen passenden Datentyps umkopieren.
 
Zurück
Oben