Habe nun die neue Libary für Modbus installiert. Damit lese ich einen
SDM630 Zähler aus, senden kann ich aber empfangen nichts.
Hat jemand eine Ahnung ?
Meine SOFT:
#include <ModbusMaster.h>
ModbusMaster node(1,1); //MODBUS PORT UND ADRESSE
static int MAX_ITERATION = 20;
const int SDM_SIZE = 30;
float SDM_Data[SDM_SIZE];
void setup() {
node.begin(9600); //ModBus UART
Serial.begin(9600);
}
void loop() {
for(int i = 0; i < SDM_SIZE;i++)
SDM_Data[i] = -1;
getRTUMore(0x000C,3,7); // Parameter 7 - 9 Watt
getRTUMore(0x0000,3,1); // Parameter 1 - 3 Spannung
Serial.print(SDM_Data[1]);
Serial.print(" : ");
Serial.print(SDM_Data[2]);
Serial.print(" : ");
Serial.println(SDM_Data[3]);
delay(1000);
}
boolean getRTUMore(uint16_t m_startAddress,uint8_t m_length,int
arrayPosition){
uint16_t result;
int counter = 0;
while(counter < MAX_ITERATION)
{
digitalWrite(3, HIGH); // TX
if (node.ku8MBSuccess == node.readInputRegisters(m_startAddress,
(m_length*2))) {
for(int i = 0; i < m_length; i++){
SDM_Data[arrayPosition] =
reform_uint16_2_float32(node.getResponseBuffer(i*2),node.getResponseBuff
er((i*2)+1));
arrayPosition++;
}
node.clearResponseBuffer();
return true;
}
counter++;
digitalWrite(3, LOW);
}
return false;
}
float reform_uint16_2_float32(uint16_t u1, uint16_t u2)
{
uint32_t num = ((uint32_t)u1 & 0xFFFF) << 16 | ((uint32_t)u2 &
0xFFFF);
float numf;
memcpy(&numf, &num, 4);
return numf;
}