Good afternoon,
Has anyone tried using the arduinomodbus.h library on an Arduino UNO R4 Minima with an Ethernet 2 shield to implement TCP data transmission between Arduino (Slave) and PC (Master)?
Good afternoon,
Has anyone tried using the arduinomodbus.h library on an Arduino UNO R4 Minima with an Ethernet 2 shield to implement TCP data transmission between Arduino (Slave) and PC (Master)?
I have deleted your other cross-post @arino1.
Cross-posting is against the Arduino Forum rules. The reason is that duplicate posts can waste the time of the people trying to help. Someone might spend a lot of time investigating and writing a detailed answer on one topic, without knowing that someone else already did the same in the other topic.
Repeated cross-posting can result in a suspension from the forum.
In the future, please only create one topic for each distinct subject matter. This is basic forum etiquette, as explained in the "How to get the best out of this forum" guide. It contains a lot of other useful information. Please read it.
Thanks in advance for your cooperation.
Hi everyone,
could anyone help me?
I'm desperately trying to use Modbus TCP on Renesas, but no libraries seem to work.
Which library have you tested?
Which error messages to you get?
Which code are you using?
Which device do you want to read?
Hi,
I'm using Arduino Uno R4 Mini and Ethernet Shield 2.
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <ArduinoRS485.h>
#include <ArduinoModbus.h>
// Device MAC and IP address
byte mac[] = { 0xC8, 0x61, 0x8A, 0xAE, 0x40, 0x6E };
IPAddress ip(192, 168, 1, 10);
EthernetServer ethServer(502); // Modbus TCP uses port 502
ModbusTCPServer modbusTCPServer;
const int pinOutput1 = 13; // First output pin controlled by bit 0
// To control more outputs, declare: int outputPins[] = {13, 12, 11, ...}
void setup() {
Serial.begin(9600);
while (!Serial) { ; }
Serial.println("Ethernet Modbus TCP Example");
Ethernet.begin(mac, ip);
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found.");
while (true) { delay(1); }
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
ethServer.begin();
if (!modbusTCPServer.begin()) {
Serial.println("Failed to start Modbus TCP Server!");
while (1);
}
// Configure outputs
pinMode(pinOutput1, OUTPUT);
digitalWrite(pinOutput1, LOW);
// If you have more pins, use:
// for (int i = 0; i < sizeof(outputPins)/sizeof(int); i++) {
// pinMode(outputPins[i], OUTPUT);
// digitalWrite(outputPins[i], LOW);
// }
// Configure one 16-bit Holding Register at address 0
modbusTCPServer.configureHoldingRegisters(0x00, 1);
modbusTCPServer.holdingRegisterWrite(0x00, 0); // Initialize to 0
}
void loop() {
EthernetClient client = ethServer.available();
if (client) {
Serial.println("New client connected");
modbusTCPServer.accept(client);
while (client.connected()) {
modbusTCPServer.poll();
updateOutputs();
}
Serial.println("Client disconnected");
}
}
void updateOutputs() {
// Read the holding register at address 0
uint16_t reg = modbusTCPServer.holdingRegisterRead(0x00);
// Use bitRead to extract each bit and set output states
bool pin1State = bitRead(reg, 0); // Bit 0 controls pinOutput1
digitalWrite(pinOutput1, pin1State ? HIGH : LOW);
// To control more outputs, add:
// bool pin2State = bitRead(reg, 1); // Bit 1 controls pin 12
// digitalWrite(12, pin2State ? HIGH : LOW);
// bool pin3State = bitRead(reg, 2); // Bit 2 controls pin 11
// digitalWrite(11, pin3State ? HIGH : LOW);
}
Errors:
ATTENZIONE: la libreria ArduinoModbus dichiara di funzionare sulle architetture megaavr, samd, mbed_nano, mbed_portenta, mbed_opta e potrebbe non essere compatibile con la tua scheda che utilizza l'architettura renesas_uno
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:17: error: field 'it_interval' has incomplete type 'timeval'
struct timeval it_interval; /* timer interval /
^~~~~~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:264:17: error: field 'it_value' has incomplete type 'timeval'
struct timeval it_value; / current value /
^~~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval */
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:0:
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:102:35: error: 'fd_set' has not been declared
int (*select) (modbus_t *ctx, fd_set rset, struct timeval tv, int msg_length);
^~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:113:20: error: field 'response_timeout' has incomplete type 'timeval'
struct timeval response_timeout;
^~~~~~~~~~~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:0:
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:114:20: error: field 'byte_timeout' has incomplete type 'timeval'
struct timeval byte_timeout;
^~~~~~~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:1243:46: error: 'fd_set' has not been declared
static int _modbus_rtu_select(modbus_t ctx, fd_set rset,
^~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp: In function 'int _modbus_rtu_select(modbus_t, int, timeval, int)':
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:1262:60: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:1262:62: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:1262:82: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:1262:84: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-rtu.cpp:27:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:17: error: field 'it_interval' has incomplete type 'timeval'
struct timeval it_interval; / timer interval /
^~~~~~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:264:17: error: field 'it_value' has incomplete type 'timeval'
struct timeval it_value; / current value /
^~~~~~~~
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval */
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:0:
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:102:35: error: 'fd_set' has not been declared
int (*select) (modbus_t *ctx, fd_set *rset, struct timeval tv, int msg_length);
^~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:113:20: error: field 'response_timeout' has incomplete type 'timeval'
struct timeval response_timeout;
^~~~~~~~~~~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:0:
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:114:20: error: field 'byte_timeout' has incomplete type 'timeval'
struct timeval byte_timeout;
^~~~~~~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:830:46: error: 'fd_set' has not been declared
static int _modbus_tcp_select(modbus_t ctx, fd_set rset, struct timeval tv, int length_to_read)
^~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp: In function 'int _modbus_tcp_select(modbus_t, int, timeval, int)':
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:838:60: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:838:62: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:838:82: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval /
^~~~~~~
Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:838:84: error: invalid use of incomplete type 'struct timeval'
unsigned long wait_time_millis = (tv == NULL) ? 0 : (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
^~~~~~~
In file included from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-private.h:23:0,
from Documents\Arduino\libraries\ArduinoModbus\src\libmodbus\modbus-tcp.cpp:80:
appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\sys\time.h:263:9: note: forward declaration of 'struct timeval'
struct timeval it_interval; / timer interval */
^~~~~~~
exit status 1
Compilation error: exit status 1