Benutzer-Werkzeuge

Webseiten-Werkzeuge


pqplus_cmd68-52

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
pqplus_cmd68-52 [2020/02/13 09:35] – [Test der Kommunikation] pqpluspqplus_cmd68-52 [2020/02/21 19:00] – [Hardware] pqplus
Zeile 8: Zeile 8:
   * KDK Dornscheidt PRO380-S-CT Mod   * KDK Dornscheidt PRO380-S-CT Mod
 ===== Hardware ===== ===== Hardware =====
-Getestet wurde die Modbus-Kommunikation mit dem USB-RS485 Konverter DIGITUS DA-70157 und einem Raspberry Pi 2B. Am RS485 Konverter wurden folgende Widerstände angeschlossen+Getestet wurde die Modbus-Kommunikation mit dem USB-RS485 Konverter DIGITUS DA-70157 und einem Raspberry Pi 2B. Am RS485 Konverter wurden Pull-up und Pull-down Widerstände mit je 820Ω angeschlossen. Die für den Pull-up Widerstand benötigten 5V stellt der RS485 Konverter selbst zur Verfügung. Zusätzlich sind am RS485 Konverter und am Energiezähler je ein 120Ω Abschlusswiderstand angeschlossen. GND und +5V können nicht mit dem PQ Plus CMD 68-52 verbunden werden. 
-  * +5V - RS485+: 820Ω +=== Anschluss direkt am Sub-D Stecker des DIGITUS DA-70157=== 
-  * RS485+ - RS485-: 120Ω + 
-  * RS485- - GND820Ω +{{:hardware:channels:rs485_mit_da-70157_d-sub.png?600|}} 
-Ein weiterer 120Ω Widerstand ist am Energiezähler zwischen den Klemen A und B angeschlossen.+ 
 +=== Anschluss an den Klemmen des mitgelieferten Adapters=== 
 + 
 +{{:hardware:channels:rs485_mit_da-70157_klemmen.png?600|}} 
 + 
 + 
 + 
 +===== Einstellungen am Energiezähler ===== 
 +Diese Beschreibung gilt für folgende Einstellungen am Energiezähler: 
 +  * Baud rate: 9600 
 +  * Parity: None 
 +Die Anzahl der Stopbits ist nicht einstellbar (immer 1). 
 + 
 +===== Softwareinstallation ===== 
 +==== libmodbus ==== 
 +Es wird mindestens Version 3.1.3 von libmodbus benötigt. Wenn diese oder eine neuere Version bereits in der Distribution enthalten ist, können libmodbus und libmodbus-dev einfach über die Paketverwaltung installiert werdenSonst muss die auf [[http://wiki.volkszaehler.org/hardware/channels/meters/power/eastron_sdm630_modbus|Eastron SDM 630]] beschriebene manuelle Installation durchgeführt werden. 
 +==== mbrtu ==== 
 +<code> 
 +cd ~ 
 +git clone https://github.com/gitaeuber/mbrtu 
 +cd mbrtu 
 +make 
 +sudo make install 
 +</code>
 ===== Test der Kommunikation ===== ===== Test der Kommunikation =====
 Beispiel für das Auslesen eines Wertes im Hex Format: Beispiel für das Auslesen eines Wertes im Hex Format:
 <code> <code>
-mbrtu -d/dev/ttyUSB0 -b9600 -pE -s1 -a1 -f3 -thex -n1 -r0x1060+mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -thex -n1 -r0x1060 
 +</code> 
 +Liefert dieses Ergebnis: 
 +<code> 
 +ADDR=1 REG=4192 DATA=0x5
 </code> </code>
 Beispiel für das Auslesen eines Wertes im Float Format: Beispiel für das Auslesen eines Wertes im Float Format:
 <code> <code>
-mbrtu -d/dev/ttyUSB0 -b9600 -pE -s1 -a1 -f3 -tF32_dcba -n2 -r0x2008+mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -tF32_dcba -n2 -r0x2008
 </code> </code>
 +Liefert die Netzspannung von L1:
 +<code>
 +ADDR=1 REG=8200 DATA=231.20
 +</code>
 +^Parameter ^Beschreibung^
 +|-d/dev/ttyUSB0|USB-RS485 Konverter|
 +|-b9600|Baudrate 9600. Muss der Einstellung am Energiezähler entsprechen.|
 +|-pN|Kein Parity Bit. Am Energiezähler muss Parity: None eingestellt sein.|
 +|-s1|Ein Stoppbit. Der CMD68-52 verwendet immer ein Stoppbit.|
 +|-a1|Modbus Adresse 1. Der Energiezähler muss auf Adresse 1 eingestellt sein.|
 +|-f3|Function code für das Lesen von Registern.|
 +|-thex|Für das Auslesen von Registern, die hexadezimale Zahlen enthalten.|
 +|-tF32_dcba|Für das Auslesen von Registern, die Werte im Float Format enthalten.|
 +|-n1|Ein 16 Bit Register (für hexadezimale Zahlen)|
 +|-n2|Zwei 16 Bit Register (für Float Zahlen)|
 +|-r0x1060|Messbereich (5A Beim CMD 68-52, tatsächlicher Messbereich hängt vom Stromwandler ab)|
 +|-r0x2008|Spannung von Phase L1|
  
 +Eine Liste der Modbus Register ist auf den letzten Seiten dieses Dokuments: [[https://www.kdk-dornscheidt.de/wp-content/uploads/2017/11/Bedienungsanleitung_KDK_PRO380_4205100Pro_420506Pro_S_Mbus_Modbus_V3_00.pdf|Bedienungsanleitung KDK PRO380]]
 +
 +===== Einbindung über einen vzlogger exec-Kanal =====
 +Das folgende Script ''exec-modbus'' kann über einen vzlogger exec-Kanal angebunden werden. Achtung: Mit diesem Script können nur Werte im Float-Format ausgelesen werden.
 +<code>
 +#!/bin/bash
 + 
 +set -e
 +set -u
 + 
 +usage() {
 +cat <<EOF
 +$0 [options] register ...
 +        -t|--tty
 +        -b|--baudrate
 +        -p|--parity
 +        -s|--stopbits
 +        -a|--addr
 +EOF
 +}
 + 
 +TEMP="$(getopt -n installremote \
 +        -l tty:,baudrate:,parity:,stopbits:,addr: -- \
 +        +t:b:p:s:a: "$@")"
 +eval set -- "${TEMP}"
 + 
 +MBRTU="mbrtu"
 +TTY=""
 +BAUDRATE=""
 +PARITY=""
 +STOPBITS=""
 +ADDR=""
 + 
 +while test "$1" != "--"; do
 +        case $1 in
 +                -t|--tty)
 +                        shift
 +                        TTY="$1"
 +                        ;;
 +                -b|--baudrate)
 +                        shift
 +                        BAUDRATE="$1"
 +                        ;;
 +                -p|--parity)
 +                        shift
 +                        PARITY="$1"
 +                        ;;
 +                -s|--stopbits)
 +                        shift
 +                        STOPBITS="$1"
 +                        ;;
 +                -a|--addr)
 +                        shift
 +                        ADDR="$1"
 +                        ;;
 +        esac
 +        shift
 +done
 +shift
 + 
 +checkparameter() {
 +        PARMNAME="${1:-}"
 +        CONTENT="${2:-}"
 +        if [ -z "${CONTENT}" ]; then
 +                printf "%s must not be empty\\n" "${PARMNAME}"
 +                exit 1
 +        fi
 +}
 + 
 +checkparameter tty "${TTY}"
 +checkparameter baudrate "${BAUDRATE}"
 +checkparameter parity "${PARITY}"
 +checkparameter stopbits "${STOPBITS}"
 +checkparameter addr "${ADDR}"
 + 
 +for reg in "$@"; do
 +        NOW="$(date +%s)"
 +        METER="$($MBRTU -d"${TTY}" -b"${BAUDRATE}" -p"${PARITY}" -s"${STOPBITS}" -Q -P -a"${ADDR}" -f3 -tF32_dcba -n2 -r"${reg}" | cut -d\  -f3)"
 + 
 +        if [ -z "${METER}" ]; then
 +                printf >&2 "no data received on modbus\\n"
 +        else
 +                printf "%d: %s = %f\\n" "${NOW}" "${reg}" "${METER:-0}"
 +        fi
 +done
 + 
 +# end of file
 +</code>
 +
 +== Eintrag in vzlogger.conf ==
 +<code>
 +// Meter configuration
 +"meters": [
 +    {
 +     "enabled": true,
 +     "allowskip": true,
 +     "protocol": "exec",
 +     "command": "/home/pi/exec-modbus --tty /dev/ttyUSB0 --baudrate 9600 --parity N --stopbits 1 --addr 0x1 0x2008",
 +                "format": "$t: $i = $v",
 +     "interval": 30,
 +     "channels": [
 +        {
 +            "api": "volkszaehler",
 +            "uuid": "72c65340-4a72-11ea-acb1-d536b07bbb9d",
 +            "identifier": "0x2008",
 +            "middleware": "http://localhost/middleware.php"
 +        }
 +     ]
 +    },
 +]
 +</code>