05.06.2013, 13:42
Beitrag #1
|
TSC
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
ReadMB.vi (Größe: 10,44 KB / Downloads: 762)
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
05.06.2013, 15:28
Beitrag #2
|
jg
CLA & CLED
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.
|
|
|
06.06.2013, 08:55
Beitrag #3
|
TSC
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.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
10.06.2013, 13:00
Beitrag #4
|
TSC
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)
|
|
|
10.06.2013, 15:35
Beitrag #5
|
jg
CLA & CLED
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.
|
|
|
11.06.2013, 08:19
Beitrag #6
|
TSC
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!
wireshark.txt (Größe: 12,42 KB / Downloads: 598)
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
11.06.2013, 18:14
Beitrag #7
|
jg
CLA & CLED
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.
|
|
|
12.06.2013, 10:07
Beitrag #8
|
TSC
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!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
12.06.2013, 10:18
Beitrag #9
|
jg
CLA & CLED
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.
|
|
|
12.06.2013, 10:24
|
TSC
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!
Du wirst es hier lesen können!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
| |