QtQModbusRequest类

Posted 沧海一笑-dj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QtQModbusRequest类相关的知识,希望对你有一定的参考价值。

00. 目录

01. 概述

QModbusRequest是一个容器类,其中包含存储在Modbus ADU中的功能码和数据。

 Header:  #include <QModbusRequest>
 qmake: QT += serialbus 
 Since: Qt 5.8 
 Inherits: QModbusPdu

Modbus请求通常由一个字节功能码和一个N个字节的数据组成。

典型的Modbus请求如下所示:

 QModbusRequest request(QModbusRequest::WriteMultipleCoils,
     QByteArray::fromHex("0013000a02cd01"));

**注意:**使用带有的构造函数时QByteArray,请确保在创建请求之前将包含的数据转换为big-endian字节顺序。

如果在编译时知道值,则可以这样创建相同的请求:

 quint16 startAddress = 19, numberOfCoils = 10;
 quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01;
 QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils,
     payloadInBytes, outputHigh, outputLow);

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 公有类型

[alias] QModbusRequest::CalcFuncPtr

这是decltype的类型别名。

Typedef指向与QModbusRequest :: calculateDataSize相同签名的自定义计算器函数的指针。

04. 公有成员方法

公有成员方法

 QModbusRequest(QModbusPdu::FunctionCode code, Args... data)
 构造一个QModbusRequest,其功能代码设置为code,有效载荷设置为data。数据被转换并以大端字节顺序存储。
 注意:用法是有限的,quint8并且quint16仅限使用。这是因为QDataStream流运算符不仅会附加原始数据,还会附加复杂类型的大小,
 计数等。    
     
 QModbusRequest(QModbusPdu::FunctionCode code, const QByteArray &data = QByteArray())
 构造一个QModbusResponse,将功能代码设置为code,将有效载荷设置为data。数据应该已经按大端字节顺序存储。    
     
 QModbusRequest(const QModbusPdu &pdu)
 构造pdu的副本。    
     
 QModbusRequest()
 构造一个无效的QModbusRequest。

静态公有成员方法

 int calculateDataSize(const QModbusRequest &request)
 根据请求的功能码和数据计算请求的预期数据大小。返回请求数据部分的完整大小;如果无法正确计算则返回-1int minimumDataSize(const QModbusRequest &request)
 根据请求的功能码返回预期的最小数据大小的请求; 如果功能码未知则返回-1void registerDataSizeCalculator(QModbusPdu::FunctionCode fc, QModbusRequest::CalcFuncPtr calculator)
 该函数注册一个用户定义的实现,以计算功能码fc的请求数据大小。它可以用来扩展或覆盖
 QModbusRequest :: calculateDataSize()中的实现。
 该CalcFuncPtr是一个指向自定义一个typedef计算器具有以下签名功能:
  
 int myCalculateDataSize(const QModbusRequest &pdu);

     

05. 关联非成员

QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)
从流中读取一个pdu并返回对该流的引用。

注意:由于PDU内部缺少大小指示符,该功能可能无法正确地流式传输带有功能代码QModbusPdu :: Diagnostics或QModbusPdu :: 
EncapsulatedInterfaceTransport的PDU。特别是当PDU嵌入到不以诊断/封装请求本身结尾的流中时,可能会发生这种情况。    

06. 附录

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

以上是关于QtQModbusRequest类的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch代码片段,及工具类SearchEsUtil.java

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

为啥片段类应该是公开的?

片段内部静态类和gradle问题

从片段类中的对话框添加项目到recyclerview。

如何从片段内的列表视图打开链接网址?