diff --git a/include/ModbusSlaveConfigToEEPROM.h b/include/ModbusSlaveConfigToEEPROM.h index 87a1c4b..6b9aa95 100644 --- a/include/ModbusSlaveConfigToEEPROM.h +++ b/include/ModbusSlaveConfigToEEPROM.h @@ -26,6 +26,11 @@ private: static const int BAUD_RATE_ADDRESS = 1; // Speicheradresse für Baudrate static const int MAX_BAUD_RATE = 115200; // Maximal unterstützte Baudrate static const int MAX_MODBUS_ID_ADDRESS = 254; // Maximal unterstützte Baudrate + + unsigned long lastWriteTimeID = 0; // Last write time for Modbus ID + unsigned long lastWriteTimeBaud = 0; // Last write time for Baud rate + const unsigned long WRITE_INTERVAL = 120000; // 2 minutes in milliseconds + }; /* Konstruktor: Der Konstruktor initialisiert die Modbus-ID und die Baudrate auf Standardwerte (1 und 9600), @@ -43,7 +48,12 @@ ModBusConfig::ModBusConfig() { void ModBusConfig::SetModbusID(int ID) { if (ID >= 0 && ID <= MAX_MODBUS_ID_ADDRESS) { // Überprüfung, dass ID im gültigen Bereich liegt - EEPROM.write(MODBUS_ID_ADDRESS, ID); + unsigned long currentTime = millis(); + if (currentTime - lastWriteTimeID >= WRITE_INTERVAL) { // Only write if enough time has passed + EEPROM.write(MODBUS_ID_ADDRESS, ID); + lastWriteTimeID = currentTime; + } + //EEPROM.write(MODBUS_ID_ADDRESS, ID); } else { Serial.println("Ungültige Modbus-ID. ID muss zwischen 0 und 255 liegen."); } @@ -51,11 +61,15 @@ void ModBusConfig::SetModbusID(int ID) { void ModBusConfig::SetBaudRate(int BAUDRATE) { int dividedBaudrate = BAUDRATE / 100; + unsigned long currentTime = millis(); // Überprüfung, dass Baudrate im gültigen Bereich liegt if (BAUDRATE > 0 && BAUDRATE <= MAX_BAUD_RATE) { if (dividedBaudrate != EEPROM.read(BAUD_RATE_ADDRESS)) { - EEPROM.write(BAUD_RATE_ADDRESS, dividedBaudrate); + if (currentTime - lastWriteTimeBaud >= WRITE_INTERVAL) { + EEPROM.write(BAUD_RATE_ADDRESS, dividedBaudrate); + lastWriteTimeBaud = currentTime; + } } } else { Serial.println("Ungültige Baudrate. Baudrate muss zwischen 0 und 115200 liegen."); diff --git a/src/main.cpp b/src/main.cpp index 2de1678..aec7653 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -88,7 +88,7 @@ uint8_t fReadInputRegister(uint8_t fc, uint16_t address, uint16_t length) { slave.writeRegisterToBuffer(i, millis() / 1000); // Zeit in Sekunden break; case 1: - slave.writeRegisterToBuffer(i, SERIAL_BAUDRATERS485); // Baudrate + slave.writeRegisterToBuffer(i, modbusConfig.GetBaudRate()); // Baudrate break; case 2: slave.writeRegisterToBuffer(i, modbusConfig.GetModbusID()); // Slave-ID aus der ModBusConfig-Klasse @@ -190,7 +190,8 @@ void setup() { slave.cbVector[CB_READ_DISCRETE_INPUTS] = fReadCoilRegister; slave.cbVector[CB_READ_INPUT_REGISTERS] = fReadInputRegister; slave.cbVector[CB_WRITE_HOLDING_REGISTERS] = fWriteHoldingRegister; - slave.cbVector[CB_READ_HOLDING_REGISTERS] = fReadHoldingRegister;//slave.cbVector[CB_WRITE_INPUT_REGISTERS] = fWriteInputRegister; // Registrierung der Schreib-Funktion + slave.cbVector[CB_READ_HOLDING_REGISTERS] = fReadHoldingRegister; + //slave.cbVector[CB_WRITE_INPUT_REGISTERS] = fWriteInputRegister; // Registrierung der Schreib-Funktion pinMode(OutPutPin, OUTPUT); digitalWrite(OutPutPin, LOW);