libmodbus使用

安装可以看这个博客:

https://blog.csdn.net/hanhui22/article/details/105786762

它的安装可以,但是编译测试看不太懂,我没跟着它的编译,完了后把/lib下的

放到开发板的/usr/lib下

编写代码:

c 复制代码
#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 ID

    if (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


执行成功如下,读取出了保持寄存器的值

相关推荐
麻瓜老宋11 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
Freak嵌入式13 小时前
MCU 低功耗模式解析:时钟门控、电源门控、深度休眠
人工智能·python·单片机·嵌入式硬件·开源·依赖倒置原则·micropython
国科安芯13 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
躺不平的理查德14 小时前
STM32时钟树(Clock Tree)
stm32·单片机·嵌入式硬件
qq_4017004115 小时前
经典的电压基准源电路
单片机·嵌入式硬件
SilentSlot16 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
茯苓gao16 小时前
嵌入式开发笔记:电机参数辨识与自学习完全指南——从电气参数到机械特性的深度解析
笔记·嵌入式硬件·学习
西安景驰电子16 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
冻柠檬飞冰走茶17 小时前
PTA基础编程题目集 7-15 计算圆周率(C语言实现)
c语言·开发语言·数据结构·算法
派勤电子18 小时前
5G物联网网关工控主板选型指南(超小尺寸工业级嵌入式硬件解决方案)
嵌入式硬件·工业网关·工控主板·工控主板选型·嵌入式工控主板·5g物联网网关·超小尺寸工控主板