Arduino modbus Master per Contatore elettrico monofase dzt-6001

Ciao,
vorrei chiedervi consiglio su come interfacciare arduino tramite max485 sul contatore monofase dzt-6001 tramite protocollo modbus rtu.

per i collegamenti ok prendo lo schema riportato in allegato, ma non so come interrogare i registri per prelevare i dati.
in allegato ho anche il file con i dati forniti dal costruttore.
So che devo usare il protocollo modbus con la libreria SimpleModbusMaster con la funzione 0x03 - Read Holding Registers
ma non so come scrivere il codice per interrogare il contatore come da specifiche del costruttore.

Help me !!! =( =( =( =(

Ff8Vo.png

MODBUS Protocol DZT 6001.pdf (51.6 KB)

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Questo affarino è molto interessante. --> http://www.dutchmeters.com/files/Datasheets/DZT/DZT%206001%20V1.03.pdf --> http://www.amazon.it/DZT-6001-Contatore-digitale-singola-fase/dp/B00IO6GRMW

Hai provato l'esempio della libreria?

ciao,
ho provato questo codice ma ottengo solo sporcizia di output

#include <SimpleModbusMaster.h>
#define baud 9600
#define timeout 1000
#define polling 200 // the scan rate
#define retry_count 10
#define TxEnablePin 2
#define LED 13
enum
{
PACKET1,
PACKET2,
TOTAL_NO_OF_PACKETS // leave this last entry
};

Packet packets[TOTAL_NO_OF_PACKETS];
packetPointer packet1 = &packets[PACKET1];
unsigned int readRegs[1];
void setup()
{
modbus_construct(packet1, 1, READ_HOLDING_REGISTERS, 1, 1, readRegs);
modbus_configure(&Serial, baud, SERIAL_8E1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS);
pinMode(LED, OUTPUT);
}

void loop()
{
modbus_update();
analogWrite(LED, readRegs[0]>>2); // constrain adc value from the arduino slave to 255
Serial.println(readRegs[0]);
Serial.println(readRegs[1]);
Serial.println(readRegs[2]);
Serial.println(readRegs[3]);
Serial.println(readRegs[4]);
Serial.println(packet1->requests);
Serial.println(packet1->successful_requests);
Serial.println(packet1->failed_requests);
Serial.println(packet1->exception_errors);
}

Dallo schema che hai fornito sembra che il TX_ENABLE sia sul pin 3 di Arduino, mentre nello sketch usi il pin 2.

si scusa, non ho corretto lo schema ma in realtà è collegato al pin 2

;) ;) ;)

il contatore dzt-6001 collegato ad un usb to rs485 converter, e usando il software in dotazione o modpool riesco a leggere i dati tranquillamente.

modpoll -b 9600 -p even -t 4:int -m rtu -a 1 -r 1 -d 8 -1 -c 1 COM6

Protocol configuration: Modbus RTU Slave configuration...: address = 1, start reference = 1, count = 1 Communication.........: COM6, 9600, 8, 1, even, t/o 1.00 s, poll rate 1000 ms Data type.............: 32-bit integer, output (holding) register table

-- Polling slave... [1]: 2294 // sono 229,4 volt

Prova a mettere un resistore da 10k come pullup a +5V sulla linea TX_ENABLE.

ciao,
intendi come nello schema allegato?

http://yourduino.com/sunshop2/index.php?l=product_detail&p=323

MAX485-Module-Sch1.jpg

Sì, anche se non inserirei quei resistori di pullup/pulldown da 20k in uscita

Salve a tutti ecco il progetto realizzato.

cablaggio progetto

LCD
SDA → A4
SLC → A5

DH11
SIGNAL → D7

RS485_TTL
RO → RX
DI → TX
RE → D2

PULSANTE
ARANCIO → D8 → RESTISTENZA → GND
BIANCO → VCC

STRIPE LED
BLU → D9
VERDE → D6
ROSSO → D5

DZT6001
B → 25
A → 24

collegamento striscia led (img allegata)

codice (file allegato .ino)

Video youtube

Sono aperto a suggerimenti e nuove idee per migliorare il tutto.

Nel caso i moderatori del forum volessero inserire il progetto come guida mi rendo disponibile a fornire una documentazione più dettagliata.

DZT6001_emoncms.ino (9.5 KB)

Bello.... Nello sketch scrivici anche il link alle librerie non standard

https://github.com/angeloc/simplemodbusng/tree/master/SimpleModbusMaster

http://playground.arduino.cc/Main/DHT11Lib

http://arduino-info.wikispaces.com/LCD-Blue-I2C#v2