🛠 Server Modbus TCP : exposer les relais sur Ethernet
Objetivos
Transformar el Opta en un esclavo Modbus TCP en su puerto Ethernet 10/100BASE-T integrado. Todas las variantes poseen este puerto (RMII, MDIX); la biblioteca ArduinoModbus proporciona ModbusTCPServer. Expondrá los 4 relés como bobinas (coils) 0..3, controlables desde cualquier supervisor (SCADA, autómata, script Python).
Material
- Arduino Opta (cualquier variante) alimentado a 24 VDC
- Cable Ethernet RJ45 hacia su red (DHCP o IP fija)
- Un cliente de prueba: QModMaster, ModScan, o la pasarela de su GTC
- IDE Arduino + bibliotecas « Ethernet » y « ArduinoModbus »
Código completo
// opta_modbus_tcp_server.ino — coils 0..3 = les 4 relais, port 502
#include <Ethernet.h>
#include <ArduinoModbus.h>
EthernetServer modbusServer(502); // port standard Modbus TCP
ModbusTCPServer modbusTCPServer;
void setup {
Serial.begin(9600);
if (Ethernet.begin == 0) { // DHCP ; sinon Ethernet.begin(ip)
Serial.println("Echec DHCP Ethernet");
while (1);
}
Serial.print("IP Opta : "); Serial.println(Ethernet.localIP);
if (!modbusTCPServer.begin) { Serial.println("Defaillance Modbus TCP"); while (1); }
modbusTCPServer.configureCoils(0x00, 4); // coils 0..3
modbusServer.begin;
}
void loop {
EthernetClient client = modbusServer.available;
if (client) {
modbusTCPServer.poll(client);
while (modbusTCPServer.available) {
uint16_t addr = modbusTCPServer.readAddress;
uint16_t value = modbusTCPServer.readValue;
if (addr < 4) digitalWrite(RELAY1 + addr, value ? HIGH : LOW);
}
client.stop;
}
}
Verificación esperada
La IP del Opta se muestra en el puerto serie. Desde el cliente Modbus, conéctese al puerto 502, escriba en la bobina (coil) 0: el relé 1 hace clic. >
Errores frecuentes
- Confundir con Modbus RTU: el RTU pasa por RS-485 (variantes RS485/WiFi) con ArduinoRS485, no por Ethernet; el Opta no expone CAN en sus terminales.
- Falta de terminación de red: el puerto 502 debe ser accesible; los cortafuegos empresariales y las VLAN industriales suelen bloquearlo — pruebe primero en una red directa.
- DHCP que falla silenciosamente: en un taller sin DHCP, cambie a una IP estática mediante Ethernet.begin(ip).
- No releer el estado: este servidor escribe las bobinas (coils) en los relés pero no sincroniza la lectura; añada la lógica de registro inverso para un verdadero modo esclavo.
Otros tutoriales para esta placa
- Premier sketch : faire clignoter une LED sur Arduino Opta
- Lire une entrée numérique 24 V (capteur de proximité)
- Commander une charge 230 V avec un relais de sortie
- Lire un capteur analogique 0–10 V sur les entrées Opta
- Remonter des données machine en MQTT via Ethernet
- Exploiter le double cœur : M7 pour le PLC, M4 en coprocesseur
Ejemplos de código para esta placa
relais_securise.inoArduinoentrees_numeriques.inoArduinoanalogique_0_10v.inoArduinomodbus_tcp_esclave.inoArduinomodbus_rtu_maitre.inoArduinomqtt_telemetrie.inoArduino