From ddaaa8988d08c2e7cf53e92abeb7fc92a12729e4 Mon Sep 17 00:00:00 2001 From: Eduard Iten Date: Fri, 11 Jul 2025 01:01:45 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Modbus-Register=20f=C3=BCr=20Endstromsc?= =?UTF-8?q?hwellenwerte=20korrigiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Behebt ein Problem, bei dem das Python-Tool 0 mA für die Endstromschwellenwerte anzeigte. Die Zephyr-Anwendung definierte zuvor nur ein einzelnes Modbus-Register für den Endstromschwellenwert, während das Python-Tool separate Register für das Öffnen und Schließen erwartete. Änderungen: - : - wurde in umbenannt. - wurde als neues Register hinzugefügt. - : - Implementierung der Lese- und Schreib-Callbacks für und unter Verwendung der entsprechenden -Bibliotheksfunktionen. Diese Änderungen stellen sicher, dass die Zephyr-Anwendung die Endstromschwellenwerte korrekt über Modbus bereitstellt und das Python-Tool diese Werte nun richtig lesen und schreiben kann. --- software/include/lib/modbus_server.h | 7 ++++++- software/lib/modbus_server/modbus_server.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/software/include/lib/modbus_server.h b/software/include/lib/modbus_server.h index 2bd2504..2d55bd1 100644 --- a/software/include/lib/modbus_server.h +++ b/software/include/lib/modbus_server.h @@ -91,7 +91,12 @@ enum { /** * @brief Minimum current threshold in mA for end-position detection. */ - REG_HOLDING_VALVE_END_CURRENT_THRESHOLD_MA = 0x0003, + REG_HOLDING_END_CURRENT_THRESHOLD_OPEN_MA = 0x0003, + /** + * @brief Minimum current threshold in mA for end-position detection during + * closing. + */ + REG_HOLDING_END_CURRENT_THRESHOLD_CLOSE_MA = 0x0004, /** * @brief Bitmask for reading and writing digital outputs. Bit 0: Output 1, * Bit 1: Output 2. 1=ON, 0=OFF. diff --git a/software/lib/modbus_server/modbus_server.c b/software/lib/modbus_server/modbus_server.c index 2bf8e97..f7402e9 100644 --- a/software/lib/modbus_server/modbus_server.c +++ b/software/lib/modbus_server/modbus_server.c @@ -81,6 +81,12 @@ static int holding_reg_rd(uint16_t addr, uint16_t *reg) case REG_HOLDING_WATCHDOG_TIMEOUT_S: *reg = watchdog_timeout_s; break; + case REG_HOLDING_END_CURRENT_THRESHOLD_OPEN_MA: + *reg = valve_get_end_current_threshold_open(); + break; + case REG_HOLDING_END_CURRENT_THRESHOLD_CLOSE_MA: + *reg = valve_get_end_current_threshold_close(); + break; default: *reg = 0; break; @@ -114,6 +120,12 @@ static int holding_reg_wr(uint16_t addr, uint16_t reg) case REG_HOLDING_MAX_CLOSING_TIME_S: valve_set_max_close_time(reg); break; + case REG_HOLDING_END_CURRENT_THRESHOLD_OPEN_MA: + valve_set_end_current_threshold_open(reg); + break; + case REG_HOLDING_END_CURRENT_THRESHOLD_CLOSE_MA: + valve_set_end_current_threshold_close(reg); + break; case REG_HOLDING_WATCHDOG_TIMEOUT_S: watchdog_timeout_s = reg; if (watchdog_timeout_s > 0) { @@ -176,6 +188,12 @@ static int input_reg_rd(uint16_t addr, uint16_t *reg) case REG_INPUT_FIRMWARE_VERSION_PATCH: *reg = APP_PATCHLEVEL; break; + case REG_HOLDING_END_CURRENT_THRESHOLD_OPEN_MA: + *reg = valve_get_end_current_threshold_open(); + break; + case REG_HOLDING_END_CURRENT_THRESHOLD_CLOSE_MA: + *reg = valve_get_end_current_threshold_close(); + break; default: *reg = 0; break;