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

题目要求:

  • 监测端上电后LED1至LED8全部熄灭,LED9每隔2秒闪烁一次(亮0.5秒,灭1.5秒)。
  • 采集端测到火焰时,监测端LED1至LED4出现流水灯效果。
  • 采集端火焰消失后,监测端流水灯效果保持。
  • 按下一次监测端KEY1按键,能停止流水灯效果。

使用2块M3主控模块、1个火焰传感器模块,选取一块M3主控模块作为监测端,另一块M3主控模块安装火焰传感器模块作为采集端。

1、将“485采集端程序.hex”文件下载到采集端,使用“485节点配置工具.exe”配置采集端地址为0x01、传感器类型为火焰传感器。将监测端和采集端通过右上方485通信口(J5接口)进行通信连接。

2、使用STM32CubeMX图形化配置工具为监测端生成KEIL开发工程,将STM32CubeMX自身项目和生成的工程保存到工程目录中。

使用STM32CubeMX进行以下配置:

  • (1)LED1-LED9和KEY1所在的GPIO的配置、串口
  • (2)USART2的设置为:波特率115200bps,8位数据位,1位停止位,无校验位。
  • (3)PC9引脚控制485通信芯片收发转换(低电平接收,高电平发送)。
  • (4)完成时钟树配置:主频72M
  • (5)配置定时器的工作参数
  • (6) 配置调试端口

3、监测端通电后,板上LED1至LED8全部熄灭,LED9每隔2秒闪烁一次(亮0.5秒,灭1.5秒)。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        HAL_GPIO_WritePin(LED9_GPIO_Port,LED9_Pin,GPIO_PIN_RESET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED9_GPIO_Port,LED9_Pin,GPIO_PIN_SET);
      HAL_Delay(1500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

4、监测端每隔2秒向采集端查询一次火情,当采集端出现火情时,监测端的LED1至LED4按指定流水灯方式显示。当采集端火情消失后,监测端的LED1至LED4应保持流水灯显示方式。具体流水灯显示方式为LED1亮起->LED2亮起->LED3亮起->LED4亮起->LED1至LED4全部熄灭->重复前述效果,各显示切换间隔为1秒。

监测端每隔2秒向采集端查询一次火情,

SendCmd()

/* USER CODE BEGIN 0 */
void SendCmd(void)
{
    uint8_t cmd[8] = {0};
    cmd[0] = 0x01;
    cmd[1] = 0x04;
    cmd[2] = 0x00;
    cmd[3] = 0x02;
    cmd[4] = 0x00;
    cmd[5] = 0x01;
    cmd[6] = 0x90;
    cmd[7] = 0x0A;
    HAL_GPIO_WritePin(CONPIN_GPIO_Port,CONPIN_Pin,GPIO_PIN_SET);
    HAL_UART_Transmit(&huart2,cmd,8,0xffff);
    HAL_GPIO_WritePin(CONPIN_GPIO_Port,CONPIN_Pin,GPIO_PIN_RESET);
    HAL_UART_Receive_IT(&huart2,rxBuf,7);
}

/* USER CODE END 0 */
 /* USER CODE BEGIN 2 */
//定时器6,7使能
  if(HAL_TIM_Base_Start_IT(&htim6) != HAL_OK)
  {
      Error_Handler();
  }
  if(HAL_TIM_Base_Start_IT(&htim7) != HAL_OK)
  {
      Error_Handler();
  }

  /* USER CODE END 2 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM6)
    {
        if(flag_fire == 1)
        {
            ledState = ledState>>1;
            ledState |= 0x0080;
            if(ledState == 0x00f8)
                ledState = 0;
            HAL_GPIO_WritePin(GPIOE,0xffff,GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOE,ledState,GPIO_PIN_RESET);
        }

    }

    if(htim->Instance == TIM7)
    {
        SendCmd();
    }
}

判断火情

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART2)
    {
        if((rxBuf[0] == 0x01) && (rxBuf[1] == 0x04))
        {
            uint16_t temp = 0;
            temp = ((uint16_t)rxBuf[3])<<8;
            temp = temp | rxBuf[4];
            if(temp > 100)
            {
                flag_fire = 1;
            }
        }
    }

}

按键停止流水灯

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin & GPIO_PIN_13)
    {
        if(flag_fire == 1)
        {
            flag_fire = 0;
            ledState = 0;
            HAL_GPIO_WritePin(GPIOE,0xffff,GPIO_PIN_SET);
        }
    }
}

原文地址:https://www.cnblogs.com/jsit-dj-it/p/12112922.html

时间: 2024-11-09 03:12:43

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

基于AVR128的简单Modbus协议实现

Modbus通讯协议是由Modicon公司在1979年开发的,应用于工业现场控制的总线协议.Modbus通讯系统包括带有可编程控制的芯片节点和公共传输线组成,其目的是用于多节点数据的采集和监控.Modbus协议采用主从模式,通讯系统中有一个主机对多个节点从机进行监控,从机节点最多支持247个.每个从机均有自己独立的从机地址,而且改地址能够被主机识别. 能够支持Modbus协议的通讯系统有RS-232,RS-422,RS-485等.同时Modbus协议具有标准.开放.免费.帧格式简单等特点而被广大

MODBUS协议相关代码(CRC验证 客户端程序)

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议.通过此协议,控制器相互之间.或控制器经由网络(如以太网)可以和其它设备之间进行通信.Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备.一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave.典型的主设备包括工控机和工业控制器等:典型的从设备如PLC可编程控制器等.Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口. 1.十六

基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)

导读:触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好.触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序.Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议.关键词:触摸屏,MCS-51单片机,Modbus协议,通信 在工业控制中经常需要观察系统的运行状态或者修改运行参数.触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以

基于AVR128单纯Modbus协议实施

Modbus通信协议Modicon公司1979在发展中,适用于工业现场总线协议控制.Modbus通信系统包含芯片的节点,并与组合物可编程控制的公共传输线,它的目的是收集和监视多个节点的数据.Modbus协议采用主从模式,通信系统具有多个节点的从一台主机机监视器.最多支持从节点247个.每一个从机均有自己独立的从机地址.并且改地址可以被主机识别. 可以支持Modbus协议的通讯系统有RS-232.RS-422,RS-485等.同一时候Modbus协议具有标准.开放.免费.帧格式简单等特点而被广大p

modbus协议之串行链路

目录 modbus协议之串行链路 一.modbus简介 二.modbus消息桢 三.modus设备地址与功能码 附录一.CRC校验与LRC校验 附录二.功能码 其它参考文档 modbus协议之串行链路 一.modbus简介 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制(PLC)通信而发表.Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. M

简单Modbus协议数据源工具实现(一)WinForm

这是一个学习C#.Winform的自我回顾过程,用来发现存在的不足,也为了推动自己继续学习. 大学通信专业毕业之后,进入了一家电力科技公司从事软件开发工作,主要用的是Delphi语言进行电力通信协议的上位机开发.因为上位机需要与下位机通信才好进行测试,而事实上没有那么多现成的装置给你借用调试,加上公司慢慢的开始推行C#/WPF来做一些定制软件,所以想学习一下C#,刚好现在也有一个自身的需求出现--上位机程序调试困难,所以就从最易入手的winform程序切入,慢慢的加深对于C#语言的理解.于是就打

基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨

在上一篇 基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨  中探讨了在C#端与Java端通信中传递字符,有朋友提到如果传递int类型的整数,会出现编码的问题. 到网上找到了一篇文章< 使用protobuf进行C#与Java通信 >进行学习 ,使用protobuf进行编码,传递数据,好像这样可以避免编码的问题. (虽然编码问题解决了,但是粘包问题并没有解决,有经验的朋友介绍下怎样解决粘包的问题) 服务器端基于networkcomms V3 C#通信框架. ne

RTU的优势与Modbus协议介绍

RTU是REMOTE TERMINAL UNIT 的简称,即远方数据终端,用于监视.控制与数据采集的应用.具有遥测.遥信.遥调.遥控功能.RTU功能必须确保两种功能:1,有数据传输功能.2,有采集和控制功能. 经过多年的PLC+DTU在工业自动化应用中已经普遍采用这种方式在进行数据的在线监测和远程控制.当RTU面世后,RTU集成的A/D和I/O采集功能已经可以达到取代部分PLC功能了. 1,在一些相对简单的温度.压力.湿度.水位.烟雾等传感器的数据采集监测,完全已经可以通过RTU取代前端早期的P

modbus协议讲义

Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议资料.手册说得太专业了,起初很多内容都很难理解.    所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号.现在就来定义一个新的最简单协议.例如, 协议: “A” --“LED灭”       “B” --“报警”       “C” --“LED亮”单片机接收到“A”控制一个LED灭,