C++ ModBUS TCP客户端工具 qModMaster 介绍及使用

qModMaster工具介绍

QModMaster是一个基于Qt的Modbus主站(Master)模拟器,用于模拟和测试Modbus TCP和RTU通信。它提供了一个直观的图形界面,使用户能够轻松设置和发送Modbus请求,并查看和分析响应数据。

以下是QModMaster工具的一些主要特点和功能:

  1.  支持Modbus TCP和RTU:QModMaster可以用作Modbus TCP和RTU通信的主站模拟器。您可以根据需要选择适合您的通信方式。
  2.  直观的图形界面:QModMaster提供了一个用户友好的图形界面,使您可以轻松设置和发送Modbus请求,并查看响应数据。您可以选择读取和写入不同类型的寄存器数据,如线圈、输入寄存器、保持寄存器等。
  3.  灵活的数据显示:QModMaster以表格的形式显示读取的数据,使您可以清晰地查看和分析Modbus响应。您可以选择以十进制或十六进制格式显示数据,并可以根据需要进行排序和筛选。
  4.   实时监控:QModMaster还提供实时监控功能,可以持续读取和显示设备的寄存器数据。您可以设置刷新频率,并随时监视设备的状态和数据变化。
  5.   导入和导出功能:QModMaster支持导入和导出Modbus配置和数据,方便您在不同环境之间共享和备份配置。

QModMaster是一个开源项目,可以在GitHub上找到其源代码和相关文档。您可以根据您的需求和应用场景,使用QModMaster来模拟和测试Modbus通信,并进行调试和验证。

主站(Master),是一个控制设备,负责发起和管理 Modbus TCP 通信。它可以向从站发送读取或写入请求,并接收从站返回的响应。主站通常是一个上位机或监控系统,负责控制和监视整个系统。

从站(Slave):从站是被动设备,响应主站的请求并提供数据。它可以是传感器、PLC 或其他设备。从站接收主站的读取或写入请求,并返回相应的数据或执行相应的操作。每一个slave设备都有一个唯一的地址。

在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。

Modbus TCP中,主站通常是tcp的client端,从站是tcp的server端,开启默认端口502。这个很容易混淆,这里在强调下。

qModMaster源码地址

QModMaster download | SourceForge.net

https://codeload.github.com/Thuzerland/qModbusMaster/zip/refs/heads/master

GitHub - Thuzerland/qModbusMaster: Fork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/)

qModMaster工具地址 

https://nchc.dl.sourceforge.net/project/qmodmaster/qModMaster-Win64-exe-0.5.3-beta.zip

modbusTCP协议格式

ModbusTCP的数据帧可分为两部分:MBAP+PDU

报文主要分为两部分,协议头(MBAP Header)和PDU。PDU 又包含功能码(Function code)和数据(Data)两部分。 

(一)报文头MBAP:MBAP为报文头,长度为7字节,组成如下:

8b3c8714-64e9-11ed-8abf-dac502259ad0.png

8b4d16ec-64e9-11ed-8abf-dac502259ad0.png

(二)帧结构PDU:PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

以下报文示例:

[TCP]>Tx > 18:37:13:318 - 00  02  00  00  00  06  01  03  00  00  00  03  
[TCP]>Rx > 18:37:13:330 - 00  02  00  00  00  09  01  03  06  00  02  00  03  00  04   

 

举例发包:

0232 0000 0009 01 10 9C490001020000

协议头  0232 0000 0009 01
PDU: 10 9C49 0001 02 0000

与标准modbusRTU的区别

标准modbusRTU模式,协议格式是:

 从中可以看到跟modbusTCP的区别。modbusTCP比起它少了两个字节的CRC校验码而已。modbusTCP协议中的MBAP的单元标识符,则相当于从站的地址。

8b605d6a-64e9-11ed-8abf-dac502259ad0.png

根据对象的不同,Modbus的功能码有:

8b90595c-64e9-11ed-8abf-dac502259ad0.png

8ba20a62-64e9-11ed-8abf-dac502259ad0.png

Modbus Slave工具介绍

Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--Modbus Poll,则是模拟Modbus协议主机的上位机软件。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。目前软件支持01、02、03、04、05、06、15、16功能码,原始报文查看,数据记录等功能,是调试Modbus协议栈的好帮手。

Modbus Slave下载链接

链接:百度网盘 请输入提取码 
提取码:lft0

测试截图 

qModMaster配合ModbusSlave的使用

寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。      

寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。

在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。 

QT的modbus读写

方式有很多,由于协议简单也可以自己组包写。也有现成的库,如可以参考qModMaster源码,它使用了libmodbus库,推荐使用libmodbus库。这里介绍另外一种的使用,Qt Modbus 模块 读写。

1.引入模块

QT       += serialbus serialport

2.引入头文件

#include <QModbusTcpClient>
#include <QModbusReply>

3.建立连接

    QModbusClient *modbusDevice=new QModbusTcpClient();modbusDevice->setConnectionParameter(QModbusDevice::NetworkPortParameter,1502);modbusDevice->setConnectionParameter(QModbusDevice::NetworkAddressParameter, "127.0.0.1");modbusDevice->setTimeout(2000);modbusDevice->setNumberOfRetries(3);modbusDevice->connectDevice();

4.读取和写入

//发送请求
QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters,30001,1);if (auto *reply = modbusDevice->sendReadRequest(readUnit, 1)){if (!reply->isFinished()){connect(reply, &QModbusReply::finished,this,&ThisClass::readReady);}else{delete reply;}}
//处理请求
void ThisClass::readReady()
{QModbusReply *reply = qobject_cast<QModbusReply *>(sender());if (!reply)return;if (reply->error() == QModbusDevice::NoError){const QModbusDataUnit unit = reply->result();
//        if(unit.startAddress()==30001){qint16 res=unit.value(0);
//        }}else{}reply->deleteLater(); // delete the reply
}//写入,举例向40009寄存器地址写入1 (0232 0000 0009 01 10 9C49 0001 02 0001)//写请求 9C490001020001 :数据部分QByteArray data=QByteArray::fromHex("9c490001020001");// QModbusRequest::WriteMultipleRegisters:功能码 10QModbusRequest request(QModbusRequest::WriteMultipleRegisters,data);
// 1 :设备地址if (auto *reply = modbusDevice->sendRawRequest(request,1)){if (!reply->isFinished()){connect(reply, &QModbusReply::finished,this,&ThisClass::writeReady);}else{delete reply;}}//响应处理void ThisClass::writeReady()
{QModbusReply *reply = qobject_cast<QModbusReply *>(sender());if (!reply)return;reply->deleteLater(); // delete the reply
}

其他资源

【工具使用】Modbus Poll软件使用详解_知识噬元兽的博客-CSDN博客

Modbus RTU 协议详解_modbus rtu协议_shwill123的博客-CSDN博客

【工具使用】Modbus Slave软件使用详解_知识噬元兽的博客-CSDN博客

Modbus test and simulation

图文详解ModbusTCP协议 - 接口/总线/驱动 - 电子发烧友网

Qt Modbus TCP 通讯读写操作_qt writemultipleregisters_wblong_cs的博客-CSDN博客

QT使用libmodbus库(windows)_libmodbus qt_图灵小眼睛的博客-CSDN博客

Modbus——基于libmodbus开发 - 知乎

fuzz测试libmodbus | AFL篇_afl fuzz_CollinXia的博客-CSDN博客

libmodbus入坑记录 - 代码先锋网

Modbus 通讯协议 (RTU传输模式)_modbus rtu_csdn_dx的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/34024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论——最短路算法

引入&#xff1a; 如上图&#xff0c;已知图G。 问节点1到节点3的最短距离。 可心算而出为d[1,2]d[2,3]112,比d[1,3]要小。 求最短路径算法&#xff1a; 1.Floyd(弗洛伊德) 是一种基于三角形不等式的多源最短路径算法。边权可以为负数 表现为a[i,j]a[j,k]<a[i,k]。 …

什么是响应式设计?列举几种实现响应式设计的方法。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是响应式设计&#xff1f;⭐ 实现响应式设计的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏…

Docker安装ElasticSearch/ES 7.4.0

目录 前言安装ElasticSearch/ES安装步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 安装步骤2&#xff1a;拉取ElasticSearch镜像1 拉取镜像2 查看已拉取的镜像 安装步骤3&#xff1a;创建容器创建容器方…

android 如何分析应用的内存(十八)终章——使用Perfetto查看内存与调用栈之间的泄露

android 如何分析应用的内存&#xff08;十八&#xff09; 在前面两篇文章中&#xff0c;先是介绍了如何用AS查看Android的堆内存&#xff0c;然后介绍了使用MAT查看 Android的堆内存。AS能够满足基本的内存分析需求&#xff0c;但是无法进行多个堆的综合比较&#xff0c;因此…

ArcGIS Pro基础:【按顺序编号】工具实现属性字段的编号自动赋值

本次介绍一个字段的自动排序编号赋值工具&#xff0c;基于arcgis 的字段计算器工具也可以实现类似功能&#xff0c;但是需要自己写一段代码实现&#xff0c; 相对而言不是很方便。 如下所示&#xff0c;该工具就是【编辑】下的【属性】下的【按顺序编号】工具。 其操作方法是…

FreeRTOS(二值信号量)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、信号量的概念 1、信号量的基本概念 2、信号量的分类 二、二值信号量的定义与应用 1、二值信号量的定义 2、二值信号量的应用 三、二值信号量的运作机制 1、FreeRTOS任务间二值…

Spring Web

◆ Spring整合web环境 - Javaweb三大组件及环境特点 - Spring整合web环境的思路及实现 把ApplicationContext放在ServleContent域【listen组件中】中 ContextLoaderListener &#xff1a;部分代码写死了 /*** 配置通用的Spring容器的创建&#xff0c;只需要创建一次就可以*/…

SQL server 与 MySQL count函数、以及sum、avg 是否包含 为null的值

sql server 与 mysql count 作用一样。 count 计算指定字段出现的个数&#xff0c; 不是计算 null的值 获取表的条数 count(n) n:常数 count(1),count&#xff08;0&#xff09;等 count(*) count(字段) 其中字段为null 不会统计在内。 avg(字段)、sum(字段) 跟count(字段)…

科技资讯|苹果手机版Vision Pro头显专利曝光,内嵌苹果手机使用

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项头显相关的技术专利&#xff0c;展示了一款亲民款 Vision Pro 头显&#xff0c;可以将 iPhone 放置在头显内部充当屏幕。 根据patentlyapple 媒体报道&#xff0c;这是苹果公司…

案例12 Spring MVC入门案例

网页输入http://localhost:8080/hello&#xff0c;浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…

【计算机网络】TCP协议超详细讲解

文章目录 1. TCP简介2. TCP和UDP的区别3. TCP的报文格式4. 确认应答机制5. 超时重传6. 三次握手7. 为什么两次握手不行?8. 四次挥手9. 滑动窗口10. 流量控制11. 拥塞控制12. 延时应答13. 捎带应答14. 面向字节流15. TCP的连接异常处理 1. TCP简介 TCP协议广泛应用于可靠性要求…

IP 协议的相关特性和数据链路层相关知识总结

目录 IP 协议的相关特性 一、IP协议的特性 二、 IP协议数据报格式 三、 IP协议的主要功能 1. 地址管理 动态分配 IP地址 NAT机制 NAT背景下的通信 IPV6 2. 路由控制​​​​​​​ 3.IP报文的分片与重组 数据链路层相关知识 1、以太网协议&#xff08;Ethernet&#xff09; 2.M…

OpenCV实例(八)车牌字符识别技术(一)模式识别

车牌字符识别技术&#xff08;一&#xff09;模式识别 1.模式识别流程2. 模式识别方式 影响并导致汽车牌照内字符出现缺损、污染、模糊等情况的常见因素有照相机的性能、采集车辆图像时光照的差异、汽车牌照的清洁度等。为了提高汽车牌照字符识别的准确率&#xff0c;本节将把英…

【C语言】自定义实现strlen函数的3种方法

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C语言中自定义实现strlen函数的3种方法&#xff0c;如果大家觉得我写的不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 在自定义实现strlen函数之前&#xff0c;我们简单的介绍一下strlen函…

“冰箭卫士·IP发布会”首次亮相第14届海峡两岸(厦门)文博会

2023年8月6日,“冰箭卫士IP发布会”首次亮相海峡两岸文博会思明馆。此次发布会由厦门市文化创意产业协会、厦门理工&#xff08;集美区&#xff09;政产学研基地主办&#xff0c;厦门市文化创意产业协会IP设计研究院、厦门一笔之上文化发展有限公司、冰箭应急安全科技研究院承办…

T113-S3-调试debug串口修改

目录 前言 一、原理图示意 二、设备树文件配置 三、系统配置文件修改 四、调试问题 总结 前言 在嵌入式系统开发过程中&#xff0c;Debug串口是一个不可或缺的工具&#xff0c;用于输出调试信息、观察系统运行状态以及进行错误排查。T113-S3开发板作为一款功能强大的嵌入式…

20230811导出Redmi Note12Pro 5G手机的录音机APP的录音

20230811导出Redmi Note12Pro 5G手机的录音机APP的录音 2023/8/11 10:54 redmi note12 pro 录音文件 位置 貌似必须导出录音&#xff0c;录音的源文件不知道存储到哪里了&#xff01; 参考资料&#xff1a; https://jingyan.baidu.com/article/b87fe19e9aa79b1319356842.html 红…

Ubuntu18.04搭配无人机仿真环境(ROS,PX4,gazebo,Mavros,QGC安装教程)

Ubuntu18.04搭配无人机仿真环境 ROS环境配置版本安装 gazebo安装Mavrosa安装PX4源码下载和编译运行仿真地面站安装 ROS环境配置 我个人使用了代理环境进行下载。Linux没有代理的可以使用国内源。 清华大学源 sudo sh -c ‘. /etc/lsb-release && echo “deb http://m…

简单入门seleniumUI自动化测试

目录 一、selenium的介绍 二、selenium的原理 三、selenium的八种元素定位的方法 1、ID定位&#xff1a; 2 、name定位&#xff1a; 3、class定位&#xff1a; 4、tag定位&#xff1a; 5、link_text定位&#xff1a; 6、partial_link_text定位&#xff1a; 7、css定位…

vue table动态合并, 自定义合并,参照合并,组合合并

<template><div><el-table:data"tableData":span-method"objectSpanMethod"border:header-cell-style"{ textAlign: center }"><el-table-column prop"area" label"区域" align"center">…