c - 如何使用 RS485 将数据传输到 BeagleBone Black

标签 c linux

我需要使用 Rs485 通过 Modbus RTU 将数据传输到 BeagleBone Black。要使用 Modbus RTU,但我不知道如何在 rs-485 中切换 rts。帮助

Modbus RTU数据传输代码

如何向其中添加 RS485 代码,以使用 Modbus 库 libmodbus

#include "modbus-rtu.h"
#include <stdio.h>
#include <errno.h>

int main(){
int connected;
    modbus_t *ctx;     
    uint16_t tab_reg[64];    
    int rc;     
    int i;
    ctx = modbus_new_rtu("/dev/ttyS4", 9600, 'N', 8, 1);     
    if(ctx == NULL) {   
        fprintf(stderr, "Unable to create the libmodbus context\n");

    }
    else {
        modbus_set_slave(ctx, 1);     
        modbus_set_debug(ctx, TRUE);     
        connected = modbus_connect(ctx);    
        printf("modbus_set_slave return: %d\n", rc);
        if (rc != 0)
        {
            printf("modbus_set_slave: %s \n"modbus_strerror(errno));        
        }
            rc = modbus_read_registers(ctx, 0, 3, tab_reg);      
        for (i = 0; i < rc; i++) {
            printf("reg[%d]=%d (0x%X)\n", i, tab_reg[i], tab_reg[i]);
        }
            if(rc == -1)
            {
                fprintf(stderr, "%s\n", modbus_strerror(errno));
            }               
        modbus_close(ctx);     
        modbus_free(ctx);     
    }
return 0;
}

最佳答案

首先我会检查你的硬件是否支持自动(硬件)半双工方向控制。

如果没有,那你可以看看这个answer .在那里,您拥有编译和安装 libmodbus 所需的所有详细信息,并支持使用软件切换线路。

我在我的 RPi 和 CHIP 计算机上使用这个解决方案,但你应该能够立即在你的 BBB 上使用它。如果 GPIO 文件名有 3 位或 4 位数字,您可能会发现一个小警告(查看 /sys/class/gpio)。如果是这样的话,看看here ,我不得不修改代码以更正该问题。

关于c - 如何使用 RS485 将数据传输到 BeagleBone Black,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56663732/

相关文章:

c - 在 OpenCV 中读取 AVI 文件时出现未知错误

linux - 如何从 Windows 7 使用远程桌面连接到 Amazon Linux 实例?

c - linux内核编程死循环

c - 如何在 Ruby C API 中获取 VALUE 的类

c - && 之后的条件变量赋值 (C)

c++ - 从 c/c++ 独立应用程序中的 zip 文件导入 python 包

c - ARM neon 指令生成

linux - 在多次出现第二个图案的两个图案之间打印线条

java - OpenLDAP 2.3/2.4 并发问题

c++ - 信号处理