From 960140e9dbd711963d068c9a32032f4c9bfaa90e Mon Sep 17 00:00:00 2001 From: chschloetel Date: Fri, 1 Nov 2024 23:16:10 +0100 Subject: [PATCH] erste Implementierung zur EEPROM Speicherung --- {lib => include}/ModbusSlaveConfigToEEPROM.h | 9 ++++++++- src/main.cpp | 10 +++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) rename {lib => include}/ModbusSlaveConfigToEEPROM.h (84%) diff --git a/lib/ModbusSlaveConfigToEEPROM.h b/include/ModbusSlaveConfigToEEPROM.h similarity index 84% rename from lib/ModbusSlaveConfigToEEPROM.h rename to include/ModbusSlaveConfigToEEPROM.h index 8f52603..92d6e30 100644 --- a/lib/ModbusSlaveConfigToEEPROM.h +++ b/include/ModbusSlaveConfigToEEPROM.h @@ -18,11 +18,18 @@ public: int GetBaudRate(); private: + /* + In diesem Beispiel wird Adresse 0 für die Modbus-ID und Adresse 1 für die Baudrate verwendet. + Diese Adressen sind willkürlich gewählt und sollten nicht mit anderen Daten im EEPROM überlappen. + */ 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 }; - +/* + 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) { diff --git a/src/main.cpp b/src/main.cpp index ce115a3..2b67f14 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include "ModbusSlaveConfigToEEPROM.h" // Inkludiere die Header-Datei für ModBusConfig // Statische Definition von Modbus-ID und Baudrate #define SLAVE_ID 8 @@ -29,6 +30,13 @@ Modbus slave(SERIAL_PORTRS485, SLAVE_ID, RS485_CTRL_PIN); Modbus slave(SERIAL_PORTRS485, SLAVE_ID); #endif +/* + Instanz der ModBusConfig-Klasse + Aktuell keine Verwendung, eine Testimplementierung, nur Ausgabezwecke +*/ + +ModBusConfig modbusConfig; + // Funktion zur Steuerung der digitalen Ausgänge über Modbus uint8_t writeDigitalOut(uint8_t fc, uint16_t address, uint16_t length) { if (address > output_pins_size || (address + length) > output_pins_size) { @@ -81,7 +89,7 @@ uint8_t fReadInputRegister(uint8_t fc, uint16_t address, uint16_t length) { slave.writeRegisterToBuffer(i, SERIAL_BAUDRATERS485); // Baudrate break; case 2: - slave.writeRegisterToBuffer(i, SLAVE_ID); // Slave-ID + slave.writeRegisterToBuffer(i, modbusConfig.GetModbusID()); // Slave-ID aus der ModBusConfig-Klasse break; case 3: { slave.writeRegisterToBuffer(i, static_cast(temperatur * 100));