00. 目录

文章目录

  • 00. 目录
  • 01. 概述
  • 02. 开发环境
  • 03. 公有类型
  • 04. 成员方法
  • 05. 信号
  • 06. 附录

01. 概述

QModbusServer类是用于接收和处理Modbus请求的接口。

 Header:  #include <QModbusServer>qmake: QT += serialbus Since: Qt 5.8 Inherits: QModbusDevice Inherited By: QModbusRtuSerialSlave and QModbusTcpServer

Modbus网络可以具有多个Modbus服务器。Modbus服务器由QModbusClient代表的Modbus客户端读取/写入。QModbusServer与Modbus后端通信,为用户提供了便捷的API。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 公有类型

 enum Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption }

enum 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 可以用于用户特定目的的第一个选项。

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

04. 成员方法

 QModbusServer(QObject *parent = nullptr)用指定的parent构造一个Modbus服务器。bool data(QModbusDataUnit *newData) const返回newData给定的寄存器范围内的值。newData必须提供有效的寄存器类型,起始地址和valueCount。返回的newData将包含与给定范围关联的寄存器值。如果newData包含有效的寄存器类型但起始地址为负,则返回整个寄存器映射,并适当调整newData的大小。bool data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const读取Modbus服务器中存储的数据。Modbus服务器具有四个表(table),每个表都有一个唯一的地址字段,该地址字段用于从所需字段读取数据。有关不同表的更多信息,请参见QModbusDataUnit :: RegisterType。false如果地址超出映射范围,或者甚至未定义寄存器类型,则返回。virtual bool processesBroadcast() const如果传输层应处理广播,则子类应实现此功能。true如果当前处理的请求是广播请求,则实现应返回;否则,返回。否则false。默认实现始终返回false。注意:此函数的返回值仅在processRequest()或processPrivateRequest()内部有意义,否则只能告诉最后处理的请求是广播请求。int serverAddress() const返回此Mobus服务器实例的地址。bool setData(const QModbusDataUnit &newData)将newData写入Modbus服务器映射。false如果newData范围不在地图范围内,则返回。如果调用成功,则发出dataWritten()信号。请注意,当寻址的寄存器未更改时,不会发射信号。当newData包含与寄存器已经完全
相同的值时,可能会发生这种情况。尽管如此,true在这种情况下该函数仍会返回。bool setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)将数据写入Modbus服务器。Modbus服务器具有四个表(table),每个表都有一个唯一的地址字段,该地址字段用于将数据写入所需的字段。返回false地址是否在地图范围之外。如果调用成功,则发出dataWritten()信号。请注意,当数据未更改时,不会发射信号。尽管如此,true在这种情况下该函数仍会返回。virtual bool setMap(const QModbusDataUnitMap &map)设置注册的映射结构,以供其他ModBus客户端请求映射。寄存器值初始化为零。true成功回报;否则false。如果在连接之前未调用此函数,则会设置一个零条目的默认寄存器。注意:调用此函数将丢弃先前设置的任何寄存器值。void setServerAddress(int serverAddress)将此Modbus服务器实例的地址设置为serverAddress。virtual bool setValue(int option, const QVariant &newValue)设置NEWVALUE的选项和返回true成功; false除此以外。virtual QVariant value(int option) const返回选项的值,QVariant如果未设置选项,则返回无效值。virtual QModbusResponse processPrivateRequest(const QModbusPdu &request)此功能应由定制Modbus服务器实现。如果给定的请求不是标准的Modbus请求,则由processRequest()调用。覆盖此功能可处理未在Modbus应用协议规范1.1b中指定的其他功能代码和子功能代码。重新实现应再次调用此函数,以确保针对
自定义Modbus实现不处理的所有未知函数代码返回异常响应。此默认实现返回QModbusExceptionResponse,其中请求功能代码和错误代码设置为非法功能。virtual QModbusResponse processRequest(const QModbusPdu &request)处理Modbus客户端请求并返回Modbus响应。此函数根据请求的性质返回QModbusResponse或QModbusExceptionResponse。该功能的默认实现处理Modbus应用协议规范1.1b定义的所有标准Modbus功能代码。规范中未包括的所有其他Modbus功能代码均
转发至processPrivateRequest()。通过重新实现此功能,可以覆盖标准Modbus功能代码请求的默认处理。重写必须处理有问题的请求类型,并返回适当的
QModbusResponse。一个常见的原因可能是过滤掉对数据值的功能代码请求,以限制读/写访问和特定实现(例如,以太网
或Modbus Plus传输层上的串行线路诊断)所不需要的功能代码。其他所有请求类型都应转发到此默认实现。注意:不应重写此功能,以为非标准Modbus请求类型提供自定义实现。virtual bool readData(QModbusDataUnit *newData) const读取newData给定的寄存器范围内的值,并将数据写回到newData。true成功返回,或者false如果newData为0,则返回newData范围超出映射范围,或者registerType()不存在。注意:实现从其他后备存储读取(然后从默认后备存储读取)的子类也需要实现setMap()和writeData()。virtual bool writeData(const QModbusDataUnit &newData)
将newData写入Modbus服务器映射。返回true表示成功,或false如果newData范围是地图范围或registerType()之外不存在。注意:实现写入不同后备存储(然后是默认后备存储)的子类也需要实现setMap()和readData()。所述dataWritten()信号需要
从功能执行内部以及发射。

05. 信号

 void dataWritten(QModbusDataUnit::RegisterType table, int address, int size)当Modbus客户端已将一个或多个数据字段写入Modbus服务器时,将发出此信号。该信号包含有关已写入字段的信息:写入的寄存器类型(表),写入的第一个字段的地址,和从address开始写入的连续字段的大小。当待写入字段由于值不变而没有变化时,不发射信号。

06. 附录

6.1 Qt教程汇总
网址:https://dengjin.blog.csdn.net/article/details/115174639

【Qt】QModbusServer类相关推荐

  1. Qt学习之路(1)------Qt常用类用法说明

    Qt常用类 向控制台输出文本 第一个例子,我们采用STL的方式: console.cpp #include <iostream>int main() {std::cout << ...

  2. Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...

  3. 详解 QT 主要类 QWidget

    QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容. AD: 2013云计算架构师 ...

  4. Qt4_在次线程中使用Qt的类

    在次线程中使用Qt的类 当函数可以同时被不同的线程安全地调用时,就称其为"线程安全的"(thread-safe).如果在不同的线程中对某一共享数据同时调用两个线程安全的函数,那么结 ...

  5. QT QVariant类数据类型使用

    QT QVariant类数据类型使用 1. QVariant 类用于封装数据成员的类型及取值等信息,该类类似于 C++ 共用体 union ,一个QVariant 对象,一次只能保存一个单一类型的值. ...

  6. 0004:Qt常用类 - QTime

    Qt常用类 - QTime 1 开发环境 在介绍内容之前,先说明一下开发环境,如下图: Qt版本:Qt5.3.2: Qt开发工具:Qt Creater 3.2.1: Qt构建工具:Desktop Qt ...

  7. Qt自定义类之自由移动的mainwindow

    先要清楚,只是拖动mainwindow你是拖不动那个界面的,但是又想要设计漂亮的无标题栏的控件时,那就需要加自己的重写函数了 一开始我被这个东西给吓到了,因为在网上看了很多人的文章,但是发现我找不到他 ...

  8. Qt 常用类——QStandardItemModel

    转载:落叶知秋时 类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构 ...

  9. Qt添加类文件编译后,再添加宏Q_OBJECT

    问题简述 创建项目的时候,已经添加了类文件,前期认为不需要信号槽,就没有添加宏Q_OBJECT,后面项目需要,又加入了宏Q_OBJECT,但是发现只是添加了一个宏Q_OBJECT,除此之外没有改动其它 ...

最新文章

  1. 单链表:头结点和头指针的实现方式
  2. DHCP 中继实验
  3. hadoop配置文件默认配置
  4. android 应用状态,保持应用程序状态在Android上
  5. html5离线保存需要联网吗,html5 离线存储
  6. 计算未来轻沙龙 | 对抗攻击、强化学习,你关心的都在这里!
  7. Python机器学习---Pyecharts制作可视化大屏
  8. C# .Net 视频下载功能(本机文件)及转发下载功能(Http远程文件)
  9. Python编程从入门到实践~函数
  10. linux vim 添加注释_vim基础教程
  11. 【python基础语法】python实现交换操作a,b = b,a的原理
  12. [转]unresolved external symbol _main解决办法
  13. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少?
  14. Android开机动画过程
  15. java练习项目 拼图游戏
  16. 如果你现在没有目标,对未来很迷茫、、打扰下 耽误几秒钟看看这个故事 故事很短 但是你一定会有所收获。...
  17. layout_marginTop=-3dp导致内容被遮挡的问题处理
  18. ★☆★新书已经到手《Java程序员,上班那点事儿》正式销售纪念帖★☆★
  19. 从键盘输入n个数 求其中的最大数
  20. css朗逸保险丝盒机舱,【朗逸保险盒】朗逸保险盒位置图解、拆卸方法_车主指南...

热门文章

  1. c 复杂的前置后置面试题_采摘后18小时直达货架,利农集团用后置仓“直连”生鲜电商...
  2. mq多个消费者消费一个消息_ActiveMQ多个消费者消费不均匀问题
  3. python 底层原理_Python字典的核心底层原理讲解
  4. Java黑皮书课后题第5章:*5.51(最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀
  5. 硬盘基本知识(磁头、磁道、扇区、柱面) 转
  6. AngularJS学习之旅—AngularJS Http(九)
  7. 1小时钟回顾MySQL语法(中)
  8. ERROR:非静态成员引用必须与特定对象相对
  9. # EXP8 Web基础
  10. mysql数据库的系统操作基本操作