erste Implementierung zur EEPROM Speicherung

This commit is contained in:
chschloetel 2024-11-01 23:16:10 +01:00
parent 14a946bf5f
commit 960140e9db
2 changed files with 17 additions and 2 deletions

View File

@ -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) {

View File

@ -2,6 +2,7 @@
#include <Wire.h>
#include <ModbusSlave.h>
#include <SHT2x.h>
#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<int>(temperatur * 100));