pqplus_cmd68-52
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
pqplus_cmd68-52 [2020/02/21 19:00] – [Hardware] pqplus | pqplus_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: === | ||
- | {{: | ||
- | |||
- | === Anschluss an den Klemmen des mitgelieferten Adapters: === | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | |||
- | ===== 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:// | ||
- | ==== mbrtu ==== | ||
- | < | ||
- | cd ~ | ||
- | git clone https:// | ||
- | cd mbrtu | ||
- | make | ||
- | sudo make install | ||
- | </ | ||
- | ===== Test der Kommunikation ===== | ||
- | Beispiel für das Auslesen eines Wertes im Hex Format: | ||
- | < | ||
- | mbrtu -d/ | ||
- | </ | ||
- | Liefert dieses Ergebnis: | ||
- | < | ||
- | ADDR=1 REG=4192 DATA=0x5 | ||
- | </ | ||
- | Beispiel für das Auslesen eines Wertes im Float Format: | ||
- | < | ||
- | mbrtu -d/ | ||
- | </ | ||
- | Liefert die Netzspannung von L1: | ||
- | < | ||
- | ADDR=1 REG=8200 DATA=231.20 | ||
- | </ | ||
- | ^Parameter ^Beschreibung^ | ||
- | |-d/ | ||
- | |-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:// | ||
- | |||
- | ===== Einbindung über einen vzlogger exec-Kanal ===== | ||
- | Das folgende Script '' | ||
- | < | ||
- | #!/bin/bash | ||
- | |||
- | set -e | ||
- | set -u | ||
- | |||
- | usage() { | ||
- | cat <<EOF | ||
- | $0 [options] register ... | ||
- | -t|--tty | ||
- | -b|--baudrate | ||
- | -p|--parity | ||
- | -s|--stopbits | ||
- | -a|--addr | ||
- | EOF | ||
- | } | ||
- | |||
- | TEMP=" | ||
- | -l tty:, | ||
- | +t:b:p:s:a: " | ||
- | eval set -- " | ||
- | |||
- | MBRTU=" | ||
- | TTY="" | ||
- | BAUDRATE="" | ||
- | PARITY="" | ||
- | STOPBITS="" | ||
- | ADDR="" | ||
- | |||
- | while test " | ||
- | case $1 in | ||
- | -t|--tty) | ||
- | shift | ||
- | TTY=" | ||
- | ;; | ||
- | -b|--baudrate) | ||
- | shift | ||
- | BAUDRATE=" | ||
- | ;; | ||
- | -p|--parity) | ||
- | shift | ||
- | PARITY=" | ||
- | ;; | ||
- | -s|--stopbits) | ||
- | shift | ||
- | STOPBITS=" | ||
- | ;; | ||
- | -a|--addr) | ||
- | shift | ||
- | ADDR=" | ||
- | ;; | ||
- | esac | ||
- | shift | ||
- | done | ||
- | shift | ||
- | |||
- | checkparameter() { | ||
- | PARMNAME=" | ||
- | CONTENT=" | ||
- | if [ -z " | ||
- | printf "%s must not be empty\\n" | ||
- | exit 1 | ||
- | fi | ||
- | } | ||
- | |||
- | checkparameter tty " | ||
- | checkparameter baudrate " | ||
- | checkparameter parity " | ||
- | checkparameter stopbits " | ||
- | checkparameter addr " | ||
- | |||
- | for reg in " | ||
- | NOW=" | ||
- | METER=" | ||
- | |||
- | if [ -z " | ||
- | printf >&2 "no data received on modbus\\n" | ||
- | else | ||
- | printf "%d: %s = %f\\n" " | ||
- | fi | ||
- | done | ||
- | |||
- | # end of file | ||
- | </ | ||
- | |||
- | == Eintrag in vzlogger.conf == | ||
- | < | ||
- | // Meter configuration | ||
- | " | ||
- | { | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | { | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | } | ||
- | ] | ||
- | }, | ||
- | ] | ||
- | </ |