INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Modbus TCP/IP - Register lesen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

05.06.2013, 13:42
Beitrag #1

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Modbus TCP/IP - Register lesen
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


11.0 .vi  ReadMB.vi (Größe: 10,44 KB / Downloads: 761)

   

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.06.2013, 15:28
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP/IP - Register lesen
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.06.2013, 08:55
Beitrag #3

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
RE: Modbus TCP/IP - Register lesen
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

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.06.2013, 13:00
Beitrag #4

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
RE: Modbus TCP/IP - Register lesen
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.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.06.2013, 15:35
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP/IP - Register lesen
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.06.2013, 08:19
Beitrag #6

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
RE: Modbus TCP/IP - Register lesen
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!

0.0 .txt  wireshark.txt (Größe: 12,42 KB / Downloads: 598)

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.06.2013, 18:14
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP/IP - Register lesen
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2013, 10:07
Beitrag #8

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
RE: Modbus TCP/IP - Register lesen
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

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2013, 10:18
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP/IP - Register lesen
(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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2013, 10:24
Beitrag #10

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
RE: Modbus TCP/IP - Register lesen
(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!

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Wago 750-652 Modbus Register Klas 3 8.243 28.07.2015 07:50
Letzter Beitrag: Klas
  Modbus TCP Honeywell HC900-- Kein Schreiben in Register.. labviewnick 7 6.944 06.09.2012 08:36
Letzter Beitrag: labviewnick
  Modbus TCP MrChipsy 1 5.939 26.06.2012 06:33
Letzter Beitrag: NWOmason

Gehe zu: