利用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作为RSVIEW32与PLC通讯的中间桥梁提供了对软冗余功能的基本支持。在RSLINX可以配置Alias Topics,通过Alias 来管理多个不同Topic之间的切换工作,我们知道AB的PLC网络中一个Topic可以连接到一个特定的PLC,这样通过对RSLINX的Alias功能就可以实现RSVIEW32正确有效地连接到活动的PLC。
当然这里说到的只是可行的途径,具体我们怎么来做呢?
首先,我们通过RSLINX的菜单“DDE/OPC”à“Alias Topics Configuration…”菜单项可以进入别名管理界面,在这里面我们可以增加一个新的别名,并且这个别名将会管理我们实际需要进行冗余备份功能的两个PLC的Topic。如下图所示。
在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往往都不能如我们意地在网络故障时进行自动切换工作,因为RLINX与PLC之间是通过TCP进行通讯的,在网络断电或者其它异常情况导致的网络中断时(PLC断电),TCP协议决定了网络故障发现时间在10秒左右的时间(RSLinx发现网络故障的时间更长)。在网络故障未被发现的这段时间内,RSLINX会维护最后一次通讯的值,直到发现网络故障时,才做出通讯质量判断(RSVIEW32上的表现,OPC Client未做测试)。这就导致A、C方式的自动切换很可能因为RSLINX对网络状态的判断不及时而不能如意地进行切换。
B方式的切换给予了开发者根据实际情况进行程序控制切换的能力。在RSVIEW32中也正好可以通过RSLINX的内嵌命令@SwitchTopc进行Topic之间的程控切换,如何让RSVIEW32灵敏地探测到PLC的活动状态并且自动通知RSLINX进行Topic进行切换呢?下面对技术方面作详细说明。
结合PLC对冗余的快速反应和RSVIEW32的事件机制特性,我们拟采用PLC通知RSVIEW32向RSLINX发送切换命令的方案来保证RSVIEW32始终连接到当前活动的PLC上。
RSVIEW32为了快速地检测到当前活动的PLC,我们在RSVIEW32中建立两个分别直接到PLC1和PLC2的TAG(在RSVIEW32标记数据库中命名为r1,r2),并且这个TAG在PLC发生了切换后,会产生一定周期性的方波以通知RSVIEW32,RSVIEW32检测到变化后,通知RSLINX进行切换,并且根据RSLINX执行结果再通知PLC程序切换工作是否变成,如果完成,PLC锁定TAG值为0。这样在RSVIEW32事件中创建一个新的事件,并且增加事件记录,事件条件为 r1 || r2,执行动作为 str1=string;done=1。这样就可以在任意一个PLC接管工作后,产生方波通知RSVIEW32,RSVIEW32的周期性事件条件 r1|| r2 总能检测到请求,再执行切换操作 str1=string,切换成功后再通知PLC已经完成切换done=1。
这样通过PLC与RSVIEW32相配合来完成在PLC切换后,RSVIEW32能够以最快速度影响切并且切换连接到当前活动的PLC上。
RSVIEW32控制RSLinx切换的原理
神奇的str1=string赋值语句将会执行切换工作。查看RSLinx的联机说明文档,可以看到RSLinx具有很多命令可以调用,其中对我们冗余直接有效的就是SwitchTopic指令,它是用于通知RSLinx把别名连接到哪一个Topic,也可以不指定具体的Topic而在Alias管理的Topic中轮换。
在RSVIEW32中可以通过简单的方式来调用RSLinx支持的指令。首先在TAG标记数据库中创建一个名为string的字符串变量,如下图所示。
再创建一内存字符串变量str1。两个数字量r1和r2分别连接到PLC1和PLC2的请求标志 r,done是连接到[ActivePLC]done的数字量。
再创建事件eve,如下图所示增加事件。
图示的事件将是r1或者r2任何一个变化时发生动作执行str1=string;done=1,而r1和r2是分别连接到两个冗余PLC,在PLC执行了切换后通知RSVIEW32需要切换的周期性标志。当RSVIEW32接收到PLC通知切换,并且通知RSLinx完成切换行为后,向当前活动PLC的标记done中写入1,以通知PLC:上位已经完成切换,不必再要求上位切换了。把事件在工程启动时启动。
在AB的PLC上位系统中,这样实现的软冗余功能是目前我找到的反应最快的方式,一般情况下在2s以内可以实现切换,主要视网络和事件扫描速度影响,实际上是可以实现1秒内执行切换动作的。但是由于切换到新的PLC后,RSVIEW32需要采集大量的标记信息所以在直观感觉上,好像没有切换成功。但是我们通过监视RSLinx,可以发现切换是可以足够快的。
- 利用RSVIEW32的事件机制实现软冗余自动切换
- rsview32
- 利用java反射机制实现自动调用类的方法
- 冗余切换的方法汇总
- 利用java内存映射文件机制实现CRC循环冗余校验
- 利用java内存映射文件机制实现CRC循环冗余校验
- 利用动态创建层技术实现无冗余代码为表单自动添加错误提示
- $.ready()事件的实现机制
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- delphi多线程编程中利用事件机制同步的初步实现
- 利用java反射机制实现javaweb自动调用类的方法
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 利用spring aop实现数据源的切换
- 利用viewpager实现页面的滑动切换
- 利用JavaScript,实现卡片切换的效果
- VS.NET2005安装部署[繁体图文并茂]
- 对搜索引擎市场份额调查数据差异之补充
- servet的doget和post请求,以及getparameter方法
- 安装suse linux websphere 集群 sybase
- jsp过滤器
- 利用RSVIEW32的事件机制实现软冗余自动切换
- 电脑的140个技巧
- 看了让人兴奋的一篇文章-马云当初的创业经历(转载sina.com)
- 每日一译
- [全程建模]首次合作开办全程建模培训班
- 图标按钮、位图按钮、CBitmapButton 类位图按钮的制作
- URL重写问题
- Linux下的文件遍历和Windows下的文件遍历示例
- “6秒钟解决你的情绪挑战”培训笔记