赞
踩
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140371764
长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…
上一篇:《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
下一篇:敬请期待…
QModbus有bug(无法读取线圈),FreeModbus移植有点小麻烦且代码不好封装(回调),而libmodbus相对来说最合适,上一篇做好了modbus485、232的读取方式,本篇讲解通过tcp网线的读取方式。
本篇描述tcp通过网线走tcp的modubus tcp rtu方式读取写入。
《案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)》
《案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)》
《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接》
《台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯》
《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真》
《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
《libModbus库开发笔记(二):libmodbus介绍、编译、modbusTcp连接台达PLC和modbusTcp基础模板》
《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)》
libmodbus是一个免费软件库,可根据Modbus协议发送/接收数据。该库用C编写,并支持RTU(串行)和TCP(以太网)通信。
https://github.com/stephane/libmodbus
export PATH=$PATH:/mingw530_32/bin
cd /home/21497/compile/modbus
tar xvf libmodbus-3.1.6.tar.gz
cd libmodbus-3.1.6
./configure --prefix=/home/21497/compile/modbus/libmodbus-3.1.6/install
错误,识别平台失败,如下图:
./configure --prefix=/home/21497/compile/modbus/libmodbus-3.1.6/install -build=x86
是在mysy使用linux环境编译x86构架下的,如下图:
make -j16
再单线程确认一下
make install
会出错,缺一些文件夹,手动自己建文件夹即可。
(注意:经手过三个台达了,基本默认地址都是192.168.1.5)
从台达官网下载最新的通讯软件。
官网:https://downloadcenter.delta-china.com.cn/DownloadCenter?v=1&CID=06&itemID=060301&downloadID=AS%E7%B3%BB%E5%88%97&dataType=8&sort_expr=cdate&sort_dir=DESC
下载最新的探索驱动软件:
点开:
点击“搜寻”,电脑必须和PLC在同一个网段,这里都是1网段:
搜索到了如下图:
这样,我们就获取到了PLC的网络地址。
#ifndef MODBUSTCPMANAGER_H #define MODBUSTCPMANAGER_H /************************************************************\ * 控件名称: modbus tcp管理类 * 控件描述: * 1.连接远程modbus服务器 * 2.PLC读取bool、int、dInt、real(float)、dReal(double) * 3.PLC写入bool、int、dInt、real(float)、dReal(double) * 著作权信息 * 作者:长沙红胖子Qt * 公司:长沙创微智科信息技术有限公司 * 网址:www.chuangweizhike.com * 博客导航总览:https://hpzwl.blog.csdn.net/article/details/102478062 * 联系方式:QQ(21497936) 微信(yangsir198808) * 版本信息 * 日期 版本 描述 * 2024年07月09日 v1.0.0 基础功能,支持线圈、int、dint、单精度浮点,双精度浮点类型 \************************************************************/ #include <QObject> #include <QMutex> union RealByte { float f; quint8 buf[4]; }; union DRealByte { double f; quint8 buf[8]; }; // libmodbus #include "modbus/modbus.h" #include "modbus/modbus-version.h" #include "modbus/modbus-rtu.h" #include "modbus/modbus-tcp.h" class ModbusTcpManager : public QObject { Q_OBJECT private: explicit ModbusTcpManager(QObject *parent = 0); public: bool testEnvAndRtu(); public: static ModbusTcpManager *getInstance(); public: void setIp(const QString &ip); void setPort(const quint16 &port); void setTimeOutMs(int timeOutMs); public: QString getIp() const; quint16 getPort() const; int getTimeOutMs() const; signals: void signal_connected(bool connected); void signal_disConnected(); 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_connect(); void slot_disConnect(); 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 ModbusTcpManager *_pInstance; static QMutex _mutex; private: QString _ip; quint16 _port; int _timeOutMs; private: bool _running; bool _connected; private: modbus_t *_pModbus; }; #endif // MODBUSTCPMANAGER_H
上一篇:《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
下一篇:敬请期待…
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140371764
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。