QModbusDevice Class
QModbusDevice 类是 Modbus 类、QModbusServer 和QModbusClient 的基类。更多
头文件: | #include <QModbusDevice> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake: | QT += serialbus |
继承: | QObject |
继承于 |
公共类型
enum | ConnectionParameter { SerialPortNameParameter, SerialParityParameter, SerialBaudRateParameter, SerialDataBitsParameter, SerialStopBitsParameter, …, NetworkAddressParameter } |
enum | Error { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, InvalidResponseError } |
(since 6.0) enum | IntermediateError { ResponseCrcError, ResponseRequestMismatch } |
enum | State { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
公共函数
QModbusDevice(QObject *parent = nullptr) | |
virtual | ~QModbusDevice() |
bool | connectDevice() |
QVariant | connectionParameter(QModbusDevice::ConnectionParameter parameter) const |
QIODevice * | device() const |
void | disconnectDevice() |
QModbusDevice::Error | error() const |
QString | errorString() const |
void | setConnectionParameter(QModbusDevice::ConnectionParameter parameter, const QVariant &value) |
QModbusDevice::State | state() const |
信号
void | errorOccurred(QModbusDevice::Error error) |
void | stateChanged(QModbusDevice::State state) |
受保护函数
virtual void | close() = 0 |
virtual bool | open() = 0 |
void | setError(const QString &errorText, QModbusDevice::Error error) |
void | setState(QModbusDevice::State newState) |
成员类型文档
enum QModbusDevice::ConnectionParameter
该枚举描述了可为 Modbus 设备连接设置的可能值。
通用值(及相关类型)包括
常量 | 值 | 说明 |
---|---|---|
QModbusDevice::SerialPortNameParameter | 0 | 该参数表示用于设备通信的串行端口,如 COM1。QString |
QModbusDevice::SerialParityParameter | 1 | 该参数设置奇偶校验模式。QSerialPort::Parity |
QModbusDevice::SerialBaudRateParameter | 2 | 该参数设置通信的数据波特率。QSerialPort::BaudRate |
QModbusDevice::SerialDataBitsParameter | 3 | 该参数设置帧中的数据位。QSerialPort::DataBits |
QModbusDevice::SerialStopBitsParameter | 4 | 该参数设置帧中的停止位数。QSerialPort::StopBits |
QModbusDevice::NetworkPortParameter | 5 | 该参数设置网络端口。int |
QModbusDevice::NetworkAddressParameter | 6 | 该参数设置网络通信的主机地址。QString |
enum QModbusDevice::Error
该枚举描述了所有可能的错误条件。
常量 | 值 | 说明 |
---|---|---|
QModbusDevice::NoError | 0 | 未发生错误。 |
QModbusDevice::ReadError | 1 | 读取操作过程中发生错误。 |
QModbusDevice::WriteError | 2 | 写入操作时发生错误。 |
QModbusDevice::ConnectionError | 3 | 尝试打开后台时发生错误。 |
QModbusDevice::ConfigurationError | 4 | 尝试设置配置参数时发生错误。 |
QModbusDevice::TimeoutError | 5 | I/O 过程中发生超时。I/O 操作未在给定时间内完成。 |
QModbusDevice::ProtocolError | 6 | 发生 Modbus 特定协议错误。 |
QModbusDevice::ReplyAbortedError | 7 | 由于设备断开连接,应答中止。 |
QModbusDevice::UnknownError | 8 | 发生未知错误。 |
QModbusDevice::InvalidResponseError (since Qt 6.4) | 9 | 解析应答时发生错误,或者当前实现不支持FunctionCode 。在后一种情况下,自定义 Modbus 客户端实现可以覆盖processResponse() 和processPrivateResponse() 方法,以提供对所需功能的支持。 |
[since 6.0]
enum QModbusDevice::IntermediateError
该枚举描述了在 Modbus 应答的整个发送和接收周期中可能发生的错误。
常量 | 值 | 说明 |
---|---|---|
QModbusDevice::ResponseCrcError | 0 | 收到一个带有错误 CRC 的 Modbus 响应。 |
QModbusDevice::ResponseRequestMismatch | 1 | 收到了 Modbus 响应,但与打开请求不匹配,可能是因为 PDU 的功能代码不匹配。 |
如果出现上述任何中间错误,则可能重新发送帧,直到达到最大重试次数为止。
中间错误列表可通过QModbusReply 中间错误函数查看。
该枚举在 Qt 6.0 中引入。
另请参阅 QModbusClient::numberOfRetries() 和QModbusReply::intermediateErrors()。
enum QModbusDevice::State
该枚举描述了所有可能的设备状态。
常量 | 值 | 描述 |
---|---|---|
QModbusDevice::UnconnectedState | 0 | 设备断开连接。 |
QModbusDevice::ConnectingState | 1 | 设备正在连接。 |
QModbusDevice::ConnectedState | 2 | 设备已连接至 Modbus 网络。 |
QModbusDevice::ClosingState | 3 | 设备正在关闭。 |
成员函数文档
[explicit]
QModbusDevice::QModbusDevice(QObject *parent = nullptr)
使用指定的parent 构建一个 Modbus 设备。
[virtual noexcept]
QModbusDevice::~QModbusDevice()
销毁QModbusDevice 实例
[pure virtual protected]
void QModbusDevice::close()
该函数负责关闭 Modbus 连接。执行时必须确保实例的state() 设置为QModbusDevice::UnconnectedState 。
另请参阅 disconnectDevice()。
bool QModbusDevice::connectDevice()
将设备连接到 Modbus 网络。如果连接过程成功启动,则返回true
;否则返回false
。最终连接成功的确认要求state() 更改为QModbusDevice::ConnectedState 。
该函数调用open() 作为其实现的一部分。
另请参阅 open()。
QVariant QModbusDevice::connectionParameter(QModbusDevice::ConnectionParameter parameter) const
返回与给定连接parameter 相关的值。返回值可以为空。
默认情况下,QModbusDevice
使用一些常用值进行初始化。串行端口设置为偶数奇偶校验、每秒 19200 位的波特率、八个数据位和一个停止位。主机地址的网络设置为本地主机,端口设置为 502。
注意: 要使串行连接成功,SerialPortNameParameter 必须设置为有效的通信端口。有关有效串行端口的信息可从QSerialPortInfo 上获取。
注意: 如果设备已连接,则重新连接设备后会考虑设置。
另请参阅 setConnectionParameter() 和ConnectionParameter 。
QIODevice *QModbusDevice::device() const
返回用于 ModBus 通信的底层QIODevice ,如果设备尚未完全初始化,则返回nullptr
。
注意: 不要存储指向底层设备的指针,因为它可能在任何时候失效。
void QModbusDevice::disconnectDevice()
断开设备连接。
该函数调用close() 作为其实现的一部分。
QModbusDevice::Error QModbusDevice::error() const
返回设备的错误状态。
另请参阅 setError() 和QModbusDevice::Error 。
[signal]
void QModbusDevice::errorOccurred(QModbusDevice::Error error)
当发生error 类型的错误时,会发出该信号。
QString QModbusDevice::errorString() const
返回设备错误的描述性错误文本。
另请参阅 QModbusDevice::Error 。
[pure virtual protected]
bool QModbusDevice::open()
该函数由connectDevice() 调用。子类必须提供一个实现,在 Modbus 连接或连接启动成功时返回true
;否则返回false
。
实现必须确保实例的state() 在成功时设置为QModbusDevice::ConnectingState 或QModbusDevice::ConnectedState ;否则QModbusDevice::UnconnectedState 。通常,连接进程异步返回时使用QModbusDevice::ConnectingState ,同步连接行为时使用QModbusDevice::ConnectedState 。
另请参阅 connectDevice()。
void QModbusDevice::setConnectionParameter(QModbusDevice::ConnectionParameter parameter, const QVariant &value)
将parameter 的值设置为value 。如果parameter 已经存在,先前的值将被覆盖。活动或运行中的连接不受参数更改的影响。
另请参阅 ConnectionParameter 和connectionParameter()。
[protected]
void QModbusDevice::setError(const QString &errorText, QModbusDevice::Error error)
设置设备的错误状态。发生错误时,ModBus 设备实现必须使用该函数设置error 类型和描述性errorText 。
另请参阅 error() 和QModbusDevice::Error 。
[protected]
void QModbusDevice::setState(QModbusDevice::State newState)
将设备状态设置为newState 。Modbus 设备实施必须使用该函数更新设备状态。
另请参阅 state() 。
QModbusDevice::State QModbusDevice::state() const
返回设备的当前状态。
另请参阅 setState() 和stateChanged()。
[signal]
void QModbusDevice::stateChanged(QModbusDevice::State state)
每次设备状态发生变化时,都会发出该信号。新状态由state 表示。
© 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.