[vz-users] DVH 4013 Modbus?

Panterglas panterglas at web.de
Sat Dec 24 21:27:45 CET 2016


Frohe Weihnachten 🎄 

> Am 24.12.2016 um 15:48 schrieb Marc Haber <mh+volkszaehler-users at zugschlus.de>:
> 
> 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