【modbus】libmodbus库的移植与使用

参考链接:https://blog.csdn.net/u010168781/article/details/73924748

一、源码下载

1、libmodbus官网
    http://libmodbus.org/download/

2、选择长期稳定版本libmodbus-3.0.6.tar.gz
    下载链接:http://libmodbus.org/releases/libmodbus-3.0.6.tar.gz

3、MD5值
    c80f88b6ca19cabc4ceffc195ca07771  libmodbus-3.0.6.tar.gz
    
二、交叉编译

1、拷贝到相应目录,解压
    tar -zxvf libmodbus-3.0.6.tar.gz(在使用指令前,使用进入文件夹指令cd /home/fushaolei)

2、创建安装目录
    mkdir install
    
3、进入解压的目录
    cd libmodbus-3.0.6

4、配置编译选项(注:--prefix选项是安装目录,根据自己环境确定)
    ./configure --host=arm-fsl-linux-gnueabi --enable-static --prefix=[安装路径]/install/

5、编译
    make
    
6、安装
    make install
    
7、在install生成三个目录:include  lib  share

三、测试与使用

1、进入install/lib目录,执行file libmodbus*,出现如下打印信息,信息中有“ARM”说明libmodbus库移植成功
-----------------------------------------------------------------
libmodbus.a:        current ar archive
libmodbus.la:       libtool library file, 
libmodbus.so:       symbolic link to `libmodbus.so.5.0.5'
libmodbus.so.5:     symbolic link to `libmodbus.so.5.0.5'
libmodbus.so.5.0.5: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
-----------------------------------------------------------------

2、测试程序
2.1 modbus_rtu测试

2.1.1 参数配置(根据自己情况配置)
    从地址01 寄存器地址01 读取寄存器数量20    串口ttymxc1
    波特率19200 8位 偶校验 1停止位
2.1.2 测试程序:modbus_rtu_test.c
--------------------------------modbus_rtu_test.c begin----------------------------------
/**********************************************
*简介:Linux下modbusRTU测试程序
*作者:郭纬
*日期:2017-5-16
*版本:V1.0
**********************************************/

#include<stdio.h>
#include<stdlib.h>
#include"modbus.h"
#include <memory.h>


int main(void)
{
    modbus_t *mb;
    uint16_t tab_reg[64]={0};

    //1-打开端口
    mb = modbus_new_rtu("/dev/ttymxc1",19200,'E',8,1);

    //2-设置从地址
    modbus_set_slave(mb,1);

    //3-建立连接
    modbus_connect(mb);

    //4-设置应答延时
    struct timeval t;
    t.tv_sec=0;
    t.tv_usec=1000000;//1000ms
    modbus_set_response_timeout(mb,&t);

    //5-循环读
    int num = 0;
    while(1)
    {   
        memset(tab_reg,0,64*2);

        //6-读寄存器设置:寄存器地址、数量、数据缓冲
        int regs=modbus_read_registers(mb, 0, 20, tab_reg); 
       
        printf("-------------------------------------------\n");
        printf("[%4d][read num = %d]",num,regs);
        num++;
        
        int i;
        for(i=0; i<20; i++)
        {
            printf("<%#x>",tab_reg[i]);
        }
        printf("\n");
        printf("-------------------------------------------\n");
        sleep(1);
    }

    //7-关闭modbus端口
    modbus_close(mb); 

    //8-释放modbus资源
    modbus_free(mb);
    return 0;
}

--------------------------------------modbus_rtu_test.c end---------------------------------------
2.1.3 交叉编译
    arm-fsl-linux-gnueabi-gcc -o modbus_rtu_test modbus_rtu_test.c -L../install/lib -lmodbus -I ../install/include/modbus
2.1.4 运行
    将libmodbus库拷贝到开发板上,如/usr/lib目录下;
    将测试程序拷贝到开发板上,连接好硬件,运行程序
--------------------- 
作者:郭老二 
来源:CSDN 
原文:https://blog.csdn.net/u010168781/article/details/73924748 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wise18146705004/article/details/85170348