首页 > 技术知识 > 正文

首先连接到服务端:

QModbusTcpClient *client = new QModbusTcpClient(); client->setConnectionParameter(QModbusDevice::NetworkAddressParameter, “192.168.100.1”); client->setConnectionParameter(QModbusDevice::NetworkPortParameter, 8008); client->connectDevice();

这样就连接上服务端了,下面可以发送请求了

发送读或写请求到服务端

写请求:

QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, 40003, 1); // write 1 value in address 40003 writeUnit.setValue(0, 0x253); //这里先建好QModbusDataUnit if (auto *reply = client->sendWriteRequest(writeUnit, 1)) //发送写请求 { if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, [this, reply]() { if (reply->error() != QModbusDevice::NoError) // error in reply reply->deleteLater(); }); } else { if (reply->error() != QModbusDevice::NoError) // error in reply // broadcast replies return immediately reply->deleteLater(); } } else { // error in request }
<

读请求:

QModbusDataUnit readUnit(QModbusDataUnit::InputRegisters, 40006, 1); // just read input register 40006 if (auto *reply = client->sendReadRequest(readUnit, 255)) // client id 255 { if (!reply->isFinished()) { // connect the finished signal of the request to your read slot connect(reply, &QModbusReply::finished, this, &YourClass::readReady); } else { delete reply; // broadcast replies return immediately } } else { // request error } YourClass::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, here 40006 int value = unit.value(0); // value of the start address + 0 … } else { // reply error } reply->deleteLater(); // delete the reply }
<

猜你喜欢