案例分享: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://www.mzph.cn/news/869658.shtml

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

相关文章

Backend - C# 操作PostgreSQL DB

目录 一、安装 Npgsql 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、操作类 &#xff08;一&#xff09;操作类 1.NpgsqlConnection类 &#xff08;1&#xff09;作用 &#xff08;2&#xff09;引入 &a…

SpringSecurity中文文档(Servlet OAuth2)

OAuth2 Spring Security 提供了全面的 OAuth 2.0支持。 Overview Spring Security 的 OAuth 2.0支持包括两个主要特性集: OAuth2 Resource ServerOAuth2 Client OAuth2Login 是一个非常强大的 OAuth2Client 特性&#xff0c;值得在参考文档中单独列出。但是&#xff0c;它…

[高频SQL50题(基础版)]第五百八十四题,寻找用户推荐人

题目&#xff1a; 表: Customer ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | referee_id | int | ---------------------- 在 SQL 中&#xff0c;id 是该表的主键列。 该表的每一…

儿童房灯具什么牌子好?几款儿童房灯具款式墙裂分享

随着科技的不断发展和生活方式的改变&#xff0c;儿童青少年近视率的增长趋势引起了人们的关注。近视不仅对孩子们的视力健康构成威胁&#xff0c;还可能对他们的学习和日常生活带来不便。因此&#xff0c;如何有效地预防和改善儿童青少年的视力问题成为了一个亟待解决的课题。…

2024学生党蓝牙耳机什么牌子好?品牌高性价比蓝牙耳机推荐

2024年&#xff0c;对于追求性价比和品质的学生党来说&#xff0c;选择一款合适的蓝牙耳机是提升学习和生活品质的重要一环。面对市场上琳琅满目的蓝牙耳机产品&#xff0c;2024学生党蓝牙耳机什么牌子好&#xff1f;如何找到既满足音质需求又具备高性价比的款式呢&#xff1f;…

C++ STL for_each_n用法和实现

一&#xff1a;功能 遍历前n个元素 二&#xff1a;用法 #include <vector> #include <algorithm> #include <string> #include <iostream> #include <execution> #include <syncstream>constexpr inline size_t MAIN_SEATS 8; constexp…

存储过程的使用场景

存储过程&#xff08;Stored Procedure&#xff09;在数据库管理系统中具有广泛的应用场景。它们可以帮助提高性能、增强安全性、简化复杂操作&#xff0c;并提供更好的代码重用性和维护性。以下是一些常见的存储过程使用场景&#xff1a; 1. 数据验证 存储过程可以用于数据验…

高考后的IT专业启航:暑期预习指南与学习路线图

文章目录 每日一句正能量前言&#xff1a;启航IT世界&#xff0c;高考后的暑期学习之旅基础课程预习指南基础课程预习指南&#xff1a;构建你的IT知识大厦引言一、计算机科学导论二、编程语言入门三、操作系统基础四、数据结构与算法五、网络基础六、数据库原理结语 技术学习路…

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装&#xff1a;1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册&#xff1a;1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2.新建工程2.1STM32开发方式&#xff1a;1.寄存器2.标准库3.HAL库 固件库压…

Nginx访问日志按天拆分

使用 logrotate 来实现 如果系统没有安装logrotate 可以使用 sudo yum install logrotate -y 进行安装 配置 logrotate 接下来我们就来配置 nginx 切割的配置文件&#xff0c;我的 nginx 日志路径在/var/log/nginx 我们在 /etc/logrotate.d/ 目录下新建一个 nginx 的文件…

C++ Primer 总结索引 | 第十六章:模板与泛型编程

1、面向对象编程&#xff08;OOP&#xff09;和泛型编程 都能处理在编写程序时 不知道类型的情况。不同之处在于&#xff1a;OOP 能处理类型 在程序运行之前都未知的情况&#xff1b;而在泛型编程中&#xff0c;在编译时就能获知类型了 2、容器、迭代器 和 算法 都是泛型编程的…

【热梗案例】知识点阶段性综合汇总

文章目录 渲染对象、实现统计功能实现删除功能设置发布按钮实现发布按钮的提交功能 直接用CSS的模板&#xff0c;模板代码如下&#xff1a; <template><view class"title">近期热梗</view><view class"out"> <view class&qu…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

206. 反转链表 (Swift 版本)

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 解题 /*** Definition for singly-linked list.* public class ListNode {* public var val: Int* public var next: ListNode?* public init() { self.val 0; self.…

[数据结构] 基于插入的排序 插入排序希尔排序

标题&#xff1a;[数据结构] 排序#插入排序&希尔排序 水墨不写bug 目录 &#xff08;一&#xff09;插入排序 实现思路&#xff1a; 插入排序实现&#xff1a; &#xff08;二&#xff09;希尔排序 希尔排序的基本思想&#xff1a; 希尔排序的实现&#xff1a; 正…

MybatisPlus 多数据源 @DS 选择深入源码理解原理

文章目录 MybatisPlus 多数据源 DS 选择深入源码理解原理 MybatisPlus 多数据源 DS 选择深入源码理解原理 数据源的选择&#xff0c;拦截器为DynamicDataSourceAnnotationInterceptor 这里利用了一个MethodInterceptor接口&#xff0c;我们看看&#xff0c;我们可以看到这个包…

防御笔记第四天(持续更新)

1.状态检测技术 检测数据包是否符合协议的逻辑顺序&#xff1b;检查是否是逻辑上的首包&#xff0c;只有首包才会创建会话表。 状态检测机制可以选择关闭或则开启 [USG6000V1]firewall session link-state tcp ? check Indicate link state check [USG6000V1]firewall ses…

CLion学习笔记-cmake编译和多main函数编译

这里就不讲怎么配置clion了 项目名字 pcl_kdtree_search 1.新建一个工程名字自己取&#xff0c;我这里用自己学习pcl的&#xff0c;加一个main函数&#xff0c;这个时候Cmake里边就是这样的。 #声明要求的cmake最低版本 cmake_minimum_required(VERSION 3.19) #声明一个工程…

MongoDB 全文检索

MongoDB 全文检索 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;以其灵活的数据模型和强大的查询语言而闻名。在 MongoDB 中&#xff0c;全文检索是一种功能&#xff0c;允许用户对存储在数据库中的文本数据进行复杂的搜索。全文检索对于构建搜索引擎、内容推荐系统和文本分…

【SQL】MySQL 中主要的锁类型

在MySQL中&#xff0c;主要有以下几种锁类型&#xff0c;每种锁都有不同的特点和使用场景&#xff1a; 1. 共享锁 (Shared Lock, S Lock) 共享锁是一种读取锁&#xff0c;也称为S锁。多个事务可以同时持有共享锁&#xff0c;并且不会阻塞其他事务获取共享锁&#xff0c;但会阻…