libmodbus使用

embedded/2024/11/24 22:41:45/

安装可以看这个博客:
https://blog.csdn.net/hanhui22/article/details/105786762
它的安装可以,但是编译测试看不太懂,我没跟着它的编译,完了后把/lib下的

放到开发板的/usr/lib下

编写代码:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>#define MODBUS_DEV_NAME    "/dev/ttyUSB3"    ///< 串口设备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;
}

在这里插入图片描述
然后编译,一个是头文件路径,一个是动态库路径,我在编译完后,移植到arm开发板上遇到一个问题/dev/ttyUSB3找不到了,就是串口直接都不见了,最后拔电重启一下就好了,接着配置modbus-slave

在这里插入图片描述
在这里插入图片描述
执行成功如下,读取出了保持寄存器的值
在这里插入图片描述


http://www.ppmy.cn/embedded/34187.html

相关文章

Grafana:云原生时代的数据可视化与监控王者

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Grafana&#xff1a;让数据说话的魔术师》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Grafana简介 2、Grafana的重要性与影响力 …

android native开发

framwork 一些重要的流程都是要放到native中做的 原因也很简单&#xff0c;效率&#xff0c;尤其是针对性能优化方面的&#xff0c;更离不开native开发 目前针对native开发也回顾下&#xff0c;总结下经验 1 jni开发有两种&#xff0c;app端一般是静态模式&#xff0c;要有jav…

主成分分析在R语言中的简单应用:使用mvstats包

在数据科学领域&#xff0c;主成分分析&#xff08;PCA&#xff09;是一种广泛使用的技术&#xff0c;主要用于数据降维和探索性数据分析。PCA可以帮助我们发现数据中的模式&#xff0c;减少数据集的复杂性&#xff0c;同时保持数据中最重要的特征。本文将介绍如何在R语言中使用…

如何面对并发下的bug

整理总结自蒋炎岩老师的b站课程&#xff0c;https://jyywiki.cn/OS/2022/index.html 并发bug与应对 应对bug的方法 在代码里边增加很多检查(加断言) #include "thread.h"unsigned long balance 100;void Alipay_withdraw(int amt) {if (balance > amt) {usleep(…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…

基于 docker-compose 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并上传相关安装包 3.2 编写 Mysql Dockerfile 脚本 3.3 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录…

PDF解析--PyMuPDF (python 文档解析提取)

1.介绍 PyMuPDF 和Fitz 是用于Python中处理PDF文件的相关模块。Fitz是P有MuPDF的字模块。提供一个简化和封装版本的P有MuPDF功能。 关系&#xff1a; PyMuPDF&#xff1a; 提供广泛的功能&#xff0c;用于操作PDF文档&#xff0c; 包括方便的高级函数与底层操作Fitz &#x…

java里的i/o流

在Java中&#xff0c;I/O&#xff08;输入/输出&#xff09;流是用于处理输入和输出操作的抽象概念。Java的I/O库提供了许多类和方法&#xff0c;用于从各种来源&#xff08;如文件、网络、内存等&#xff09;读取数据&#xff08;输入流&#xff09;&#xff0c;以及将数据写入…