From c4e2178c3adb3368d31ff102700ac8cbdd6678f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 26 Apr 2023 15:52:43 +0200 Subject: [PATCH] SunSpec: Do not delete TCP connection upon reconnect --- libnymea-sunspec/sunspecconnection.cpp | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/libnymea-sunspec/sunspecconnection.cpp b/libnymea-sunspec/sunspecconnection.cpp index 4f852d8..4e9159d 100644 --- a/libnymea-sunspec/sunspecconnection.cpp +++ b/libnymea-sunspec/sunspecconnection.cpp @@ -130,6 +130,10 @@ bool SunSpecConnection::discoveryRunning() const bool SunSpecConnection::connectDevice() { + m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkPortParameter, m_port); + m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkAddressParameter, m_hostAddress.toString()); + m_modbusTcpClient->setTimeout(2000); + m_modbusTcpClient->setNumberOfRetries(3); qCDebug(dcSunSpec()) << "Connecting" << this << "..."; return m_modbusTcpClient->connectDevice(); } @@ -142,15 +146,8 @@ void SunSpecConnection::disconnectDevice() bool SunSpecConnection::reconnectDevice() { - // Recreate the entire connection so we clean up also any pending replies - qCDebug(dcSunSpec()) << "Reconnecting" << this << "..."; - if (m_modbusTcpClient) { - m_modbusTcpClient->disconnectDevice(); - delete m_modbusTcpClient; - m_modbusTcpClient = nullptr; - } - - createConnection(); + qCWarning(dcSunSpec()) << "Reconnecting" << this << "..."; + m_modbusTcpClient->disconnectDevice(); return connectDevice(); } @@ -166,9 +163,6 @@ QList SunSpecConnection::models() const QModbusReply *SunSpecConnection::sendReadRequest(const QModbusDataUnit &read, int serverAddress) { - if (!m_modbusTcpClient) - return nullptr; - QModbusReply *reply = m_modbusTcpClient->sendReadRequest(read, serverAddress); monitorTimoutErrors(reply); return reply; @@ -176,9 +170,6 @@ QModbusReply *SunSpecConnection::sendReadRequest(const QModbusDataUnit &read, in QModbusReply *SunSpecConnection::sendWriteRequest(const QModbusDataUnit &write, int serverAddress) { - if (!m_modbusTcpClient) - return nullptr; - QModbusReply *reply = m_modbusTcpClient->sendWriteRequest(write, serverAddress); monitorTimoutErrors(reply); return reply; @@ -186,9 +177,6 @@ QModbusReply *SunSpecConnection::sendWriteRequest(const QModbusDataUnit &write, QModbusReply *SunSpecConnection::sendRawRequest(const QModbusRequest &request, int serverAddress) { - if (!m_modbusTcpClient) - return nullptr; - QModbusReply *reply = m_modbusTcpClient->sendRawRequest(request, serverAddress); monitorTimoutErrors(reply); return reply;