查看: 861|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    前天 08:49
  • 签到天数: 1059 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2023-9-13 22:39:15 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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/
    0913001.png

    2.2、编译生成的文件

    在install文件下
    0913002.png

    2.3、生成的文件格式

    0913003.png


    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/
    0913005.png

    编译程序
    执行命令: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文件下
    0913004.png

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

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

    0913007.png

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


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 17:04 , Processed in 0.105676 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.