76 lines
2.5 KiB
C++
76 lines
2.5 KiB
C++
#include <ModBusConfig.h>
|
|
#include <EEPROM.h>
|
|
|
|
/*
|
|
Konstruktor: Der Konstruktor initialisiert die Modbus-ID und die Baudrate auf Standardwerte (1 und 9600),
|
|
falls die EEPROM-Werte nicht gesetzt sind (d.h. wenn sie 0xFF sind).
|
|
*/
|
|
ModBusConfig::ModBusConfig() {
|
|
// Optional: Initialisieren Sie die EEPROM-Werte, falls erforderlich
|
|
if (EEPROM.read(MODBUS_ID_ADDRESS) == 0xFF) {
|
|
SetModbusID(STANDARD_MODBUS_ID); // Setze Standard ID
|
|
}
|
|
if (EEPROM.read(BAUD_RATE_ADDRESS) == 0xFF) {
|
|
SetBaudRate(STANDARD_MODBUS_BAUDRATE); // Setze Standard Baudrate
|
|
}
|
|
}
|
|
|
|
void ModBusConfig::SetModbusID(int ID) {
|
|
if (ID >= 0 && ID <= MAX_MODBUS_ID_ADDRESS) { // Überprüfung, dass ID im gültigen Bereich liegt
|
|
unsigned long currentTime = millis();
|
|
if (currentTime - lastWriteTimeID >= WRITE_INTERVAL) { // Only write if enough time has passed
|
|
EEPROM.put(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.");
|
|
}
|
|
}
|
|
|
|
void ModBusConfig::ResetModbusID() {
|
|
unsigned long currentTime = millis();
|
|
if (currentTime - lastWriteTimeID >= WRITE_INTERVAL) { // Only write if enough time has passed
|
|
SetModbusID(STANDARD_MODBUS_ID); // Reset to standard ID
|
|
lastWriteTimeID = currentTime;
|
|
}
|
|
|
|
}
|
|
|
|
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)) {
|
|
if (currentTime - lastWriteTimeBaud >= WRITE_INTERVAL) {
|
|
EEPROM.put(BAUD_RATE_ADDRESS, dividedBaudrate);
|
|
lastWriteTimeBaud = currentTime;
|
|
}
|
|
}
|
|
} else {
|
|
Serial.println("Ungültige Baudrate. Baudrate muss zwischen 0 und 115200 liegen.");
|
|
}
|
|
}
|
|
|
|
void ModBusConfig::ResetBaudRate() {
|
|
unsigned long currentTime = millis();
|
|
if (currentTime - lastWriteTimeBaud >= WRITE_INTERVAL) {
|
|
SetBaudRate(STANDARD_MODBUS_BAUDRATE); // Reset to standard Baud rate
|
|
lastWriteTimeBaud = currentTime;
|
|
}
|
|
|
|
}
|
|
|
|
int ModBusConfig::GetModbusID() {
|
|
int MbID = EEPROM.read(MODBUS_ID_ADDRESS);
|
|
return MbID;
|
|
}
|
|
|
|
int ModBusConfig::GetBaudRate() {
|
|
int Baudrate = EEPROM.read(BAUD_RATE_ADDRESS);
|
|
return Baudrate;
|
|
}
|
|
|