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
pqplus_cmd68-52 [2020/02/21 19:00] – [Hardware] pqpluspqplus_cmd68-52 [2020/02/21 21:29] (aktuell) – gelöscht pqplus
Zeile 1: Zeile 1:
-====== PQ Plus CMD 68-52 MID ====== 
-Der PQ Plus CMD 68-52 MID ist ein 3-Phasen Energiezähler mit Modbus-Schnittstelle. Hier soll die Kommunikation mit einem Raspberry Pi beschrieben werden. Wahrscheinlich gilt diese Beschreibung auch für diese sehr ähnlichen Energiezähler: 
-  * Inepro PRO380-Mod 
-  * PQ Plus CMD 68-102MID 
-  * Solar-Log PRO380-CT 
-  * Solar-Log PRO380-Mod 
-  * KDK Dornscheidt PRO380 Mod 
-  * KDK Dornscheidt PRO380-S-CT Mod 
-===== Hardware ===== 
-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. 
-=== Anschluss direkt am Sub-D Stecker des DIGITUS DA-70157: === 
  
-{{:hardware:channels:rs485_mit_da-70157_d-sub.png?600|}} 
- 
-=== 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 werden. Sonst 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 ===== 
-Beispiel für das Auslesen eines Wertes im Hex Format: 
-<code> 
-mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -thex -n1 -r0x1060 
-</code> 
-Liefert dieses Ergebnis: 
-<code> 
-ADDR=1 REG=4192 DATA=0x5 
-</code> 
-Beispiel für das Auslesen eines Wertes im Float Format: 
-<code> 
-mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -a1 -f3 -tF32_dcba -n2 -r0x2008 
-</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>