利用RSVIEW32的事件机制实现软冗余自动切换

来源:互联网 发布:linux 启动mysql服务 编辑:程序博客网 时间:2024/05/17 05:19

RSVIEW32中支持事件机制,当RSVIEW32中定义的事件被调用EventOn启用后,在事件指定的触发方式下,会周期性或者连续地扫描执行。而每当事件被扫描时,如果事件条件结果由0变换到1,那么事件就发生,此时该事件所指定的执行行为将被RSVIEW32自动执行。我们按RSVIEW32对事件的固有支持特性,在配置有双PLC的软冗余系统中成功实现了,快速地接管活动PLC工作的任务。

在硬件投资不足的情况下,我们为了获得足够的冗余功能,往往可以配置双PLC再辅以PLC程序来实现软件冗余功能。这里不对PLC程序如果保证双PLC之间的冗余功能作深入的探讨,只对已经实现软件冗余功能的双PLC系统中,RSVIEW32如何正确有效地连接到当前活动的PLC上作研究。

说到RSVIEW32对软冗余的支持,我们必须对RSLINX对软冗余的支持作一些技术说明,RSLINX作为RSVIEW32PLC通讯的中间桥梁提供了对软冗余功能的基本支持。在RSLINX可以配置Alias Topics,通过Alias 来管理多个不同Topic之间的切换工作,我们知道ABPLC网络中一个Topic可以连接到一个特定的PLC,这样通过对RSLINXAlias功能就可以实现RSVIEW32正确有效地连接到活动的PLC

当然这里说到的只是可行的途径,具体我们怎么来做呢?

首先,我们通过RSLINX的菜单“DDE/OPCàAlias Topics Configuration…”菜单项可以进入别名管理界面,在这里面我们可以增加一个新的别名,并且这个别名将会管理我们实际需要进行冗余备份功能的两个PLCTopic。如下图所示。

Configure Alias Topics

Configure Alias Topics对话框中,我们同时可以设置别名所管理的Topic之间如何,在哪种时机做何种切换行为。

A. Switch on error,在错误时发生进行切换

B. Switch on command,接受命令切换

C. Switch when bit is zero or one,指定的位为0或者1时切换

有经验的工作者都知道,如果我们使用Switch on error或者 Switch when bit is zero or one 进行自动管理Alias往往都不能如我们意地在网络故障时进行自动切换工作,因为RLINXPLC之间是通过TCP进行通讯的,在网络断电或者其它异常情况导致的网络中断时(PLC断电),TCP协议决定了网络故障发现时间在10秒左右的时间(RSLinx发现网络故障的时间更长)。在网络故障未被发现的这段时间内,RSLINX会维护最后一次通讯的值,直到发现网络故障时,才做出通讯质量判断(RSVIEW32上的表现,OPC Client未做测试)。这就导致AC方式的自动切换很可能因为RSLINX对网络状态的判断不及时而不能如意地进行切换。

B方式的切换给予了开发者根据实际情况进行程序控制切换的能力。在RSVIEW32中也正好可以通过RSLINX的内嵌命令@SwitchTopc进行Topic之间的程控切换,如何让RSVIEW32灵敏地探测到PLC的活动状态并且自动通知RSLINX进行Topic进行切换呢?下面对技术方面作详细说明。

结合PLC对冗余的快速反应和RSVIEW32的事件机制特性,我们拟采用PLC通知RSVIEW32RSLINX发送切换命令的方案来保证RSVIEW32始终连接到当前活动的PLC上。

RSVIEW32为了快速地检测到当前活动的PLC,我们在RSVIEW32中建立两个分别直接到PLC1PLC2TAG(在RSVIEW32标记数据库中命名为r1r2),并且这个TAGPLC发生了切换后,会产生一定周期性的方波以通知RSVIEW32RSVIEW32检测到变化后,通知RSLINX进行切换,并且根据RSLINX执行结果再通知PLC程序切换工作是否变成,如果完成,PLC锁定TAG值为0。这样在RSVIEW32事件中创建一个新的事件,并且增加事件记录,事件条件为 r1 || r2,执行动作为 str1=string;done=1。这样就可以在任意一个PLC接管工作后,产生方波通知RSVIEW32RSVIEW32的周期性事件条件 r1|| r2 总能检测到请求,再执行切换操作 str1=string,切换成功后再通知PLC已经完成切换done=1

 Flow chart

这样通过PLCRSVIEW32相配合来完成在PLC切换后,RSVIEW32能够以最快速度影响切并且切换连接到当前活动的PLC上。

 

RSVIEW32控制RSLinx切换的原理

神奇的str1=string赋值语句将会执行切换工作。查看RSLinx的联机说明文档,可以看到RSLinx具有很多命令可以调用,其中对我们冗余直接有效的就是SwitchTopic指令,它是用于通知RSLinx把别名连接到哪一个Topic,也可以不指定具体的Topic而在Alias管理的Topic中轮换。

RSVIEW32中可以通过简单的方式来调用RSLinx支持的指令。首先在TAG标记数据库中创建一个名为string的字符串变量,如下图所示。

tag string

再创建一内存字符串变量str1。两个数字量r1r2分别连接到PLC1PLC2的请求标志 rdone是连接到[ActivePLC]done的数字量。

再创建事件eve,如下图所示增加事件。

event

图示的事件将是r1或者r2任何一个变化时发生动作执行str1=string;done=1,而r1r2是分别连接到两个冗余PLC,在PLC执行了切换后通知RSVIEW32需要切换的周期性标志。当RSVIEW32接收到PLC通知切换,并且通知RSLinx完成切换行为后,向当前活动PLC的标记done中写入1,以通知PLC:上位已经完成切换,不必再要求上位切换了。把事件在工程启动时启动。

 

ABPLC上位系统中,这样实现的软冗余功能是目前我找到的反应最快的方式,一般情况下在2s以内可以实现切换,主要视网络和事件扫描速度影响,实际上是可以实现1秒内执行切换动作的。但是由于切换到新的PLC后,RSVIEW32需要采集大量的标记信息所以在直观感觉上,好像没有切换成功。但是我们通过监视RSLinx,可以发现切换是可以足够快的。

 
原创粉丝点击