RS485:智能安防系统案例

Posted jsit-dj-it

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RS485:智能安防系统案例相关的知识,希望对你有一定的参考价值。

设备准备

  • PC机一个
  • 网关一个
  • RS-485通信节点三个(三个M3主控模块,一个作为主机,两个从机)
  • 火焰传感器一个
  • 可燃气体传感器一个
  • USB转485调试器一个

 

 

 

 一、云平台配置

http://www.nlecloud.com/

技术图片

 

 技术图片

 

技术图片

技术图片

 

 技术图片

技术图片

二、节点固件下载

技术图片

 

一路next到……

 技术图片

 技术图片

 

 技术图片

 

 

 

 

三、硬件连线

技术图片

 

   实物连接图

技术图片

代码分析

// 硬件抽象层初始化
HAL_Init();
// 系统时钟配置
SystemClock_Config();
// GPIO口初始化(包括LED,KEY1,KEY2,蜂鸣器)
MX_GPIO_Init();
// 初始化USMART(函数控制管理初始化)
usmart_dev.init();
// ADC初始化
MX_ADC1_Init();
// 定时器3初始化
MX_TIM3_Init();
// 初始化内部SRAM
my_men_init(SRAMIN);
// 初始化modbus16进制
mb_init(M_FRAME_CHECK_CRC16);
// 传感器初始化,开机获取上次传感器保存状态
Sensor_Init();
while (1)
{
    // modbus协议应用程序
    getsensor_task();
    // 获取传感器数值应用程序
    app_modbus_slave();
}
void getsensor_task(void)
{
    static uint32_t getsensor_value_time;
    static uint32_t getsensor_set_time;
    uint8_t res;

    if ((uint32_t)(HAL_GetTick() - getsensor_value_time >= 500))
    {
        getsensor_value_time = HAL_GetTick();
        //printf("test getsensor_value_time");
                // 传递传感器类型获取传感器数据
        get_sensor(sen_type_t);
    }

    if ((uint32_t)(HAL_GetTick() - getsensor_set_time >= 100))
    {
        getsensor_set_time = HAL_GetTick();
        //printf("test change_sensor_state");
        res = change_sensor_state(&sen_type_t);
    }
}

 

void app_modbus_slave(void)
{
    uint8_t res;
    m_frame_typedef rxframe;
    static uint32_t slaveaddress_set_time;

    if (m_ctrl_dev.frameok == 1)
    {
                // 解包,判断地址是否是自己的,判断功能吗
        // 根据功能码调用相应的函数去读取寄存器的值,封装发给主机
        res = mb_unpack_frame(&rxframe);

        if (res == MR_OK)   //解析包成功
        {
            printf("解析包成功
");
        }
        else if (res == MR_FRAME_FORMAT_ERR)
        {
            printf("帧格式错误
");
        }
        else if (res == MR_FRAME_CHECK_ERR)
        {
            printf("帧校验错误
");
        }
        else if (res == MR_FRAME_SLAVE_ADDRESS)
        {
            printf("从机地址错误
");
        }
        else if (res == MR_FRANE_ILLEGAL_FUNCTION)
        {
            printf("功能码错误
");
        }
    }
    // 配置节点地址
    if ((uint32_t)(HAL_GetTick() - slaveaddress_set_time >= 100))
    {
        slaveaddress_set_time = HAL_GetTick();
        //printf("slaveaddress_set_time
");
        change_address_state(&SLAVE_ADDRESS);
    }
}

程序流程

技术图片

 

 技术图片

 

 技术图片

 

 

 

 

 

以上是关于RS485:智能安防系统案例的主要内容,如果未能解决你的问题,请参考以下文章

LabVIEW Arduino RS-485智能农业监测系统(项目篇—4)

实现基于RS-485通信和Modbus协议的远程智能消防监测系统

RS485/电力载波/NB/LoRa/ZigBee等智能灯控制器对比分析

RS485/电力载波/NB/LoRa/ZigBee等智能灯控制器对比分析

智慧灯杆智能网关RS485串口接线说明

如何用电脑读取485接口的电表数据