Hallo,
ich versuche schon seit Tage mit der Library
...Daten von meiner Holzpelletsheizung auszulesen.
Das ganze funktioniert mit dem "CAS Modbus Scanner" vom PC aus gut, und ich erhalte auch Sinnvolle und richtige Werte.
Als erstes wollte ich eigentlich nur die Register 89 und 90 auslesen und am seriell Monitor ausgeben lassen...aber ich glaube da kommt nicht mal eine Verbindung zustande....die Ausgabe ist jedenfalls für beide Register immer "0".
Hier der verwendete Sketch:
/*
Modbus-Arduino Example - KTemp (Modbus IP)
Copyright by André Sarmento Barbosa
http://github.com/andresarmento/modbus-arduino
*/
#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>
//Fürs Programm definiert: 1xxx ISTS; 2xxx COIL; 3xxx IREG; 4xxx HREG
//IDs für Modbus-Variablen
const int PU_TPO_IST_HREG = 89;
const int PU_TPM_IST_HREG = 90;
//#define TCP_KEEP_ALIVE sollte aktiv sein
//Objekte erstellen
ModbusIP mb;
void setup() {
Serial.begin(9600);
// The media access control (ethernet hardware) address for the shield
byte mac[] = { 0x01, 0xA2, 0xDA, 0x0F, 0x08, 0xE2 }; // The IP address for the shield
byte ip[] = { 192, 168, 178, 18 }; // Config Modbus IP
byte DNS[] = {192, 168, 178, 1}; // Local dns
byte gateway[] = {192, 168, 178, 1}; // Local gateway
byte subnet[] = {255, 255, 255, 0}; // Local subnet
mb.config(mac, ip, DNS, gateway, subnet);
//Modbus-Variablen erstellen
mb.addHreg(PU_TPO_IST_HREG, 0);
mb.addHreg(PU_TPM_IST_HREG, 0);
}
void loop() {
//Call once inside loop() - all magic here
mb.task();
Serial.print("Puffertemperatur oben:");
Serial.println(mb.Hreg(PU_TPO_IST_HREG));
Serial.print("Puffertemperatur mitte:");
Serial.println(mb.Hreg(PU_TPM_IST_HREG));
delay(3000);
}
Was mache ich flasch?
Ausserdem habe ich nirgendwo gefunden wo ich die IP-Adresse der Pelletsheizung einzugeben (die wartet auf eine Verbindung zum Client mit dem Port 502).....ist die IP des Masters nicht notwendig?
Vielen Dank für eure Hilfe!