1.前言

Modbus是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。

2.移植步骤

第一,进入libmodbus目录下,在交叉编译器是最好加上–prefix参数,叫相关的库直接集中起来,方便拷贝到开发板相应的目录中去;

嵌入式开发板: #./configure --build=i686 --host=arm-none-linux-gnueabi --enable-static --prefix=/root/libmodbus-3.1.1/install/ && make install

x86机器 : #./configure && make install

第二,进入libmodbus/test目录,修改unit-test-client.c (modbus主机测试) 中的”/dev/ttyUSB1”,改成你测试的串口设备号 ctx = modbus_new_rtu("/dev/ttyUSB1", 115200, 'N', 8, 1);

同样地,修改unit-test-server.c (modbus从机测试) 中的”/dev/ttyUSB0”,改成你测试的串口设备号 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);

改好后重先进行编译 #make clean

#make all

编译完后就生成了unit-test-client,unit-test-server两个可执行文件,

第三,运行两个程序 #./unit-test-client

#./unit-test-server

3.测试

总体测试图

主机测试信息

从机测试信息

注:在test目录下的类似unit-test-server这个不是可执行文件,而是一个脚本,他会调用test目录下的.lib/下的unit-test-server可执行文件。在PC中需要执行对应的脚本文件,而在嵌入式平台上却是执行可执行文件;

4.自定义代码测试主机

4.1 测试对象

modbus主机 -> linux -> unit-test-client

modbus从机 -> windows -> modbus slave

4.2 代码修改

修改unit-test-client.c程序

int main(int argc, char *argv[])

{

uint8_t *tab_rp_bits;

uint16_t *tab_rp_registers;

uint16_t *tab_rp_registers_bad;

uint16_t tab_reg[64];

modbus_t *ctx;

int i;

uint8_t value;

int nb_points;

int rc;

float real;

uint32_t ireal;

struct timeval old_response_timeout;

struct timeval response_timeout;

int use_backend;

ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'E', 8, 1);

if (ctx == NULL) {

fprintf(stderr, "Unable to allocate libmodbus context\n");

return -1;

}

modbus_set_debug(ctx, TRUE);

modbus_set_slave(ctx, 1);

if (modbus_connect(ctx) == -1) {

fprintf(stderr, "Connection failed: %s\n",

modbus_strerror(errno));

modbus_free(ctx);

return -1;

}

while(1)

{

printf("--------------------\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",14,tab_reg[i],tab_reg[i]);

}

usleep(1000000);

}

modbus_close(ctx);

modbus_free(ctx);

return 0;

}

4.3 重新编译运行

#make clean

#make all

#./unit-test-client

4.4 测试对比分析

打开windows下的modbus slave,设置好相关参数,如下图

那么linux端的modbus主机打印信息

结论:数据吻合,测试正常

modbus调试工具 linux,linux libmodbus的移植相关推荐

  1. vs项目移植到linux运行,VS2008项目移植到Linux

    不少人都遇到过这种情况:在Windows下用Visual Studio工具开发的程序需要移植到Linux系统中,做成Linux版本的,但程序比较大,在Linux上又离不开Make,手动编写Makefi ...

  2. linux内核的裁剪和移植实验,实验5 linux内核的裁剪移植.doc

    实验5 linux内核的裁剪移植 一.实验目的: 学习利用menuconfig配置文件进行裁减内核,编译内核并移植到开发板上. 二.实验内容 一.开发环境 宿主机:ubuntu10.04 开发板:ti ...

  3. NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号

    NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号 1. EC20模块连接 2. Linux内核配置 3. 交叉编译PPP 4. 拨号脚本 5. 进行拨号 1. EC20模块连接 在 ...

  4. Linux WIFI模块驱动移植

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 请问有知道atheros ...

  5. 十六.linux开发之Kernel移植——内核的配置和编译原理

    有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=d25dbce79566963e3699574a74048154& ...

  6. 嵌入式linux usb wifi驱动移植

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 版本号        时间        内容 v1.0b001        2012-6-18        初始版本,介绍在嵌入式 ...

  7. linux ec20 usb驱动移植,linux下EC20 4G模块驱动移植

    之前有移植过ME909s MU609,主要工作就是把4G模块当做USB设备,挂载在linux上,驱动移植主要是能够让板子识别到模块,并产生SUB多个虚拟的节点,用于操作模块,拨号上网 关于内核的配置, ...

  8. [转载]基于ARM的linux内核裁剪与移植

    基于ARM的linux内核裁剪与移植 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=185020  wutaimin( 楼主 ) 2 ...

  9. ARM在嵌入式linux内核裁剪与移植的应用

    微处理器用一片或少数几片大规模集成电路组成的中央处理器.这些电路执行控制部件和算术逻辑部件的功能.微处理器与传统的中央处理器相比,具有体积小,重量轻和容易模块化等优点.微处理器的基本组成部分有:寄存器 ...

  10. linux根文件系统的移植 课程设计,定稿基基于ARM9嵌入式Linux引导程序研究与移植嵌入式综合实验报告完整版...

    <基<基于ARM9嵌入式Linux引导程序研究与移植>嵌入式综合实验报告.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)基基于ARM9嵌入式Linux引导程序研 ...

最新文章

  1. Django model层 mysql_Django模型层(models.py)之模型创建
  2. CentOS下用yum管理软件的好处
  3. 批量关闭公众号推送_微信内测新功能:提醒用户可停止接收长期不阅读公众号推送...
  4. 直播报名 | 超低延时直播架构解析
  5. mysql selectprovider_使用Mybatis的@SelectProvide会不会导致注入攻击?
  6. html转换成keynote,keynote代码高亮【转】
  7. 5233杨光--第三周实验报告
  8. 我是这样入侵 Hacking Team 的
  9. Cheapest Palindrome POJ - 3280(动态规划*)
  10. 【离散数学】含有两个量词的谓词逻辑公式
  11. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志
  12. 陈硕网络编程实战视频教程目录
  13. 大型网络游戏服务器的框架设计
  14. idea启动报错: Failed to create JVM.JVM.Path XXXXXXX\jbr\
  15. StackOverflow 推出程序员身价计算器,看看自己值多少钱?
  16. springboot导出pdf文件(简历)
  17. linux强制删除只读文件夹,强制删除文件夹linux的方法是什么
  18. ARCGIS:软断裂线、硬断裂线、断层等名词和ARCGIS 如何操作
  19. 生物信息学简史,A brief history of bioinformatics- Briefings in Bioinformatics综述解读
  20. Android NDK开发之旅17 NDK Apk增量更新

热门文章

  1. 如何在 Blazor WebAssembly中 使用 功能开关
  2. 什么是ASP.NET Core静态Web资产?
  3. .NET 开源项目 StreamJsonRpc 介绍[上篇]
  4. lin-cms-dotnetcore功能模块的设计
  5. 如何让 Azure AD 里的应用只允许特定用户登录
  6. 10分钟了解分布式CAP、BASE理论
  7. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)
  8. 2018 上海.NET职位围观报告
  9. .net core 多版本如何选择
  10. COMCMS_CORE 起步篇,如何运行和部署