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

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

前言

  西门子PLC、台达PLC、法兰克机床等等多年以前玩得比较多,有tcp/ip通讯也有modbus通讯,modbus又分为网络,485,232等。

  医疗项目,焊接机器人项目,工控机床项目,数控项目,物联网项目用的挺多的,将关键的通信技术抽离出来,单独弄成工具。


需求

  与各种其他行业仪器通讯软件开发的通讯核心模块,modbus功能模块,制作成调试工具,可满足一般情况的调试。

  1.支持通过串口232,485端口进行通讯;

  2.支持设置打开端口的参数;

  3.支持写入bool,int,dInt,real,dReal参数类型数据;

  4.支持读取bool,int,dInt,real,dReal参数类型数据;

  5.增加10种主题风格切换(仅用于预选择主题风格);


Demo

  

  

  

  


工具下载地址

  CSDN(0积分下载):https://download.csdn.net/download/qq21497936/19236703

  QQ群:1047134658(点击“文件”搜索“plcModbus ”,群内与博文同步更新)


十种主题风格切换

  


相关头文件源码

PlcModbusMasterWidget.h

#ifndef PLCMODBUSMASTERWIDGET_H
#define PLCMODBUSMASTERWIDGET_H
#include <QWidget>
#include <QThread>
#include <QDateTime>
#include <QElapsedTimer>
#include <QHash>
#include <QFile>
#include <QMessageBox>
#include <QAbstractButton>
#include "ModbusManager.h"
namespace Ui {
class PlcModbusMasterWidget;
}
class PlcModbusMasterWidget : public QWidget
{
    Q_OBJECT
public:
    explicit PlcModbusMasterWidget(QWidget *parent = 0);
    ~PlcModbusMasterWidget();
protected slots:
    void slot_opened(bool opened);
    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);
protected slots:
    void slot_buttonClicked(int index);
private slots:
    void on_pushButton_open_clicked();
    void on_pushButton_close_clicked();
    void on_pushButton_read_clicked();
    void on_pushButton_write_clicked();
    void on_pushButton_clearM_clicked();
private:
    Ui::PlcModbusMasterWidget *ui;
    QThread *_pModbusManagerThread;
    QElapsedTimer _elapsedTimer;
    QHash<int, QString> _hashInt2Str;
};
#endif // PLCMODBUSMASTERWIDGET_H

ModbusManager.h

#ifndef MODBUSMANAGER_H
#define MODBUSMANAGER_H
#include <QObject>
#include <QMutex>
class ModbusManager : public QObject
{
    Q_OBJECT
private:
    explicit ModbusManager(QObject *parent = 0);
public:
    bool testEnvAndRtu();
public:
    static ModbusManager *getInstance();
public:
    void setPortName(const QString &portName);
    void setBaud(int baud);
    void setParity(char parity);
    void setDataBit(int dataBit);
    void setStopBit(int stopBit);
    void setTimeOutMs(int timeOutMs);
    void setSlaveAddr(int slaveAddr);
public:
    QString getPortName() const;
    int getBaud() const;
    char getParity() const;
    int getDataBit() const;
    int getStopBit() const;
    int getTimeOutMs() const;
    int getSlaveAddr() const;
signals:
    void signal_opened(bool opened);
    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_open();
    void slot_close();
    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 ModbusManager *_pInstance;
    static QMutex _mutex;
private:
    QString _portName;
    int _baud;
    char _parity;
    int _dataBit;
    int _stopBit;
    int _timeOutMs;
    int _slaveAddr;
private:
    bool _running;
    bool _opened;
};
#endif // MODBUSMANAGER_H



相关文章
|
7月前
【QT】读写.ini配置文件的程序实现
【QT】读写.ini配置文件的程序实现
112 0
|
7月前
|
IDE 开发工具 C++
QT案例IDE编写 -- 创建项目
QT案例IDE编写 -- 创建项目
83 0
|
26天前
|
Java
byte加byte居然是int了
为什么在Java中,byte加byte的结果不是byte,而是int?本文将带你从Java语言规范和JVM规范层面研究该问题。
38 3
byte加byte居然是int了
|
5月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
715 7
|
5月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
120 0
|
7月前
|
存储 自然语言处理
QT案例词典 -- 存储内容及遍历
QT案例词典 -- 存储内容及遍历
49 1
|
7月前
|
自然语言处理
QT案例词典 -- 释放堆区空间及查询单词
QT案例词典 -- 释放堆区空间及查询单词
46 1