QModbusServer类

QModbusServer类是对接收和处理Modbus请求的接口。 更多...

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

QModbusRtuSerialServerQModbusTcpServer

公共类型

枚举Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption }

公共函数

QModbusServer(QObject *parent = nullptr)
booldata(QModbusDataUnit *newData) const
booldata(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
virtual boolprocessesBroadcast() const
intserverAddress() const
boolsetData(const QModbusDataUnit &newData)
boolsetData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
virtual boolsetMap(const QModbusDataUnitMap &map)
voidsetServerAddress(int serverAddress)
virtual boolsetValue(int option, const QVariant &newValue)
virtual QVariantvalue(int option) const

信号

voiddataWritten(QModbusDataUnit::RegisterType table, int address, int size)

保护函数

virtual QModbusResponseprocessPrivateRequest(const QModbusPdu &request)
virtual QModbusResponseprocessRequest(const QModbusPdu &request)
virtual boolreadData(QModbusDataUnit *newData) const
virtual boolwriteData(const QModbusDataUnit &newData)

详细说明

Modbus网络可以有多种Modbus服务器。Modbus服务器由由QModbusClient表示的Modbus客户机进行读写操作。QModbusServer与Modbus后端通信,为用户提供方便的API。

成员类型文档

枚举 QModbusServer::Option

每个Modbus服务器都有一个与之关联的值集,每个值都有一个自己的选项。

通用选项(及其关联的类型)包括:

常量描述
QModbusServer::DiagnosticRegister0服务器的诊断寄存器。quint16
QModbusServer::ExceptionStatusOffset1服务器的异常状态字偏移。quint16
QModbusServer::DeviceBusy2标志,用于指示服务器正在处理一个持续时间较长的程序命令。quint16
QModbusServer::AsciiInputDelimiter3Modbus ASCII消息结束分隔符。char
QModbusServer::ListenOnlyMode4标志,用于设置服务器只监听模式。此功能通常只由Modbus串行设备支持。bool
QModbusServer::ServerIdentifier5服务器的标识符,不是服务器地址。quint8
QModbusServer::RunIndicatorStatus6服务器的运行指示器。quint8
QModbusServer::AdditionalData7服务器的附加数据。QByteArray
QModbusServer::DeviceIdentification8服务器的物理和功能描述。QModbusDeviceIdentification

用户选项

常量描述
QModbusServer::UserOption0x100第一个可以用于用户特定目的的选项。

对于用户选项,由开发者决定使用哪些类型,并确保组件在访问和设置值时使用正确的类型。

成员函数文档

[显式] 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::RegisterTypesetData

[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响应。此函数根据请求的性质返回QModbusResponseQModbusExceptionResponse

此函数的默认实现处理所有由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,如果 newData0newData 范围超出映射范围或 registerType() 不存在,则返回 false

注意:实现从默认以外的后端存储读取的子类也需要实现 setMap() 和 writeData

另请参阅:setMap() 和 writeData

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::RegisterTypedata() 和 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)

设置optionnewValue,在成功时返回true;否则返回false

注意:如果选项关联的类型是quint8quint16并且newValue的类型更大,数据将被截断或转换将失败。

描述
QModbusServer::DiagnosticRegister将服务器设备的诊断寄存器设置为newValue。默认预设值为0x0000。寄存器的位值需要具体设备文档。
QModbusServer::ExceptionStatusOffset将服务器的异常状态字节偏移设置为newValue,这是线圈中的绝对偏移地址(0x寄存器)。Modbus寄存器表从0x0000h开始。默认预设值为0x0000,使用与Modicon 984 CPU(线圈1-8)类似的异常状态线圈。

函数返回true如果线圈寄存器包含存储和检索状态线圈所需的8位,否则返回false

QModbusServer::DeviceBusy设置一个标志,表示服务器正在处理长时间的程序命令。有效值是0x0000(不忙)和0xffff(忙)。默认预设值为0x0000
QModbusServer::AsciiInputDelimiternewValue成为未来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() 信号。

另请参阅setMapreadDatadataWritten

© 2024 Qt公司。本文件中的文档贡献属于其各自的版权所有者。本文件提供的文档根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可。Qt及其相关的标志是芬兰及其它国家的Qt公司注册商标。所有其他商标都是其各自所有者的财产。