Arduino Mega as Modbus Slave
I use Codesys on a Rasperry for a long time with some ESP8266 as DS18B20 Modbus TCP Slaves via Wifi to get temperatures. Now I wanted to use my old Arduino Mega with Ethernet Shield as a simple IO Module 22-52 for DI and 23-53 as DO So I wrote a simple Modbus sketch and tried 5 evenings to get it to run ... I can ping it but doesnt get recognized as a Modubus Device. My Brain is dead and my Browser Tabs overloaded could somebody tell me what is wrong with my Script? Thanks in advance:D
#include <Ethernet.h>
#include <SPI.h>
#include <Mudbus.h>
#include <avr/pgmspace.h>
Mudbus Mb;
int In22 = 22;
int In24 = 24;
int In26 = 26;
int In28 = 28;
int In30 = 30;
int In32 = 32;
int In34 = 34;
int In36 = 36;
int In38 = 38;
int In40 = 40;
int In42 = 42;
int In44 = 44;
int In46 = 46;
int In48 = 48;
int In50 = 50;
int In52 = 52;
int Out23 = 23;
int Out25 = 25;
int Out27 = 27;
int Out29 = 29;
int Out31 = 31;
int Out33 = 33;
int Out35 = 35;
int Out37 = 37;
int Out39 = 39;
int Out41 = 41;
int Out43 = 43;
int Out45 = 45;
int Out47 = 47;
int Out49 = 49;
int Out51 = 51;
int Out53 = 53;
void setup()
{
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF };
byte ip[] = { 192, 168, 178, 99 };
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };
Ethernet.begin(mac, ip, gateway, subnet);
Serial.begin(9600);
//Inputs
pinMode(22, INPUT);
pinMode(24, INPUT);
pinMode(26, INPUT);
pinMode(28, INPUT);
pinMode(30, INPUT);
pinMode(32, INPUT);
pinMode(34, INPUT);
pinMode(36, INPUT);
pinMode(38, INPUT);
pinMode(40, INPUT);
pinMode(42, INPUT);
pinMode(44, INPUT);
pinMode(46, INPUT);
pinMode(48, INPUT);
pinMode(50, INPUT);
pinMode(52, INPUT);
//Outputs
pinMode(23, OUTPUT);
pinMode(25, OUTPUT);
pinMode(27, OUTPUT);
pinMode(29, OUTPUT);
pinMode(31, OUTPUT);
pinMode(33, OUTPUT);
pinMode(35, OUTPUT);
pinMode(37, OUTPUT);
pinMode(39, OUTPUT);
pinMode(41, OUTPUT);
pinMode(43, OUTPUT);
pinMode(45, OUTPUT);
pinMode(47, OUTPUT);
pinMode(49, OUTPUT);
pinMode(51, OUTPUT);
pinMode(53, OUTPUT);
}
void loop()
{
Mb.Run();
Serial.print("Test");
//Ausgänge
if (Mb.C[23] == HIGH) {
digitalWrite(Out23, HIGH);
}
else {
digitalWrite(Out23, LOW);
}
if (Mb.C[25] == HIGH) {
digitalWrite(Out25, HIGH);
}
else {
digitalWrite(Out25, LOW);
}
if (Mb.C[27] == HIGH) {
digitalWrite(Out27, HIGH);
}
else {
digitalWrite(Out27, LOW);
}
if (Mb.C[29] == HIGH) {
digitalWrite(Out29, HIGH);
}
else {
digitalWrite(Out29, LOW);
}
if (Mb.C[31] == HIGH) {
digitalWrite(Out31, HIGH);
}
else {
digitalWrite(Out31, LOW);
}
if (Mb.C[33] == HIGH) {
digitalWrite(Out33, HIGH);
}
else {
digitalWrite(Out33, LOW);
}
if (Mb.C[35] == HIGH) {
digitalWrite(Out35, HIGH);
}
else {
digitalWrite(Out35, LOW);
}
if (Mb.C[37] == HIGH) {
digitalWrite(Out37, HIGH);
}
else {
digitalWrite(Out37, LOW);
}
if (Mb.C[39] == HIGH) {
digitalWrite(Out39, HIGH);
}
else {
digitalWrite(Out39, LOW);
}
if (Mb.C[41] == HIGH) {
digitalWrite(Out41, HIGH);
}
else {
digitalWrite(Out41, LOW);
}
if (Mb.C[43] == HIGH) {
digitalWrite(Out43, HIGH);
}
else {
digitalWrite(Out43, LOW);
}
if (Mb.C[45] == HIGH) {
digitalWrite(Out45, HIGH);
}
else {
digitalWrite(Out45, LOW);
}
if (Mb.C[47] == HIGH) {
digitalWrite(Out47, HIGH);
}
else {
digitalWrite(Out47, LOW);
}
if (Mb.C[49] == HIGH) {
digitalWrite(Out49, HIGH);
}
else {
digitalWrite(Out49, LOW);
}
if (Mb.C[51] == HIGH) {
digitalWrite(Out51, HIGH);
}
else {
digitalWrite(Out51, LOW);
}
if (Mb.C[53] == HIGH) {
digitalWrite(Out53, HIGH);
}
else {
digitalWrite(Out53, LOW);
}
//Digital inputs
Mb.C[22] = digitalRead(In22); //Pin 22 auf Modbus Coil[22]
Mb.C[24] = digitalRead(In24); //Pin 24 auf Modbus Coil[22]
Mb.C[26] = digitalRead(In26); //Pin 26 auf Modbus Coil[22]
Mb.C[28] = digitalRead(In28); //Pin 28 auf Modbus Coil[22]
Mb.C[30] = digitalRead(In30); //Pin 30 auf Modbus Coil[22]
Mb.C[32] = digitalRead(In32); //Pin 32 auf Modbus Coil[22]
Mb.C[34] = digitalRead(In34); //Pin 34 auf Modbus Coil[22]
Mb.C[36] = digitalRead(In36); //Pin 36 auf Modbus Coil[22]
Mb.C[38] = digitalRead(In38); //Pin 38 auf Modbus Coil[22]
Mb.C[40] = digitalRead(In40); //Pin 40 auf Modbus Coil[22]
Mb.C[42] = digitalRead(In42); //Pin 42 auf Modbus Coil[22]
Mb.C[44] = digitalRead(In44); //Pin 44 auf Modbus Coil[22]
Mb.C[46] = digitalRead(In46); //Pin 46 auf Modbus Coil[22]
Mb.C[48] = digitalRead(In48); //Pin 48 auf Modbus Coil[22]
Mb.C[50] = digitalRead(In50); //Pin 50 auf Modbus Coil[22]
Mb.C[52] = digitalRead(In52); //Pin 52 auf Modbus Coil[22]
}
Posted Aug 14, 2017, 7:30 PM UTC
10