Modbus_RS485_Grundkonfig_Ar.../lib/ModbusSlaveConfigToEEPROM.h
2024-11-01 23:03:17 +01:00

67 lines
2.2 KiB
C++

/*
Insgesamt ermöglicht die ModBusConfig-Klasse das Speichern und Abrufen von Modbus-Konfigurationsdaten (ID und Baudrate) in einem EEPROM.
Dies ist besonders nützlich für Anwendungen, bei denen Konfigurationsdaten zwischen den Stromzyklen erhalten bleiben sollen.
Die Klasse abstrahiert die EEPROM-Operationen und bietet eine benutzerfreundliche Schnittstelle zur Verwaltung von Modbus-Konfigurationen.
*/
#ifndef ModbusSlaveConfigToEEPROM_H
#define ModbusSlaveConfigToEEPROM_H
#include <Arduino.h>
#include <EEPROM.h>
class ModBusConfig {
public:
ModBusConfig(); // Konstruktor ohne Parameter
void SetModbusID(int ID);
void SetBaudRate(int BAUDRATE);
int GetModbusID();
int GetBaudRate();
private:
static const int MODBUS_ID_ADDRESS = 0; // Speicheradresse für Modbus-ID
static const int BAUD_RATE_ADDRESS = 1; // Speicheradresse für Baudrate
static const int MAX_BAUD_RATE = 115200; // Maximal unterstützte Baudrate
};
ModBusConfig::ModBusConfig() {
// Optional: Initialisieren Sie die EEPROM-Werte, falls erforderlich
if (EEPROM.read(MODBUS_ID_ADDRESS) == 0xFF) {
SetModbusID(1); // Setze Standard ID
}
if (EEPROM.read(BAUD_RATE_ADDRESS) == 0xFF) {
SetBaudRate(9600); // Setze Standard Baudrate
}
}
void ModBusConfig::SetModbusID(int ID) {
if (ID >= 0 && ID <= 255) { // Überprüfung, dass ID im gültigen Bereich liegt
EEPROM.write(MODBUS_ID_ADDRESS, ID);
} else {
Serial.println("Ungültige Modbus-ID. ID muss zwischen 0 und 255 liegen.");
}
}
void ModBusConfig::SetBaudRate(int BAUDRATE) {
int dividedBaudrate = BAUDRATE / 100;
// Ü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);
}
} else {
Serial.println("Ungültige Baudrate. Baudrate muss zwischen 0 und 115200 liegen.");
}
}
int ModBusConfig::GetModbusID() {
return EEPROM.read(MODBUS_ID_ADDRESS);
}
int ModBusConfig::GetBaudRate() {
int Baudrate = EEPROM.read(BAUD_RATE_ADDRESS) * 100;
return Baudrate;
}
#endif