Modbus协议库移植 返回首页

发表于 2020-02-26 | 本文共 117 字

Modbus协议库移植

modbus协议是工业上常用的数据传输协议,在linux系统上,大家一般自己编写或者找别人的代码复用,代码质量无法保障,调试起来也比较费劲,最近发现github上有个非常好的modbus协议类库,经过测试发现很好用,支持串口和ip两种方式,下面记录下来往arm版移植(其实类库移植大同小异)的过程供大家参考。 ## 1、代码下载

去github下载源码:https://github.com/stephane/libmodbus

源码解压并且拷贝到交叉编译用户的目录下

2、编译

首先设置环境变量:
    source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi   

然后运行./configure --help

从帮助信息可以看到如何设置编译生成目录和交叉编译项设置。

mkdir limodbus-release ---生成编译生成文件存放目录

./configure --host=交叉编译前缀 --prefix=编译生成文件放置目录

我自己的开发环境相关参数是:
    ./configure --host=arm --prefix=$PWD/install

再然后执行
    make & make install

完成后到你的目录下查看生成的目录和文件:
    intstall文件下面就是相关的库了,压缩生成的库
        tar -cjvf libmodbus-arm.tar.bz2 *

通过nfs或者什么方法把动态库放到arm的/usr/local目录下,就可以开始使用了

3、测试

libmodbus-master提供了测试程序在tests下

3.1 random-test-server测试

首先把random-test-server.c里面23行  ctx = modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(NULL, 1502);,意思是说server监控所有的ip地址,端口是1502,然后编译

把random-test-server放到板子上运行

好了,arm版上的环境就搭好了,为了测试一下,我们在编译机上作为client:

    首先在你的编译机上新建一个目录(最好是换个用户下面),按照上面的过程再来一遍,但是生成makefile文件的时候什么都不要加

    ./configure 

    然后make & make install

到tests目录下面

    把random-test-client.c文件 第60行:ctx = modbus_new_tcp("127.0.0.1", 1502); 里面的地址改成你的arm板子的地址,编译一下:

        运行./random-test-client就可以看到输出了

3.2 unit-tests-rtu.sh 测试脚本

回环ttyO2和ttyO4,运行./unit-tests-rtu.sh rtu 测试modbus rtu功能,测试完成会生成unit-test-client_rtu.log unit-test-server_rtu.log 可以打开查看相应的测试项及其结果。

3.3 unit-tests.sh 测试脚本

运行./unit-tests.sh测试modbus tcp功能,测试完成会生成unit-test-client.log unit-test-server.log 可以打开查看相应的测试项及其结果。