回答

收藏

[评测分享] 【米尔-芯驰D9车规级开发板 测评】+ libmodbus移植

#板卡评测 #板卡评测 1552 人阅读 | 0 人回复 | 2023-09-13

本帖最后由 TLLED 于 2023-9-13 22:39 编辑

下面学习移植libmodbus到开发板。
一、下载软件

1.1、libmodbus官网下载地址:https://libmodbus.org/releases/libmodbus-3.1.6.tar.gz
1.2、github下载地址:https://github.com/stephane/libmodbus

二、编译


2.1、编译libmodbus
执行命令:root@ubuntu:/opt/libmodbus/libmodbus-3.1.6#  ./configure --host=arm-oe-linux-gnueabi --enable-static --prefix=/opt/libmodbus/libmodbus-3.1.6/install/


2.2、编译生成的文件

在install文件下


2.3、生成的文件格式




2.4、编译测试程序


unit-test-client.c
  1. <font size="3" face="微软雅黑">#include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <errno.h>
  6. #include "modbus.h"

  7. int main(int argc, char *argv[])
  8. {
  9.     uint8_t *tab_rp_bits;
  10.     uint16_t *tab_rp_registers;
  11.     uint16_t *tab_rp_registers_bad;
  12.     uint16_t tab_reg[64];
  13.     modbus_t *ctx;
  14.     int i;
  15.     uint8_t value;
  16.     int nb_points;
  17.     int rc;
  18.     float real;
  19.     uint32_t ireal;
  20.     struct timeval old_response_timeout;
  21.     struct timeval response_timeout;
  22.     int use_backend;

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

  24.     if (ctx == NULL) {
  25.         fprintf(stderr, "Unable to allocate libmodbus context\n");
  26.         return -1;
  27.     }
  28.     modbus_set_debug(ctx, TRUE);

  29.     modbus_set_slave(ctx, 1);

  30.     modbus_set_response_timeout(ctx, 3, 0);  //

  31.     if (modbus_connect(ctx) == -1) {
  32.         fprintf(stderr, "Connection failed: %s\n",
  33.                 modbus_strerror(errno));
  34.         modbus_free(ctx);
  35.         return -1;
  36.     }

  37.    while(1)
  38.    {
  39.        printf("--------------------\n");
  40.         rc = modbus_read_registers(ctx,0,10,tab_reg);
  41.         if(rc == -1)
  42.         {        fprintf(stderr,"%s\n",modbus_strerror(errno));
  43.             return -1;
  44.         }
  45.         for(i=0; i<10; i++)
  46.         {
  47.             printf("reg[%d] = %d(0x%x)\n",i,tab_reg[i],tab_reg[i]);
  48.         }
  49.       usleep(1000000);
  50.    }
  51.      modbus_close(ctx);
  52.      modbus_free(ctx);
  53.      return 0;
  54. }
  55. </font>
复制代码

创建一个test文件夹,将测试程序和头文件复制到到此文件下
头文件位置:/opt/libmodbus/libmodbus-3.1.6/install/include/modbus/


编译程序
执行命令:root@ubuntu:/opt/libmodbus/test# aarch64-linux-gnu-gcc unit-test-client.c -o unit-test-client  -L /opt/libmodbus/libmodbus-3.1.6/install/lib/ -lmodbus

三、开发板运行

3.1、复制文件到开发板

libmodbus.so和libmodbus.so.5文件复制到开发板的/usr/lib文件下


3.2、复制unit-test-client到开发板


3.3、运行程序
执行命令:
root@myd-jd9x:/opt/libmodbus# ./unit-test-client



读取从机设备地址的数据一致。


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条