QModbusServer类
QModbusServer类是对接收和处理Modbus请求的接口。 更多...
| 头文件 | #include <QModbusServer> | 
| CMake | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) | 
| qmake | QT += serialbus | 
| 继承 | QModbusDevice | 
| 继承自 | 
公共类型
| 枚举 | Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption } | 
公共函数
| QModbusServer(QObject *parent = nullptr) | |
| bool | data(QModbusDataUnit *newData) const | 
| bool | data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const | 
| virtual bool | processesBroadcast() const | 
| int | serverAddress() const | 
| bool | setData(const QModbusDataUnit &newData) | 
| bool | setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data) | 
| virtual bool | setMap(const QModbusDataUnitMap &map) | 
| void | setServerAddress(int serverAddress) | 
| virtual bool | setValue(int option, const QVariant &newValue) | 
| virtual QVariant | value(int option) const | 
信号
| void | dataWritten(QModbusDataUnit::RegisterType table, int address, int size) | 
保护函数
| virtual QModbusResponse | processPrivateRequest(const QModbusPdu &request) | 
| virtual QModbusResponse | processRequest(const QModbusPdu &request) | 
| virtual bool | readData(QModbusDataUnit *newData) const | 
| virtual bool | writeData(const QModbusDataUnit &newData) | 
详细说明
Modbus网络可以有多种Modbus服务器。Modbus服务器由由QModbusClient表示的Modbus客户机进行读写操作。QModbusServer与Modbus后端通信,为用户提供方便的API。
成员类型文档
枚举 QModbusServer::Option
每个Modbus服务器都有一个与之关联的值集,每个值都有一个自己的选项。
通用选项(及其关联的类型)包括:
| 常量 | 值 | 描述 | 
|---|---|---|
| QModbusServer::DiagnosticRegister | 0 | 服务器的诊断寄存器。 quint16 | 
| QModbusServer::ExceptionStatusOffset | 1 | 服务器的异常状态字偏移。 quint16 | 
| QModbusServer::DeviceBusy | 2 | 标志,用于指示服务器正在处理一个持续时间较长的程序命令。 quint16 | 
| QModbusServer::AsciiInputDelimiter | 3 | Modbus ASCII消息结束分隔符。 char | 
| QModbusServer::ListenOnlyMode | 4 | 标志,用于设置服务器只监听模式。此功能通常只由Modbus串行设备支持。 bool | 
| QModbusServer::ServerIdentifier | 5 | 服务器的标识符,不是服务器地址。 quint8 | 
| QModbusServer::RunIndicatorStatus | 6 | 服务器的运行指示器。 quint8 | 
| QModbusServer::AdditionalData | 7 | 服务器的附加数据。 QByteArray | 
| QModbusServer::DeviceIdentification | 8 | 服务器的物理和功能描述。 QModbusDeviceIdentification | 
用户选项
| 常量 | 值 | 描述 | 
|---|---|---|
| QModbusServer::UserOption | 0x100 | 第一个可以用于用户特定目的的选项。 | 
对于用户选项,由开发者决定使用哪些类型,并确保组件在访问和设置值时使用正确的类型。
成员函数文档
[显式] QModbusServer::QModbusServer(QObject *parent = nullptr)
使用指定的parent构造Modbus服务器。
bool QModbusServer::data(QModbusDataUnit *newData) const
返回由newData指定的寄存器范围内的值。
newData必须提供有效的寄存器类型、起始地址和值计数值。返回的newData将包含与给定范围关联的寄存器值。
如果newData包含有效的寄存器类型,但起始地址为负数,则返回整个寄存器映射,并且newData大小适当。
另请参阅setData。
bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
读取Modbus服务器中存储的数据。Modbus服务器有四个表(table),每个都有一个唯一的地址字段,用于从所需字段读取数据。有关不同表的信息,请参阅QModbusDataUnit::RegisterType。如果地址超出了映射范围或寄存器类型未定义,返回false。
另请参阅QModbusDataUnit::RegisterType 和 setData。
[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)
当Modbus客户端将一个或多个字段数据写入Modbus服务器时,会发出此信号。信号包含关于写入字段的信息
- 写入的寄存器类型(table),
- address是第一个写入的字段地址,
- 以及从address开始的连续字段的size。
当要写入的字段没有因值未变而改变时,不会发出该信号。
[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)
应在此自定义Modbus服务器中实现此函数。当给定的request不是标准Modbus请求时,由processRequest()调用。
重写此函数允许处理Modbus应用程序协议规范1.1b中未指定的附加功能代码和子功能代码。实现应该再次调用此函数,以确保返回所有未知功能代码的异常响应,而自定义Modbus实现无法处理这些功能代码。
此默认实现返回一个功能代码设置为非法功能的QModbusExceptionResponse。
另请参阅 processRequest。
[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)
处理Modbus客户端的request并返回一个Modbus响应。此函数根据请求的性质返回QModbusResponse或QModbusExceptionResponse。
此函数的默认实现处理所有由Modbus应用程序协议规范1.1b定义的标准Modbus功能代码。规范中未包含的所有其他Modbus功能代码都转发到processPrivateRequest。
可以通过重写此函数来重写标准Modbus功能代码请求的默认处理。重写必须处理相关请求类型并返回适当的QModbusResponse。一个常见的原因可能是过滤数据值的功能代码请求,以限制读/写访问,或特别实现中不希望有的功能代码,例如在网络或Modbus Plus传输层上的串行线路诊断。其他请求类型应转发到此默认实现。
注意: 不应重写此函数以提供非标准Modbus请求类型的自定义实现。
另请参阅 processPrivateRequest。
[virtual] bool QModbusServer::processesBroadcast() const
如果传输层需要处理广播,子类应实现此函数。然后应该返回true,如果当前正在处理的请求是广播请求;否则返回false。默认实现始终返回false。
注意: 此函数的返回值仅在processRequest()或processPrivateRequest()内才有意义,否则只能说明最后处理的请求是广播请求。
[虚拟保护] bool QModbusServer::readData(QModbusDataUnit *newData) const
读取由 newData 给定的寄存器范围内的值,并将数据写回 newData。如果成功返回 true,如果 newData 为 0、newData 范围超出映射范围或 registerType() 不存在,则返回 false。
int QModbusServer::serverAddress() const
返回此 Modbus 服务器实例的地址。
另请参阅:setServerAddress。
bool QModbusServer::setData(const QModbusDataUnit &newData)
将 newData 写入 Modbus 服务器映射。如果 newData 范围超出映射范围,则返回 false。
如果调用成功,将发出 dataWritten() 信号。请注意,当所寻址的寄存器没有变化时,不会发出信号。这可能发生在 newData 包含的值与寄存器已有的值完全相同的情况下。尽管如此,此函数在这种情况下也返回 true。
另请参阅:data。
bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
将数据写入 Modbus 服务器。Modbus 服务器有四个表(table),每个表都有一个唯一的 address 字段,用于将 data 写入所需字段。如果地址超出映射范围,则返回 false。
如果调用成功,将发出 dataWritten() 信号。请注意,当 data 没有变化时,不会发出信号。尽管如此,此函数在这种情况下也返回 true。
另请参阅:QModbusDataUnit::RegisterType、data() 和 dataWritten。
[虚] bool QModbusServer::setMap(const QModbusDataUnitMap &map)
将注册映射结构设置为其他 ModBus 客户端请求的 map。寄存器值用零初始化。成功时返回 true;否则返回 false。
如果在这个功能在连接之前没有被调用,将设置一个默认的寄存器,包含零条记录。
注意:调用此函数会丢弃之前设置的任何寄存器值。
void QModbusServer::setServerAddress(int serverAddress)
将此 Modbus 服务器实例的地址设置为 serverAddress。
另请参阅:serverAddress。
[虚拟] bool QModbusServer::setValue(int option, const QVariant &newValue)
设置option的newValue,在成功时返回true;否则返回false。
注意:如果选项关联的类型是quint8或quint16并且newValue的类型更大,数据将被截断或转换将失败。
| 键 | 描述 | 
|---|---|
| QModbusServer::DiagnosticRegister | 将服务器设备的诊断寄存器设置为newValue。默认预设值为 0x0000。寄存器的位值需要具体设备文档。 | 
| QModbusServer::ExceptionStatusOffset | 将服务器的异常状态字节偏移设置为newValue,这是线圈中的绝对偏移地址(0x寄存器)。Modbus寄存器表从 0x0000h开始。默认预设值为0x0000,使用与Modicon 984 CPU(线圈1-8)类似的异常状态线圈。函数返回 | 
| QModbusServer::DeviceBusy | 设置一个标志,表示服务器正在处理长时间的程序命令。有效值是 0x0000(不忙)和0xffff(忙)。默认预设值为0x0000。 | 
| QModbusServer::AsciiInputDelimiter | newValue成为未来Modbus ASCII消息的消息分隔符的末尾。默认预设值为 \n。 | 
| QModbusServer::ListenOnlyMode | 将服务器的监视只读状态设置为newValue。如果将监视只读模式设置为 true,将监视消息但不会发送响应。默认预设值为false。 | 
| QModbusServer::ServerIdentifier | 将服务器的制造商标识符设置为newValue。可能的值范围是 0x00到0xff。默认预设值为0x0a。 | 
| QModbusServer::RunIndicatorStatus | 将服务器的运行指示器状态设置为newValue。此数据由QModbusPdu::ReportServerId功能码作为附加数据使用。有效值是 0x00(关闭)和0xff(开启)。默认预设值为0xff(开启)。 | 
| QModbusServer::AdditionalData | 将服务器的附加数据设置为newValue。此数据由QModbusPdu::ReportServerId功能码作为附加数据使用。最大数据大小不能超过249字节,以符合响应消息大小的限制。默认预设值为 Qt Modbus Server。 | 
| QModbusServer::DeviceIdentification | 设置服务器的物理和功能描述。默认情况下,没有设置额外的设备标识数据。 | 
| QModbusServer::UserOption | 将用户选项的值设置为newValue。 注意:对于用户选项,开发者需要决定使用哪种类型,并确保在访问和设置值时组件使用正确的类型。 | 
另请参阅:value()。
[虚拟] QVariant QModbusServer::value(int option) const
返回option的值或一个无效的QVariant,如果没有设置该选项。
| 选项 | 描述 | 
|---|---|
| QModbusServer::DiagnosticRegister | 返回服务器的诊断寄存器值。诊断寄存器包含设备特定的内容,其中每位都有特定的含义。 | 
| QModbusServer::ExceptionStatusOffset | 返回异常状态字节位置在线圈寄存器中的偏移地址。 | 
| QModbusServer::DeviceBusy | 返回一个标志,表示服务器是否正在处理长时间的程序命令。 | 
| QModbusServer::AsciiInputDelimiter | 返回Modbus ASCII消息的结束消息分隔符。 | 
| QModbusServer::ListenOnlyMode | 返回服务器的仅监听状态。消息将被监控,但不会发送响应。 | 
| QModbusServer::ServerIdentifier | 返回服务器的制造商识别码。这可以是一个介于 0x00到 0xff 范围内的任意值。 | 
| QModbusServer::RunIndicatorStatus | 返回服务器的运行指示器状态。该数据由 QModbusPdu::ReportServerId 功能码作为补充使用。 | 
| QModbusServer::AdditionalData | 返回服务器的附加数据。该数据由 QModbusPdu::ReportServerId 功能码作为补充使用。 | 
| QModbusServer::DeviceIdentification | 返回服务器的物理和功能描述。 | 
| QModbusServer::UserOption | 返回用户选项的值。 注意:对于用户选项,开发者需要决定使用哪种类型,并确保在访问和设置值时组件使用正确的类型。 | 
另请参阅setValue。
[虚拟受保护] bool QModbusServer::writeData(const QModbusDataUnit &newData)
将 newData 写入Modbus服务器映射。在成功时返回 true,如果 newData 的范围超出映射范围或 registerType() 不存在,则返回 false。
注意:实现写入不同于默认存储的后台存储的子类还必须实现 setMap() 和 readData()。需要在函数实现中发出 dataWritten() 信号。
另请参阅setMap、readData 和 dataWritten。
© 2024 Qt公司。本文件中的文档贡献属于其各自的版权所有者。本文件提供的文档根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可。Qt及其相关的标志是芬兰及其它国家的Qt公司注册商标。所有其他商标都是其各自所有者的财产。