QModbusClient Class

QModbusClient 类是发送 Modbus 请求的接口。更多

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

QModbusRtuSerialClientQModbusTcpClient

公共函数

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。当调用完成槽时,它接收的参数是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 客户端实现。默认实现忽略responsedata 。它总是返回 false 表示错误。

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

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

注: 默认实现不支持所有FunctionCodes。在自定义 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

注意: :只有当readwrite 都是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

已激活/运行的超时不受超时持续时间更改的影响。

另请参阅 timeouttimeoutChanged()。

int QModbusClient::timeout() const

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

另请参阅 setTimeouttimeoutChanged()。

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

QModbusClient 实例使用的超时发生变化时,就会发出该信号。设备的新响应超时作为newTimeout 传递。

另请参阅 setTimeout() 。

© 2025 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.