论文部分内容阅读
摘要:为满足升船机对高可靠性的要求,在二级分布式监控系统中,采用了双网冗余、双机热备的方案,本文介绍这种基于InTouch脚本语言编程,利用NetDDE实现的双机热备机制,该系统已通过验收并成功运行。
关键词:工业控制机双机热备份动态数据交换
引言
在采用计算机的工业控制系统中,通常只有一台工业控制机(以下简称IPC)完成系统的主控功能,这种单机系统固然具有结构简单、造价低廉的优点,但系统的安全运行对主控计算机的可靠性提出了很高要求,一旦主控计算机发生故障,就可能导致系统瘫痪或崩溃,甚至引发意想不到的后果。因此,对安全运行要求特别高的场合,如目前已在国内陆续建造的升船机、船闸之类的机构,这种单机系统显然是难以满足要求的,解决的途径就是采用“双机”机制。
为了提高福建水口升船机监控系统的安全性,我们采用了双机方案中比较先进可靠的二级分布式的“双网冗余、双机热备”的控制方式,其基本思路是:上位机采用两台配置完全相同的IPC通过网线及通讯模块、网卡分别与现地站的PLC通讯,当其中一台IPC出现故障或退出运行时,另一台IPC能迅速接管控制权,实现无扰切换。
系统结构
福建水口升船机监控系统由二级分布式计算机网络组成,上位机选用研华工控机,两台上位机与四个可编程控制器(PLC)之间通过基于Profibus 协议的SINEC L2网通讯,两台上位机中装有NE2000兼容网卡,通过以态网进行通讯,系统采用TCP/IP的网络协议。系统结构如图1所示,从图中可以看出,上、下位机之间的网络连接是两台IPC分别接到两个互为冗余的SINEC L2通讯网上的。
上位机监控系统采用WonderWare 公司的InTouch为组态软件,
图1系统结构图
并配合以用微软的Visual Basic开发的后台应用程序,完成对升船机运行过程的监控,两台IPC配置完全相同,分别通过PLC上的两个互为备用的通讯模块采集相同的现场数据内容。
二、动态数据交换的建立
双机运行的基础,是建立双机之间的网络间动态数据交换,即NetDDE。NetDDE 是Network Dynamic Data Exchange 的缩写,它扩展了基本的Windows DDE(动态数据交换)的功能,为两个或更多的计算机通过网络或串口完成动态交换数据的基本途径。
InTouch的 NetDDE是建立在Windows的NetDDE基础上的快速DDE软件,比Windows的NetDDE快3~4倍。监控系统运行之前NetDDE程序应被安装在需要进行数据交换的计算机,安装该软件并正确配置后,就可以通过节点名(Node Name)访问到本机的指定变量。
在InTouch中,一个DDE变量使用三部分地址----Application name、Topic name及Item name ,而对于网络间的DDE通讯,Application 再加上节点名(Node name)即可。以一节点名为J1和J2的计算机为例,J2需要采集J1数据字典中变量byxs时,其地址应设为=J2view|Tagname!byxs,其中,Application name为J2view,表明服务程序为节点名为J2的InTouch 运行程序View,Topci指定为管理标记名的数据字典Tagname,Item则为数据字典中的变量byxs。同理,计算机J1也可实时采集计算机J2的应用程序View下的变量名。
三、双机热备的具体实现
在正常情况下两台IPC分别以“主机”与“辅机”的工作方式完成监控过程,当两台工控机进入系统后均为“主机”方式工作时,此时需要查看两台工控机的NetDDE是否正确启动,如正确无误,则应从双机物理链路是否连通方面排除故障。
为确保系统的安全,主机与辅机的分工不同,其中只有主机才有权参与升船机的运行控制,辅机则只能实现各分部状况查询、数据处理等功能,不能参与控制命令的发出,即只有监视权而无控制权。
操作员可在主机点击相应命令实现“主->辅”切换。辅机没有相应功能,但当主机退出、故障或主机的“主->辅”命令发出后,可转换为主机状态。
由于应用程序启动时间的随机性,为防止通讯混乱,以先进入应用程序的计算机为主机,反之则为辅机,所以系统的主机和备机是一个相对的概念,只有以下三种情况可能触发主辅机转换:①通过点击主机的“主/辅”机切换按扭,实现主机->辅机,辅机->主机;②主机中途退出监控状态,辅机自动转换为主机,接过控制权;③主机故障或异常退出,辅机自动转换为主机,接过控制权;④当主机与PLC之间的网络出现通讯故障,通讯正常的辅机转换为主机。
通常,主机或备机之间如果有任何一方因某种原因正常退出时,后台都要向对方发送一个消息,双机实现数据交换, 实现对另一台监控系统状态的采集。利用內部DDE变量是否为1,可用來监視 I/O 通信的狀态,以此判断与之通讯的DDE状态是否正常(=1时通讯正常,=0时,通讯中断)。当系统正常退出时,这不失为一种很好的选择。
但当主机故障或异常退出时,由于操作系统来不及向外发送消息就已退出运行,往往造成了侦听的计算机较长时间等待,直到超过允许等待的时间,才判断被监测的IPC已退出运行,这样导致正常运行的IPC经过较长时间延时才接管主机工作。
为避免由此可能产生的安全隐患,我们采用在InTouch的脚本语言编程实现主辅机的判断,通过辅机随时监测主机的心脏数据是否变化,并辅以內部DDE变量是否为0加以判断,当两者任一事件触发时,及时实现双机转换,这样既保证了双机及时转换,又避免了当主机的IPC非正常退出(如死机或掉电等)时辅机无法及时转为主机的安全隐患。利用这一原理,可使系统切换延时控制要求时间内。
主、备机热备的过程如图2所示。根据程序流程,双机热备方案遵循以下几个原则:
先入为主的原则
开机后,首先判断两台IPC有无任一台为主机,如果没有,将本机的状态置为主机。当另一台再启动时,检查到已有一台IPC的状态被设为主机,则自动将本机状态置为辅机。实现先启动的计算机为主机,后启动的计算机为辅机的效果。
当退出运行的IPC重新投入运行时,此时监控系统有一台IPC以主机状态工作,根据程序流程,则再次进入系统的IPC以辅机方式工作。
(2)主机退出、故障或非异常退出时,辅机接管主机工作
正常情況下Byxs作为心脏数据不断刷新,辅机则通过DDE类型的变量N_byxs监测Byxs的改变,每隔一周期将这一值保存在Byxs_b作本周期内N_byxs的备份值。当新一TIMER事件触发后,通过NetDDE,监测测变量N_byxs随主机的Byxs更新,但监测变量备份值Byxs_b仍等于上一周期的监测变量值Byxs,两者应不相同。反之,则判断主机的心脏数据在本周期内没有刷新改变,此时,故障指数Bgzs加一。当Bgzs累计到一定值后,则意味着主机没有数据流动,不能正常工作。此时,辅机立刻激活“辅->主”转换程序,实现辅机到主机的转变。
需要说明的是,由于各个应用程序之间进行动态数据交换的内容不同,运行的软硬件环境也不同,因此作一次DDE 所需的时间开销也不一样,这直接关系到故障指数Bgzs的最大允许范围也因此有所区别。
说明:Byxs------主机内部整型变量,每隔一周期刷新一次
N_byxs-----辅机DDE整型变量,随主机byxs而改变而改变 Byxs_b-----辅机整型变量,本周期N_byxs的备份值。
Bgzs-------辅机整型變量,表明主机运行故障指数
(3)当退出运行的IPC重新投入运行时,以辅机方式工作;直到主机退出、故障或操作员在主机点击切换按扭,实现主辅切换机
说明:IpcName -----内部离散型变量,标记两IP的名称,两台IPC应不同,如 1# IPC 的IPCName=1,2# IPC的IPCName=0。反之,同理。
Bzfjoo -----内部离散型变量,本机的主/辅机状态标记。Bzfhoo=1,标志为主机,=0否则为辅机
Nzfjkz ------DDE离散型类型 ,主辅机切换控制变量Nzfjkz改变时,两台IPC分别执行主/辅转换模块。
根据流程,当操作员在主机发出“主辅机切换”命令,执行“主->辅”程序,此时假设主机的IPCName =1,执行Nzfjkz= not IPCName后 ,另一台IPC的Nzfjkz也随主机Nzfjkz改变,两台IPC均得到Nzfjkz由“1”->“0”的脉冲,通过事件改变逻辑(Data script),执行 bzfjoo=not IPCName后, 原为主机的IPC中bzfjoo=0 ,原为辅机的IPC 则bzfjoo=1 , 由此达到转换主辅机的效果。反之假设主机IPCName=0,执行Nzfjkz= NOT IPCName后 ,两台IPC均得到Nzfjkz由“0”->“1”的脉冲,执行 bzfj00= IPCName 后,IPCName=1的主机bzfjoo=0 ,原为辅机的IPC 则bzfjoo=1 , 同样达到“主->辅”切换的效果。
“辅->主”转换的实现同理,在此不再赘述。
由于1#、2#PLC都可能以主机或辅机的方式运行,因此,主辅机程序都在一套IPC中同时包含相同的代码,但两个IPC的IPCName不同(如 1# IPC 的IPCName=1,2# IPC的IPCName=0。反之,同理),由此得到同样的程序代码分别实现由“主->辅”而另一台则由“辅->主”的效果。
(4)当主机与PLC之间的网络出现通讯故障,通讯正常的辅机转换为主机
监控系统运行过程中,IPC在监视另一台IPC运行状态的同时,同时实时监视与四个PLC各子站的通讯状态,当辅机与PLC某子站通讯正常,而主机与该PLC子站通讯故障时,利用NetDDE,主机通过以态网及辅机与PLC子站建立连接,主/辅机状态不变。但当故障标志超过三个时,也即存在三个或三个以上PLC子站故障时(此时多发生在IPC中与下位机通讯的网卡故障时),激活主/辅机切换模块, 实现主/辅机切换。
四、NetDDE的其它应用
操作的同步
正常情况下,按流程及操作员发出相应命令的次序调出相应界面,因为两台IPC监控的对象完全相同,主辅机上显示的内容也应完全一致。通过借助于NetDDE机制,将在主机的操作,包括命令及菜单的调度“通知”远程IPC,以此达到两台工控机的菜单及界面、操作同步的效果。
系统时钟的同步
主机和备机的操作是以秒为单位进行的,运行时间一长,其系统时钟将存在差异,如果不进行对时,将引起记录事件节拍不同。因此每次开机时,先对系统时钟进行对时,如果相差超过允许值,则进行调整,可以保持将系统时钟差异稳定在很小的范围内。
五、结语
基于InTouch脚本语言编程,利用NetDDE机制,避免了代码繁琐控制,且程序结构清晰、功能完备,为工业控制机中双机通讯的实现提供了一条切实可行的途径。
注:文章内的图表、公式请到PDF格式下查看
关键词:工业控制机双机热备份动态数据交换
引言
在采用计算机的工业控制系统中,通常只有一台工业控制机(以下简称IPC)完成系统的主控功能,这种单机系统固然具有结构简单、造价低廉的优点,但系统的安全运行对主控计算机的可靠性提出了很高要求,一旦主控计算机发生故障,就可能导致系统瘫痪或崩溃,甚至引发意想不到的后果。因此,对安全运行要求特别高的场合,如目前已在国内陆续建造的升船机、船闸之类的机构,这种单机系统显然是难以满足要求的,解决的途径就是采用“双机”机制。
为了提高福建水口升船机监控系统的安全性,我们采用了双机方案中比较先进可靠的二级分布式的“双网冗余、双机热备”的控制方式,其基本思路是:上位机采用两台配置完全相同的IPC通过网线及通讯模块、网卡分别与现地站的PLC通讯,当其中一台IPC出现故障或退出运行时,另一台IPC能迅速接管控制权,实现无扰切换。
系统结构
福建水口升船机监控系统由二级分布式计算机网络组成,上位机选用研华工控机,两台上位机与四个可编程控制器(PLC)之间通过基于Profibus 协议的SINEC L2网通讯,两台上位机中装有NE2000兼容网卡,通过以态网进行通讯,系统采用TCP/IP的网络协议。系统结构如图1所示,从图中可以看出,上、下位机之间的网络连接是两台IPC分别接到两个互为冗余的SINEC L2通讯网上的。
上位机监控系统采用WonderWare 公司的InTouch为组态软件,
图1系统结构图
并配合以用微软的Visual Basic开发的后台应用程序,完成对升船机运行过程的监控,两台IPC配置完全相同,分别通过PLC上的两个互为备用的通讯模块采集相同的现场数据内容。
二、动态数据交换的建立
双机运行的基础,是建立双机之间的网络间动态数据交换,即NetDDE。NetDDE 是Network Dynamic Data Exchange 的缩写,它扩展了基本的Windows DDE(动态数据交换)的功能,为两个或更多的计算机通过网络或串口完成动态交换数据的基本途径。
InTouch的 NetDDE是建立在Windows的NetDDE基础上的快速DDE软件,比Windows的NetDDE快3~4倍。监控系统运行之前NetDDE程序应被安装在需要进行数据交换的计算机,安装该软件并正确配置后,就可以通过节点名(Node Name)访问到本机的指定变量。
在InTouch中,一个DDE变量使用三部分地址----Application name、Topic name及Item name ,而对于网络间的DDE通讯,Application 再加上节点名(Node name)即可。以一节点名为J1和J2的计算机为例,J2需要采集J1数据字典中变量byxs时,其地址应设为=J2view|Tagname!byxs,其中,Application name为J2view,表明服务程序为节点名为J2的InTouch 运行程序View,Topci指定为管理标记名的数据字典Tagname,Item则为数据字典中的变量byxs。同理,计算机J1也可实时采集计算机J2的应用程序View下的变量名。
三、双机热备的具体实现
在正常情况下两台IPC分别以“主机”与“辅机”的工作方式完成监控过程,当两台工控机进入系统后均为“主机”方式工作时,此时需要查看两台工控机的NetDDE是否正确启动,如正确无误,则应从双机物理链路是否连通方面排除故障。
为确保系统的安全,主机与辅机的分工不同,其中只有主机才有权参与升船机的运行控制,辅机则只能实现各分部状况查询、数据处理等功能,不能参与控制命令的发出,即只有监视权而无控制权。
操作员可在主机点击相应命令实现“主->辅”切换。辅机没有相应功能,但当主机退出、故障或主机的“主->辅”命令发出后,可转换为主机状态。
由于应用程序启动时间的随机性,为防止通讯混乱,以先进入应用程序的计算机为主机,反之则为辅机,所以系统的主机和备机是一个相对的概念,只有以下三种情况可能触发主辅机转换:①通过点击主机的“主/辅”机切换按扭,实现主机->辅机,辅机->主机;②主机中途退出监控状态,辅机自动转换为主机,接过控制权;③主机故障或异常退出,辅机自动转换为主机,接过控制权;④当主机与PLC之间的网络出现通讯故障,通讯正常的辅机转换为主机。
通常,主机或备机之间如果有任何一方因某种原因正常退出时,后台都要向对方发送一个消息,双机实现数据交换, 实现对另一台监控系统状态的采集。利用內部DDE变量是否为1,可用來监視 I/O 通信的狀态,以此判断与之通讯的DDE状态是否正常(=1时通讯正常,=0时,通讯中断)。当系统正常退出时,这不失为一种很好的选择。
但当主机故障或异常退出时,由于操作系统来不及向外发送消息就已退出运行,往往造成了侦听的计算机较长时间等待,直到超过允许等待的时间,才判断被监测的IPC已退出运行,这样导致正常运行的IPC经过较长时间延时才接管主机工作。
为避免由此可能产生的安全隐患,我们采用在InTouch的脚本语言编程实现主辅机的判断,通过辅机随时监测主机的心脏数据是否变化,并辅以內部DDE变量是否为0加以判断,当两者任一事件触发时,及时实现双机转换,这样既保证了双机及时转换,又避免了当主机的IPC非正常退出(如死机或掉电等)时辅机无法及时转为主机的安全隐患。利用这一原理,可使系统切换延时控制要求时间内。
主、备机热备的过程如图2所示。根据程序流程,双机热备方案遵循以下几个原则:
先入为主的原则
开机后,首先判断两台IPC有无任一台为主机,如果没有,将本机的状态置为主机。当另一台再启动时,检查到已有一台IPC的状态被设为主机,则自动将本机状态置为辅机。实现先启动的计算机为主机,后启动的计算机为辅机的效果。
当退出运行的IPC重新投入运行时,此时监控系统有一台IPC以主机状态工作,根据程序流程,则再次进入系统的IPC以辅机方式工作。
(2)主机退出、故障或非异常退出时,辅机接管主机工作
正常情況下Byxs作为心脏数据不断刷新,辅机则通过DDE类型的变量N_byxs监测Byxs的改变,每隔一周期将这一值保存在Byxs_b作本周期内N_byxs的备份值。当新一TIMER事件触发后,通过NetDDE,监测测变量N_byxs随主机的Byxs更新,但监测变量备份值Byxs_b仍等于上一周期的监测变量值Byxs,两者应不相同。反之,则判断主机的心脏数据在本周期内没有刷新改变,此时,故障指数Bgzs加一。当Bgzs累计到一定值后,则意味着主机没有数据流动,不能正常工作。此时,辅机立刻激活“辅->主”转换程序,实现辅机到主机的转变。
需要说明的是,由于各个应用程序之间进行动态数据交换的内容不同,运行的软硬件环境也不同,因此作一次DDE 所需的时间开销也不一样,这直接关系到故障指数Bgzs的最大允许范围也因此有所区别。
说明:Byxs------主机内部整型变量,每隔一周期刷新一次
N_byxs-----辅机DDE整型变量,随主机byxs而改变而改变 Byxs_b-----辅机整型变量,本周期N_byxs的备份值。
Bgzs-------辅机整型變量,表明主机运行故障指数
(3)当退出运行的IPC重新投入运行时,以辅机方式工作;直到主机退出、故障或操作员在主机点击切换按扭,实现主辅切换机
说明:IpcName -----内部离散型变量,标记两IP的名称,两台IPC应不同,如 1# IPC 的IPCName=1,2# IPC的IPCName=0。反之,同理。
Bzfjoo -----内部离散型变量,本机的主/辅机状态标记。Bzfhoo=1,标志为主机,=0否则为辅机
Nzfjkz ------DDE离散型类型 ,主辅机切换控制变量Nzfjkz改变时,两台IPC分别执行主/辅转换模块。
根据流程,当操作员在主机发出“主辅机切换”命令,执行“主->辅”程序,此时假设主机的IPCName =1,执行Nzfjkz= not IPCName后 ,另一台IPC的Nzfjkz也随主机Nzfjkz改变,两台IPC均得到Nzfjkz由“1”->“0”的脉冲,通过事件改变逻辑(Data script),执行 bzfjoo=not IPCName后, 原为主机的IPC中bzfjoo=0 ,原为辅机的IPC 则bzfjoo=1 , 由此达到转换主辅机的效果。反之假设主机IPCName=0,执行Nzfjkz= NOT IPCName后 ,两台IPC均得到Nzfjkz由“0”->“1”的脉冲,执行 bzfj00= IPCName 后,IPCName=1的主机bzfjoo=0 ,原为辅机的IPC 则bzfjoo=1 , 同样达到“主->辅”切换的效果。
“辅->主”转换的实现同理,在此不再赘述。
由于1#、2#PLC都可能以主机或辅机的方式运行,因此,主辅机程序都在一套IPC中同时包含相同的代码,但两个IPC的IPCName不同(如 1# IPC 的IPCName=1,2# IPC的IPCName=0。反之,同理),由此得到同样的程序代码分别实现由“主->辅”而另一台则由“辅->主”的效果。
(4)当主机与PLC之间的网络出现通讯故障,通讯正常的辅机转换为主机
监控系统运行过程中,IPC在监视另一台IPC运行状态的同时,同时实时监视与四个PLC各子站的通讯状态,当辅机与PLC某子站通讯正常,而主机与该PLC子站通讯故障时,利用NetDDE,主机通过以态网及辅机与PLC子站建立连接,主/辅机状态不变。但当故障标志超过三个时,也即存在三个或三个以上PLC子站故障时(此时多发生在IPC中与下位机通讯的网卡故障时),激活主/辅机切换模块, 实现主/辅机切换。
四、NetDDE的其它应用
操作的同步
正常情况下,按流程及操作员发出相应命令的次序调出相应界面,因为两台IPC监控的对象完全相同,主辅机上显示的内容也应完全一致。通过借助于NetDDE机制,将在主机的操作,包括命令及菜单的调度“通知”远程IPC,以此达到两台工控机的菜单及界面、操作同步的效果。
系统时钟的同步
主机和备机的操作是以秒为单位进行的,运行时间一长,其系统时钟将存在差异,如果不进行对时,将引起记录事件节拍不同。因此每次开机时,先对系统时钟进行对时,如果相差超过允许值,则进行调整,可以保持将系统时钟差异稳定在很小的范围内。
五、结语
基于InTouch脚本语言编程,利用NetDDE机制,避免了代码繁琐控制,且程序结构清晰、功能完备,为工业控制机中双机通讯的实现提供了一条切实可行的途径。
注:文章内的图表、公式请到PDF格式下查看