Problemi lettura contatore SDM120/SDM220modbus

Discussioni relative all'uso di contatori SDM120 SDM220 modbus
Avatar utente
dadelinux
Messaggi: 23
Iscritto il: 29/03/2016, 11:43

Problemi lettura contatore SDM120/SDM220modbus

Messaggioda dadelinux » 06/04/2016, 13:57

Apro questa discussione su consiglio di Flane così da affrontare e trovare il modo di correggere alcuni problemi di lettura dati dai contatori SDM110/220 incontrati per alcuni utilizzatori compreso il sottoscritto.
Vi invito a leggere la prima discussione a questo link: http://www.flanesi.it/forum/viewtopic.php?f=4&t=383#p2055 per capire di cosa si tratta e se risulta essere il vostro problema.

RIASSUMENDO
In alcuni casi la lettura tramite pooler485 non è precisa specie per il valore della corrente riportato. Durante il ciclo di lettura che avviene ogni 5 sec per default il risultato dei dati torna sballato 8 volte su 10. es:

2(566.90*W)
2(102801*Wh)
2_1(231.00*V)
2_2(231.00*A)
2_3(50.00*Hz)
2_4(0.99*F)

Come potete vedere tale valore sballato è il valore della Tensione (2_1) spalmato sulla variabile Corrente successiva (2_2) a volte anche sulla (2_3).
La maggior parte delle installazioni statisticamente non accusano questo problema ma sappiate che può succedere.

In attesa di individuare e risolvere per tutti il problema potete modificare il pooler485 come da codice sotto riportato:

Codice: Seleziona tutto

#!/bin/bash

ADDRESSES="$1"
BAUD_RATE="$2"
DEVICE="$3"
ADDR_ARR=$(echo $ADDRESSES | tr "," "\n")

while [ true ]; do
    ID=0
    POWER=""
    ENERGY=""
   
    for ADDRESS in $ADDR_ARR
    do
        #((ID++))
        ID=$ADDRESS
        #CMD="sdm120c -a ${ADDRESS} -b ${BAUD_RATE} -z 10 -i -p -v -c -f -g -P N -q ${DEVICE}"
        CMD="sdm120c -a ${ADDRESS} -P N -b ${BAUD_RATE} -q ${DEVICE}"
        VALUE=`$CMD`

        VOLTAGE=$(echo ${VALUE}   | awk '{print $1}')
        CURRENT=$(echo ${VALUE}   | awk '{print $2}')
        POWER=$(echo ${VALUE}     | awk '{print $3}')
        FACTOR=$(echo ${VALUE}    | awk '{print $6}')
        FREQUENCY=$(echo ${VALUE} | awk '{print $8}')
        ENERGY=$(echo ${VALUE}    | awk '{print $9}')

        if [ "$ENERGY" != "0" -a x"$ENERGY" != x -a "$POWER" != "0" -a x"$POWER" != x ]; then
            echo -e "$ID($POWER*W)\n$ID($ENERGY*Wh)\n${ID}_1($VOLTAGE*V)\n${ID}_2($CURRENT*A)\n${ID}_3($FREQUENCY*Hz)\n${ID}_4($FACTOR*F)" > /run/shm/metern${ADDRESS}.txt
        fi
        sleep 8s
    done
done


Con questa versione di pooler l'interrogazione del contatore modus richiede la lista intera dei valori e il risultato risulta corretto:

Codice: Seleziona tutto

sudo -u www-data sdm120c -a 2 -P N -b 9600 -q /dev/ttyUSB1
241.05 2.04 434.34 492.45 -232.07 0.88 -28.12 50.01 206644 66223 272867 8383 61677 70060 OK


Vi consiglio di impostare lo Sleep a 8 secondi per ridurre quasi a zero gli errori di lettura.

A questo punto x chi accusa il problema, lo invito ad effettuare un po' di DEBUG come già lo sto facendo io magari insieme troviamo il motivo del fastidioso problema: interfaccia usb? Bug di sdm120c?, bug del protocollo modus? bug di alcuni modelli di contatori SDM?

Buon Lavoro!
Davide
-----------------------------------------
Linux, the Art of GNU Generation


Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Re: Problemi lettura contatore SDM120/SDM220modbus

Messaggioda Flane » 07/04/2016, 15:12

Ottimo dadelinux.

Quando puoi posta qualche dato di debug quando si presentano gli errori che se possibile cerchiamo di capire da cosa dipendono.

TheDrake
Messaggi: 9
Iscritto il: 20/01/2016, 17:08

Re: Problemi lettura contatore SDM120/SDM220modbus

Messaggioda TheDrake » 08/04/2016, 18:37

Per tagliare la testa al topo, vi invito ad usare per l'output il solo sdm120c invece che ppost-processarlo col pooler una sintassi del tipo:

Codice: Seleziona tutto

pi@datalogger01:/usr/share/nginx/www/metern/comapps# sdm120c-td -m -pvcfgie -b9600 -PN -w12 -z10 -j15 -W40 /dev/ttyUSB0
1_V(231.40*V)
1_C(1.06*A)
1_P(161.09*W)
1_PF(0.66*F)
1_F(50.01*Hz)
1_IE(2889310*Wh)
1_EE(1417883*Wh)


Di solito i casi che indicate sono dovuti ad un singolo valore fallito in lettura che provoca ripetizioni o shift nell'output dello script, che non controlla il codice di errore finale di sdm120c.


Torna a “Contatori Modbus”

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti