Skip to content

Instantly share code, notes, and snippets.

@EdoardoVignati
Created June 4, 2024 15:04
Show Gist options
  • Save EdoardoVignati/e0e15d7c817bbd802db075c12063b852 to your computer and use it in GitHub Desktop.
Save EdoardoVignati/e0e15d7c817bbd802db075c12063b852 to your computer and use it in GitHub Desktop.
Example of how to read a holding register in C++ using QT Modbus Serial Client 6.x
#include <QCoreApplication>
#include <QVariant>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QModbusRtuSerialClient>
#include <QModbusDevice>
#include <QModbusClient>
#include <QVariant>
#include <QSerialPort>
#include <thread>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QModbusRtuSerialClient* client = new QModbusRtuSerialClient();
client->setConnectionParameter(QModbusDevice::SerialPortNameParameter,"COM7");
client->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,QSerialPort::Baud9600);
client->setConnectionParameter(QModbusDevice::SerialDataBitsParameter,QSerialPort::Data8);
client->setConnectionParameter(QModbusDevice::SerialStopBitsParameter,QSerialPort::OneStop);
client->setConnectionParameter(QModbusDevice::SerialParityParameter,QSerialPort::NoParity);
client->setTimeout(2000);
if(!client->connectDevice())
qDebug() << client->errorString();
QModbusDataUnit readUnit;
readUnit.setRegisterType(QModbusDataUnit::HoldingRegisters);
readUnit.setStartAddress(0);
readUnit.setValueCount(1);
QModbusReply* reply = client->sendReadRequest(readUnit,2);
QObject::connect(reply, &QModbusReply::finished, QCoreApplication::instance(), [&]() {
qDebug() << reply->result().values();
});
QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, QCoreApplication::instance(), [&]() {
client->disconnect();
});
std::this_thread::sleep_for(std::chrono::seconds(3));
return a.exec();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment