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公司注册商标。所有其他商标都是其各自所有者的财产。