本页内容

QModbusClient Class

QModbusClient 类是用于发送 Modbus 请求的接口。更多内容...

头文件: #include <QModbusClient>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
继承自: QModbusDevice
继承自:

QModbusRtuSerialClient 以及QModbusTcpClient

公共函数

QModbusClient(QObject *parent = nullptr)
int numberOfRetries() const
QModbusReply *sendRawRequest(const QModbusRequest &request, int serverAddress)
QModbusReply *sendReadRequest(const QModbusDataUnit &read, int serverAddress)
QModbusReply *sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress)
QModbusReply *sendWriteRequest(const QModbusDataUnit &write, int serverAddress)
void setNumberOfRetries(int number)
void setTimeout(int newTimeout)
int timeout() const

信号

void timeoutChanged(int newTimeout)

受保护函数

virtual bool processPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)
virtual bool processResponse(const QModbusResponse &response, QModbusDataUnit *data)

详细说明

QModbusClient API 围绕一个 QModbusClient 对象构建,该对象保存其发送的请求所用的通用配置和设置。整个 Qt 应用程序只需一个 QModbusClient 对象即可。

一旦创建了 QModbusClient 对象,应用程序即可使用它来发送请求。返回的对象用于获取对应请求的响应数据。

QModbusClient 具有异步 API。当调用 finished 槽时,其接收的参数是QModbusReply 对象,该对象包含 PDU 以及元数据(如寻址信息等)。

注意:QModbusClient 会将接收到的请求放入队列中。并行执行的请求数量取决于协议。例如,在桌面平台上,HTTP 协议针对一个主机/端口组合会并行发出 6 个请求。

成员函数文档

[explicit] QModbusClient::QModbusClient(QObject *parent = nullptr)

根据指定的parent 创建一个Modbus客户端设备。

int QModbusClient::numberOfRetries() const

返回客户端在请求失败前将尝试的重试次数。默认值设置为3 。

另请参阅 setNumberOfRetries()。

[virtual protected] bool QModbusClient::processPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)

需由自定义 Modbus 客户端实现。默认实现会忽略 `response ` 和 `data`。它始终返回 `false` 以表示错误。

[virtual protected] bool QModbusClient::processResponse(const QModbusResponse &response, QModbusDataUnit *data)

处理 Modbus 服务器response ,并将解码后的信息存储在data 中。成功时返回true ;否则返回false 。

注意: 默认实现 并不支持所有FunctionCode。请在自定义 Modbus 客户端实现中重写此方法,以处理所需的功能。

QModbusReply *QModbusClient::sendRawRequest(const QModbusRequest &request, int serverAddress)

发送一个原始的 Modbusrequest 。原始请求可以包含任何能够放入 Modbus PDU 数据部分且具有有效功能码的内容。因此,发送前仅进行有效性检查,详见QModbusPdu::isValid 。如果未发生错误,该函数将返回一个新的有效QModbusReply ;否则返回 nullptr。Modbus 网络中可能存在多个服务器,每个服务器都有一个唯一的serverAddress 。

另请参阅 QModbusReply::rawResult()。

QModbusReply *QModbusClient::sendReadRequest(const QModbusDataUnit &read, int serverAddress)

向read 所指向的数据发送读取请求。如果未发生错误,则返回一个新的有效QModbusReply 对象;否则返回nullptr。Modbus网络中可能存在多个服务器,每个服务器都有一个唯一的serverAddress 。

QModbusReply *QModbusClient::sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress)

使用Modbus功能码QModbusPdu::ReadWriteMultipleRegisters 向read 所指向的数据发送读取请求,并向write 所指向的数据发送修改请求。若未发生错误,则返回一个新的有效QModbusReply 对象;否则返回nullptr。Modbus网络中可能存在多个服务器,每个服务器都有唯一的serverAddress 。

注意: 只有当read 和write 均为QModbusDataUnit::HoldingRegisters 类型时,发送此类请求才有效。

QModbusReply *QModbusClient::sendWriteRequest(const QModbusDataUnit &write, int serverAddress)

向write 所指向的数据发送修改请求。若未发生错误,则返回一个新的有效QModbusReply 对象;否则返回nullptr。Modbus网络中可能存在多个服务器,每个服务器都有一个唯一的serverAddress 。

void QModbusClient::setNumberOfRetries(int number)

设置客户端在请求失败前将执行的number 次重试。默认值设为3 。

注意:新值 必须大于或等于0 。更改此属性仅会影响新请求,不会影响已排定的请求。

另请参阅 numberOfRetries()。

void QModbusClient::setTimeout(int newTimeout)

设置此QModbusClient 实例的newTimeout 。最小超时时间为 10 毫秒。

客户端会根据该超时时间来确定等待服务器响应的时间长度。如果在规定的超时时间内未收到响应,则会触发TimeoutError 。

已激活/正在运行的超时设置不受此类超时时长变更的影响。

另请参阅 timeout 和timeoutChanged()。

int QModbusClient::timeout() const

返回此QModbusClient 实例使用的超时值(单位为毫秒)。超时由TimeoutError 表示。默认值为 1000 毫秒。

另请参阅 setTimeout 和timeoutChanged()。

[signal] void QModbusClient::timeoutChanged(int newTimeout)

当此QModbusClient 实例使用的超时时间发生变化时,会触发此信号。设备的新响应超时时间将作为newTimeout 参数传递。

另请参阅 setTimeout()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.