IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Linux移植libmodbus -> 正文阅读

[嵌入式]Linux移植libmodbus

Libmodbus - Linux(ARM)

在Linux上移植libmodbus(RTU及TCP),开发板用的RK3288,总结了网上一些方法,记录下以供之后参考学习。。

一、libmodbus官网下载源码

下载地址: link.

二、交叉编译

1.复制到指定目录下并解压

在这里插入图片描述
解压:

tar -zxvf libmodbus-3.1.4.tar.gz

在这里插入图片描述

2.创建安装目录

mkdir install
chmod 777 install

在这里插入图片描述

3.配置编译选项

进入解压目录后

// 进入libmodbus解压目录
cd ./libmodbus-3.1.4
// ./configure --host=[交叉编译工具链前缀] --enable-static --prefix=[安装路径]/install/
./configure --host=arm-linux-gnueabihf --enable-static --prefix=/opt/install/

在这里插入图片描述

4.编译

make

在这里插入图片描述

5.安装

make install

在这里插入图片描述

三、将动态链接库复制到开发板

将install/lib文件夹下的libmodbus.so、libmodbus.so.5、libmodbus.so.5.1.0复制到ARM开发板的/usr/lib目录下。
可以用NFS将文件夹挂载到ARM板上/WinSCP工具等(比较方便)

cd ..
cd ./install/lib/
cp libmodbus.so* /usr/lib

在这里插入图片描述
直接复制可能会报错,加 wr 解决

wr cp libmodbus.so* /usr/lib

四、测试程序

1.创建一个ModbusRTU_Test.c文件,并添加以下内容

#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/ttyS0", 9600, 'N', 8, 1);					
	if (ctx == NULL)
	{
    	fprintf(stderr, "Unable to allocate libmodbus contex\n");
    	return -1;
	}
	
	modbus_set_debug(ctx, 1);      //设置1可看到调试信息
	modbus_set_slave(ctx, 7);      //设置slave ID
	
	if (modbus_connect(ctx) == -1) //等待连接设备
	{
    	fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno));
    	return -1;
	}
	
	while (1)
	{
    	printf("\n----------------\n");
    	rc = modbus_read_registers(ctx, 0, 10, tab_reg);
    	if (rc == -1)                   //读取保持寄存器的值,可读取多个连续输入保持寄存器
    	{
			fprintf(stderr,"%s\n", modbus_strerror(errno));
			return -1;
    	}
    	for (i=0; i<10; i++)
    	{
			printf("reg[%d] = %d(0x%x)\n", i, tab_reg[i], tab_reg[i]);
    	}
		
    	usleep(3000000);
	}
    modbus_close(ctx);  //关闭modbus连接
	modbus_free(ctx);   //释放modbus资源,使用完libmodbus需要释放掉
 
	return 0;
}

2.将install/include/modbus/中的头文件复制到与ModbusRTU_Test.c文件一个目录中

人比较懒,直接拷贝了
在这里插入图片描述

3.编译

gcc -o ModbusRTU_Test ModbusRTU_Test.c -lmodbus
// arm-linux-gnueabihf-gcc ModbusRTU_Test.c -o ModbusRTU_Test -L opt/install/lib/ -lmodbus

在这里插入图片描述

四.将可执行文件复制到ARM板下,运行测试

1.复制、赋权限

// 我复制的路径
 cd /opt/test/.
 // 设置权限
 chmod 755 ModbusRTU_Test

在这里插入图片描述

2. 运行

在这里插入图片描述

3.UART ttyS0接个485设备或使用Modbus Slave模拟个设备

再次运行在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:15:04  更:2021-08-07 12:16:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:46:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码