一种高可靠性单片机冗余系统设计

上传人:飞*** 文档编号:47767571 上传时间:2018-07-04 格式:PDF 页数:7 大小:78.80KB
返回 下载 相关 举报
一种高可靠性单片机冗余系统设计_第1页
第1页 / 共7页
一种高可靠性单片机冗余系统设计_第2页
第2页 / 共7页
一种高可靠性单片机冗余系统设计_第3页
第3页 / 共7页
一种高可靠性单片机冗余系统设计_第4页
第4页 / 共7页
一种高可靠性单片机冗余系统设计_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《一种高可靠性单片机冗余系统设计》由会员分享,可在线阅读,更多相关《一种高可靠性单片机冗余系统设计(7页珍藏版)》请在金锄头文库上搜索。

1、一种高可靠性单片机冗余系统设计http:/ 2008年 10 月 31 日社区交流Excel 服务器 -用 Excel 做管理系统关键字:巡检仪烟雾报警器电子血压计环境质量监控验电器本文扼要分析了带专用检测转换电路的单片机双机冗余系统存在的可靠性问题,提出了利用单片机串行口替换专用检测转换电路,通过串行通信相互检测主备机工作状态,由软件完成备机切换成主机的设计思想,并给出了此类系统的软件模板。1冗余系统的硬件结构冗余技术是计算机系统可靠性设计中常采用的一种技术,是提高计算机系统可靠性的最有效方法之一。本文重点介绍一种高效、实用的单片机冗余系统设计技术。在进行冗余系统设计之前,要综合考虑系统的可

2、靠性要求和合理的价格两方面,确定采用元器件冗余还是采用全系统冗余。对于一类要求连续不间断工作的对可靠性有特殊要求的单片机小型应用系统,由于系统的成本不是主要的设计考虑因素,因此,采用包括单片机、扩展电路、 电源和外设双备份的全系统冗余,不但可简化设计方案,还可大大地提高应用系统的可靠性。这种冗余系统具有如下图所示的典型硬件结构。图在上图所示的系统中,U1 和 U2 单元的软硬件结构完全相同。如有必要,在设计各单元时,通过采用自诊断技术,软件陷阱或Watch dog 等系统自行恢复措施可使单元可靠性达到最大限度的提高。系统正常运行时,U1 和 U2 中的一个单元处于正常工作状态(把该单元称为主机

3、),完成应用功能,而另一个单元(备机)处于等待备用状态。当检测转换电路检测到主机不能正常工作时,自动启动备机进入正常运行状态,完成应用功能。此时,可对故障单元进行脱线维护,在排除其故障后,可使其联机进入等待备用状态。显然,这种冗余系统已大大提高了应用系统的可靠性,并基本保证了应用系统的不间断运行。但仔细分析,就会发现存在以下不足之处:. 系统存在可靠性瓶颈,当检测转换电路自身出现故障时,不能监视主备机状态,也无法完成主备机自动切换功能;. 对于某些冗余系统,当备机需要实时保留主机的数据备份时,检测转换电路无法完成主备机之间的数据通信功能;. 由于需要设计检测转换电路,系统设计和实现复杂,引入了

4、附加的不可靠因素。2改进设计方案针对上图所示的双机冗余系统结构和缺点,笔者实现了一个简单高效、具有更高可靠性和主备机数据通信功能的改进设计方案。其基本设计思想是:不改变上述冗余系统的基本结构,但完全去掉专用的检测转换电路,利用主备机双方的串行口和软件相结合的方法,实现检测转换电路的功能和主备机之间的数据通信功能。在此改进的设计方案中,主备单元的硬件和软件结构完全相同,各单元的主备工作状态由上电顺序确定,先上电的一方自动进入主机工作状态, 后上电者则进入备机状态。主机在其工作过程中除实现应用功能外,定期向备机发送反映其工作正常的状态数据,当需要备份的数据发生变化时,主机及时向备机发送已更新的数据

5、。此外,主机也定期接收来自备机的状态数据,当发生接收超时时,主机认为备机已发生故障, 并通过本单元的显示装置向用户给出通知信号,以便及时对备机进行脱线维护。备机在其工作过程中不完成应用功能,但定期接收来自主机的状态数据,当发生接收超时时, 备机认为主机已发生故障,自动切换进入主机工作状态,并通过本单元显示装置通知用户, 以便对原主机单元进行脱线维护。此外,备机还自动接收来自主机的备份数据并进行存储备份。3软件模板下面的软件模板给出了笔者已实现的单片机双机冗余系统的软件框架,和应用系统实现密切相关的部分用自然语言简单描述,其余部分为C51 源代码,因此,这一软件模板很容易移植到相似结构的冗余系统

6、中。该软件模板以89C52 为单片机对象进行程序设计,使用 12MHz 的时钟频率。 常量 OK ,REQ ,ACK 和 NACK 分别表示主备机工作状态正常,备份数据发送请求,肯定应答和否定应答信息的字符常量,MAIN ,STANDBY分别是表示工作单元为主机或备机的常量标志。全局变量timeout 用于设定以毫秒为单位的超时间隔,而Update ,CpuStatus 和 Failure 分别是表示备份数据是否更新,主备机状态和主备机是否发生故障的标志位变量。定时器 0 编程为工作方式1,产生每隔1ms 的定时中断, 每次中断将全局变量timeout 的值减 1,减到 0 时即关闭定时器0。

7、所有需要软件超时机制或延时功能的程序模块都可在设定timeout 的值后开启定时器0,并通过判断该变量的值是否为零而实现定时功能。定时器1编程为工作方式2,用作串行口波特率发生器,波特率编程为15.625K 。定时器 2 工作于自动重装的定时方式,产生每隔50ms 的定时中断。 每次中断, 主备单元的中断服务程序都向对方单元发送表示自身工作状态正常的OK 字符,同时也接收对方单元发送的OK 字符, 若连续三次中断都未能成功接收,则本单元认为对方单元出了故障,并将表示对方单元工作状态的全局变量Failure 置为常量Yes ,否则,置为No;若为备机,还将表示主备身份的标志变量CpuStatus

8、的值置为Main , 从而为备机程序切换和给出原主机故障提示设置判断标志。若备机在中断服务程序中接收到字符REQ ,则置表示备份数据是否更新的标志变量Update 为 Yes , 并立即退出中断服务程序,以便主程序及时接收备份数据帧。主函数在完成应用系统的公共初始化和单片机硬件初始化后,主备单元的定时器2 在后台产生定时中断并通过串行通信进行相互检测,由于规定两个单元的上电时间间隔大于500ms ,因此,利用中断服务程序的检测结果必能自动确定初始的主备身份。主函数延时500ms 后,即根据当前的主备身份自动进入主机的前台监控例程或备机的前台监控例程。主机的前台监控例程除完成应用功能外,当应用功

9、能改变了需要备份的数据时,则调用sendframe 函数关闭定时器2 的中断并发送备份数据帧。当备机的前台监控例程判断出需要接收备份数据时,调用receive frame 函数关闭定时器2 的中断并接收备份数据帧。当备机的前台监控例程监视到主机故障时,备机的前台监控循环自动切换进入主机的前台监控循环。主函数中的监控切换代码较难理解,应结合并发执行的定时器2 的中断服务程序一起分析。函数 send char 和 receive char 通过串行口直接发送和接受单个字符。函数 send frame 和 receive frame 分别发送和接受备份数据帧,它们具有将备份数据装帧和拆帧、循环冗余

10、CRC 效验和超时处理功能,在帧的发送和接受过程中均关闭定时器2,以免产生通信干扰,通信成功时返回1,否则返回0。delay 为以毫秒数为调用参数的延时函数。函数crcgen 和 crcchk 分别生成和效验CRC 。限于篇幅,本文仅给出完成检测切换功能的主函数和定时器2 的中断服务函数,以及相关数据的代码,其它函数仅给出函数原型。代码如下:#include#includeenum OK=0xFF,REQ=0xAA,ACK=0xF0,NACK=0x0F,MAIN=0,STANDBY=1,NO=0,YES=1 unsigned int data timeout;unsigned char bda

11、ta base=0;sbit Update=base0,CpuStatus=base1,sbit Failure=base2;void delay(unsigned int time) ,send char(unsigned char ch) ;unsigned short crc gen(unsigned char *databuf,short len) ;unsigned short crc chk(unsigned char *databuf,short len) ;unsigned char * receivechar(unsigned char * ch) ;unsigned cha

12、r send frame(void),receiveframe(void);main() 和应用系统相关的公共初始化程序段;Update=NO;Failure=YES;TCON=T2CON=PSW=PCON=0x00;IP=0x20;IE=0xA2;SCON=0x50;TMOD=0x21;TL0=64536&0x00ff;TH0=645368;TH1=TL1=0xfe;TL2=RCAP2L=15536&0x00ff;TH2=RCAP2H=155368;TR1=TR2=1;/* 启动定时器1 产生串行口波特率,启动定时器2 在后台进行通信检测*/delay(500);/* 等待与对方建立通信连接

13、,通信由定时器2 的中断例程完成*/if (Failure=YES) /* 在定时器 2 的中断例程判断出初始主备状态后*/ CpuStatus=MAIN;和应用系统实现相关的主机初始化程序段;while(1) /* 主机单元的前台例行监控循环*/ 和应用系统实现相关的主机应用功能例程;if( 应用例程修改了需要备份的数据) Update=YES;if(Update=YES)&(Failure=NO)&sendframe() Update=NO;if(Failure=YES) 给出备机故障通知信号;Update=YES;else CpuStatus=STANDBY;和应用系统实现相关的备机初始

14、化程序段;while(1) /* 备机单元的前台例行监控循环*/ if(CpuStatus=STANDBY)while(CpuStatus=STANDBY) /* 在备机状态中循环*/ 和应用系统实现相关的备机例程;if (Failure=NO)&(Update=YES)&receiveframe() Update=NO;else Update=YES;/* 以便在未来的备机联机后再次发送备份数据*/while(1) /* 切换到主机的前台监控循环中*/ 和应用系统实现相关的主机应用功能例程;if( 应用例程修改了需要备份的数据) Update=YES;if(Update=YES)&(Fail

15、ure=NO)&sendframe() Update=NO;if(Failure=YES) 给出备机故障通知信号;Update=YES;void timer2interrupt(void) interrupt 5 /* 定时器 2 的 50ms中断服务程序*/ static unsigned char data count=0;unsigned char data ch=0x00;TF2=0 ;/* 清除定时器 2 的溢出标志位*/if(receivechar(&ch)=NULL) count+;if(count=3) /* 三次接收字符不成功*/ count=0;Failure=YES;/*

16、 对方单元故障 ,如果本方为备机,准备切换*/if(CpuStatus=STANDBY) CpuStatus=MAIN;else count=0;Failure=NO;if (ch=REQ)&(CpuStatus=STANDBY) /* 如果备机接收到主机的备份数据帧*/ Update=YES;return; /* 发送请求字符,立即返回,接收此备份数据帧*/send char(OK);/* 发送本单元工作正常的状态数据字符*/应用系统和50ms定时相关的例程;4必要的补充以上改进的冗余系统设计具有结构简单,可靠性高, 易于实现等显著特点。但存在的缺陷之一是, 初始的主备状态需要人工干预,即由上电顺序确定,当主备单元同时上电时,导致各单元都进入备机状态,这一缺陷可通过设计互锁的随机延时复位电路加以克服。另一不足之处是通信协议太简单,因此, 系统仅适用于通信质量比较可靠

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号