前言
西門子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_OBJECT
public:
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(