搜索

121

主题

128

帖子

665

积分

网站编辑

Rank: 8Rank: 8

积分
665
发表于 2021-6-11 15:10:21 6816 浏览 0 回复

i.MX6开发板QT系统Modbus移植和使用

本章节介绍 modbus 库如何移植到 ARM 开发板上,以及如何使用测试程序。 相关的配套资料在网盘资料“iTOP-i.MX6开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6开发板Linux系统开发资料\26-QT系统Modbus移植和使用”目录下。
1 什么是Modbus
网络上关于 modbus 介绍的文章非常多,还有专门介绍 modbus 的书籍,这些资料大家都可以利用起来,但是在这一小节中,作者希望帮助大家理解 modbus 的本质,modbus 到底是用来做什么,用来解决什么问题,有什么存在的价值呢?
第一个要重点理解的是:modbus 是一个“纯数据协议”。说到 modbus 协议,经常和 RS232 和 RS485 以及以太网联系到一起。那么 modbus 和RS485 协议有什么关系么?modbus 是纯粹的数据协议,和 RS232、RS485 和网络等协议没有一点关系,如果在串口 RS232 上使用 modbus 协议,modbus 只处理通过串口发送前和串口接收后的数据,串口只是在发送数据前使用 modbus 协议来转换数据,接收数据之后,将数据通过 modbus 协议转换出来。
第二个要重点理解的是:modbus 是一个“通用的纯数据协议”。 modbus 是用于工业现场的总线协议,它不仅仅是在 PLC 或者单片机上可以使用,在任何可以跑代码的电子设备上都可以使用,因为 modbus 对硬件没有任何定义。当然,modbus 应用范围主要是在工业控制上。如果每一台工业控制设备,都有一种自定义的协议,那将是很恐怖的,modbus 协议可以用在所有控制设备上,所有的工业控制设备都可以兼容 modbus 协议。modbus 的本质是一个通用的纯数据协议,是用来规范工业现场各种控制设备的通信协议,通过 modbus 协议控制设备,通过网络(RS485 和以太网等)可以和其它设备之间通信,不同厂商生产的设备可以很方便的连成工业网络。
2 源码下载
可以从 libmodbus 官网 http://libmodbus.org/download/下载 3.1.4 版本,也可以用迅为提供的下载好的源码。作者将“libmodbus-3.1.4.tar.gz” 放在了本文档对应的资料包里面。
在 Ubuntu下新建一个modbus文件夹,将下载的libmodbus-3.1.4.tar.gz放入modbus文件夹里面,解压后,再新建install路径,用来安装生成的文件。
3 安装交叉编译工具链
1编译的时候需要用到交叉编译工具,这里安装的是 arm-2009q3 编译器,在网盘目录 “03-系统固件烧写及编译篇\05开发板系统源码编译\arm-2009q3.tar.bz2”下,如下图所示,压缩包“arm-2009q3.tar.bz2”。
2使用 SSH 工具将交叉编译工具拷贝到 Ubuntu14系统的文件夹“usr”-- >“local”-->“arm”中,local 下默认没有 arm 文件夹,可以新建一个。如下图所示。
拷贝编译器之后如下图所示。
3 然后在 Ubuntu 系统中将压缩包解压到当前目录下。
使用命令“cd /usr/local/arm/”进入/usr/local/arm 文件夹,然后使用解压命令“tar - vxf arm-2009q3.tar.bz2”解压压缩包,如下图所示。
4 修改交叉编译工具路径,需要修改环境变量,具体操作如下:
在 Ubuntu 命令行中,执行命令“cd /root”和“vim .bashrc”,打开环境变量文件 “.bashrc”,如下图所示。
然后在“.bashrc”文件中的最后一行添加如下信息:“export PATH=$PATH:/usr/local/arm/arm-2009q3/bin” 如下图所示。
修改完成后保存退出。
5 执行下列命令,更新环境变量“source .bashrc”的命令,如下图所示。
6最后,在 Ubuntu 命令行中输入命令“arm”,然后按 TAB 键,如果在命令行中能够看到 arm 编译器的信息,就表明交叉编译工具安装成功,如下图所示。
4 编译libmodbus库文件
进入libmodbus-3.1.4,执行命令./configure ac_cv_func_malloc_0_nonnull=yes --host=arm-none-linux-gnueabi --enable-static --prefix=/home/topeet/iMX6Q/modbus/install/
Host=后面的是编译器前缀,--prefix=后面的是安装目录,可根据自己环境确定,如下图所示:
执行完毕,如下图所示:
执行编译命令“make”,执行完如下图所示
执行安装make install命令,执行完如下图所示:
查看安装目录 install,在 install 生成三个目录:include、lib、share,如图所示。
如下图所示,使用 file 命令查看 lib 目录下的库文件,可以发现其中的文件是 arm 架构的。
将编译出来的 lib 路径下的所有文件拷贝到开发板的“/lib”目录下。
至此,modbus 的 arm-linux 的库文件编译完成。
5 移植ARM测试程序
进入目录/home/topeet/iMX6Q/modbus/libmodbus-3.1.4/tests查看测试程序 random-testserver.c,如图所示,已经编译出来了,但是还是需要修改一下源码中的几个参数,重新编译
输入命令 vim random-test-server.c 打开测试程序,里面 23 行ctx=modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(NULL, 1502);,即 server 监控所有的 ip 地址,端口是 1502。修改为如图所示:
然后执行命令交叉编译命令
arm-none-linux-gnueabi-gcc -o random-test-server random-test-server.c -L/home/topeet/iMX6Q/modbus/install/lib -lmodbus -I/home/topeet/iMX6Q/modbus/install/include/modbus
生成可执行文件 random-test-server,如图所示。
如下图所示,可执行文件是 arm 架构的。至此,arm 服务端的测试例程“random-test-server”编译完成  
6 X86-Linux的Modbus的移植和编译
1 在 modbus 目录下再建一个文件夹x86-modbus,如下图所示,使用命令“tar -vxf libmodbus-3.1.4.tar.gz -C x86-modbus/”,将源码解压到x86-modbus这个文件夹下,
2执行命令“./configure”,不用加任何参数,默认就是 GCC-x86 配置,如下图所示:
配置完成,如下图所示
3 执行“make”编译命令,编译完成如下图所示:
4 执行安装命令“make install”,安装完成,如下图所示:
5进入 test 目录,前面我们编译的 arm 下的测试程序是 server,那么 Ubuntu 下运行的就应该是 client 客户端,如下图所示。
6客户端需要服务端的 IP 地址,如下图所示,作者的服务端(也就是开发板端)IP 是“192.168.1.12”。
接着,修改 x86-modbus 目录下的“random-test-client.c”文件,使用 vim 命令打开 random-test-client.c 文件,如下图所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml6796\wps77.jpg
将 ctx = modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(开发板 IP, 1502);
如下图所示,然后保存退出。
7执行命令:
gcc -o random-test-client random-test-client.c `pkg-config --libs --cflags libmodbus` 编译生成 random-test-client 可执行文件,如下图所示,编译出的可执行文件是 x86 的
到此x86上的测试程序编译完成。
7 测试
1我们开发板里面运行的是QT5.7系统,系统镜像在文档相关的资料包里面有提供,烧写完QT5.7系统以后开机,等系统运行。首先确保开发板和虚拟机 Ubuntu 可以 ping 通(记得插网线)如下图所示,作者虚拟机的 IP 为“192.168.1.6”,通过开发板可以 ping 通Ubuntu。将编译好的arm类型的random-test-server测试程序放入开发板bin目录下面。
2 然后arm开发板执行
./bin/random-test-server
3 Ubuntu执行./random-test-client
如果执行出现找不到库的错误提示,输入下面的代码,再执行./random-test-client
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表