uhm.....non mi sta funzionando mi aiutereste a trovare l'errore?
questo è il sorgente che ho caricato sulla scheda Master che vorrei che scrivesse au16data sullo slave:
#include <ModbusRtu.h>
// data array for modbus network sharing
//uint16_t au16data[16];
uint16_t au16data[16] = {
3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, 19 };
uint8_t u8state;
/**
* Modbus object declaration
* u8id : node id = 0 for master, = 1..247 for slave
* u8serno : serial port (use 0 for Serial)
* u8txenpin : 0 for RS-232 and USB-FTDI
* or any pin number > 1 for RS-485
*/
Modbus master(0,0,2); // this is master and RS-232 or USB-FTDI
/**
* This is an structe which contains a query to an slave device
*/
modbus_t telegram;
unsigned long u32wait;
void setup() {
master.begin( 19200 ); // baud-rate at 19200
master.setTimeOut( 2000 ); // if there is no answer in 2000 ms, roll over
u32wait = millis() + 1000;
u8state = 0;
}
void loop() {
switch( u8state ) {
case 0:
if (millis() > u32wait) u8state++; // wait state
break;
case 1:
telegram.u8id = 1; // slave address
telegram.u8fct = 6; // function code (write single register)
telegram.u16RegAdd = 1; // start address in slave
telegram.u16CoilsNo = 16; // number of elements (coils or registers) to read
telegram.au16reg = au16data; // pointer to a memory array in the Arduino
master.query( telegram ); // send query (only once)
u8state++;
break;
case 2:
master.poll(); // check incoming messages
if (master.getState() == COM_IDLE) {
u8state = 0;
u32wait = millis() + 100;
}
break;
}
}
mentre questo èil codice che ho caricato sullo slave che momentaneamente mi stampa a video il contenuto dell'array:
#include <ModbusRtu.h>
// data array for modbus network sharing
uint16_t au16data[16] = {
3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, 27
};
/**
Modbus object declaration
u8id : node id = 0 for master, = 1..247 for slave
u8serno : serial port (use 0 for Serial)
u8txenpin : 0 for RS-232 and USB-FTDI
or any pin number > 1 for RS-485
*/
Modbus slave(1, 3, 2); // this is slave @1 and RS-232 or USB-FTDI
void setup() {
slave.begin( 19200 ); // baud-rate at 19200
Serial.begin(9600);
}
void loop() {
slave.poll( au16data, 16 );
Serial.println(au16data[0]);
Serial.println(au16data[1]);
Serial.println(au16data[2]);
Serial.println(au16data[3]);
Serial.println(au16data[4]);
Serial.println(au16data[5]);
Serial.println(au16data[6]);
Serial.println(au16data[7]);
Serial.println(au16data[8]);
Serial.println(au16data[9]);
Serial.println(au16data[10]);
Serial.println(au16data[11]);
Serial.println(au16data[12]);
Serial.println(au16data[13]);
Serial.println(au16data[14]);
Serial.println(au16data[15]);
}
au16data[15] prima di iniziare la trasmissione è impostato a 27 mentre vorrei che il master ci scriva il valore 19 ma quando stampo a videoil valore rimane a 27 .
Mi potete aiutare?
Grazie 