From 56caa097e60225043170f52b24ebcab5de1c5e89 Mon Sep 17 00:00:00 2001 From: chschloetel Date: Fri, 1 Nov 2024 22:34:00 +0100 Subject: [PATCH] EEPROM funktion komplett entfernt --- src/main.cpp | 137 +++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 76 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d0d1919..ce115a3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,147 +1,132 @@ #include #include #include -#include #include -// Default configurations for Modbus ID and baud rate -#define DEFAULT_SLAVE_ID 8 -#define DEFAULT_BAUDRATE 9600 +// Statische Definition von Modbus-ID und Baudrate +#define SLAVE_ID 8 +#define SERIAL_BAUDRATERS485 9600 #define SERIAL_PORTRS485 Serial + +// RS485-Konfiguration #define RS485_CTRL_PIN 8 #define OutPutPin 9 -// Arrays for Modbus register handling +// Register Arrays für Modbus uint8_t ReadCoilRegister[] = {0, 1, 2}; -uint8_t output_pins[] = {0, 1}; -uint8_t ReadInputRegister[] = {0, 1, 2, 3, 4, 5, 6, 7}; +uint8_t output_pins[] = {0,1}; +uint8_t ReadInputRegister[] = {0,1,2,3,4,5,6,7}; uint8_t ReadCoilRegister_size = sizeof(ReadCoilRegister) / sizeof(ReadCoilRegister[0]); uint8_t output_pins_size = sizeof(output_pins) / sizeof(output_pins[0]); uint8_t ReadInputRegister_size = sizeof(ReadInputRegister) / sizeof(ReadInputRegister[0]); -// EEPROM memory locations -const int EEPROM_ADDR_SLAVE_ID = 0; -const int EEPROM_ADDR_BAUDRATE = EEPROM_ADDR_SLAVE_ID + sizeof(uint8_t); +int ValueInputOne = 0; -// Modbus object #ifdef RS485_CTRL_PIN -Modbus slave(SERIAL_PORTRS485, DEFAULT_SLAVE_ID, RS485_CTRL_PIN); +Modbus slave(SERIAL_PORTRS485, SLAVE_ID, RS485_CTRL_PIN); #else -Modbus slave(SERIAL_PORTRS485, DEFAULT_SLAVE_ID); +Modbus slave(SERIAL_PORTRS485, SLAVE_ID); #endif -// SHT21 Sensor object -// SHT2x SHT21EnvSensor; - -// EEPROM configuration loading -void loadConfig(uint8_t &slaveID, uint32_t &baudRate) { - EEPROM.get(EEPROM_ADDR_SLAVE_ID, slaveID); - EEPROM.get(EEPROM_ADDR_BAUDRATE, baudRate); - - if (slaveID == 0xFF) { - slaveID = DEFAULT_SLAVE_ID; - EEPROM.put(EEPROM_ADDR_SLAVE_ID, slaveID); +// 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) { + return STATUS_ILLEGAL_DATA_ADDRESS; } - if (baudRate == 0xFFFFFFFF) { - baudRate = DEFAULT_BAUDRATE; - EEPROM.put(EEPROM_ADDR_BAUDRATE, baudRate); + + for (uint16_t i = 0; i < length; i++) { + if (slave.readCoilFromBuffer(i) == 1) { + digitalWrite(OutPutPin, HIGH); + } else { + digitalWrite(OutPutPin, LOW); + } } + return STATUS_OK; } -// Write digital output function -uint8_t writeDigitalOut(uint8_t fc, uint16_t address, uint16_t length) { - if (address >= output_pins_size || (address + length) > output_pins_size) { +// Funktion zum Lesen von Coil-Register-Werten +uint8_t fReadCoilRegister(uint8_t fc, uint16_t address, uint16_t length) { + if (address > ReadCoilRegister_size || (address + length) > ReadCoilRegister_size) { return STATUS_ILLEGAL_DATA_ADDRESS; } for (uint16_t i = 0; i < length; i++) { if (i == 0) { - digitalWrite(OutPutPin, slave.readCoilFromBuffer(i) ? HIGH : LOW); + slave.writeCoilToBuffer(i, digitalRead(OutPutPin)); + } else if (i == 1) { + slave.writeCoilToBuffer(i, 0); + } else if (i == 2) { + slave.writeCoilToBuffer(i, 1); } } - return STATUS_OK; } -// Read Coil Register -uint8_t fReadCoilRegister(uint8_t fc, uint16_t address, uint16_t length) { - if (address >= ReadCoilRegister_size || (address + length) > ReadCoilRegister_size) { - return STATUS_ILLEGAL_DATA_ADDRESS; - } - - for (uint16_t i = 0; i < length; i++) { - slave.writeCoilToBuffer(i, (i == 0) ? digitalRead(OutPutPin) : (i == 1 ? 0 : 1)); - } - - return STATUS_OK; -} - -// Read Input Register +// Funktion zum Lesen von Input-Register-Werten uint8_t fReadInputRegister(uint8_t fc, uint16_t address, uint16_t length) { - if (address >= ReadInputRegister_size || (address + length) > ReadInputRegister_size) { + if (address > ReadInputRegister_size || (address + length) > ReadInputRegister_size) { return STATUS_ILLEGAL_DATA_ADDRESS; } - float temperatur = 21.21; // Placeholder, replace with sensor reading - float humidity = 55.55; // Placeholder, replace with sensor reading - for (uint16_t i = 0; i < length; i++) { + float temperatur = 21.21; // Dummy-Wert für Temperatur + float humidity = 55.55; // Dummy-Wert für Luftfeuchtigkeit + switch (i) { case 0: - slave.writeRegisterToBuffer(i, millis() / 1000); // Time in seconds + slave.writeRegisterToBuffer(i, millis() / 1000); // Zeit in Sekunden break; case 1: - slave.writeRegisterToBuffer(i, SERIAL_BAUDRATERS485); + slave.writeRegisterToBuffer(i, SERIAL_BAUDRATERS485); // Baudrate break; case 2: - slave.writeRegisterToBuffer(i, SLAVE_ID); + slave.writeRegisterToBuffer(i, SLAVE_ID); // Slave-ID break; - case 3: - slave.writeRegisterToBuffer(i, static_cast(temperatur * 100)); // Temperature + case 3: { + slave.writeRegisterToBuffer(i, static_cast(temperatur * 100)); break; - case 4: - slave.writeRegisterToBuffer(i, static_cast(humidity * 100)); // Humidity + } + case 4: { + slave.writeRegisterToBuffer(i, static_cast(humidity * 100)); break; + } case 5: { - const double UG = 8314.3; - const double mw = 18.016; - const double K = 273.15; - const double tp = 6.1078; - double absolutHumidity = (100000 * mw / UG * humidity / 100 * tp * - pow(10, (7.5 * temperatur) / (239 + temperatur)) / (temperatur + K)) * 100; + const double UG = 8314.3; // J/(kmol*K), universelle Gaskonstante + const double mw = 18.016; // kg/kmol, Molekulargewicht des Wasserdampfes + const double K = 273.15; // Konstante für Kelvin-Umrechnung + const double tp = 6.1078; // hPa, Triplettpunkt von Wasser + double absolutHumidity = (100000 * mw / UG * humidity / 100 * tp * pow(10, ((7.5 * temperatur) / (239 + temperatur))) / (temperatur + K)) * 100; slave.writeRegisterToBuffer(i, static_cast(absolutHumidity)); break; } case 6: - slave.writeRegisterToBuffer(i, 5); // Light level placeholder + slave.writeRegisterToBuffer(i, 5); // Platzhalter für Helligkeitswert break; case 7: - slave.writeRegisterToBuffer(i, digitalRead(OutPutPin)); + slave.writeRegisterToBuffer(i, digitalRead(OutPutPin)); // Zustand des Ausgangs break; } } - return STATUS_OK; } void setup() { - uint8_t slaveID; - uint32_t baudRate; - - loadConfig(slaveID, baudRate); - SERIAL_PORTRS485.begin(baudRate); - slave.begin(baudRate); - pinMode(RS485_CTRL_PIN, OUTPUT); - pinMode(OutPutPin, OUTPUT); - digitalWrite(OutPutPin, LOW); + digitalWrite(RS485_CTRL_PIN, LOW); // RS485-Empfang aktivieren + SERIAL_PORTRS485.begin(SERIAL_BAUDRATERS485); + slave.begin(SERIAL_BAUDRATERS485); + + // Modbus-Handler registrieren slave.cbVector[CB_WRITE_COILS] = writeDigitalOut; slave.cbVector[CB_READ_DISCRETE_INPUTS] = fReadCoilRegister; slave.cbVector[CB_READ_INPUT_REGISTERS] = fReadInputRegister; + + pinMode(OutPutPin, OUTPUT); + digitalWrite(OutPutPin, LOW); } void loop() { - slave.poll(); + slave.poll(); // Verarbeitet ankommende Modbus-Anfragen }