TA的每日心情 | 开心 2024-10-25 14:50 |
---|
签到天数: 1071 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 TLLED 于 2023-9-13 22:39 编辑
下面学习移植libmodbus到开发板。
一、下载软件
1.1、libmodbus官网下载地址:https://libmodbus.org/releases/libmodbus-3.1.6.tar.gz
1.2、github下载地址:https://github.com/stephane/libmodbus
二、编译
2.1、编译libmodbus
执行命令:root@ubuntu:/opt/libmodbus/libmodbus-3.1.6# ./configure --host=arm-oe-linux-gnueabi --enable-static --prefix=/opt/libmodbus/libmodbus-3.1.6/install/
2.2、编译生成的文件
在install文件下
2.3、生成的文件格式
2.4、编译测试程序
unit-test-client.c
- <font size="3" face="微软雅黑">#include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- #include <errno.h>
- #include "modbus.h"
- 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/ttyS6", 115200, 'N', 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);
- modbus_set_response_timeout(ctx, 3, 0); //
- 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",i,tab_reg[i],tab_reg[i]);
- }
- usleep(1000000);
- }
- modbus_close(ctx);
- modbus_free(ctx);
- return 0;
- }
- </font>
复制代码
创建一个test文件夹,将测试程序和头文件复制到到此文件下
头文件位置:/opt/libmodbus/libmodbus-3.1.6/install/include/modbus/
编译程序
执行命令:root@ubuntu:/opt/libmodbus/test# aarch64-linux-gnu-gcc unit-test-client.c -o unit-test-client -L /opt/libmodbus/libmodbus-3.1.6/install/lib/ -lmodbus
三、开发板运行
3.1、复制文件到开发板
将libmodbus.so和libmodbus.so.5文件复制到开发板的/usr/lib文件下
3.2、复制unit-test-client到开发板
3.3、运行程序
执行命令:
root@myd-jd9x:/opt/libmodbus# ./unit-test-client
读取从机设备地址的数据一致。
|
|