当前位置: 首页 > 文档资料 > YoC 编程基础 >

RS485传感数据采集例程开发指南

优质
小牛编辑
117浏览
2023-12-01

典型的串口通信标准有 RS232 和 RS485,RS232 是全双工点对点的通信,而RS485 是半双工通信(2 线制),可以一点对多点进行组网。本实例实现了RS485主设备功能,遵循RS485传感数据协议,使用RS485子板与RS485风力风向传感器连接,通过串口进行交互,透传获取到的传感器数据。

该例程适用于CB6502M开发板。

流程图

使用YoC SDK来实现RS485数据透传,APP需要实现:

  • 应用初始化
  • 配置RS485子板工作参数
  • 设置RS485传感协议命令

3.1. 应用初始化

应用入口函数app_main(),主要实现如下功能:

  • 创建APP Task

代码分析:

int app_main(int argc, char *argv[])
{
    ......
    /* 板级初始化,各业务模块初始化 */
    board_yoc_init();

    ......
    /* 创建APP Task,用于定时轮询RS485从设备,并将数据发送至LinKWAN平台 */
    aos_task_new_ext(&task_handle, "app_task", app_task_entry,
                         NULL, 2048, AOS_DEFAULT_APP_PRI);

    return;
}

3.2. APP Task

APP Task主要实现了:

  • 注册RS485主设备并定时轮询RS485从设备

代码分析:

void app_task_entry(void *arg)
{
    ......
    /* 注册RS485主设备,指定使用的串口端口号 */
    rs485_sensor_register(&g_rs485_config, RS485_UART_ID);

    ......

    while (1) {

        ......

        /* RS485从设备数据采集 */
        sensor_check_action();
        ......

        /* 休眠 */
        if (time_enter > 0)
            aos_msleep(time_enter);
    }
}

3.3. RS485数据采集

RS485数据采集需要通过串口外接RS485转换模块,本示例中使用的是UART2,应用程序需要设置正确的波特率和RS485模块状态切换引脚,才能与RS485从设备正常通讯。获取的传感数据可在云端根据相应的数据协议进行解析。

处理流程图如下图所示:

LoRaWAN流程图

以风力风向传感器为例的代码分析:

static void sensor_check_action(void)
{
    /* 风力风向传感器,查询命令 */
    char sensor_cmd[] = {0x02,0x03,0x00,0x00,0x00,0x01,0x84,0x39};
    char response_cmd[30] = {0};
    uint32_t len = sizeof(sensor_cmd);
    /* 打开RS485主设备 */
    dev_t *dev = rs485_sensor_open_id(DEVICE_RS485_SENSOR_NAME, RS485_UART_ID);

    /* 发送查询命令 */
    if (rs485_sensor_fetch(dev, sensor_cmd, len, RS485_FETCH_TIMEOUT) == 0) {
        ......

        /* 获取回应数据 */
        if (rs485_sensor_getdata(dev, response_cmd, &len) == 0) {
            ......
        }
    } 
    ......

    /* 关闭RS485主设备 */
    rs485_sensor_close(dev);
}

以CB6502M开发板为例,示例程序的运行步骤为:

4.1. 接线

  • CB6502M开发板J34引脚图

RS485子板连接

  • RS485转换子板接线

RS485子板连接

RS485转换模块管脚开发板J34
RORXD2
REPA26
DE
DITXD2
VCCDBG_PWR管脚(电源边上)
GNDGND
A接传感器A
B接传感器B

4.2. 编译下载

  • 连接打印串口和调试口

  • 打印串口的串口调试工具配置为:

    波特率: 115200, 数据位: 8, 校验位: None, 停止位: 1, 流控: None

  • 使用集成开发环境CDK编译工程文件,然后下载至CB6502M开发板

  • 按RESET按键,复位开发板

  • 串口将打印如下信息

[     0.335863][I][init    ]OS version: 7.0.2
[     0.368225][D][rs485_demo]Enter APP mode

4.3. 运行结果展示

  • RS485从设备回应数据
[     0.620111][D][rs485_demo]
0x0000: 0x02 0x03 0x02 0x00 0x00 0xfc 0x44

示例中使用的风力风向传感器的数据协议为:

发送数据命令格式:

02 03 00 00 00 01 84 39

02:设备站号

03:命令号,在标准的协议中用于读取内存中数据

00 00:读取数据的开始地址,风向值存在于内存中00 00开始的地址中。

00 01:读取数据个数,风向值在内存中占用一个数据空间,Modbus中规定,一个数据数据空间占用2个字节型空间。

84 39:CRC校验值

接收命令格式解析:

02 03 02 01 45 3C 27

02:设备站号。

03:命令号

02:返回数据的长度

01 45:返回的风向值,在Modbus中规定数据的高8位在前,低8位在后,所以(风向值=风向返回值=0145,用户根据实际的返回值可以计算风向值了,此处出现的数字均为16进制)。

3C 27:CRC校验值。