赞
踩
libmodbus是一个免费的modbus协议栈,这个协议栈是跨平台的,也就是说既可以在Windows下以.dll库的提供方式,也可以在Unix/Linux下以.a/.so库的形式提供。一般在小型嵌入式硬件中,如果是非Linux系统或裸机,我们要实现设备modbus通信,要么使用freemodbus,要么是自己来写协议栈,这个工作量相对来讲还是比较多的,虽然现在freemodbus目前已经支持了在Linux下使用,不过还是仅限于 从机,而且其实现上相对来讲还是要将 freemodbus的整体代码融入到 工程项目中,这相对来讲就稍微麻烦。
libmodbus可以以库的形式提供整个modbus 的全部功能,尤其应用于 主机 通信,毕竟在linux环境下,只支持从机还是有点大材小用了,我们在编写应用程序时,只需要调用 libmodbus库的API函数,就可以完成modbus的主、从通信应用开发。
关于libmodbus的详细介绍,推荐两个网址:
官方手册: libmodbus官网手册
网友翻译: libmodbus翻译 ,这里,为这个做翻译工作的哥们儿点赞。
接下来我们来进行Linux环境下 libmodbus 库文件生成配置过程,我的linux版本是ubuntu16,libmodbus版本是 3.1.4
配置过程,其实在libmodbus的 README.md中介绍的很详细,我这里只是翻译后,精简到的具体实施步骤,具体如下:
特别说明:尽量使用git获取最新版3.1.4,使用git获取的文件中,有autogen.sh,使用交叉编译环境arm-linux-gnueabihf-gcc能够编译成功。而采用普通下载模式获取的最新版本3.1.4,没有autogen.sh,而是直接有configure(由autogen.sh生成),编译失败。而稳定版3.0.6可以通过普通下载,然后编译成功。
0.下载libmodbus源码
git clone git://github.com/stephane/libmodbus
1. 确保ubuntu中已经有了 gcc的交叉编译环境,我这里使用的是 arm-fsl-linux-gnueabi-gcc
2. 安装 automake, autoconf, libtool
这3个东西,是3个工具,3个自动化生成工具,一般人用Makefile来编译程序,牛人 可以使用automake和autoconf自动生成
符合自由软件惯例的Makefile,只需要使用"./configure","make","make install" 可以自动生成Makefile,然后执行了。
libtool 是一个通用库支持脚本,用于生成库,这也是 libmodbus最终要提供 库 文件的工具。
安装命令: sudo apt-get insatll automake autoconf libtool
3. 执行 ./autogen.sh
从名字上就可以看出,这是一个 自动生成 configure 文件的 脚本。
4. 在主机中创建一个 文件夹 install,用于存放将要生成的库文件,记住这个文件夹的绝对路径。这里我 把这个文件夹
与libmodbus文件夹 平级 创建。
命令: mkdir install
5. 上一步执行后,该目录下就生成了 configure 文件,我们可以通过 ./configure -h 查看该文件的帮助文档,
我们用到的配置参数 如下:
--host //交叉编译环境类型
--prefix //编译生成的库文件 存放位置,如果不配置,默认会将库文件存储到 /usr/local中
命令: ./configure --host=arm-fsl-linux-gnueabi --prefix=/opt/git-proj/libmodbus/install/
这条命令,就是实现libmodbus的配置,交叉编译环境是 arm-fsl-linux-gnueabi,也就是生成的库是用在arm
平台上,生成的库文件 存放在 /opt/git-proj/libmodbus/install/ 文件夹中,也就是步骤4中创建的文件夹。
注意: --prefix= 需要使用 绝对路径。
6. 步骤5成功后,就会在当前目录下生成 Makefile 文件,接下来就是最后一步:
命令:make install
这里,有些人会习惯性执行 make && make install,也就是分两步运行,不过README.md中是没有这么说的,
之前的版本需要,最新版libmodbus-3.1.4只需要 make install就可以了。
7. 步骤6成功后,就会在步骤4创建的install文件夹下,生成3个目录:
include lib share
对我们有用的就是 include 和 lib目录,
include目录下的内容是 modbus/modbus.h、modbus-rtu.h、modbus-tcp.h、modbus-version.h
lib目录下的内容是 libmodbus.la、libmodbus.so、libmodbus.so.5、libmodbus.so.5.1.0
从上面的结构内容可知,include 是库文件的 头文件,lib是libmodbus生成的库文件,.so 就是linux典型的 动态库后缀。
8、 我们在使用 libmodbus库进行开发应用程序时,在应用程序的编译中,需要包含 步骤7 中的 include 和 lib,这两个目录放哪里不重要,重要的是,我们的编译 选项中要通过 -L、-l(小写l)、-I来包含引用。同时,我们还需要将 步骤7中说道的 lib 中的库文件,放到 我们的设备上,一般是放到/usr/lib中的,因为设备在运行libmodbus应用程序时,需要动态的调用 libmodbus的动态库。
至此就完成了libmodbus的配置生成工作,后面我们再介绍如何基于libmodbus库,开发modbus 主、从通信程序。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。