🛠 Server Modbus TCP : exposer les relais sur Ethernet
Objectifs
Transformer l'Opta en esclave Modbus TCP sur son port Ethernet 10/100BASE-T intégré. Toutes les variantes possèdent ce port (RMII, MDIX) ; la bibliothèque ArduinoModbus fournit ModbusTCPServer. Vous exposerez les 4 relais comme coils 0..3, pilotables depuis n'importe quel superviseur (SCADA, automate, script Python).
Matériel
- Arduino Opta (n'importe quelle variante) alimentée en 24 VDC
- Câble Ethernet RJ45 vers votre réseau (DHCP ou IP fixe)
- Un client de test : QModMaster, ModScan, ou la passerelle de votre GTC
- IDE Arduino + bibliothèques « Ethernet » et « ArduinoModbus »
Code complet
// 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;
}
}
Vérification attendue
L'IP de l'Opta s'affiche sur le port série. Depuis le client Modbus, connectez-vous au port 502, écrivez sur la coil 0 : le relais 1 claque. >
Erreurs fréquentes
- Confondre avec Modbus RTU : le RTU passe par la RS-485 (variantes RS485/WiFi) avec ArduinoRS485, pas par Ethernet ; l'Opta n'expose pas de CAN sur ses bornes.
- Pas de terminaison réseau : le port 502 doit être joignable ; pare-feu d'entreprise et VLAN industriels bloquent souvent — testez d'abord sur un réseau direct.
- DHCP qui échoue silencieusement : en atelier sans DHCP, passez à une IP statique via Ethernet.begin(ip).
- Ne pas relire l'état : ce serveur écrit les coils dans les relais mais ne synchronise pas la lecture ; ajoutez la logique de registre inverse pour un vrai mode esclave.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
relais_securise.inoArduinoentrees_numeriques.inoArduinoanalogique_0_10v.inoArduinomodbus_tcp_esclave.inoArduinomodbus_rtu_maitre.inoArduinomqtt_telemetrie.inoArduino