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 可以打开查看相应的测试项及其结果。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。