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

时间:2019-06-19 08:53:50

标签: c linux

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

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;
}

1 个答案:

答案 0 :(得分:0)

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

如果没有,那么您可以看看这个answer。在其中,您具有编译和安装 libmodbus 所需的所有详细信息,并支持使用软件切换行。

我正在我的RPi和CHIP计算机中使用此解决方案,但您应该可以立即在BBB上使用它。如果GPIO文件名包含3或4位数字,您可能会发现一个小警告(请看<input name="test" spellcheck="true" pattern=".*"></input> )。如果是这种情况,请查看here,我不得不修改代码以纠正该问题。