Hallo,
ich bin zurzeit an der Auswertung eines Smart Meters per Raspberry PI.
Leider beruhen meine C + Bus Kentnisse eher im Tryn Error Bereich.
Der Smartmeter (Janitza UMG104) soll per RS485 Modbus ausgelesen werden.
Dazu habe ich ein biliigen RS485-USB Umsetzer am Pi. Als Software habe
ich die Bibilothek Libmodbus dazugezogen (www.libmodbus.org bzw die
Dokumentation unter http://libmodbus.org/docs/v3.0.6/)
Die Anbindung - connect scheinen soweit zu funktionieren (bei
abgezogegen USB erhalte ich die entsprechenden Fehlermeldungen)
Bei dem eigentlichen auslesen als Master komme ich leider nicht weiter.
Fragen:
-Wie muss das auslesen mit dem Aufruf modbus_mapping_new() korrekt
entstehen? Ich komme mit der Dokumentation nicht weiter- Als Beispiel
würde ich gerne das Register 19000 auslesen (das ist die Spannung -
müsste also um die 230 liegen)
-Sollte als Anfänger eher eine andere Bibilothek/ andereren Weg genommen
werden?
Danke!
p.S: Ziel des Projektes sind die Daten in den Volkszähler (Server
bereits aktiv) zu laden.
Aktueller Code - while Schleife zurzeit auskommentiert:
Hi,
ich bin nicht sicher ob ich verstanden habe was du willst aber ich
versuchs mal:
>Sollte als Anfänger eher eine andere Bibilothek/ andereren Weg genommen>werden?
Das passt schon. :-)
Was ich dir noch mitgeben kann, such dir einen MB-Monitor, damit kannst
du die Kommunikation testen. Es gibt viele freie im Netz.
z.B.: http://www.chipkin.com hat einen. (es gibt mehrere Versionen, such
die neuste)
>Bei dem eigentlichen auslesen als Master komme ich leider nicht weiter.
Master stellt nur Daten zur Verfügung!
Also der Janitza UMG104 ist der Master, du (dein PC) ist der Slave, der
muß arbeiten und die Daten abholen!(abfragen)
>Wie muss das auslesen mit dem Aufruf modbus_mapping_new() korrekt>entstehen? Ich komme mit der Dokumentation nicht weiter- Als Beispiel>würde ich gerne das Register 19000 auslesen (das ist die Spannung ->müsste also um die 230 liegen)
modbus_mapping_new ist für die Erstellung eines Masters!
Hier generierst du den Platzhalter für die Register(Informationen) die
von Außen gelesen werden können(auch write möglich).
Im 2 Fall könnte jetzt einer deine 100 H-Register lesen.
Schau bitte im Code nach was der Wert für REGISTERS_ADDRESS ist, den
konnte ich nicht in der Doku finden.
Dieser Satz in der Doku ist für MB wichtig:
1
/* The fist value of each array is accessible from the 0 address. */
leider konnte ich in der Doku zum UMG104 nichts finden!!!
Also im Zweifel die Registeradressen um +- 1 verändern!
Eigentlich willst du doch deinen UMG104 auslesen, oder?
Dazu kannst du das aus der Doku verwenden:
1
modbus_t*ctx;
2
uint16_ttab_reg[64];// <- hier die Registerwerte reinschreiben
Hallo Stephan,
erstmal Danke für die Antwort- ich probiere es gleich mal den Vorschlag
mit modbus_read_registers.
Aber gleich mal eine Verständnisfrage:
Der Modbus Master ist mein PC (in dem Fall ein RPI) der die Slaves
(Umg104 Adresse 1) nach den Registern fragt?
Siehe http://de.wikipedia.org/wiki/Modbus und der Zeichnung anbei
Oder habe ich hier ein gernelles Verständnisproblem?
Weil der Befehl modbus_read_registers liegt bei der Dokumentation unter
clients (slaves)
Danke
Gruß
Peter
Für mich ist der Master(Server), der der die Daten hat.
Der Slave(Client) muß für sein Geld arbeiten, die Daten abholen.
Das Master / Slave kommt eigentlich von der Kundenseite.
Als ich das diesen Erklärt habe, hab ich es auch so rum erzählt.
Ist einfacher zu verstehen. Der Master fragt die Werte an und der Slave
hat zu antworten.
Wenn du dir aber heute, Web Seiten anschaust, die Daten liegen auf dem
Server und die Clients holen sie sich ab!
Vielleicht sollte man(n) heute nur noch von 'MB-Clients' und 'MB-Server'
reden. (neu modischer ;-) )
Ist es besser?
PS: Besser als wiki ist
http://www.modbus.org/specs.php
Hallo,
nach ein bisschen probieren (lezendlich hat ein Abschlussiwderstand
gefehlt -bei 30cm Kabel.. naja) habe ich eine Ausgabe :)
Modbus Master Programm startet...
libmodbus Version:3.0.3
Parameter der Verbindung:
BAUD: 9600
Parity: none
Bits: 8
Stop-Bit: 2
Slave Adresse: 200
Verbindung aktiv
weiter mit 00
in der Schleife
Register gelesen
017258
146344
217258
355525
417258
58426
Ausserhalb der Schleife, Verbindungen werden geschlossen
------------------
(program exited with code: 0)
Press return to continue
Was ich da überhaupt ausgelesen habe und was die Zahlen sagen forsche
ich morgen bei einem Kaffe nach :)
Vielen Dank Stephan mit dem richtigen Hinweis!
Gruß
Peter
Ich weiß der letzte Post ist schon ein 3/4 Jahr her. Aber bevor Andere
über diesen Thread stolpern, möchte ich gerne was richtigstellen.
Zu einem Server kann man auch Slave sagen. Er stellt Daten bereit und
antwortet auf Anfragen vom Client bzw. Master. Der Client/Master hat die
Oberhand, deswegen auch Master. Bzw. auch Client, da ein Client Anfragen
stellt und Daten haben möchte.
Und das ist nicht nur bei Modbus so.