SunSpec: Do not delete TCP connection upon reconnect

master
Simon Stürz 2023-04-26 15:52:43 +02:00
parent c95fecd6e9
commit c4e2178c3a
1 changed files with 6 additions and 18 deletions

View File

@ -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<SunSpecModel *> 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;