From 97b5a8aae84c747180ef0e59ba9460cca9297457 Mon Sep 17 00:00:00 2001 From: zivillian Date: Sun, 26 Jun 2022 20:59:53 +0200 Subject: [PATCH] add config option for modbus tcp timeout --- include/config.h | 3 +++ src/config.cpp | 12 ++++++++++++ src/main.cpp | 2 +- src/pages.cpp | 21 +++++++++++++++++---- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/config.h b/include/config.h index f70231c..005c90e 100644 --- a/include/config.h +++ b/include/config.h @@ -10,6 +10,7 @@ private: Preferences *_prefs; int16_t _tcpPort; + uint32_t _tcpTimeout; unsigned long _modbusBaudRate; uint32_t _modbusConfig; unsigned long _serialBaudRate; @@ -19,6 +20,8 @@ void begin(Preferences *prefs); uint16_t getTcpPort(); void setTcpPort(uint16_t value); + uint32_t getTcpTimeout(); + void setTcpTimeout(uint32_t value); uint32_t getModbusConfig(); unsigned long getModbusBaudRate(); void setModbusBaudRate(unsigned long value); diff --git a/src/config.cpp b/src/config.cpp index 43f700a..a254415 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -3,6 +3,7 @@ Config::Config() :_prefs(NULL) ,_tcpPort(502) + ,_tcpTimeout(10000) ,_modbusBaudRate(9600) ,_modbusConfig(SERIAL_8N1) ,_serialBaudRate(115200) @@ -13,6 +14,7 @@ void Config::begin(Preferences *prefs) { _prefs = prefs; _tcpPort = _prefs->getUShort("tcpPort", _tcpPort); + _tcpTimeout = _prefs->getULong("tcpTimeout", _tcpTimeout); _modbusBaudRate = _prefs->getULong("modbusBaudRate", _modbusBaudRate); _modbusConfig = _prefs->getULong("modbusConfig", _modbusConfig); _serialBaudRate = _prefs->getULong("serialBaudRate", _serialBaudRate); @@ -29,6 +31,16 @@ void Config::setTcpPort(uint16_t value){ _prefs->putUShort("tcpPort", _tcpPort); } +uint32_t Config::getTcpTimeout(){ + return _tcpTimeout; +} + +void Config::setTcpTimeout(uint32_t value){ + if (_tcpTimeout == value) return; + _tcpTimeout = value; + _prefs->putULong("tcpTimeout", _tcpTimeout); +} + uint32_t Config::getModbusConfig(){ return _modbusConfig; } diff --git a/src/main.cpp b/src/main.cpp index 3b72a05..4677b58 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,7 +37,7 @@ void setup() { { MBbridge.attachServer(i, i, ANY_FUNCTION_CODE, &MBclient); } - MBbridge.start(config.getTcpPort(), 10, 10000); + MBbridge.start(config.getTcpPort(), 10, config.getTcpTimeout()); dbgln("[modbus] finished"); setupPages(&webServer, &MBclient, &MBbridge, &config, &wm); webServer.begin(); diff --git a/src/pages.cpp b/src/pages.cpp index 1dead5c..4763099 100644 --- a/src/pages.cpp +++ b/src/pages.cpp @@ -54,10 +54,18 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * response->print("" "" "" "" + "" + "" + "" + "" "" "
" - "" + "" ""); - response->printf("", config->getTcpPort()); + response->printf("", config->getTcpPort()); + response->print("
" + "" + ""); + response->printf("", config->getTcpTimeout()); response->print("
" @@ -163,11 +171,16 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * }); server->on("/config", HTTP_POST, [config](AsyncWebServerRequest *request){ dbgln("[webserver] POST /config"); - if (request->hasParam("port", true)){ - auto port = request->getParam("port", true)->value().toInt(); + if (request->hasParam("tp", true)){ + auto port = request->getParam("tp", true)->value().toInt(); config->setTcpPort(port); dbgln("[webserver] saved port"); } + if (request->hasParam("tt", true)){ + auto timeout = request->getParam("tt", true)->value().toInt(); + config->setTcpTimeout(timeout); + dbgln("[webserver] saved timeout"); + } if (request->hasParam("mb", true)){ auto baud = request->getParam("mb", true)->value().toInt(); config->setModbusBaudRate(baud);