• 玩转Libmodbus(一) 搭建开发环境


    先转载一片文章先,主要是参考了其搭建环境的部分:

    https://blog.csdn.net/qq_40452910/article/details/88560310

    你可以直接看本文,本文经过更好地整理、实操、记录。

    一、源码下载

    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、配置编译选项

    (注:--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文件,将下列代码粘贴进去

    /*************************
    **
    ** modbus-rtu-test.c 
    ** 移植libmodbus库到ARM开发板,并测试成功
    **
    **************************/
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.h>
    #include "modbus.h"  //modbus动态库文件
     
    int main(int argc, char *argv[])
    {
    	uint16_t tab_reg[64] = {0}; //定义存放数据的数组
        modbus_t *ctx = NULL;
     
        int rc;
    	int i;
    							        //以串口的方式创建libmobus实例,并设置参数
    	ctx = modbus_new_rtu("/dev/ttyS1", 115200, 'N', 8, 1);					
    	if (ctx == NULL)                //使用UART1,对应的设备描述符为ttyS1
    	{
        	fprintf(stderr, "Unable to allocate libmodbus contex
    ");
        	return -1;
    	}
    	
    	modbus_set_debug(ctx, 1);      //设置1可看到调试信息
    	modbus_set_slave(ctx, 1);      //设置slave ID
    	
    	if (modbus_connect(ctx) == -1) //等待连接设备
    	{
        	fprintf(stderr, "Connection failed:%s
    ", modbus_strerror(errno));
        	return -1;
    	}
    	
    	while (1)
    	{
        	printf("
    ----------------
    ");
        	rc = modbus_read_registers(ctx, 0, 10, tab_reg);
        	if (rc == -1)                   //读取保持寄存器的值,可读取多个连续输入保持寄存器
        	{
    			fprintf(stderr,"%s
    ", modbus_strerror(errno));
    			return -1;
        	}
        	for (i=0; i<10; i++)
        	{
    			printf("reg[%d] = %d(0x%x)
    ", i, tab_reg[i], tab_reg[i]);
        	}
    		
        	usleep(3000000);
    	}
        modbus_close(ctx);  //关闭modbus连接
    	modbus_free(ctx);   //释放modbus资源,使用完libmodbus需要释放掉
     
    	return 0;
    }
    

    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开发板测试程序接收到的数据
     
     

    江湖很大,你我相遇在此有一定缘分,可以考虑加个QQ群聊聊人生,技术离不开生活,生活离不开聊聊。

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    刚好遇见你——软件工程
    int main(int argc,char* argv[]) 简单理解
    奇偶数分离
    A+B Problem
    日期计算
    正三角形的外接圆面积
    数数小木块
    谁是最好的Coder
    水仙花数
    5个数求最值
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/11301612.html
Copyright © 2020-2023  润新知