libmodbus之嵌入式Linux使用

  • 1.ubuntu系统使用libmodbus
  • 2.arm-linux使用libmodbus
    • 2.1解压安装
    • 2.2移植编译
    • 2.3modbus从机模拟

1.ubuntu系统使用libmodbus

ubuntu系统可以直接使用apt命令进行库的安装。

sudo apt-get install libmodbus-dev
或者
sudo apt-get install libmodbus5

2.arm-linux使用libmodbus

库参考手册
libmodbus-3.1.4源码

2.1解压安装

tar -xzvf libmodbus-3.1.4.tar.gz
cd libmodbus-3.1.4
# 新建安装文件夹
mkdir -p install
chmod 777 install
./configure --prefix=$(pwd)/install --host=arm-linux --enable-static ac_cv_func_malloc_0_nonnull=yes CC=arm-fsl-linux-gnueabi-gcc
make
make install

2.2移植编译

在我的应用程序工程里面新建一个 libmodbus 文件夹,将上面安装 install目录下的 include和lib文件夹拷贝过来

我的工程总体结构如下所示

在 mys_src 里面添加 modbus 主机测试程序 modbus_test.c
makefile编写如下所示:

#编译配置,使能为1
CONFIG_MODBUS_BUILD = 1#当前路径
CUR_DIR := $(shell pwd)#libmodbus目录
LIBMODBUS_DIR := $(CUR_DIR)/../libmodbus# 头文件路径
INCLUDE :=
INCLUDE += -I$(CUR_DIR)/../include/
ifeq ($(CONFIG_MODBUS_BUILD), 1)
INCLUDE += -I$(LIBMODBUS_DIR)/include/modbus/
endif#C编译器的选项
CFLAGS :=
CFLAGS += -g -Wall
CFLAGS += -std=gnu99
CFLAGS += $(INCLUDE)#库文件参数
LDFLAGS :=
#libmodbus共享库链接
#LDFLAGS += -L$(LIBMODBUS_DIR)/lib
#libmodbus静态库链接
ifeq ($(CONFIG_MODBUS_BUILD), 1)
LDFLAGS += $(LIBMODBUS_DIR)/lib/libmodbus.a
endifSRCS += modbus_test.c
OBJS += modbus_test.o
BINS += modbus_testall:$(OBJS) $(BINS) $(OBJS):%.o:%.c$(CC) -c $(CFLAGS) $^ -o $(OBJ_DIR)/$@$(BINS):$(OBJS)$(CC) -o $(BIN_DIR)/$@ $(OBJ_DIR)/$^ $(LDFLAGS)

modbus_test.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>#define MODBUS_DEV_NAME    "/dev/ttymxc3"    ///< 串口设备int main(void)
{modbus_t *ctx =NULL;// 以串口的方式创建libmobus实例,并设置参数ctx = modbus_new_rtu(MODBUS_DEV_NAME, 115200, 'N', 8, 1);if (ctx == NULL)                //使用UART4,对应的设备描述符为ttymxc3{fprintf(stderr, "Unable to allocate libmodbus contex\n");return -1;}// 使用RS485时需考虑设置串口模式、RTS引脚等
//    modbus_rtu_set_serial_mode(MODBUS_RTU_RS485);    //设置串口模式modbus_set_debug(ctx, 1);      //设置1可看到调试信息modbus_set_slave(ctx, 1);      //设置slave IDif (modbus_connect(ctx) == -1) //等待连接设备{fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno));return -1;}int i,rc;uint16_t tab_reg[64] = {0}; //定义存放数据的数组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(5000000);}modbus_close(ctx);  //关闭modbus连接modbus_free(ctx);   //释放modbus资源,使用完libmodbus需要释放掉return 0;
}

编译之后可通过nfs挂载进行测试

2.3modbus从机模拟

Modbus slave测试工具可以用来做modbus从机设备,从而实现arm控制板通过串口与PC端模拟的modbus从机进行通信测试。

然后设置 setup->slave definition 从机ID、设置为保存寄存器,10条

同时我们也给寄存器设置一些值

开发板运行测试程序后,成功读取modbus从机寄存器值

libmodbus之嵌入式Linux使用及测试相关推荐

  1. 嵌入式Linux内存压力测试

    原文参考:添加链接描述 1 前言   内存是电子计算机的最重要组成要素之一. 与内存对应的就是外存,如硬盘.外部存储器等.内存是将外存与CPU连接起来的桥梁,计算机中所有数据都需经过内存进行交互,而且 ...

  2. 使用memtester工具对嵌入式Linux内存压力测试

    文章目录 1 前言 2 memtester工具 3 工具编译与使用 3.1 编译 3.2 使用 3.2.1 命令使用格式 3.2.2 测试结果 4 在RK3399平台上测试 1 前言   内存是电子计 ...

  3. 关于嵌入式linux下的串口通讯问题---回车、换行、缓冲

    嵌入式Linux串口通讯测试问题:   经过实验,从Linux(PC)通过串口向嵌入式Linux开发板发送数据时,串口初始化完毕后遇到回车(0x0d)或换行(0x0a)才开始从串口接收数据,回车或换行 ...

  4. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//

    嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)             是否有无操作系统:     2. 移植操作系统的好处有哪些 ...

  5. 嵌入式linux学习笔记--linux下基于imx6ullpro 的 CP2102 /CH340 驱动 以及简单的测试

    今天再次编译了linux 的内核,想起来之前一直没实现的嵌入式linux 的串口驱动,故想实验一下. 本文章会分别介绍CP2102 以及CH340两者的驱动 以及他们的简单的测试,后续可能会更新一个 ...

  6. 基于嵌入式Linux的千兆以太网卡驱动程序设计及测试

    基于嵌入式Linux的千兆以太网卡驱动程序设计及测试 一. 引言 千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE 802.3规范标准.采用和10M以太网相似的帧格式.网络协议和布 ...

  7. ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)

    ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...

  8. 嵌入式linux应用程序升级,基于嵌入式Linux平台的应用升级机制的研究与设计

    摘要: 随着科技的发展与新技术的推出,嵌入式在生活中被广泛应用,嵌入式产品在日常生活中扮演了重要的角色.嵌入式Linux操作系统已经普遍应用到医疗电子,信息家电,远程通信,机顶盒等多个领域,嵌入式Li ...

  9. 嵌入式linux内存使用和性能优化

    这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...

  10. linux内核异常分析ecp,内核基于嵌入式Linux的PocketIX系统

    lgms2008 于 2006-10-20 10:38:55发表: 应用领域与前景 目前PocketIX只是一个预览版,其正式版本不仅可以广泛应用于移动计算平台(PPC). 家庭信息环境(机顶盒.数字 ...

最新文章

  1. spring vertx_如何在Spring设置Vertx
  2. c# 水晶报表中处理TextObject
  3. C++和Python,JSON文件的读取和保存
  4. 理解注意力机制的好文二
  5. 写下thinkphp5和thinkphp3.2的不同
  6. Springboot对web应用的统一异常处理
  7. SpringSecurity注销功能
  8. workbench提示工作负载高度不平衡_功率因数负载组
  9. 【IEEE独立出版/EI稳定检索】信息科学、计算机技术与交通运输征稿倒计时
  10. python做图片浏览器_保护隐私,用Python打造自己的照片浏览器
  11. css3 图片阴影、翘边效果
  12. Linux进程中有xorg,Linux黑话解释:Xorg,X11,Wayland,什么是显示服务器
  13. 最好的跑步耳机推荐、盘点五款公认最好的跑步耳机
  14. n平方的求和公式_1到N的平方和,立方和公式是怎么推导的?
  15. 雷军:同事格式化了我的电脑,让我走上当CEO的“不归路”
  16. (2.1)关系模型之关系结构和约束
  17. sd卡 整卡备份和还原
  18. SQL语句中having与where的区别
  19. SCJP认证复习——经典题库
  20. MATLAB 学习笔记:1 定义和使用矩阵

热门文章

  1. 零基础快速自学SQL,1天足矣!
  2. python compare_ssim_Python 之 计算psnr和ssim值
  3. 如何在linux系统开发gd32,对于GD32VF103一些想法
  4. 滤镜之瓷砖TileReflect
  5. 鼠标测试软件m,[论坛]魔技无线激光鼠标测试心得(二)
  6. 浅析View的事件分发机制
  7. 禅道及与JIRA区别
  8. Dash中文文档: Python2.7.16 和 Python3.8
  9. C 语言学习笔记(一):C 语言的开发环境
  10. DNS中NS和SOA区别