modified: include/ModbusSlaveConfigToEEPROM.h
modified: src/main.cpp main.cpp read from eeprom_konfig ModbusSlaveConfigToEEPROM.h write-Protection SetBaudRate
This commit is contained in:
parent
1c34032bc3
commit
4c0b8aaa74
@ -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.");
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user