移植安装ModBus到ARM开发板

1、libmodbus官网

2、下载

二、交叉编译

1、解压

2、创建安装目录

3、进入解压的目录

4、配置编译选项

5、编译

6、安装

7、生成动态链接库

三、移植到ARM开发板

1、复制文件到ARM开发板

四、创建测试程序

1、创建测试程序C文件

2、复制库中头文件

3、交叉编译

4、复制可执行文件到开发板

五、安装ModbusPoll及ModbusSlave

六、测试

1、测试准备

2、在ARM上运行test程序

3、移植成功


一、源码下载

1、libmodbus官网

https://libmodbus.org/download/

2、下载

选择长期稳定版本libmodbus-3.0.6.tar.gz

二、交叉编译

1、解压

拷贝到相应目录,解压,例如拷贝在/usr/local/modbus下,modbus目录需要自己创建

tar   -zxvf   libmodbus-3.0.6.tar.gz

2、创建安装目录

    mkdir   install

3、进入解压的目录

    cd  libmodbus-3.0.6

4、配置编译选项

             ./autogen.sh

(注:--prefix选项是安装目录,根据自己环境确定)

./configure   --host=[交叉编译工具链前缀]   --enable-static   --prefix=[安装路径]/install/

[安装路径]例如/usr/local/modbus,[交叉编译工具链]例如arm-none-linux-gnueabi

5、编译

make

6、安装

make  install

若出现了错误:

../libtool: line 1102: arm-none-linux-gnueabi-ranlib: command not found

make[2]: *** [install-libLTLIBRARIES] Error 127

make[2]: Leaving directory `/usr/local/modbus/libmodbus-3.0.6/src'

make[1]: *** [install-am] Error 2

make[1]: Leaving directory `/usr/local/modbus/libmodbus-3.0.6/src'

make: *** [install-recursive] Error 1

解决方法:

执行sudo  –i,执行完之后会自动切换到/root目录。所以需要切换回之前的目录,执行make install,就可以成功。

7、生成动态链接库

在install生成三个目录:include  lib  share

lib文件夹中的libmodbus.so、libmodbus.so.5、libmodbus.so.5.0.5就是动态链接库

三、移植到ARM开发板

1、复制文件到ARM开发板

将libmodbus.so、libmodbus.so.5、libmodbus.so.5.0.5复制到ARM开发板中的/usr/lib目录下

执行cp   libmodbus.so*   /usr/lib(常用的动态链接库,存放在该目录下)会出现无法创建的问题(cannot create ‘/usr/lib/libmodbus.so*’: Read-only file system)。

解决方法:执行 wr  cp  libmodbus*  /usr/lib

四、创建测试程序

1、创建测试程序C文件

在PC机linux系统下新建.c文件,将下列代码粘贴进去

 
  1. /*************************

  2. **

  3. ** modbus-rtu-test.c

  4. ** 移植libmodbus库到ARM开发板,并测试成功

  5. **

  6. **************************/

  7. #include <stdio.h>

  8. #include <unistd.h>

  9. #include <string.h>

  10. #include <stdlib.h>

  11. #include <errno.h>

  12. #include "modbus.h" //modbus动态库文件

  13.  
  14. int main(int argc, char *argv[])

  15. {

  16. uint16_t tab_reg[64] = {0}; //定义存放数据的数组

  17. modbus_t *ctx = NULL;

  18.  
  19. int rc;

  20. int i;

  21. //以串口的方式创建libmobus实例,并设置参数

  22. ctx = modbus_new_rtu("/dev/ttyS1", 115200, 'N', 8, 1);

  23. if (ctx == NULL) //使用UART1,对应的设备描述符为ttyS1

  24. {

  25. fprintf(stderr, "Unable to allocate libmodbus contex\n");

  26. return -1;

  27. }

  28.  
  29. modbus_set_debug(ctx, 1); //设置1可看到调试信息

  30. modbus_set_slave(ctx, 1); //设置slave ID

  31.  
  32. if (modbus_connect(ctx) == -1) //等待连接设备

  33. {

  34. fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno));

  35. return -1;

  36. }

  37.  
  38. while (1)

  39. {

  40. printf("\n----------------\n");

  41. rc = modbus_read_registers(ctx, 0, 10, tab_reg);

  42. if (rc == -1) //读取保持寄存器的值,可读取多个连续输入保持寄存器

  43. {

  44. fprintf(stderr,"%s\n", modbus_strerror(errno));

  45. return -1;

  46. }

  47. for (i=0; i<10; i++)

  48. {

  49. printf("reg[%d] = %d(0x%x)\n", i, tab_reg[i], tab_reg[i]);

  50. }

  51.  
  52. usleep(3000000);

  53. }

  54. modbus_close(ctx); //关闭modbus连接

  55. modbus_free(ctx); //释放modbus资源,使用完libmodbus需要释放掉

  56.  
  57. return 0;

  58. }

2、复制库中头文件

将/usr/local/modbus/install/include/modbus中的四个头文件modbus.h、modbus-rtu.h、modbus-tcp.h、modbus-version.h复制到上边C语言文件同一文件夹。

3、交叉编译

arm-none-linux-gnueabi-gcc   test.c   -o   test   -L   /usr/local/modbus/install/lib/   -lmodbus

4、复制可执行文件到开发板

将可执行程序文件test复制到ARM开发板的文件夹下。

五、安装ModbusPoll及ModbusSlave

六、测试

1、测试准备

在执行上述步骤前,需要先连接好相应的硬件,比如串口线等,然后打开ModBus调试助手,设置好波特率等,设置要与上述程序中的保持一致。

ModBus调试助手相关设置

2、在ARM上运行test程序

若出现错误:./test: error while loading shared libraries: libmodbus.so.5: cannot open shared object file: Error 20

解决方法:将libmodbus.so、libmodbus.so.5、libmodbus.so.5.0.5三个动态链接库复制到当前文件下,就可以正常执行。

3、移植成功

发现ModBus调试助手与开发板数据可以正常传输,测试成功,如图。

ModBus调试助手发送数据界面

ARM开发板测试程序接收到的数据

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值