串口通信在双机冗余系统中应用_第1页
串口通信在双机冗余系统中应用_第2页
串口通信在双机冗余系统中应用_第3页
串口通信在双机冗余系统中应用_第4页
串口通信在双机冗余系统中应用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

串口通信在双机冗余系统中应用

摘要:本文扼要分析了当今带专用检测转换电路的双机冗余系统

存在的可靠性问题,提出了利用双机的串行口代替专用检测转换电路,

通过串行通信相互检测主备机工作状态,由软件完成备机切换成主机

的新型设计思想,为计算机在工业实时监控系统应用中的可靠性开辟

新思路。

关键词:双机冗余软件切换

1、引言

冗余技术是计算机系统可靠性设计中常用的一种技术,是提高计

算机系统可靠性的最有效方法,同时也是鉴别各类计算机控制系统好

坏的标志之一。故世界各地厂商推出的新产品都或多或少带有冗余技

术。如美国的Honeywell、德国的西门子和日本的三武等,它们都有

一个共同的特点,就是自己设计了专用检测转换电路来实现主备切换。

本文提出一种新的构思,取消专用检测转换电路,采用一种高效、实

用的软件冗余技术来完成双机切换。

2^冗余系统介绍

双机冗余包括CPU、扩展电路、电源和外设双备份的全系统冗余,

不但可简化设计方案,还可大大地提高应用系统的可靠性。这种冗余

系统具有如图1所示的典型硬件结构。

在图1所示的系统中,U1和U2单元的软硬件结构完全相同。如

第1页共9页

有必要,在设计各单元时,通过采用自诊断技大,软件陷井或Watch

dog等系统自行恢复措施可使单元可靠性达到最大限度的提高。系统

正常运行时,U1和U2中的一个单元处于正常工作状态(把该单元称

为主机),完成应用功能,而另一个单元(备机)处于等待备用状态。

当检测转换电路检测到主机不能正常工作时,自动启动备机进入正常

运行状态,完成应用功能。此时,可对故障单元进行脱线维护,在排

除其故障后,可使其联机进入等待备用状态。显然,这种冗余系统已

大大提高了应用系统的可靠性,并基本保证了应用系统的不间断运行。

但仔细分析,就会发现它存在以下不足之处:

①系统存在可靠性瓶颈,当检测转换电路自身出现故障时,不

能监视主备机状态,也无法完成主备机自动切换功能;

②对于某些冗余系统,当备机需耍实时保留主机之间的数据备

份时,检测转换电路无法完成主备机之间的数据通信功能:

③由于需要设计检测转换电路,系统设计和实现复杂,引入了

附加的不可靠因素°

3、改进设计方案

针对图1所示的双机冗余系统结构和缺点,笔者实现了一个简单

高效、具有更高可靠性和主备机数据通信功能的改进设计方案。其基

本设计思想是:不改变上述冗余系统的基本结构,但完全去掉专用的

检测转换电路,利用主备机双方的串行口和软件相结合的方法,实现

检测转换电路的功能和主备机之间的数据通信功能。在此改进的设计

方案中,主备单元的硬件和软件结构完全相同,各单元的主备工作状

第2页共9页

态由上电顺序决定,先上电的一方自动进入主机工作状态,后上电者

则进入备机状态。主机在其工作过程中除实现应用功能外,定期向备

机发送反映其工作正常的状态数据,当需要备份的数据发生变化时,

主机及时向备机发送已更新的数据。此外,主机也定期接收来自备机

的状态数据,当发生接收超时时,主机认为备机已经发生故障,并通

过本单元的显示装置向用户给出通知信号,以便及时对备机进行脱线

维护。备机在其工作过程中不完成应用功能,但定期接收来自主机的

状态数据,当发生接收超时,备机认为主机以经发生故障,自动切换

进入主机工作状态,并通过本单元显示装置通知用户,以便对原主机

单元进行脱线维护。此外,备机还自动接收来自主机的备份数据并进

行存储备份。

4、软件模板

下面的软件模板给出了笔者已实现的双机冗余系统的软件框架,

和应用系统实现密切相关的部分用自然语言简单描述,其余部分为

VisualC++源代码,因此,这一软件模板很容易移植到相似结构的冗

余系统中。

该软件模板以VisualC++进行程序设计,常量OK,REQ,ACK和

NACK分别表示主备机工作状态正常,备份数据发送请求,肯定应答

和否定应答信息的字符常量,MAIN,STANDBY分别是表示工作单元为

主机或备机的常量标志。全局变量timeout用于设定以毫秒为单位的

超时间隔,而Update,CpuStatus和Failure分别是表示备份数据是

否更新,主备机状态和主备机是否发生故障的标志位变量。

第3页共9页

send.frame函数关闭定时器1的中断并发送备份数据帧。当备机的

前台监控例程判断出需要接收备份数据时,调用receive.frame函数

关闭定时器1的中断并接收备份数据帧。当备机的前台监控例程监视

到主机故障时,备机的前台监控循环自动切换进入主机的前台监控循

环。主函数中的监控切换代码较难理解,应结合并发执行的定时器1

的中断服务程序一起分析。

函数sendchar和receivechar通过串行口直接发送和接收单

个字符。函数send_framc和roccive_franie分别发送和接收备份数

据帧。VC++中用通讯控件开发串行通信程序,通讯控件的工作原理类

似与中断方式,当有通讯事件发生时(如发送数据、接收数据等),

就会触发OnConun事件,在该事件的处理函数中调用GetCommEvont()

函数,通过返回值即可确定是那类事件,再作出相应的处理。通信成

功时返回1,否则返回0。Delay为以毫秒数为调用参数的延时函数。

限于篇幅,本文仅给出完成检测切换功能的主函数和定时器1的

中断服务函数,以及相关数据的代码,其它函数仅给出函数原型u代

码如下:

^include"stdafx.h〃

ttinclude"Try.h"

#include"TryDoc.h〃

#include"TryView.h"

#include

#include

第5页共9页

#include

ttinclude

#include

inttimeout;

boolUpdate,Failure;

charCpuStatus[12],

voiddelay(unsignedinttime);

voidCTryDlg::Sond_char(unsignedcharch)

(

if(!mComm.GetPortOpen())

(

m_Comm.SetPortOpen(TRUE);〃打开串口

mComm.SetOutput(C01eVariant(ch));//发送数据

)

}

voidCTryDlg::receivechar(unsignedchar*ch)

(

VARIANTm_inputl;

if(mComm.GetlnBufferCount())

(

m_inputl=m_Comm.Getlnput();〃读取缓冲区内的数据

ch=m_inputl.bstrVal;//WVARIANT型变量转换为CString型变

第6页共9页

return1;

}

elsereturn0;

}

mianO

{和应用系统相关的公共初使化程序段:

Updata=false;Failurc=true;

Delay(500);/*笔待与对方建立通信连接,通信由定时器1的中

断例程完成*/

If(Failure)A在定时器1的中断例程判断出初使主备状态后

*/

{CpuStatusWATN;和应用系统实现相关的主机初使化程序断;

while(l)/*主机单元的前台例行监控循环*/

{和应用系统实现相关的主机应用功能例程;

if(应用例程修改/需要备份的数据)Update;

if((Update)&&(!Fai1ure)&&sendframe())Update=false;

if(Failure){给出备机故障通知信号;Update二true;}

))

else

{CpuStatus二STANDBY;和应用系统实现相关的备机初使化程序段;

while(l)/*备机单元的前台例行监控循环*/

第7页共9页

{if(CpuStatus==STANDBY)

while(CpuStatus==STANDBY)/*在备机状态中循环*/

{和应用系统实现相关的备机例程;

if((!Failure)&&(Update)&&receivefraire())Update=false;

}

else

{Update二true;/*以便在未来的备机联机后再次发送备份数据

*/

while(l)A切换到主机的前台监控循环中*/

{和应用系统实现相关的主机应用功能例程;

if(应用例程修改了需要备份的数据)Update;

if((Update)&&(!Failure)&&send_frame())Update=false;

if(Failure){给出备机故障通知信号;Update=YES;}

}}}}}

voidCTryDlg::OnTimer(UINTnIDEvent)/*定时器1的55ms

中断服务程序*/

(intcount=0;

if(receive_char(&ch)==NULL)

{count++;

if(count==3)/*三次接收字符不成功*/

{count=0;Failure=true;/*对方单元故障,如果本方为备机,

准备切换*/

第8页共9页

if(CpuStatus==STANDBY)CpuStatus=MAIN;

)}

else

{count=0;Failure=false;

if((ch==REQ)&&(CpuStatus==STANDBY))/*如果备机接收到主

机的备份数据帧*/

{Update=true;return;}/*发送请求字符,立即返回,接收此

备份数据帧*/

)

send_char(0K);/*发送本单元工作正常的状态数据字符*/

应用系统和55ms定时相关的例程;

)

5、结束语

以上改进的冗余系统设计具有结构简单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论