TIA Modbus TCP MB_CLIENT Zugriff auf Coils

Beiträge
9.191
Reaktionspunkte
2.936
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
hat jemand Erfahrung wie sich der MB_CLIENT Baustein verhält bzw. parametriert werden muss, wenn ich Coils lesen/schreiben möchte?

Ich würde z.B. um 32 Ausgangsbits ab Adresse 100 zu lesen, MB_MODE=101, DATA_ADDR=100 und DATA_LEN=32 setzen. Die 32 hier wegen der Zählung in Bits (vermutlich)?
Als Zieladresse am MB_CLIENT an DATA_PTR habe ich einen nicht-optimierten DB in dem ich ein Array of Word habe. Werden dann die 32 Bits in den ersten beiden Words des Arrays eingetragen?

Ich habe bisher immer nur Halteregister gelesen/geschrieben, da ist die Transportgröße ja 1 Word. Auch die Siemens-Beispiele zeigen immer nur Halteregister.
 
Guten Morgen,

deine Parameter Data_Addr und Data_Len (32 ist richtig wenn du 32 Bits lesen möchtest) sehen so erstmal gut aus. Es kann nur sein das du den Parameter MB_Mode auf 0 setzen muss. Es sollte eigentlich in beiden Fällen der Modbus Funktionscode 01 verwendet werden, hatte aber schon Fälle bei den es nicht funktionierte. Keine Ahnung warum, bin ich nicht hinter gestiegen... Ich teste dies meistens einfach schnell aus....

Bezüglich der Ausgabe bzw. dem Zielbereich auf deiner CPU, wenn du Coils/Bits via MB_Client lesen möchtest, muss du diese in ein Array[0..XX] of Bool schreiben.


Gruß
Markus
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Bezüglich der Ausgabe bzw. dem Zielbereich auf deiner CPU, wenn du Coils/Bits via MB_Client lesen möchtest, muss du diese in ein Array[0..XX] of Bool schreiben.
Das mit dem Funktionscode kann ich später noch schnell anpassen. Aber das mit dem Bool-Array wäre unglücklich, da ich in einer Schrittkette 10 verschiedene Bereiche durchgehe, und an meinem MB-Client bisher zumindest ein festes Word-Array an DATA_PTR parametriert ist. Den Any-Zeiger kann ich ja nicht in einer Schrittkette umschalten. Das mit dem Bool-Array geht so auch nicht aus der Dokumentation hervor, aber man könnte es eventuell vermuten, auch wenn es nicht unbedingt notwendig ist.
 
Nochmal aus der Doku zum MB_CLIENT aus TIA V16:
Parameter MB_DATA_PTR (S7-1200, S7-1500)
  • Dabei können Sie bei allen Modbus-Funktionen sämtliche unterstützten Datentypen verwenden. MB_CLIENT kann z. B. ein empfangenes Bit auch in eine Variable vom Typ Byte auf eine vorgegebene Adresse schreiben, ohne andere Bits in diesem Byte zu verändern. Man muss also nicht zwingend ein Array von Bits haben, um die bitorientierten Funktionen ausführen zu können.
  • Wenn man als Speicherbereich einen Merkerbereich oder einen Global-DB mit Standardzugriff verwendet, besteht für MB_DATA_PTR keine Einschränkung mehr auf die elementaren Datentypen; MB_DATA_PTR kann dann auch auf komplexe Datenstrukturen wie PLC-Datentypen (UDTs) und Systemdatentypen (SDTs) verweisen.

Man könnte es auch so verstehen, dass es bei einem "nicht optimierten" DB egal ist wie der Datenbaustein deklariert wurde, nur ob dann das erste Coil in "MB_Register_DB".RegisterWord[0].%X0 landet?
 
Da geb ich dir recht, dann müsste es auch in ein Array of Word etc. gehen.
Ich habe dies noch nie getestet, habe bislang immer Array of Bool verwendet. Geb mal eine Rückmeldung wenn es geht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wird noch zwei Wochen dauern zur Inbetriebnahme. Bin schon gespannt wo ich sonst noch an Bit-, Byte- und Word-Reihenfolgen drehen muss. So ganz sicher bin ich mir mittlerweile selber nicht mehr, wann das wo bei optimierten oder nicht-optimierten Datenbausteinen ankommt.
 
Zurück
Oben