Merge PR #126: SunSpec: Do not delete TCP connection upon reconnect

master
jenkins 2023-05-22 17:15:09 +02:00
commit 2781b4ba7e
1 changed files with 6 additions and 18 deletions

View File

@ -130,6 +130,10 @@ bool SunSpecConnection::discoveryRunning() const
bool SunSpecConnection::connectDevice() 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 << "..."; qCDebug(dcSunSpec()) << "Connecting" << this << "...";
return m_modbusTcpClient->connectDevice(); return m_modbusTcpClient->connectDevice();
} }
@ -142,15 +146,8 @@ void SunSpecConnection::disconnectDevice()
bool SunSpecConnection::reconnectDevice() bool SunSpecConnection::reconnectDevice()
{ {
// Recreate the entire connection so we clean up also any pending replies qCWarning(dcSunSpec()) << "Reconnecting" << this << "...";
qCDebug(dcSunSpec()) << "Reconnecting" << this << "...";
if (m_modbusTcpClient) {
m_modbusTcpClient->disconnectDevice(); m_modbusTcpClient->disconnectDevice();
delete m_modbusTcpClient;
m_modbusTcpClient = nullptr;
}
createConnection();
return connectDevice(); return connectDevice();
} }
@ -166,9 +163,6 @@ QList<SunSpecModel *> SunSpecConnection::models() const
QModbusReply *SunSpecConnection::sendReadRequest(const QModbusDataUnit &read, int serverAddress) QModbusReply *SunSpecConnection::sendReadRequest(const QModbusDataUnit &read, int serverAddress)
{ {
if (!m_modbusTcpClient)
return nullptr;
QModbusReply *reply = m_modbusTcpClient->sendReadRequest(read, serverAddress); QModbusReply *reply = m_modbusTcpClient->sendReadRequest(read, serverAddress);
monitorTimoutErrors(reply); monitorTimoutErrors(reply);
return reply; return reply;
@ -176,9 +170,6 @@ QModbusReply *SunSpecConnection::sendReadRequest(const QModbusDataUnit &read, in
QModbusReply *SunSpecConnection::sendWriteRequest(const QModbusDataUnit &write, int serverAddress) QModbusReply *SunSpecConnection::sendWriteRequest(const QModbusDataUnit &write, int serverAddress)
{ {
if (!m_modbusTcpClient)
return nullptr;
QModbusReply *reply = m_modbusTcpClient->sendWriteRequest(write, serverAddress); QModbusReply *reply = m_modbusTcpClient->sendWriteRequest(write, serverAddress);
monitorTimoutErrors(reply); monitorTimoutErrors(reply);
return reply; return reply;
@ -186,9 +177,6 @@ QModbusReply *SunSpecConnection::sendWriteRequest(const QModbusDataUnit &write,
QModbusReply *SunSpecConnection::sendRawRequest(const QModbusRequest &request, int serverAddress) QModbusReply *SunSpecConnection::sendRawRequest(const QModbusRequest &request, int serverAddress)
{ {
if (!m_modbusTcpClient)
return nullptr;
QModbusReply *reply = m_modbusTcpClient->sendRawRequest(request, serverAddress); QModbusReply *reply = m_modbusTcpClient->sendRawRequest(request, serverAddress);
monitorTimoutErrors(reply); monitorTimoutErrors(reply);
return reply; return reply;