Изменить «Modbus TCP» на «Modbus RTU»; с QT — QModbusTcpClient

Я бы отправил Modbus запрос конкретных данных, моя проблема в том, что я должен использовать мобильную связь, Wi-Fi, подключиться к пользовательской электронной карте, которая прямо в Modbus RTU,

Мой рабочий код подключения к электронной плате:

#include "connessione.h"#include <QModbusTcpClient>
#include <QVariant>
#include <QModbusDataUnit>
#include <QDebug>

connessione::connessione(QObject *parent) : QObject(parent)
{
qDebug() << "here debug " << "ok";

clientX = new QModbusTcpClient();
clientX->setConnectionParameter(QModbusDevice::NetworkAddressParameter, "192.168.222.1");
clientX->setConnectionParameter(QModbusDevice::NetworkPortParameter, 5555);

if (clientX->connectDevice())
{
qDebug()  << "connected: " << clientX->state();
}
else
{
qDebug()  << "ERRORE" << clientX->errorString();
}
}

void connessione::clickButton(){

QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 1); // just read input register 40006
//qDebug() << "readUnit" << readUnit.RegisterType;
qDebug() << "readUnit" << clientX->state();if (auto *reply = clientX->sendReadRequest(readUnit, 255)) // client id 255
{
if (!reply->isFinished())
{
// connect the finished signal of the request to your read slot
qDebug() << "connected" << reply->errorString();
connect(reply, &QModbusReply::finished, this, &connessione::readReady);
}
else
{
qDebug() << "Errore" << reply->errorString();
delete reply; // broadcast replies return immediately
}
}
else
{
qDebug() << "Errore" << reply->errorString();
// request error
}
}

void connessione::readReady()
{
QModbusReply *reply = qobject_cast<QModbusReply *>(sender());
if (!reply)
return;

if (reply->error() == QModbusDevice::NoError)
{
const QModbusDataUnit unit = reply->result();
int startAddress = unit.startAddress(); // the start address,
int value = unit.value(0); // value of the start address + 0

qDebug() << "NESSUN ERRORE" << reply->errorString();
}
else
{
qDebug() << "Errore readReady" << reply->errorString();
// reply error
}

reply->deleteLater(); // delete the reply
}

Строка журнала TCP отправлено:

D / libmodbusMobile.so (8042): (ноль): 0 ((ноль)): qt.modbus: (TCP
клиент) Отправлено TCP PDU: 0x0300000001 с tId: 2

это правильно: 0x0300000001

Но, к сожалению, моя электронная карта, встроенную прошивку, которую я не могу изменить, правильно с Modbus RTUтак что я должен изменить 0x0300000001 в 0x010300000001C1C2 где C1 и C2 — контрольные суммы.

я полагаю, что QModbusDataUnit создать буфер для отправки. Так как это изменить? Существуют ли ручные решения, где я строю буфер?

как изменить его и создать собственный буфер отправки, как в примере?

Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]