Danke für die Antworten. Ich habe einen Mega 2560 verwendet mit einem RS232 und einem RS485 Adapter.
https://www.amazon.de/dp/B07B667STP?ref=ppx_yo2ov_dt_b_fed_asin_title
https://www.amazon.de/dp/B09DYDFZRW?ref=ppx_yo2ov_dt_b_fed_asin_title
Die 2 Adapter habe ich auf Serial1 und Serial2 angeklemmt. Dann habe ich aus einer Modbus RTU Slave Vorlage einen Sketch mehr oder weniger zusammen gebastelt, der nun auch funktioniert, das blöde ist nur das nach ein paar Tagen die Verbindung mit dem Modbus RS485 RTU abbricht. Momentane Lösung ist, ich Kontrolliere mit der UVR610 den Modbus Eingang wenn der als defekt angezeigt wird, wird die Spannungsversorgung vom Mega 2560 kurz getrennt und dann läuft wieder alles normal. Ich gehe davon aus das der Sketch starken Optimierungsbedarf hat. Vielleicht kann mir jemand weiterhelfen.
#include <ModbusRTUSlave.h>
#define MODBUS_SERIAL Serial1
#define MODBUS_BAUD 9600
#define MODBUS_CONFIG SERIAL_8N1
#define MODBUS_UNIT_ID 100
#if (defined(ARDUINO_NANO_RP2040_CONNECT) && !defined(ARDUINO_ARCH_MBED)) || defined(ARDUINO_NANO_ESP32)
// These boards operate unsing GPIO numbers that don't correspond to the numbers on the boards.
// However they do have D# values #defined to correct this.
const int8_t buttonPins[2] = {D2, D3};
const int8_t ledPins[4] = {D5, D6, D7, D8};
const int8_t dePin = D13;
#else
// Other boards do not have D# values, and will throw an error if you try to use them.
const int8_t buttonPins[2] = {2, 3};
const int8_t ledPins[4] = {5, 6, 7, 8};
const int8_t dePin = 13;
#endif
const int8_t knobPins[2] = {A0, A1};
ModbusRTUSlave modbus(Serial1);
const uint8_t numInputRegisters = 2;
uint16_t inputRegisters[2];
float wert;
String scaleOutput;
void setup() {
Serial2.begin(9600);
pinMode(knobPins[0], INPUT);
pinMode(knobPins[1], INPUT);
pinMode(buttonPins[0], INPUT_PULLUP);
pinMode(buttonPins[1], INPUT_PULLUP);
modbus.configureInputRegisters(inputRegisters, numInputRegisters);
MODBUS_SERIAL.begin(9600, SERIAL_8N1);
modbus.begin(MODBUS_UNIT_ID, MODBUS_BAUD, MODBUS_CONFIG);
}
void loop() {
if (Serial2.available())
scaleOutput = Serial2.readStringUntil(B00001101);
wert = scaleOutput.substring(1,5).toFloat();
inputRegisters[0] = (wert);
inputRegisters[1] = (12345);
modbus.poll();
}