linux libmodbus的移植
来源:互联网 发布:淘宝红翼 编辑:程序博客网 时间:2024/05/21 22:32
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主机打印信息
结论:数据吻合,测试正常
- linux libmodbus的移植
- libmodbus的移植
- 嵌入式学习之libmodbus的移植
- 【modbus】libmodbus库的移植与使用
- libmodbus遇到的问题
- 一个modbus协议库移植——libmodbus-master
- linux下使用libmodbus库实现modbusTCP与modbusRTU功能
- VS + Libmodbus + QT 环境搭建遇到的几个新手问题
- linux内核的移植
- linux内核的移植
- Linux数据类型的移植
- linux文件系统的移植
- linux内核移植的问题
- 基于S3C2410的Linux移植
- Linux移植的一般过程
- VIA VT6212L 的linux移植
- libjpeg的ARM linux移植
- 学习linux系统的移植
- 列表推导(List Comprehension)
- ESLint可共享配置发布,团队自定义ESLint规则新鲜出炉
- list与Set、Map区别及适用场景
- 【NOIP2017提高A组模拟10.10】Graph
- python图形界面GUI编程之tkinter布局
- linux libmodbus的移植
- 驱动开发入门
- 解码过程
- 完全背包
- 第六章、ReactNative预加载解决方案
- 历史文化名城
- NKOJ 3893 聪聪和可可(数学期望+递推+最短路)
- 在另一个进程中注入代码的方式20171013
- DFS:690. Employee Importance