共计 4814 个字符,预计需要花费 13 分钟才能阅读完成。
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117398968
红瘦子 (红模拟) 的博文大全:开发技术汇合(蕴含 Qt 实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中 …(点击传送门)
单干案例专栏:案例分享(体验 Demo 可下载,只定制)
前言
西门子 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
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117398968