diff --git a/modbus/modbusrtumaster.cpp b/modbus/modbusrtumaster.cpp index d6e6800..57a45af 100644 --- a/modbus/modbusrtumaster.cpp +++ b/modbus/modbusrtumaster.cpp @@ -77,6 +77,11 @@ bool ModbusRTUMaster::connectDevice() return m_modbusRtuSerialMaster->connectDevice(); } +bool ModbusRTUMaster::connected() +{ + return (m_modbusRtuSerialMaster->state() == QModbusDevice::State::ConnectedState); +} + void ModbusRTUMaster::setNumberOfRetries(int number) { m_modbusRtuSerialMaster->setNumberOfRetries(number); diff --git a/modbus/modbusrtumaster.h b/modbus/modbusrtumaster.h index 81c91f1..3a69db3 100644 --- a/modbus/modbusrtumaster.h +++ b/modbus/modbusrtumaster.h @@ -45,6 +45,7 @@ public: ~ModbusRTUMaster(); bool connectDevice(); + bool connected(); void setNumberOfRetries(int number); void setTimeout(int timeout); diff --git a/modbus/modbustcpmaster.cpp b/modbus/modbustcpmaster.cpp index d0a4125..aeeba5f 100644 --- a/modbus/modbustcpmaster.cpp +++ b/modbus/modbustcpmaster.cpp @@ -71,6 +71,11 @@ bool ModbusTCPMaster::connectDevice() { return m_modbusTcpClient->connectDevice(); } +bool ModbusTCPMaster::connected() +{ + return (m_modbusTcpClient->state() == QModbusDevice::State::ConnectedState); +} + void ModbusTCPMaster::setNumberOfRetries(int number) { m_modbusTcpClient->setNumberOfRetries(number); diff --git a/modbus/modbustcpmaster.h b/modbus/modbustcpmaster.h index 0166c88..ae3d9b2 100644 --- a/modbus/modbustcpmaster.h +++ b/modbus/modbustcpmaster.h @@ -45,6 +45,7 @@ public: ~ModbusTCPMaster(); bool connectDevice(); + bool connected(); void setNumberOfRetries(int number); void setTimeout(int timeout); diff --git a/modbuscommander/integrationpluginmodbuscommander.cpp b/modbuscommander/integrationpluginmodbuscommander.cpp index 2ae7a14..e8462ec 100644 --- a/modbuscommander/integrationpluginmodbuscommander.cpp +++ b/modbuscommander/integrationpluginmodbuscommander.cpp @@ -568,6 +568,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing) if (!modbus) return; + if (!modbus->connected()) + return; // Send requests only if the modbus interface is connected + if (thing->thingClassId() == coilThingClassId) { requestId = modbus->readCoil(slaveAddress, registerAddress); } else if (thing->thingClassId() == discreteInputThingClassId) { @@ -583,6 +586,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing) if (!modbus) return; + if (!modbus->connected()) + return; // Send requests only if the modbus interface is connected + if (thing->thingClassId() == coilThingClassId) { requestId = modbus->readCoil(slaveAddress, registerAddress); } else if (thing->thingClassId() == discreteInputThingClassId) {