案例分享:Qt modbus485除錯工具(讀寫Byte、Int、DInt、Real、DReal)(當前v1.3.0)
若該文為原創文章,轉載請註明原文出處 本文章部落格地址:http://blog.csdn.net/qq21497936/article/details/117398968
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、微控制器、軟硬結合等等)持續更新中...(點選傳送門)
合作案例專欄:案例分享(體驗Demo可下載,只定制)
<br>
前言
西門子PLC、臺達PLC、法蘭克機床等等多年以前玩得比較多,有tcp/ip通訊也有modbus通訊,modbus又分為網路,485,232等。 醫療專案,焊接機器人專案,工控機床專案,數控專案,物聯網專案用的挺多的,將關鍵的通訊技術抽離出來,單獨弄成工具。
<br>
需求
與各種其他行業儀器通訊軟體開發的通訊核心模組,modbus功能模組,製作成除錯工具,可滿足一般情況的除錯。 1.支援通過串列埠232,485埠進行通訊; 2.支援設定開啟埠的引數; 3.支援寫入bool,int,dInt,real,dReal引數型別資料; 4.支援讀取bool,int,dInt,real,dReal引數型別資料; 5.增加10種主題風格切換(僅用於預選擇主題風格);
<br>
Demo
<br>
工具下載地址
CSDN(0積分下載):http://download.csdn.net/download/qq21497936/19236703 QQ群:1047134658(點選“檔案”搜尋“plcModbus ”,群內與博文同步更新)
<br>
十種主題風格切換
<br>
相關標頭檔案原始碼
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
<br>
若該文為原創文章,轉載請註明原文出處 本文章部落格地址:http://blog.csdn.net/qq21497936/article/details/117398968
- RK3568開發筆記(一):瑞芯微RK3568晶片介紹,入手開發板的核心板介紹
- 樹莓派開發筆記(十三):入手研華ADVANTECH工控樹莓派UNO-220套件(二):安裝rtc等驅動
- 紅胖子創業一年整總結:前二十年題記,萌芽初期,外包初期,創業初期,未來規劃
- Qt MPlayer音樂播放器開發筆記(二):交叉編譯MPlayer以及部署到開發板播放演示
- zlib開發筆記(三):zlib庫介紹、在ubuntu上進行arm平臺交叉編譯
- 案例分享:Qt政務標籤設計器,標籤排版軟體定製與列印
- Qt 騰訊IM開發筆記(一):騰訊IM介紹、使用和Qt整合騰訊IM-SDK的工程模板Demo
- Qt MPlayer音樂播放器開發筆記(一):ubuntu上編譯MPlayer以及Demo演示
- 案例分享:Qt Arm基於RV1126平臺的內窺鏡軟硬整套解決方案(實時影像、凍結、拍照、錄影、背光調整、硬體光源調整,其他產品也可使用該平臺,如影片監控,物聯網產品等等)
- libzip開發筆記(二):libzip庫介紹、ubuntu平臺編譯和工程模板
- 臺達PLC開發筆記(二):臺達PLC設定主機通訊引數為RTU併成功通訊
- 臺達PLC開發筆記(一):臺達PLC連線介紹,分別使用485、網口與臺達PLC建立連線
- Qt的圖形檢視框架,最核心的三個類為:QGraphicsScene、QGraphicsItem與QGraphicsView。
- Windows上mingw32版本的openssl的編譯是屬於比較棘手的,OpenSSL本身不提供支援.。
- 案例分享:Qt modbus485除錯工具(讀寫Byte、Int、DInt、Real、DReal)(當前v1.3.0)
- 案例分享:某品牌音響系列協議除錯工具(搜尋主機,查詢通道,基本控制API,雲音樂API,語言節目API等,可增刪改指令)
- NSIS安裝包開發筆記(三):NSIS使用Qt做的安裝介面製作安裝包互動詳解
- NSIS製作安裝包筆記(一):NSIS介紹、使用NSIS預設嚮導指令碼製作Windows安裝包
- 海康攝像SDK開發筆記(一):海康威視網路攝像頭SDK介紹與模組功能
- Qt開發技術:Qt拽拖開發(一)拽託框架詳解及Demo