案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140313789

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

合作案例专栏:案例分享(体验Demo可下载,只定制)


前言

  西门子PLC、台达PLC、法兰克机床等等多年以前玩得比较多,有tcp/ip通讯也有modbus通讯,modbus又分为网络,485,232等。
  医疗项目,焊接机器人项目,工控机床项目,数控项目,物联网项目用的挺多的,将关键的通信技术抽离出来,单独弄成工具。
  最近调绞车,遇到了modbus tcp,正好有设备,于是额外花时间单独抽出来作为调试工具。


相关博客

  《案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)》
  《案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)》
  《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接》
  《台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯》
  《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真》
  《LibModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
  《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)》


需求

  与各种其他行业仪器通讯软件开发的通讯核心模块,modbus功能模块,制作成调试工具,可满足一般情况的调试。
  1.支持通过TCP端口进行通讯;(区别于modbus rtu 232/485)
  2.支持设置打开从机的ip地址、端口和超时参数;
  3.支持写入bool,int,dInt,real,dReal参数类型数据;
  4.支持读取bool,int,dInt,real,dReal参数类型数据;
  5.增加容错处理,连接后modbusTcp可能存在读写失败,增加容错处理机制,使其每次读写都能成功。


Demo

  在这里插入图片描述
  在这里插入图片描述

  在这里插入图片描述


工具下载地址

  CSDN(0积分下载):https://download.csdn.net/download/qq21497936/89529006
  QQ群:1047134658(点击“文件”搜索“modbus ”,群内与博文同步更新)


相关头文件源码

PlcModbusMasterWidget.h

在这里插入图片描述

#ifndef MODBUSTCPWIDGET_H
#define MODBUSTCPWIDGET_H/************************************************************\* 控件名称: modbus Master管理应用* 控件描述:*          1.使用modbusTcp打开*          2.PLC读取bool、int、dInt、real(float)、dReal(double)*          3.PLC写入bool、int、dInt、real(float)、dReal(double)* 其他说明:*          在ModbusTCP协议中,从机地址的概念与ModbusRTU有所不同。*          在ModbusTCP中,通常不直接通过从机地址来区分不同的设备,*          而是通过IP地址和端口号来识别和连接特定的Modbus服务器(从机)。* 著作权信息*      作者:长沙红胖子Qt*      公司:长沙创微智科信息技术有限公司*      网址:www.chuangweizhike.com*      博客导航:https://hpzwl.blog.csdn.net/article/details/102478062*      联系方式:QQ(21497936) 微信(yangsir198808)* 版本信息*       日期             版本         描述*   2024年07月09日     v1.0.0       基础功能,支持线圈、int、dint、单精度浮点,双精度浮点类型*                                  读写失败容错处理执行机制
\************************************************************/#include <QWidget>
#include <QThread>
#include <QDateTime>
#include <QElapsedTimer>
#include <QHash>
#include <QFile>
#include <QMessageBox>
#include <QAbstractButton>
#include "ModbusTcpManager.h"namespace Ui {
class ModbusTcpWidget;
}class ModbusTcpWidget : public QWidget
{Q_OBJECTpublic:explicit ModbusTcpWidget(QWidget *parent = 0);~ModbusTcpWidget();protected:void initControl();protected slots:void slot_connected(bool connected);void slot_disConnected();void slot_readBitsResult(bool result, int startAddr, QList<bool> listBool);void slot_readIntsResult(bool result, int startAddr, QList<int> listInt);void slot_readDIntsResult(bool result, int startAddr, QList<int> listInt);void slot_readRealsResult(bool result, int startAddr, QList<float> listFloat);void slot_readDRealsResult(bool result, int startAddr, QList<double> listDouble);void slot_writeBitsResult(bool result, int startAddr, QList<bool> listBool);void slot_writeIntsResult(bool result, int startAddr, QList<int> listInt);void slot_writeDIntsResult(bool result, int startAddr, QList<int> listInt);void slot_writeRealsResult(bool result, int startAddr, QList<float> listFloat);void slot_writeDRealsResult(bool result, int startAddr, QList<double> listDouble);private slots:void on_comboBox_writeType_currentIndexChanged(int index);void on_lineEdit_readStartAddr_textChanged(const QString &arg1);void on_lineEdit_writeStartAddr_textChanged(const QString &arg1);void on_lineEdit_readStartAddrHex_textChanged(const QString &arg1);void on_lineEdit_writeStartAddrHex_textChanged(const QString &arg1);private slots:void on_pushButton_connect_clicked();void on_pushButton_disconnect_clicked();void on_pushButton_read_clicked();void on_pushButton_write_clicked();void on_pushButton_clear_clicked();private:Ui::ModbusTcpWidget *ui;QThread *_pModbusManagerThread;QElapsedTimer _elapsedTimer;
};#endif // MODBUSTCPWIDGET_H

ModbusManager.h

#ifndef MODBUSTCPMANAGER_H
#define MODBUSTCPMANAGER_H#include <QObject>
#include <QMutex>union RealByte {float f;quint8 buf[4];
};union DRealByte {double f;quint8 buf[8];
};#include "modbus/modbus.h"
#include "modbus/modbus-version.h"
#include "modbus/modbus-rtu.h"
#include "modbus/modbus-tcp.h"class ModbusTcpManager : public QObject
{Q_OBJECT
private:explicit ModbusTcpManager(QObject *parent = 0);public:bool testEnvAndRtu();public:static ModbusTcpManager *getInstance();public:void setIp(const QString &ip);void setPort(const quint16 &port);void setTimeOutMs(int timeOutMs);public:QString getIp() const;quint16 getPort() const;int getTimeOutMs() const;signals:void signal_connected(bool connected);void signal_disConnected();void signal_readBitsResult(bool result, int startAddr, QList<bool> listBool);void signal_readIntsResult(bool result, int startAddr, QList<int> listInt);void signal_readDIntsResult(bool result, int startAddr, QList<int> listInt);void signal_readRealsResult(bool result, int startAddr, QList<float> listFloat);void signal_readDRealsResult(bool result, int startAddr, QList<double> listDouble);void signal_writeBitsResult(bool result, int startAddr, QList<bool> listBool);void signal_writeIntsResult(bool result, int startAddr, QList<int> listInt);void signal_writeDIntsResult(bool result, int startAddr, QList<int> listInt);void signal_writeRealsResult(bool result, int startAddr, QList<float> listFloat);void signal_writeDRealsResult(bool result, int startAddr, QList<double> listDouble);public slots:void slot_start();void slot_stop();void slot_connect();void slot_disConnect();void slot_readBits(int startAddr, int size);void slot_readInts(int startAddr, int size);void slot_readDInts(int startAddr, int size);void slot_readReals(int startAddr, int size);void slot_readDReals(int startAddr, int size);void slot_writeBits(int startAddr, QList<bool> listBool);void slot_writeInts(int startAddr, QList<int> listInt);void slot_writeDInts(int startAddr, QList<int> listInt);void slot_writeReals(int startAddr, QList<float> listFloat);void slot_writeDReals(int startAddr, QList<double> listDouble);private:static ModbusTcpManager *_pInstance;static QMutex _mutex;private:QString _ip;quint16 _port;int _timeOutMs;private:bool _running;bool _connected;private:modbus_t *_pModbus;};#endif // MODBUSTCPMANAGER_H

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140313789

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画Midjourney从入门到实战应用

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

项目实战--Spring Boot + GraphQL实现实时数据推送

背景 用户体验不断提升而3对实时数据的需求日益增长&#xff0c;传统的数据获取方式无法满足实时数据的即时性和个性化需求。 GraphQL作为新兴的API查询语言&#xff0c;提供更加灵活、高效的数据获取方案。结合Spring Boot作为后端框架&#xff0c;利用GraphQL实现实时数据推…

中职大数据实训室

一、中职大数据实训室建设背景 《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》中强调了数字化转型的重要性&#xff0c;明确提出了建设数字中国的战略目标。大数据技术作为数字化转型的核心&#xff0c;对于培养具备大数据分析、处理和应用能力的…

简单仿写SpringIOC

gitee地址&#xff08;需要自取&#xff09;ioc_Imitation: 简单仿写IOC (gitee.com) 项目目录结构 Autowired Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface Autowired { }Component Target(ElementType.TYPE) Retention(RetentionPoli…

如何更改WordPress网站的字体(适用于所有主题)

如何更改WordPress的字体的具体方法&#xff0c;需要取决于您使用的是新的区块主题还是比较旧的经典主题&#xff0c;这一点可能会让人感到困惑&#xff0c;本文中我们将详细介绍二者的区别以及如何分别在这两种主题中修改字体的的方法。 区别&#xff1a; 现代区块主题具有内…

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率&#xff1a;探索APILayer提供的开源资源 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;是实现应用间通信和功能扩展的关键工具。公共API&#xff08;Public APIs&#xff09;则为开发者提供了宝贵的资源&#…

Windows Server 2012 R2查看IIS版本

文章目录 一、方法一1.win R 键打开运行窗口 → 输入 "regedit" → 点击【确定】2.HKEY_LOCAL_MACHINE → SOFTWARE → Microsoft → InetStp 二、方法二1.win R 键打开运行窗口 → 输入 "inetmgr" → 点击【确定】2.点击 【帮助】 → 选择【关于 Intern…

springboot社区物资交易互助平台+lw+源码+调试+讲解

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但…

computed传参

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 computed可以依据其他变量动态计算出值&#xff0c;但是v-for渲染html时&#xff0c;需要根据html中 传入的不同变量&#xff0c;来分别做处理或者利用 html中的值该…

在繁华与奇迹交织的深圳

在繁华与奇迹交织的深圳&#xff0c;有一本奇书悄然走红&#xff0c;它便是《华强北经济学》&#xff0c;由那位深谙市场脉搏、笔触带风的宋仕强先生所著。这本书&#xff0c;仿佛是华强北这片创业热土的缩影&#xff0c;用一个个生动鲜活的故事&#xff0c;诠释了什么是“从螺…

逻辑运算及其基本概念,定理,算法,规律,卡诺图

逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图 文章目录 逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图开胃小菜运算1、与运算2、或运算3、非运算4、与非&#xff08;都1时为0&#xf…

数据融合工具(5)面中心线提取

这是一个重磅工具&#xff0c;建议先看视频。 提取中心线 一、需求背景 说真的&#xff0c;当小编第一次使用ArcGIS中的Polygon To Centerline工具提取面要素中心线时&#xff0c;激动得无以言表&#xff0c;毕竟&#xff0c;以前要提取面中心线&#xff0c;是一件非常麻烦的事…

详细分析Spring中的@Configuration注解基本知识(附Demo)

目录 前言1. 基本知识2. 详细分析3. Demo3.1 简单Bean配置3.2 属性配置3.3 多条件配置 4. 实战拓展 前言 Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Spring框架从入门到学精&#xff08;全&am…

Candy Party (Hard Version)

这个就看官方题解就好了&#xff0c;写的很清楚 考试的时候把easy version给做出来了&#xff0c;但是对于hard version确实没有想到可以转换成位运算 所以以后看到\(2^x\)&#xff0c;不妨想一下是不是位运算&#xff0c;这里将最后的式子一列就知道是位运算了

如何在 C 语言中实现链表?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&#xff0c;看过的人都说好。 文章目…

集创北方ICN6202 低功耗MIPIDSI转2 PORT LVDS 支持1080P分辨率,成熟批量产品

ICN6202描述&#xff1a; ICN6202是一个接收MIPIDSI输入和发送LVDS输出的桥接芯片。MIPIDSI最多支持4个车道&#xff0c;每个车道的最大运行频率为1Gbps&#xff1b;总最大输入带宽为4Gbps&#xff1b;并且还支持MIPI定义的ULPS&#xff08;超低功耗状态&#xff09;。ICN6202…

【靶机实战】GeoServer 远程代码执行漏洞复现

# 在线靶场 可以通过访问极核官方靶场开启靶机实验&#xff1a;极核靶场 -> 漏洞复现靶场 -> GeoServer-远程代码执行 原文&#xff1a;【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell (get-shell.com) # 简介 CVE-2024-36401是一个高危的远程代码执行漏…

Multi-Wing Optimiser风扇选型软件介绍

Multi-Wing Optimiser风扇选型软件

24/07/08数据结构(2.1203)顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…