前言
西门子PLC、台达PLC、法兰克机床等等多年以前玩得比较多,有tcp/ip通讯也有modbus通讯,modbus又分为网络,485,232等。
医疗项目,焊接机器人项目,工控机床项目,数控项目,物联网项目用的挺多的,将关键的通信技术抽离出来,单独弄成工具。
最近调绞车,遇到了modbus tcp,正好有设备,于是额外花时间单独抽出来作为调试工具。
与各种其他行业仪器通讯软件开发的通讯核心模块,modbus功能模块,制作成调试工具,可满足一般情况的调试。
1.支持通过TCP端口进行通讯;(区别于modbus rtu 232/485)
2.支持设置打开从机的ip地址、端口和超时参数;
3.支持写入bool,int,dInt,real,dReal参数类型数据;
4.支持读取bool,int,dInt,real,dReal参数类型数据;
5.增加容错处理,连接后modbusTcp可能存在读写失败,增加容错处理机制,使其每次读写都能成功。
CSDN(0积分下载):https://download.csdn.net/download/qq21497936/89529006
QQ群:1047134658(点击“文件”搜索“modbus ”,群内与博文同步更新)
#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(