modbus协议在工业中应用广泛,libmodbus()是LINUX平台下的一个第三方modbus工具。手头上有一个支持modbus RTU协议的温湿度传感器,在嵌入式LINUX开发板上编写一个基于QT4.7的界面程序,用来读取并显示传感器的温湿度,选择使用libmodbus来进行modbus RTU协议的解析。
1.嵌入式开发板环境:友善之臂Tiny6410,选择ttySAC3串口与传感器进行RS485通信;主机环境:按照友善之臂手册推荐的,采用Fedora9,已安装部署嵌入式开发工具链arm-linux-gcc,已编译安装ARM版本的Qt4.7(按照04-Tiny6410 Linux开发指南1.12节编译安装Qte-4.8.5的步骤,只不过这里安装的是Qt4.7,Qt4.7的源码可在”FriendlyARM-Tiny6410-DVD-A\开发文档和教程\01 Qt4和Qtopia编程开发指南\源代码“中找到),Qt Creator2.0.1(qt-sdk-linux-x86-opensource-2010.05.1.bin,下载地址:ftp://ftp.informatik.hu-berlin.de/pub/Mirrors/ftp.troll.no/QT/qtsdk/)
2.编译安装libmodbus。下载libmodbus源码libmodbus-3.0.6.tar.gz,主机上创建目录/opt/libmodbus/install,这是libmodbus的安装目录。
把libmodbus-3.0.6.tar.gz复制到/opt/libmodbus目录下解压,然后进入libmodbus-3.0.6目录对libmodbus进行配置,执行如下命令:./configure --host=arm-linux --prefix=/opt/libmodbus/install,“--host=arm-linux”表示采用交叉编译,因为编译出来的程序要运行在开发板上。“--prefix=/opt/libmodbus/install”表示libmodbus的安装目录。
配置完成之后,执行make命令,这时出错,提示aclocal-1.14没找到,这是因为Fedora9中安装的aclocal版本太低。解决方法:安装aclocal-1.14,由于aclocal-1.14是automake-1.14的一部分,因此可以直接安装automake-1.14,安装automake-1.14需要有autoconf-2.69的支持,因此需要先安装autoconf-2.69,然后再安装automake-1.14。
从网上下载autoconf-2.69.tar.gz(),解压之后依次执行如下命令:./configure,make, make install完成autoconf-2.69的安装。然后再下载automake-1.14.1.tar.gz()解压之后依次执行如下命令:./configure,make, make install完成automake-1.14的安装
回到libmodbus-3.0.6目录,依次执行./configure --host=arm-linux --prefix=/opt/libmodbus/install, make, make install,libmodbus顺利编译安装成功。生成的库文件位于/opt/libmodbus/install/lib目录
3.在开发板上安装libmodbus库。把主机上/opt/libmodbus/install/lib目录下的库文件打包成lib.tar.gz,然后把压缩文件下载到开发板上,在开发板上新建目录/opt/libmodbus/install,把lib.tar.gz解压到该目录下,这样就把libmodbus库文件安装到开发板上的/opt/libmodbus/install/lib。
4.主机中使用Qt Creator新建基类为widget的工程qt-libmodbus,把/opt/libmodbus/install/include下的modbus文件夹拷贝到Qt Cretaor的工程目录,这个文件夹是libmodbus的头文件,共4个。在Qt Creator工程中,把头文件添加到工程qt-libmodbus,并在widget.h中添加:
#include "modbus/modbus.h"
#include "modbus/modbus-rtu.h"
#include "modbus/modbus-version.h"
然后在工程文件中(.pro)添加:
LIBS += -L/opt/libmodbus/install/lib -lmodbus
使用libmodbus提供的库函数编写程序,编写完毕之后把Qt Creator工程的Build Settings设置为编译ARM程序(参考Mini6410 Qt4和Qtopia编程开发指南-20110112.pdf中的4.2.3节)。把编译出来的可执行程序qt-libmodbus下载到开发板的/bin目录下,并添加执行权限。
5.开发板上启动执行qt-libmodbus。启动执行之前,先要把libmodbus的库路径添加到环境变量LD_LIBRARY_PATH,把/bin目录下的setqt4env文件中的export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
修改为:
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib:/usr/local/lib:/opt/libmodbus/install/lib:$LD_LIBRARY_PATH
保存
关闭开发板上默认启动的qtopia(在运行任何Qt4.7程序之前,需要先退出 Qtopia2.2.0 或者 Qt-Extended4.4.3 等一切Qt程序,退出Qtopia2.2.0的方法是:在Qtopia2.2.0中点“设置”中的“关机”可出现如下界面,点“Terminate Server”即可关闭Qtopia-2.2.0系统)
执行. setqt4env(.后有一个空格),初始化qt4环境
执行qt-libmodbus -qws,使用libmodbus库的程序正常运行
阅读(6648) | 评论(0) | 转发(0) |