下载地址:https://libmodbus.org/download/
一、交叉编译 libmodbus
为了使 ARM 工控板能使用 libmodbus 相关的功能,所以交叉编译 libmodbus。
目标:交叉编译工具编译 libmodbus 库,并将库及测试文件拷贝到工控板中进行测试。
将 libmodbus-3.1.7.tar.gz 压缩包上传到 ubuntu 系统的 libmodbus 目录下,解压。
在源码目录配置编译: ./configure --build=i686 --host=arm-linux-gnueabihf --enable-static --prefix=/home/jiang/code/libmodbus/target_arm make && make install target_arm 目录下生成的 include lib 即为 libmodbus 的头文件、库文件。 另:如要在 x86 下的 ubuntu 系统上使用 libmodbus 库,需要在 x86 下编译 libmodbus 如下: ./configure --enable-static --prefix=/home/jiang/code/libmodbus/target_x86 make && make install gcc random-test-client.c -o random-test-client -I/home/jiang/code/libmodbus/target_x86/include/modbus -L/home/jiang/code/libmodbus/target_x86/lib -lmodbus 注意用gcc编译生成x86程序。
二、测试
1、libmodbus-3.1.7 目录下的 tests 目录即为测试例程。
测试程序生产的可执行目录如下:
也可以单独编译测试例程,交叉编译测试文件如 random-test-client:
random-test-client.c文件中指定pc机的ip地址、端口。
/* TCP */ ctx = modbus_new_tcp("192.168.2.4", 1502); modbus_set_debug(ctx, TRUE); if (modbus_connect(ctx) == -1) { fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return -1; }
arm-linux-gnueabihf-gcc random-test-client.c -o random-test-client -I/home/jiang/code/libmodbus/target_arm/include/modbus -L/home/jiang/code/libmodbus/target_arm/lib -lmodbus
将 target_arm/lib 目录下的库文件(注意无法直接复制,需要先打包)拷到工控机下的/usr/lib/目录,random-test-client拷到工控
机的任意目录并执行。同理 target_x86/lib目录下的库文件(注意无法直接复制,需要先打包)拷到ubuntu下主机/usr/lib/目录(sudo mv lib.tar.gz /usr/lib)、解压缩(tar -zxvf lib.tar.gz)。
# 授权 执行权限
chmod 777 random-test-client
# 启动
./random-test-client
2、pc机 Modbus Slave设置:
3、工控机与pc机正常通讯:
4、ubuntu与pc机正常通讯(注意x86程序):