Port modbus rtu

This commit is contained in:
Simon Stürz 2025-08-18 11:33:57 +02:00
parent aa59ddd714
commit 685d28f88b
7 changed files with 30 additions and 11 deletions

View File

@ -54,7 +54,12 @@ ModbusRtuMasterImpl::ModbusRtuMasterImpl(const QUuid &modbusUuid, const QString
m_timeout(timeout) m_timeout(timeout)
{ {
#ifdef WITH_QTSERIALBUS #ifdef WITH_QTSERIALBUS
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
m_modbus = new QModbusRtuSerialClient(this);
#else
m_modbus = new QModbusRtuSerialMaster(this); m_modbus = new QModbusRtuSerialMaster(this);
#endif
m_modbus->setConnectionParameter(QModbusDevice::SerialPortNameParameter, m_serialPort); m_modbus->setConnectionParameter(QModbusDevice::SerialPortNameParameter, m_serialPort);
m_modbus->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, m_baudrate); m_modbus->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, m_baudrate);
m_modbus->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, m_dataBits); m_modbus->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, m_dataBits);
@ -63,7 +68,11 @@ ModbusRtuMasterImpl::ModbusRtuMasterImpl(const QUuid &modbusUuid, const QString
m_modbus->setNumberOfRetries(m_numberOfRetries); m_modbus->setNumberOfRetries(m_numberOfRetries);
m_modbus->setTimeout(m_timeout); m_modbus->setTimeout(m_timeout);
connect(m_modbus, &QModbusTcpClient::stateChanged, this, [=](QModbusDevice::State state){ #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
connect(m_modbus, &QModbusRtuSerialClient::stateChanged, this, [=](QModbusDevice::State state){
#else
connect(m_modbus, &QModbusRtuSerialMaster::stateChanged, this, [=](QModbusDevice::State state){
#endif
qCDebug(dcModbusRtu()) << "Connection state changed" << m_modbusUuid.toString() << m_serialPort << state; qCDebug(dcModbusRtu()) << "Connection state changed" << m_modbusUuid.toString() << m_serialPort << state;
if (state == QModbusDevice::ConnectedState) { if (state == QModbusDevice::ConnectedState) {
if (m_connected != true) { if (m_connected != true) {
@ -78,7 +87,11 @@ ModbusRtuMasterImpl::ModbusRtuMasterImpl(const QUuid &modbusUuid, const QString
} }
}); });
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
connect(m_modbus, &QModbusRtuSerialClient::errorOccurred, this, [=](QModbusDevice::Error error){
#else
connect(m_modbus, &QModbusRtuSerialMaster::errorOccurred, this, [=](QModbusDevice::Error error){ connect(m_modbus, &QModbusRtuSerialMaster::errorOccurred, this, [=](QModbusDevice::Error error){
#endif
qCWarning(dcModbusRtu()) << "Error occurred for modbus RTU master" << m_modbusUuid.toString() << m_serialPort << error << m_modbus->errorString(); qCWarning(dcModbusRtu()) << "Error occurred for modbus RTU master" << m_modbusUuid.toString() << m_serialPort << error << m_modbus->errorString();
if (error != QModbusDevice::NoError) { if (error != QModbusDevice::NoError) {
disconnectDevice(); disconnectDevice();

View File

@ -93,9 +93,15 @@ private:
bool m_connected = false; bool m_connected = false;
#ifdef WITH_QTSERIALBUS #ifdef WITH_QTSERIALBUS
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QModbusRtuSerialClient *m_modbus = nullptr;
#else
QModbusRtuSerialMaster *m_modbus = nullptr; QModbusRtuSerialMaster *m_modbus = nullptr;
#endif #endif
#endif // WITH_QTSERIALBUS
QString m_serialPort; QString m_serialPort;
qint32 m_baudrate; qint32 m_baudrate;
QSerialPort::Parity m_parity; QSerialPort::Parity m_parity;

View File

@ -21,14 +21,14 @@ packagesExist(systemd) {
greaterThan(QT_MAJOR_VERSION, 5) { greaterThan(QT_MAJOR_VERSION, 5) {
qtHaveModule(serialbus) { qtHaveModule(serialbus) {
message("Building with QtSerialBus support.") message("Building with QtSerialBus support.")
QT *= serialbus QT += serialbus
DEFINES += WITH_QTSERIALBUS DEFINES += WITH_QTSERIALBUS
} else { } else {
message("QtSerialBus package not found. Building without QtSerialBus support.") message("QtSerialBus package not found. Building without QtSerialBus support.")
} }
# Separate module in Qt6 # Separate module in Qt6
QT *= concurrent QT += concurrent
} else { } else {
packagesExist(Qt5SerialBus) { packagesExist(Qt5SerialBus) {
message("Building with QtSerialBus support.") message("Building with QtSerialBus support.")

View File

@ -11,9 +11,9 @@ INSTALLS += target
QT += sql websockets bluetooth dbus network QT += sql websockets bluetooth dbus network
greaterThan(QT_MAJOR_VERSION, 5) { greaterThan(QT_MAJOR_VERSION, 5) {
QT *= core5compat QT += core5compat
} else { } else {
QT *= xml QT += xml
} }
CONFIG += link_pkgconfig CONFIG += link_pkgconfig

View File

@ -2,9 +2,9 @@ include(../../../nymea.pri)
include(../autotests.pri) include(../autotests.pri)
greaterThan(QT_MAJOR_VERSION, 5) { greaterThan(QT_MAJOR_VERSION, 5) {
QT *= core5compat QT += core5compat
} else { } else {
QT *= xml QT += xml
} }
PKGCONFIG += nymea-mqtt PKGCONFIG += nymea-mqtt

View File

@ -2,9 +2,9 @@ include(../../../nymea.pri)
include(../autotests.pri) include(../autotests.pri)
greaterThan(QT_MAJOR_VERSION, 5) { greaterThan(QT_MAJOR_VERSION, 5) {
QT *= core5compat QT += core5compat
} else { } else {
QT *= xml QT += xml
} }

View File

@ -11,14 +11,14 @@ PKGCONFIG += nymea-zigbee
greaterThan(QT_MAJOR_VERSION, 5) { greaterThan(QT_MAJOR_VERSION, 5) {
qtHaveModule(serialbus) { qtHaveModule(serialbus) {
message("Building with QtSerialBus support.") message("Building with QtSerialBus support.")
QT *= serialbus QT += serialbus
DEFINES += WITH_QTSERIALBUS DEFINES += WITH_QTSERIALBUS
} else { } else {
message("QtSerialBus package not found. Building without QtSerialBus support.") message("QtSerialBus package not found. Building without QtSerialBus support.")
} }
# Separate module in Qt6 # Separate module in Qt6
QT *= concurrent QT += concurrent
} else { } else {
packagesExist(Qt5SerialBus) { packagesExist(Qt5SerialBus) {
message("Building with QtSerialBus support.") message("Building with QtSerialBus support.")