88 lines
2.3 KiB
Arduino
88 lines
2.3 KiB
Arduino
|
/*
|
||
|
Ethernet Modbus TCP Client Toggle
|
||
|
|
||
|
This sketch toggles the coil of a Modbus TCP server connected
|
||
|
on and off every second.
|
||
|
|
||
|
Circuit:
|
||
|
- Any Arduino MKR Board
|
||
|
- MKR ETH Shield
|
||
|
|
||
|
created 16 July 2018
|
||
|
by Sandeep Mistry
|
||
|
*/
|
||
|
|
||
|
#include <SPI.h>
|
||
|
#include <Ethernet.h>
|
||
|
|
||
|
#include <ArduinoRS485.h> // ArduinoModbus depends on the ArduinoRS485 library
|
||
|
#include <ArduinoModbus.h>
|
||
|
|
||
|
// Enter a MAC address for your controller below.
|
||
|
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
|
||
|
// The IP address will be dependent on your local network:
|
||
|
byte mac[] = {
|
||
|
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
|
||
|
};
|
||
|
IPAddress ip(192, 168, 1, 177);
|
||
|
|
||
|
EthernetClient ethClient;
|
||
|
ModbusTCPClient modbusTCPClient(ethClient);
|
||
|
|
||
|
IPAddress server(192, 168, 1, 10); // update with the IP Address of your Modbus server
|
||
|
|
||
|
void setup() {
|
||
|
//Initialize serial and wait for port to open:
|
||
|
Serial.begin(9600);
|
||
|
while (!Serial) {
|
||
|
; // wait for serial port to connect. Needed for native USB port only
|
||
|
}
|
||
|
|
||
|
// start the Ethernet connection and the server:
|
||
|
Ethernet.begin(mac, ip);
|
||
|
|
||
|
// Check for Ethernet hardware present
|
||
|
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
|
||
|
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
|
||
|
while (true) {
|
||
|
delay(1); // do nothing, no point running without Ethernet hardware
|
||
|
}
|
||
|
}
|
||
|
if (Ethernet.linkStatus() == LinkOFF) {
|
||
|
Serial.println("Ethernet cable is not connected.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
if (!modbusTCPClient.connected()) {
|
||
|
// client not connected, start the Modbus TCP client
|
||
|
Serial.println("Attempting to connect to Modbus TCP server");
|
||
|
|
||
|
if (!modbusTCPClient.begin(server, 502)) {
|
||
|
Serial.println("Modbus TCP Client failed to connect!");
|
||
|
} else {
|
||
|
Serial.println("Modbus TCP Client connected");
|
||
|
}
|
||
|
} else {
|
||
|
// client connected
|
||
|
|
||
|
// write the value of 0x01, to the coil at address 0x00
|
||
|
if (!modbusTCPClient.coilWrite(0x00, 0x01)) {
|
||
|
Serial.print("Failed to write coil! ");
|
||
|
Serial.println(modbusTCPClient.lastError());
|
||
|
}
|
||
|
|
||
|
// wait for 1 second
|
||
|
delay(1000);
|
||
|
|
||
|
// write the value of 0x00, to the coil at address 0x00
|
||
|
if (!modbusTCPClient.coilWrite(0x00, 0x00)) {
|
||
|
Serial.print("Failed to write coil! ");
|
||
|
Serial.println(modbusTCPClient.lastError());
|
||
|
}
|
||
|
|
||
|
// wait for 1 second
|
||
|
delay(1000);
|
||
|
}
|
||
|
}
|