QModbusClient 类

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

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

QModbusRtuSerialClientQModbusTcpClient

公共函数

QModbusClient(QObject *parent = nullptr)
intnumberOfRetries() 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)
voidsetNumberOfRetries(int number)
voidsetTimeout(int newTimeout)
inttimeout() const

信号

voidtimeoutChanged(int newTimeout)

保护函数

virtual boolprocessPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)
virtual boolprocessResponse(const QModbusResponse &response, QModbusDataUnit *data)

详细描述

QModbusClient API是以一个 QModbusClient 对象为基础构建的,该对象存储了它发送的请求的通用配置和设置。对于整个 Qt 应用程序,一个 QModbusClient 就足够了。

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

QModbusClient 有一个异步 API。当调用 finished 插槽时,它接受的参数是包含 PDU 以及元数据(寻址等)的 QModbusReply 对象。

注意:QModbusClient 按队列排队它接收到的请求。并行执行的请求数量取决于协议。例如,桌面平台上的 HTTP 协议对一个主机/端口组合同时发出 6 个请求。

成员函数文档

[显式] QModbusClient::QModbusClient(QObject *parent = nullptr)

使用指定的 parent 构造一个 Modbus 客户端设备。

int QModbusClient::numberOfRetries() const

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

另请参阅 setNumberOfRetries()。

[虚保护] bool QModbusClient::processPrivateResponse(const QModbusResponse &response, QModbusDataUnit *data)

由自定义Modbus客户端实现。默认实现忽略了responsedata。它始终返回false以指示错误。

[虚保护] bool QModbusClient::processResponse(const QModbusResponse &response, QModbusDataUnit *data)

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

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

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

发送原始Modbus request。原始请求可以在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)

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

注意:只有当 readwrite 都为 QModbusDataUnit::HoldingRegisters 类型时,发送此类请求才有效。

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

向数据指向的内容发送修改请求。如果没有错误发生,则返回新的有效 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 毫秒。

参阅:setTimeouttimeoutChanged

[信号] void QModbusClient::timeoutChanged(int newTimeout)

当此 QModbusClient 实例使用的超时更改时,发出此信号。将设备的新响应超时作为 newTimeout 传递。

参阅:setTimeout

© 2024 The Qt Company Ltd. 本文档中的文档贡献是由各自的拥有者拥有的版权。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及其各自的标志是芬兰及其它国家/地区的 The Qt Company Ltd. 的 商标。所有其他商标均为其各自所有者的财产。