[vz-users] DVH 4013 Modbus?
Marc Haber
mh+volkszaehler-users at zugschlus.de
Sat Dec 24 15:48:41 CET 2016
Hallo Frank, hallo Liste,
On Thu, Dec 22, 2016 at 09:54:42AM +0100, Frank Richter wrote:
> ich war ungeduldig und hab mir einfach einen DVH4013 bestellt.
Hehe ;-)
Meiner wurde inzwischen getauscht, funktioniert jetzt unter Windows
(aber seltsamerweise mit 8n1, nicht wie von Dir beobachtet 8e1), aber
unter Linux mit mbrtu ist nach wie vor nix.
Der Support der DZG ist vorbildlich. Geduldig, erklärt die Dinge auf
Augenhöhe, wirft nicht mit Textbausteinen. Gegenüber diesem Pluspunkt
steht die abgrundtiefe Dokumentation, die wichtige Dinge wie die
RS485-Adresse unterschlägt und in anderen Punkten schlicht inkorrekt
ist und die Tatsache, dass man die Windows-Software für den Zähler
erst auf Nachfrage erhält.
> * Der DVH4013 spricht 9600 8E1. Die Baudrate lässt sich verändern, die
> ungewöhnliche Parity wohl nicht.
Interessanteweise muss ich die Schnittstelle im Gerätemanager (!) auf
9600 8_N_1 einstellen, damit die Windows-Software funktioniert. Mit
mbrtu muss es jedoch -pE (mit _zwei_ Stoppbits) sein, damit der Zähler
überhaupt mit etwas antwortet.
> * Die Modbus-Slave-Adresse berechnet sich aus den letzten beiden Stellen
> der Seriennummer + 1. Dabei wird Ziffer für Ziffer behandelt, es erfolgt
> keine Umrechnung dezimal zu hex. Beispiel: Meine Seriennummer endet mit 38,
> daraus wird das Adressbyte 0x39 = 57, nicht wie man auch erwarten könnte
> 0x27 = 39!
Eiwei. Das hätte ich in dieser Form niemals geraten.
Andererseits, Seriennummer 46 führt zu Adresse 0x47,
> * Der DVH4013 erwartet zur Abfrage der Modbus-Register function code 03
> (output holding register), im Gegensatz zum Eastron SDM630, der function
> code 04 (input register) verwendet.
Auch das hätte ich vermutlich erst im wilden ausprobieren
herausgefunden. Überraschung.
> Nachdem ich das alles aussortiert hatte, konnte ich den Zähler mit Python
> (lib: MinimalModbus), mbrtu (lib: libmodbus) und auch per Arduino (lib:
> ModbusMaster) zumindest rudimentär auslesen. Hier die zugehörigen
> Codeschnipsel:
>
> * Python:
> #!/usr/bin/env python
> import minimalmodbus
> minimalmodbus.TIMEOUT = 1
> # port name, slave address (in decimal)
> dvh4013 = minimalmodbus.Instrument('/dev/ttyUSB0', 57, mode='rtu')
> dvh4013.serial.baudrate = 9600
> dvh4013.serial.parity = minimalmodbus.serial.PARITY_EVEN
> # Zaehlerstand 1.8.0
> print dvh4013.read_long(0x4000)
minimalmodbus scheint es für Debian noch nicht zu geben. In Debian
gibt es:
python-pymodbus/unstable,unstable,testing,testing 1.2.0+git20151013-1 all
full Modbus protocol implementation
Die scheint aber nicht so toll im Bereich RTU zu sein, richtig?
> * mbrtu:
> mbrtu -d/dev/ttyUSB0 -b9600 -pE -a57 -f3 -tint -n2 -r0x4000
> mbrtu ist Stand heute allerdings nicht wirklich für den Zähler geeignet, da
> es nichts mit den 32--bit-Integern anzufangen weiß. Außerdem treten in
> meinem Setup öfters Timeouts auf, die ich via Python nicht bekomme.
1 [2/892]mh at drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pE -s1 -D -a0x47 -f3 -tint -n2 -r0x4000
ADDR=71 FUNC=3 REG=16384 CNT=2
Opening /dev/ttyUSB0 at 9600 bauds (E, 8, 1)
[47][03][40][00][00][02][DF][6D]
Waiting for a confirmation...
<00><03><04><00><00><0D><70><D8><83>
ERROR CRC received 0xD883 != CRC calculated 0xEF87
ADDR=71 REG=16384 ERROR: Invalid CRC
1 [3/893]mh at drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pE -s2 -D -a0x47 -f3 -tint -n2 -r0x4000
ADDR=71 FUNC=3 REG=16384 CNT=2
Opening /dev/ttyUSB0 at 9600 bauds (E, 8, 2)
[47][03][40][00][00][02][DF][6D]
Waiting for a confirmation...
<00><03><04><00><00><0D><70><D8><83>
ERROR CRC received 0xD883 != CRC calculated 0xEF87
ADDR=71 REG=16384 ERROR: Invalid CRC
1 [4/894]mh at drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pN -s2 -D -a0x47 -f3 -tint -n2 -r0x4000
ADDR=71 FUNC=3 REG=16384 CNT=2
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 2)
[47][03][40][00][00][02][DF][6D]
Waiting for a confirmation...
ERROR Connection timed out: select
ADDR=71 REG=16384 ERROR: Connection timed out
1 [5/895]mh at drop:~ $ 1 [5/895]mh at drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -D -a0x47 -f3 -tint -n2 -r0x4000
ADDR=71 FUNC=3 REG=16384 CNT=2
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1)
[47][03][40][00][00][02][DF][6D]
Waiting for a confirmation...
ERROR Connection timed out: select
ADDR=71 REG=16384 ERROR: Connection timed out
1 [6/896]mh at drop:~ $
Zusammengefasst: Wenn der Zähler antwortet ist die CRC verkehrt, und
er antwortet mit 9600 8E1 und 9600 8E2.
> * Arduino:
> auf Anfrage, keine Ahnung ob das hier jemand interessiert
Das würde mich interessieren, wenn man den Arduino irgendwie dazu
kriegt, selbständig den Zähler alle Minute zu pollen und einen Teil
Daten, z.B. eine halbe Stunde, zu puffern, wenn das eigentliche
Speicherbackend mal nicht da ist (z.B. für Updates oder im
Störungsfall). Aber das ist für mich nur die kür, das hat im Moment
geringste Priorität.
> Vorteile gegenüber dem Eastron SDM630 sehe ich vor allem in den
> phasensaldierenden Registern für Bezug und Einspeisung und möglicherweise
> in der Mehrtarif-Fähigkeit, falls jemand sowas sucht.
> Nicht vorhanden sind wohl Blind- und Scheinleistung, halte ich aber für
> entbehrlich.
Ohne jetzt den SDM630 in der Hand gehabt zu haben, sieht er auch
größer aus als der DVH4013, was vielleicht den Anschluß in der
Unterverteilung schwierig machen könnte. In der Beschreibung stand
auch eine Warnung vor den Klemmen, bei denen man wissen möchte, wie
fest man sie anziehen darf, bevor sie "ab" sind. Bei einer potenziell
mit > 40A belasteten Verbindung möchte ich sowas eigentlich nicht haben.
Die Klemmen des DVH4013 hingegen machen mir einen recht guten Eindruck.
Hier noch ein Mitschnitt einer erfolreichen Kommunikiation der
Windows-Software des Zählers mit dem Zähler. Vielleicht wirdda jemand
schlauer als ich.
[10/908]mh at drop:~ $ hexdump zaehler.bin
0000000 0347 1309 d006 75a0 47e7 1303 200c 3380
0000010 ac01 7430 8435 0d47 0622 2010 7960 47e7
0000020 2303 200e 5384 0f21 ff7b 0347 0201 9004
0000030 5930 47eb 0103 200e 0080 d601 ffdb 0d47
0000040 0302 9004 afb0 47fb 0303 200e 0d80 d870
0000050 ff09 0d47 0d02 2018 3f60 47ad 2303 200e
0000060 0580 ef01 e11f 0347 2381 9006 8e30 47f5
0000070 0103 600e 0200 e393 ff4d 0547 3302 9004
0000080 c4b0 47fe 2303 200e 0280 e3a0 47ef 0205
0000090 0c43 3090 f5ed 0347 0e01 8020 a902 2ee3
00000a0 47ff 020d 1848 6020 db6d 0347 0e23 8020
00000b0 0100 dbd6 47ff 0a0d 1009 6020 f92b 0347
00000c0 0e01 8020 5b0a 1e6d 47c6 0a0d 0612 b090
00000d0 fd8b 0347 0e23 8020 ce02 035d 47ff 0a0d
00000e0 0c22 b090 f90a 0347 0e23 8020 9802 ebdd
00000f0 47fe 0503 0432 3090 fa06 0347 1e01 0040
0000100 9902 aee3 0347 4205 9006 69b0 47e5 2303
0000110 200e 0280 dd8c fe93 0347 8201 9006 79b0
0000120 47da 0103 200e 0380 eb01 fa09 0d47 2402
0000130 8008 4d60 47ea 0303 200e c380 d683 e7b4
0000140 0747 a402 2010 f560 47af 2303 600e 0080
0000150 d601 ffdb 0d47 4402 2018 5160 479b 2303
0000160 401e 5a00 675b d735 0d47 c402 2010 8360
0000170 47ae 0103 200e 0080 d601 ffdb 0d47 c802
0000180 2010 c960 47ac 2303 200e 0080 d601 ffdb
0000190 0347 7201 9006 75b0 47d7 2303 200e 0080
00001a0 d601 ffdb 0347 4201 9006 49b0 47f3 2303
00001b0 200e 0080 d600 ffdb 0d47 3622 500c 6f60
00001c0 4796 1303 20ce 3280 ff2b 0d47 0c22 2010
00001d0 7960 47e7 0103 200e 5384 0701 47e7 0103
00001e0 0402 3090 eb59 0347 0e23 8020 0100 dbd6
00001f0 47ff 020d 1005 6020 fbaf 0347 0e01 8020
0000200 700d 1bd8 47ff 0103 0613 3090 ff6a 0347
0000210 0e23 8020 a305 1fef 47e1 8103 0623 3090
0000220 f58e 0347 0e23 8060 9302 4de3 47ff 0103
0000230 0433 b090 f3c4 0347 1e01 0040 a002 efe3
0000240 0347 4301 9004 ed30 47f5 0303 200e 0280
0000250 61a9 ff2e 0347 1201 9006 6db0 47db 2303
0000260 200e 0080 d601 ffdb 0347 0205 9004 2b30
0000270 47f9 2303 600e 0a80 6d5b c61e 0347 1205
0000280 9006 8bb0 47fd 0303 200e 0280 5dce ff03
0000290 0d47 220a 900c 0ab0 47e5 2303 600e 0280
00002a0 dd98 fee1 0347 3205 9008 0630 47fa 0103
00002b0 401e 0200 6199 47ae 0a05 0642 b090 e569
00002c0 0347 0e01 8020 8c02 93dd 47fe 020d 0c04
00002d0 6020 b479 0347 0e23 8060 0103 5beb 47fa
00002e0 020d 0824 6090 d44d 0347 0e01 8020 03c3
00002f0 b4d6 47e7 0003 0452 3090 f57d 0347 0e01
0000300 0060 0100 dbd6 47ff 020d 1844 6020 9b51
0000310 0347 0e23 8020 015a b967 47ff 0103 0462
0000320 3090 fd41 0347 0e23 8020 0100 dbd6 47ff
0000330 020d 1064 6020 acd5 0347 0e03 8020 0100
0000340 dbd6 47ff 0103 0672 b090 d775 0347 0e23
0000350 8060 0100 dbd6 47ff 020d 1884 6020 f349
0000360 0347 0e23 8060 0100 dbd6 47ff 2206 0c36
0000370 60a0 59bd 0347 ce01 8020 2b32 00ff
000037d
[11/909]mh at drop:~ $
Grüße
Marc
--
-----------------------------------------------------------------------------
Marc Haber | "I don't trust Computers. They | Mailadresse im Header
Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402
Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421
More information about the volkszaehler-users
mailing list