第4章 火灾报警系统软件设计
4.1 软件开发环境
本系统摒弃了传统的汇编语言而采用C语言进行程序设计。因为C语言的描述由函数组成,是一种结构化的程序设计语言,所以更容易实现模块化,而且具有可读性好,易于移植等优点,同时还有汇编语言一样的位操作功能的硬件详细控制指令[29]。数据结构方面,可以使用结构体和数组,能够处理复杂的数据,可用于实时处理系统。
本系统的软件编程使用的是美国Keil Software公司出品的Keil C51,是51系列兼容单片机C语言软件开发系统。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能 体现高级语言的优势。
C51工具包的整体结构中,μVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经C51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对 目标板进行调试,也可以直接写入程序存贮器如EPROM中。
4.2 火灾报警系统程序设计
4.2.1主程序流程图
火灾报警系统控制器上采用80C51作为主控芯片,其主要功能包括:控制IO端口、逻辑判断处理、驱动外部电路、语音报警和A/D采样等,该部分是火灾报警系统智能化的集中体现。
为了便于系统维护,在火灾报警系统的软件设计中采用了模块化程序设计方法,系统各个模块的具体功能都是通过子程序调用实现的。既使得程序结构清晰,又便于以后进一步扩展其功能。本系统主要包括主程序、温度烟雾数据采集子程序、火灾判断与报警子程序等[ 4 ]。系统程序流程图如图4.1所示。
图4.1 程序流程图
主程序是一个无限循环体,其流程是:首先在上电之后系统的各部分包括单片机输出输入端口的设置、数据存储电路、外围驱动电路等完成初始化,接下来执行火灾报警系统的数据采集程序、火灾判断、报警程序。系统初始化后,80C51的P2.2为低电平,P2.1、P2.3、P2.4、P2.5为高电平,所以只有绿灯亮,红灯、黄灯不亮,蜂鸣器不报警。
4.2.2主程序初始化流程图
主程序初始化流程图如图4-2所示。这部分实现的功能包括各种I/O输入输出状态的设定、寄存器初始化、中断使能等。首先设定定时器工作方式,然后开
系统中断,以便响应中断定时,及时对气体浓度和温度进行采样。然后关闭蜂鸣器,开启绿灯,设置报警限初值。
开始 定时器初始开中断 关闭蜂鸣器,打开绿灯 N 是否保持报警初值 Y 返回 设定初值
图4-2 主程序初始化流程图
4.2.3数据采集子程序
数据采集是火灾报警系统中的重要环节。为了降低误报率,系统设计时对温度烟雾采用了两次采集、两次判断的方法。每次采集温度烟雾数据后,将数据存入单片机的寄存器,然后在火灾判断程序中,将采集的数据与设定的阈值进行比较,判断现场是否发生火灾。
具体流程是:系统和程序初始化后,驱动ADC0809的IN0对温度信号进行A/D转换,单片机接受转换好的数据,存入寄存器,由INT1中断服务程序完成;系统延时10ms,驱动ADC0809的IN1对烟雾信号进行A/D转换,转换完成后存入寄存器。系统延时50ms,进行第二次温度烟雾信号采集,将转换好的数据存入寄存器中。单片机每次驱动A/D转换后等待外部中断1,当ADC0809的EOC端变为1时,即中断到来,说明A/D转换已经完成,通过中断服务程序读取转换得到的数据。
由于设计采用的是模块化设计,系统实现报警功能是通过调用子程序实现的。在数据采集子程序中,一次温度烟雾信号采集延时10ms,是让ADC0809准
备好进行下一次信号转换。当系统采集2次温度烟雾信号后,转换好的数据存入单片机的寄存器中,系统再调用火灾判断子程序。
系统温度烟雾信号采集程序流程图如图4.3所示:
图4.2 数据采集流程图
在火灾自动报警系统的程序设计中使用了延时程序,延时10ms的程序如下: void delay_10ms (uint i) {
while (i--) {
uchar i , j , k ; for (i=5 ;i>0 ;i-- ) for (j=4 ;j>0 ;j-- )
for (k=248 ;k>0 ;k-- ) ; } }
4.2.4火灾判断与报警程序
1.火灾报警数据处理方法
固定门限检测法是使用最早,且应用最广泛的火灾探测方法,优点是计算量小且易于实现,其原理是根据火灾探测器的信号幅值作为火灾报警的依据,并与固定的阈值进行比较[16]:当信号幅值超过报警阈值时,则发出报警,否则解除报警[17]。
火灾报警系统中使用的是温度传感器AD590和烟雾传感器TGS202,烟雾传感器输出电压v与烟雾浓度p关系为:v=-0.3p+5.6,温度传感器使用的灵敏度是-5.5mV/℃。在本设计中报警温度设为57℃,烟雾报警浓度设为3.2%英尺(参照市面销售的火灾报警器温度烟雾的报警临界值)。经过换算可得出温度烟雾传感器输出火灾报警临界电压值为:
V烟临=4.6V,V温临=0.72V
2.火灾判断与报警
系统对温度和烟雾进行了两次数据采集与判断,每次信号采集后根据得到的数据与设定的阈值比较,当温度≥57℃,温度异常,置寄存器变量a为1,否则为0;当烟雾浓度≥3.2%,烟雾浓度异常,置寄存器变量b为1,否则为0。综合两次温度烟雾信号的采集,根据温度和烟雾的寄存器变量a和b的状态,判断现场情况:2个寄存器变量均为0,表示情况正常;2个中仅有1个为1,表示情况异常;2个均为1,表示有火灾发生。系统对现场进行报警判断后,间隔20s后(通过系统的延时程序实现),再一次采集现场的温度烟雾信号进行判断,即每一次语音报警持续20s,直到系统做出下一次判断结果。
当系统状态为00时,表示正常,80C51的P2.2口变成低电平,绿灯亮; 当系统状态为01或10时,表示异常,P2.3口变为低电平,P2.1口变为低电平,黄灯亮,蜂鸣器报警;
当系统状态为11时,表示发生火灾,P24口变为低电平,P2.1口变为低电平,红灯亮,蜂鸣器报警。