Extend modbus tcp class
parent
180898a5a5
commit
6651121030
|
|
@ -57,6 +57,14 @@ ModbusTCPMaster::~ModbusTCPMaster()
|
||||||
{
|
{
|
||||||
if (m_reconnectTimer) {
|
if (m_reconnectTimer) {
|
||||||
m_reconnectTimer->stop();
|
m_reconnectTimer->stop();
|
||||||
|
delete m_reconnectTimer;
|
||||||
|
m_reconnectTimer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_modbusTcpClient) {
|
||||||
|
m_modbusTcpClient->disconnectDevice();
|
||||||
|
delete m_modbusTcpClient;
|
||||||
|
m_modbusTcpClient = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_modbusTcpClient) {
|
if (m_modbusTcpClient) {
|
||||||
|
|
@ -84,27 +92,40 @@ void ModbusTCPMaster::setHostAddress(const QHostAddress &hostAddress)
|
||||||
m_hostAddress = hostAddress;
|
m_hostAddress = hostAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QHostAddress ModbusTCPMaster::hostAddress() const
|
||||||
|
{
|
||||||
|
return m_hostAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint ModbusTCPMaster::port() const
|
||||||
|
{
|
||||||
|
return m_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ModbusTCPMaster::setPort(uint port)
|
||||||
|
{
|
||||||
|
m_port = port;
|
||||||
|
return connectDevice();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ModbusTCPMaster::setHostAddress(const QHostAddress &hostAddress)
|
||||||
|
{
|
||||||
|
m_hostAddress = hostAddress;
|
||||||
|
return connectDevice();
|
||||||
|
}
|
||||||
|
|
||||||
bool ModbusTCPMaster::connectDevice() {
|
bool ModbusTCPMaster::connectDevice() {
|
||||||
// TCP connection to target device
|
// TCP connection to target device
|
||||||
|
qCDebug(dcModbusTCP()) << "Setting up TCP connecion" << QString("%1:%2").arg(m_hostAddress.toString()).arg(m_port);
|
||||||
if (!m_modbusTcpClient)
|
if (!m_modbusTcpClient)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Only connect if we are in the unconnected state
|
m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkPortParameter, m_port);
|
||||||
if (m_modbusTcpClient->state() == QModbusDevice::UnconnectedState) {
|
m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkAddressParameter, m_hostAddress.toString());
|
||||||
qCDebug(dcModbusTCP()) << "Connecting modbus TCP client to" << QString("%1:%2").arg(m_hostAddress.toString()).arg(m_port);
|
m_modbusTcpClient->setTimeout(m_timeout);
|
||||||
m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkPortParameter, m_port);
|
m_modbusTcpClient->setNumberOfRetries(m_numberOfRetries);
|
||||||
m_modbusTcpClient->setConnectionParameter(QModbusDevice::NetworkAddressParameter, m_hostAddress.toString());
|
|
||||||
m_modbusTcpClient->setTimeout(m_timeout);
|
|
||||||
m_modbusTcpClient->setNumberOfRetries(m_numberOfRetries);
|
|
||||||
return m_modbusTcpClient->connectDevice();
|
|
||||||
} else if (m_modbusTcpClient->state() != QModbusDevice::ConnectedState) {
|
|
||||||
// Restart the timer in case of connecting not finished yet or closing
|
|
||||||
m_reconnectTimer->start();
|
|
||||||
} else {
|
|
||||||
qCWarning(dcModbusTCP()) << "Connect modbus TCP device" << QString("%1:%2").arg(m_hostAddress.toString()).arg(m_port) << "called, but the socket is currently in the" << m_modbusTcpClient->state();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return m_modbusTcpClient->connectDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModbusTCPMaster::disconnectDevice()
|
void ModbusTCPMaster::disconnectDevice()
|
||||||
|
|
@ -112,21 +133,9 @@ void ModbusTCPMaster::disconnectDevice()
|
||||||
if (!m_modbusTcpClient)
|
if (!m_modbusTcpClient)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Stop the reconnect timer since disconnect was explicitly called
|
|
||||||
m_reconnectTimer->stop();
|
|
||||||
m_modbusTcpClient->disconnectDevice();
|
m_modbusTcpClient->disconnectDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ModbusTCPMaster::reconnectDevice()
|
|
||||||
{
|
|
||||||
qCWarning(dcModbusTCP()) << "Reconnecting modbus TCP device" << QString("%1:%2").arg(m_hostAddress.toString()).arg(m_port);
|
|
||||||
if (!m_modbusTcpClient)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
disconnectDevice();
|
|
||||||
return connectDevice();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ModbusTCPMaster::connected() const
|
bool ModbusTCPMaster::connected() const
|
||||||
{
|
{
|
||||||
return m_connected;
|
return m_connected;
|
||||||
|
|
@ -154,9 +163,14 @@ void ModbusTCPMaster::setTimeout(int timeout)
|
||||||
m_modbusTcpClient->setTimeout(timeout);
|
m_modbusTcpClient->setTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ModbusTCPMaster::timeout()
|
QString ModbusTCPMaster::errorString() const
|
||||||
{
|
{
|
||||||
return m_modbusTcpClient->timeout();
|
return m_modbusTcpClient->errorString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModbusDevice::Error ModbusTCPMaster::error() const
|
||||||
|
{
|
||||||
|
return m_modbusTcpClient->error();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ModbusTCPMaster::errorString() const
|
QString ModbusTCPMaster::errorString() const
|
||||||
|
|
@ -485,4 +499,6 @@ void ModbusTCPMaster::onModbusStateChanged(QModbusDevice::State state)
|
||||||
} else if (state == QModbusDevice::UnconnectedState) {
|
} else if (state == QModbusDevice::UnconnectedState) {
|
||||||
m_reconnectTimer->start();
|
m_reconnectTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit connectionStateChanged(connected);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue