LabVIEWForum.de
Modbus TCP/IP - Register lesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Modbus TCP/IP - Register lesen (/Thread-Modbus-TCP-IP-Register-lesen)



Modbus TCP/IP - Register lesen - TSC - 05.06.2013 13:42

Hallo zusammen,

ich habe hier einen Hardwareprototypen der offensichtlich Modbus-tauglich ist. Als Doku habe ich ein kleines Heftchen mit allen Registern aufgeschlüsselt bekommen. Leider gelingt es mir dennoch nicht irgendwas zu lesen oder gar zu schreiben.

Hier ein kleiner Ausschnitt aus der Doku:
Zitat:Bereich (2 stellig) und Index (2 stellig) ergeben das Modbus-Register: Register = 100 * Bereich + Index

Darauf folgt eine Tabelle (hier die Zeile die ich gerne verwenden/lesen möchte:

Zitat:Bereich: 01-30
Index: 05
R/W/S (Read/Write/SPS-Schreiben): R
Größe: word
RG + ST: Tist [0,01°C]

Ganz am Ende der Doku steht noch was zu den Modbustelegrammen. Allerdings nur für die Serielle Variante.

Es gibt auch ein kleines Tool für die Kommunikation. Dieses funktioniert! Im Anhang findet ihr mein Mini-VI und einen Screenshot vom Fehler. Den Port für die TCP-Verbindung habe ich über Whireshark ausgelesen. Alle anderen Daten die zwischen meinem PC und der Geräte IP ausgetauscht werden, verstehe ich leider nicht.

Was könntet ihr noch an Infos gebrauchen um mich zum Modbus-Leser zu machen?
Danke für alle Tipps und ich bin froh über jede Funktionierende Glaskugel.

Viele Grüße,
Totti

[attachment=44908]
[attachment=44909]


RE: Modbus TCP/IP - Register lesen - jg - 05.06.2013 15:28

Den Port finde ich extrem ungewöhnlich, Standard für Modbus-TCP ist 502. Das schon probiert?

Schon das Lesen von Input-Registern anstatt Holding Register probiert? Input-Register, das sind die Adressen, die du als Modbus-Master nur lesen darfst.

Vielleicht stimmt auch die Unit-ID=1 nicht?!

Gruß, Jens


RE: Modbus TCP/IP - Register lesen - TSC - 06.06.2013 08:55

Den Port habe ich auch erst über Whireshark herausgefunden, da ich zunächst immer mit 502 hantiert hatte. Dabei konnte ich dann aber erst gar keine TCP/IP-Verbindung aufbauen. Den Fehler könnte ich mir natürlich nochmal genauer ansehen und evtl gucken ob ich an der Hardware den Port 502 einstellen kann. Wäre mir auch lieber.

in der Doku für die Serielle Verbindung stand, dass nur die Funktionen 03 (Read Holding Registers), 06 (Write Single Register) und 16 (Write Multiple Registers) implementiert sind. Bin daher davon ausgegangen, dass Lesezugriff dann ja über 03 funktionieren müsste. Ich teste mal ob ich über die Input Register an irgendwas ran komme!

---
Test abgeschlossen:
Ich habe mittlerweile herausgefunden, dass es einen Webserver auf dem Ding gibt über den man den Port umstellen kann. Ich habe ihn also auf 502 gestellt und habe das gleiche Problem. Die Software vom Hersteller musste ich an den Port anpassen und dann lief sie wieder wie gewohnt. In LabVIEW erhalte ich sowohl beim Versuch mit Input Registern als auch mit den Holding Registern den Fehler vom Screenshot.
Die Unit ID 1 ist im Gerät so eingestellt und auch in der Software funktoniert es nur mit der ID 1.

Kurze Info zu der oben erwähnten Berechnung der Register:

der Bereich 1-30 sind Sensoren die an der Unit angeschlossen sein können. Maximal 30 Stück. In der Unit werden die Daten dann gesammelt und man kann sie angeblich über Modbus auslesen. Da ich nur einen Sensor angeschlossen habe, verwende ich den Bereich 1. Das Register ist also: 1*100+5 (5 war der Index für den Wert den ich lesen möchte)

Register = 0105. Und das kann ich auch über die Herstellersoftware so nachvollziehen.

Ich werde mir jetzt mal eine frische ModBus-Bib runterladen. Meine Installation hier ist schon sehr sehr alt und wird über einen Subversion Server verteilt. Vielleicht hat da ja jemand was im inneren verfuscht?!

Weiter Tipps sind gerne gesehen.
Wink


RE: Modbus TCP/IP - Register lesen - TSC - 10.06.2013 13:00

Ein Versuch das Ganz über das DSC-Modul zu Lösen ergab auch nur den Hinweis: Verbindungsproblem.
:-(
Allerdings weiß ich dabei auch nicht, wie ich meine gewünschten Register adressieren kann.


RE: Modbus TCP/IP - Register lesen - jg - 10.06.2013 15:35

Dann musst du doch mal die Wire-Shark-Protokolle analysieren (Schau in VI MB Ethernet Transmit).

So kompliziert ist der Sende String nicht zusammengesetzt. Auf den ersten Blick ist das:
Die ersten sieben Byte sind "Transaction ID", "Protocol ID", Länge & Unit ID.
Dann folgt 1 Byte mit dem Function Code.
Die nächsten 2 Byte sind die Start-Adresse des Abfrage-Bereichs, dann 2 Byte mit der Länge.

Also, Byte 9 & 10 sind die interessanten!!!

Gruß, Jens


RE: Modbus TCP/IP - Register lesen - TSC - 11.06.2013 08:19

Puh,.. okay! Ich blicks immer noch nicht. Die Daten sind offenbar auch über mehrere Pakete verteilt. Habe jetzt mal die Kommunikation mit Whireshark mitgeschnitten. Kann mir das jemand mal konkret zerflücken? Ich steh da echt aufm Schlauch! Schön zu sehen, dass Der Text vom Display an den PC übertragen wird "Heizung -Normal". Aber sonst kann ich nicht erkennen, wo meine gewünschten Daten stehen!
[attachment=44955]


RE: Modbus TCP/IP - Register lesen - jg - 11.06.2013 18:14

Autsch, nach einigen Suchen konnte ich den String
01 03 0f a0 00 44 46 cf
entschlüsseln.

Ganz wichtig: Das verwendete Protokoll ist das Seriell-Protokoll Modbus RTU (nicht Modbus TCP/IP)!

Wenn man das akzeptiert, wird die weitere Suche einfacher:
0x01 = Slave Adresse (also 1)
0x03 = Function Code, also 3, Read Holding Registers.
0x0FA0 = Startadresse, also 4000
0x0044 = Anzahl der angeforderten Adressen, also 68
0x46CF = Checksumme

So, mit diesen Erkenntnissen kommst du hoffentlich weiter.

Gruß, Jens


RE: Modbus TCP/IP - Register lesen - TSC - 12.06.2013 10:07

PUH! Das ist mal was, das hilft mir sicherlich! Wer ahnt schon, dass man über eine TCP-Verbindung das serielle Protokoll verwenden muss?
Ich danke dir vielmals! Ich meld mich dann wieder, wenn ich was erreicht habe!
Wink


RE: Modbus TCP/IP - Register lesen - jg - 12.06.2013 10:18

(05.06.2013 13:42 )TSchAC schrieb:  Ganz am Ende der Doku steht noch was zu den Modbustelegrammen. Allerdings nur für die Serielle Variante.
An dieser Stelle ist mglw. der Hinweis auf das RTU-Protokoll verborgen.

Also, versuch dein Glück mit dem Serial-Master-Beispiel, VISA-Resource ist halt eine TCP/IP-Adresse+Port+???. Das sollte theoretisch funktionieren.

Gruß, Jens


RE: Modbus TCP/IP - Register lesen - TSC - 12.06.2013 10:24

(12.06.2013 10:18 )jg schrieb:  VISA-Resource ist halt eine TCP/IP-Adresse+Port+???
Ich versuche mein Glück und schau, ob ich das irgendwie hin bekomme!
Wink
Du wirst es hier lesen können!