CN101770411A - 冗余数据的自动选择方法、分析器及实现无扰切换的方法 - Google Patents

冗余数据的自动选择方法、分析器及实现无扰切换的方法 Download PDF

Info

Publication number
CN101770411A
CN101770411A CN200910243194A CN200910243194A CN101770411A CN 101770411 A CN101770411 A CN 101770411A CN 200910243194 A CN200910243194 A CN 200910243194A CN 200910243194 A CN200910243194 A CN 200910243194A CN 101770411 A CN101770411 A CN 101770411A
Authority
CN
China
Prior art keywords
functional expression
statement
variable
branch
redundant
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200910243194A
Other languages
English (en)
Other versions
CN101770411B (zh
Inventor
刘立忠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Helishi Control Technology Co ltd
Original Assignee
Beijing Hollysys Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Hollysys Co Ltd filed Critical Beijing Hollysys Co Ltd
Priority to CN2009102431947A priority Critical patent/CN101770411B/zh
Publication of CN101770411A publication Critical patent/CN101770411A/zh
Application granted granted Critical
Publication of CN101770411B publication Critical patent/CN101770411B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种冗余数据的自动选择方法、分析器及实现无扰切换的方法,其中冗余数据的自动选择方法包括:确定控制程序中定义的所有变量组成的原始集,以及主备切换时需要保证输出无扰的变量组成的目标集,将所述控制程序的代码转换为包含多个函数式及其顺序信息的关系集,提取运算逻辑中的因变量、对应的自变量及对应的函数式,根据所述目标集和关系集对所述原始集寻优,选择出冗余最优集,使主机和备机件拷贝更新冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。本发明解决了冗余配置系统中从原始集中选择得到较少的冗余变量,这些冗余变量的值相同时,能保证输出变量在此后任意正整数周期保持一致。

Description

冗余数据的自动选择方法、分析器及实现无扰切换的方法
技术领域
本发明涉及冗余配置系统中冗余数据的自动选择方法,相应分析器,及通过挑选冗余数据以保证双机切换时实现输出无扰切换的方法、系统。
背景技术
一个简单而典型的冗余配置的分布式控制系统(DCS)应包括:工程师站,服务器,操作站,控制站等等,如图1所示。图中的服务器和控制站均为冗余配置,各个通讯网络也采用了冗余配置。
DCS工作原理如下:首先,工程人员在工程师站进行工程组态即编程;然后,工程师站将组态结果分别下装给操作站,服务器和控制站;最后,各站进入工作状态,工程师站可以离线。各站进入工作状态后,控制站周期性执行工业控制程序(业界也称为“组态逻辑”)来完成对现场工业仪表的控制任务,同时将实时数据周期性上报给服务器,服务器的通过实时数据库和历史数据库来处理各类数据并和操作站发生数据交互,而操作站由操作人员进行监视或对运行数据进行一些人工操作(如写入,手动设定等),这些操作将通过服务器传递给控制站,这样DCS系统就可以进行生产过程控制了。
工程人员要在工程师站为整个DCS系统进行组态,其中一部分是使用编程器(业界也称为“组态软件”)为控制站编写工业控制程序,控制站通过周期性执行工业控制程序来完成控制工作,上图中的控制站采用的是冗余配置,称之为双机。控制站运行时一台控制器作为工作机(称为主机),另一台作为备份机(称为从机),主机接收输入,执行工业控制程序中的运算,并对外输出;而从机只接收输入,执行工业控制程序中的运算,但并不输出。在运行过程中,一旦主机出现严重问题(例如看门狗复位等),从机马上升级为主机,而原主机可以在再次正常启动后降级为从机,这一过程称为双机切换。控制站的备份式冗余有利于提高整个系统的稳定性和可靠性。
对于应用于过程控制现场的DCS系统而言,控制站的输入和输出大部分与现场的物理设备相对应,例如控制站输入可能是某个传感器给出的现场某点温度值,而输出可能是现场某个阀门的开度值。显而易见,为保证控制的安全和质量,双机切换时应保证控制站输出“无扰动”,即控制站双机切换后的输出值与假设未进行切换时应有的输出值完全一致,或者说双机切换对输出值来说是透明的。可见,实现输出“无扰切换”是双机切换的基本要求。因为工作机和备份机输入相同,运算逻辑相同,理论上的运算周期(例如运算周期为50ms,则每50ms进行一轮运算)也相同,所以在理想情况下,同时启动双机,即使双机各自独立运行,它们所有变量的值应是时刻一致的。但是由于各种原因,双机的实际运算周期还是有差别的,如果双机各自独立运行,经过长时间的累积效应,双机中相同变量(包含输出变量)的值可能会有很大差别,此时如果发生双机切换,可能的输出值突变会带给现场设备很大的扰动。为使输出实现无扰切换,主机和从机应该保持运算节拍“同步”,这样才能使双机中的变量(包含输出变量)保持数值一致,以便将来切换时保证输出无扰。
为实现双机运算同步,目前采用的是双机之间拷贝更新冗余数据的方式,即:双机分别记录各自运算节拍,节拍数有一定差别时,即认为双机处于“不同步”状态,然后主机将自己的部分变量的值“冗余(即拷贝)”给从机,从机将在自己的内存中更新这些数据,这部分被“冗余”的变量称为冗余数据。在冗余期间,双机暂停运算,冗余拷贝结束后,双机同时启动运算。拷贝这些冗余数据的目的是使双机的输出变量值保持一致,以便实现输出无扰切换。
现有技术中,将哪些变量作为冗余数据,通常采取人工方式来挑选:在组态时,由工程人员通过给变量添加标志例如“Retain”标志,将其确定为冗余数据,本文约定将冗余数据也称为Retain数据。人工挑选Retain数据工作量大且易出错,为避免遗漏,工程人员往往将很多甚至全部变量都组态成Retain数据,这样就给整个控制器软硬件带来很大的负担。
对于其他需要运行控制程序和进行主、备切换的冗余配置系统也存在相似的问题。
发明内容
本发明要解决的技术问题是提供一种冗余数据的自动选择方法及分析器,能够从原始集中选择得到较少的冗余变量,这些冗余变量的值相同时,能保证输出变量在此后任意正整数周期保持一致。
为解决这个问题,本发明提供了一种冗余数据的自动选择方法,应用于采用备份式冗余的计算机控制系统,该自动选择方法包括:
确定控制程序中定义的所有变量组成的原始集,以及主备切换时需要保证输出无扰的变量组成的目标集,该目标集为该原始集的子集;
将所述控制程序的代码转换为包含多个函数式及其顺序信息的关系集,转换时,按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息;
根据所述目标集和关系集对所述原始集寻优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该子集称为冗余最优集;该优化器约束条件指主机和备机间拷贝更新冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。
进一步地,所述控制程序是用多种语言编写的,所述控制程序的代码为将所述控制程序转换为的统一形式的中间代码。
进一步地,所述控制程序的代码包括多条语句或多个对应于语句的语法结构,通过转换算法和程序控制语句处理算法的递归调用完成转换,转换开始时当前一层设为整个代码的最外层;
转换开始后运行转换算法:依次遍历当前一层的语句或语法结构,对每一语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式,将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的程序控制语句,则调用程序控制语句处理算法将其转换为函数式;如该语句或语法结构不合法,做出错处理,结束转换。
进一步地,将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则该函数式的自变量为空。
进一步地,所述程序控制语句处理算法为:按序遍历该程序控制语句的各个控制分支,对每个控制分支,调用所述转换算法对该控制分支的所有语句或对应于语句的语法结构依次进行处理,当前一层为该控制分支代码的最外层,处理完成后,根据该程序控制语句的类型按以下方式进行转换:
对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式;
对除SWITCH语句外的其他条件分支语句,先将该语句转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
对WHILE语句,将判断条件中的变量合并到该语句各函数式的自变量中,将各函数式的因变量合并到本函数式的自变量中,得到转换后的函数式。
进一步地,对除SWITCH语句外的其他循环语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;
对SWITCH语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;或者,先进行分支对等化的预处理,使得各分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将其他分支对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并得到的函数式即为转换后的函数式。
进一步地,对IF_ELSE语句,或IF_ELSE语句和SWITCH语句进行分支对等化的预处理时,逐次比较各分支相同位置上的函数式,如各分支上第n个函数式的因变量有m种,n=1,2,...,,m=2,3,...;则以“该因变量=该因变量”的方式在每个分支补充m-1个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
进一步地,所述的自动选择方法,其特征在于,根据所述目标集和关系集对所述原始集寻优,选择冗余变量的过程包括:
先将关系集中所有函数式置为“存在”状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;
每一次遍历过程中,对当前的函数式vj=fi(vi1,vi2,…),i=1,2,...,n;如vj不属于AV,则结束对该函数式的处理;如vj属于AV,则从AV中删除vj,并继续判断该函数式是否为“存在”状态,如否,结束对该函数式的处理,如为“存在”状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;
每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。
为解决这个问题,本发明还提供了一种冗余数据分析器,用于为采用备份式冗余的计算机控制系统选择冗余变量,其特征在于,包括转换器和优化器,其中:
所述转换器用于接收控制程序的代码,将所述代码转换为包含多个函数式及其顺序信息的关系集并输出到优化器,转换时,按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息;
所述优化器用于接收控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,及所述关系集,根据所述目标集和关系集对所述原始集寻优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该子集称为冗余最优集;该优化器约束条件指主机和备机间拷贝更新所述冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。
进一步地,所述的冗余数据分析器,其特征在于,所述转换器包括转换控制单元、代码控制单元、第一转换单元和第二转换单元,其中:
所述转换控制单元用于控制控制程序的代码的接收和缓存到代码缓存单元,接收完成后将当前一层设为整个代码的最外层,通知第一转换单元开始转换,该代码包括多条语句或多个对应于语句的语法结构;
所述代码缓存单元用于缓存输入的控制程序的代码;
所述第一转换单元用于执行转换算法,依次遍历当前一层的语句或语法结构,对每一语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式,将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的程序控制语句,则调用第二转换单元将其转换为函数式;遍历完成后将得到关系集输出到优化器;
所述第二转换单元用于将程序控制语句转换为函数式,转换时按序遍历该程序控制语句的各个控制分支,对每个控制分支,将当前一层设为该控制分支代码的最外层,调用第一转换单元对该控制分支的所有语句或对应于语句的语法结构依次进行处理,处理完成后,根据该程序控制语句的类型将程序控制语句转换为相应的函数式。
进一步地,所述的冗余数据分析器,其特征在于:
所述第一转换单元将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则该函数式的自变量为空。
进一步地,所述的冗余数据分析器,其特征在于:
所述第二转换单元根据该程序控制语句的类型将程序控制语句转换为相应的函数时,按以下方式进行:
对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式;
对除SWITCH语句外的其他条件分支语句,先将该语句转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
对WHILE语句,将判断条件中的变量合并到该语句各函数式的自变量中,将各函数式的因变量合并到本函数式的自变量中,得到转换后的函数式。
进一步地,所述的冗余数据分析器,其特征在于:
所述第二转换单元对除SWITCH语句外的其他循环语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;
对SWITCH语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;或者,先进行分支对等化的预处理,使得各分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将其他分支对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并得到的函数式即为转换后的函数式。
进一步地,所述的冗余数据分析器,其特征在于:
所述第二转换单元对IF_ELSE语句,或IF_ELSE语句和SWITCH语句进行分支对等化的预处理时,逐次比较各分支相同位置上的函数式,如各分支上第n个函数式的因变量有m种,n=1,2,...,,m=2,3,...;则以“该因变量=该因变量”的方式在每个分支补充m-1个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
进一步地,所述的冗余数据分析器,其特征在于,所述优化器按以下方式对所述原始集进行寻优:
先将关系集中所有函数式置为“存在”状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;
每一次遍历过程中,对当前的函数式vj=fi(vi1,vi2,…),i=1,2,...,n;如vj不属于AV,则结束对该函数式的处理;如vj属于AV,则从AV中删除vj,并继续判断该函数式是否为“存在”状态,如否,结束对该函数式的处理,如为“存在”状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;
每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。
上述冗余数据自动选择方法和分析器,能够从所有的变量中自动挑选出冗余最优集作为冗余数据,这些冗余数据的值相同时,就能使输出变量在此后保持一致,且挑选出的冗余最优集包含的元素少,占用的软硬件资源少。
本发明要解决的另一技术问题是提供一种实现无扰切换的方法和系统,可以从原始集中自动选择得到较少的冗余变量,主机和备机之间拷贝更新选择的冗余变量的值,能使输出变量在此后任意正整数周期保持双机一致。
为解决这个问题,本发明提供了一种实现无扰切换的方法,应用于采用备份式冗余的计算机控制系统,该方法包括:
所述的冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余变量;
将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上,所述设备工作时运行所述控制程序;
在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后,双机同时启动控制程序。
进一步地,所述的方法,其特征在于:
所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序为工业控制程序,所述冗余配置的设备为该DCS系统中采用备份式冗余并运行所述工业控制程序的控制站;
所述冗余数据的自动选择在工程师站进行,该工程师站将选择得到的冗余最优集下装到所述控制站。
为解决这个问题,本发明还提供了一种采用备份式冗余的计算机控制系统,包括控制程序的编程设备和控制程序的执行设备,所述执行设备采用备份式冗余的方式配置,其特征在于,还包括所述的冗余数据分析器,其中:
所述编程设备用于确定控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,将所述原始集、目标集和控制程序的代码输出到所述冗余数据分析器;
所述冗余数据分析器还用于将得到的冗余最优集配置到所述执行设备中可作为主机的每一个设备上;
所述执行设备作为主机时,在双机运算同步的冗余期间暂停运算,将所述冗余最优集中各个变量的值拷贝给从机,拷贝结束后,与备机同时启动所述控制程序;
所述执行设备作为备机时,在双机运算同步的冗余期间暂停运算,根据从主机拷贝的所述冗余最优集中各个变量的值更新自己内存中的这些变量的值,拷贝结束后,与主机同时启动所述控制程序。
进一步地,所述的计算机控制系统,其特征在于:
所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序的编程设备和冗余数据分析器位于该DCS中的工程师站;
所述控制程序的执行设备为该DCS中运行工业控制程序的控制站;
所述冗余数据分析器得到工业控制程序的冗余最优集后,下装到相应的控制站中。
上述实现无扰切换的方法和系统,能够从所有的变量中自动挑选出冗余最优集作为冗余数据,在双机不同步时通过拷贝更新这些冗余数据值就能使输出变量在此后保持一致,从而实现输出无扰切换。无需人工选择,且挑选出的冗余最优集包含的元素少,占用的软硬件资源少。
附图说明
图1为典型的冗余配置的DCS系统的结构示意图;
图2为本发明实施例冗余数据分析器在DCS系统中的位置的示意图;
图3为图2中冗余数据分析器的构成与数据流传递的示意图;
图4为本发明实施例将中间代码转换为关系集的转换方法的流程图;
图5为图4中程序控制语句处理算法的流程图;
图5a为图3中转换器的模块图;
图6a为从X到Y的变量之间映射是单值的情况的示意图;
图6b为从X到Y的变量之间映射是多值的情况的示意图;
图7为本发明实施例采用的优化算法的流程示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
本发明用于采用备份式冗余的计算机控制系统,例如DCS(分布式控制系统),工作于运行工业控制程序的工程师站,主要作用是在工业控制程序编程完成后帮助挑选冗余数据,将来控制站据此进行数据冗余以使双机的输出变量值保持一致,实现无扰切换。
以下图1所示的DCS系统为例进行说明,但本发明不局限于此,其他采用备份式冗余的计算机控制系统都可以使用该方案。
冗余数据分析器运行于工程师站,在DCS系统中的位置如图2所示。图中的原始集(V)是工程人员在编程器中定义的所有变量组成的集合。目标集(AV)可以是原始集的任意子集,控制站主从机之间的冗余(主机将部分或全部数据拷贝给从机)就是要保证目标集中的变量值在双机切换时可以无扰。从现场控制的角度看,目标集可以由工业控制程序中的输出变量(例如输出变量可能是阀门开度值)组成,当然目标集也可以就是原始集,因此冗余数据分析器将目标集的组成作为程序的输入,这样就保证了目标集设定的灵活性。冗余数据分析器的功能就是根据工业控制程序从原始集中挑选出的子集,将来主从机之间冗余这个子集来实现目标集无扰切换,这个子集称之为冗余最优集(OV)。如果将从原始集挑选出冗余最优集的过程视为对原始集的寻优,那么在寻优过程中每次得到的子集都应满足条件:双机之间拷贝更新该子集中冗余变量的值可使目标集中变量的值在此后任意正整数周期运算结束时保持双机一致,该条件就是优化约束条件。冗余最优集是满足优化约束条件且包含元素个数最少的原始集的子集。
显然,冗余数据分析器确定最优集的依据就是工业控制程序,这些程序是由多种编程语言(如ST,LD,CFC,SFC等)编写而成。对于冗余数据分析器而言,从这些语言编写成的源代码开始分析是没有必要的,因为这相当于进行了一部分编译的分析工作,而这个工作是编程器原有的主要工作之一。因此,本实施例在编程器将各种语言编写的工业控制程序转成统一形式的中间代码后,再传送到冗余数据分析器,同时向冗余数据分析器传送原始集和目标集,由冗余数据分析器最终给出冗余最优集。
中间代码可以是一种统一的语法结构,例如树或图。本实施例中,中间代码是编程器和冗余数据分析器约定的一种语法树结构,该语法树结构可以表示各种语言编写的工业控制程序的运算逻辑。编程器将各种语言描述的工业控制程序转成用该结构描述的中间代码,直接保存在内存中交给冗余数据分析器进行分析。工业控制程序的语句到语法树结构的转换是已有的一种做法,这里不再详细进行介绍。在其他例中,中间代码也可以是某种统一的语言,例如C语言、ST语言或CFC语言等等。
图3示出了冗余数据分析器的构成与数据流,如图所示,冗余数据分析器由两部分构成:转换器和优化器,其中:
转换器用于接收控制程序的中间代码,将中间代码转换为包含多个函数式及其顺序信息的关系集(F)并输出到优化器。转换时,按工业控制程序的执行顺序,依照中间代码表示的运算逻辑将中间代码转换为反映变量之间关系的多个函数式。更具体地,是按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息。
关系集是转换器的输出也是优化器的输入,关系集的元素为函数式及其在编程时的逻辑顺序号组成的二元组。该二元组用集合语言可以描述为:
F={(i,fi())|i=1,2,…m}
其中,分量i表示该函数式的顺序号,m是关系集中元素的总个数。转换得到的第i个函数式fi()可表示为vj=fi(vi1,vi2,…),vj,vi1,vi2,…均为原始集中的变量。其中vj是转换时从中间代码表示的运算逻辑中提取出的因变量,也可称为函数值变量;vi1,vi2,…是转换从中间代码表示的运算逻辑中提取出的与因变量vj相关的所有自变量。也即将每个因变量及其相关的自变量表示为一个函数式。而函数式的顺序号要保证按该顺序号顺序执行函数式f1()f2()f3()…和执行工业控制程序对于原始集变量值的变化是等价的。
为了方便理解,下面对关系集的形成进行举例说明。这些例子的输入应是由语法树结构的中间代码来表示,为便于阅读,此处使用c语言进行描述。
假设中间代码如下所示: v j = f j ( v i 1 , v i 2 , . . . )
例1:
VAR
a:DINT;
b:DINT;
c:DINT;
d:BOOL;
e:DINT;
END_VAR
原始集V和目标集AV为:
V={a,b,c,d,e};此例中取为AV=V;
中间代码为:
a:=1;
b:=b+1;
c:=a*2+1+e;
IF e>=100THEN
d:=0;
ELSE
d:=1;
END_IF
上述运算逻辑可转换为以下函数式:
a=f1()
b=f2(b)
c=f3(a,e)
d=f4(e)
因此,关系集F为:
F={(1,a=f1()),(2,b=f2(b)),(3,c=f3(a,e)),(4,d=f4(e))}。
转换器的工作是将中间代码进行转换生成关系集,在上面的例子中可见,对于中间代码中的赋值语句可以直接转换:
再例如:
a=b+c;应转换为函数式:a=f(b,c)
c:=a*2+1+e;应转换为函数式:c=f(a,e)
c:=c+1;应转换为函数式:c=f(c)
c:=5;应转换为函数式:c=f()
对于程序结构控制类的语句,例如IF,IF_ELSE,FOR,WHILE,DO_WHILE,SWITCH等有时要先进行一些预处理,然后再进行转换,例如:
·IF_ELSE语句的转换
if(e>=10)
{
d=0;
}
else
{
d=c;
}
再将该运算逻辑转换为函数式:d=f(c,e)
·IF语句的转换
IF x>=100THEN
y:=z+1;
END_IF
先进行预处理,将该结构转换为基本的条件分支语句即IF_ELSE语句:
IF x>=100THEN
y:=z+1;
ELSE
y:=y;
END_IF
再将该运算逻辑转换为函数式:y=f(x,z,y)。
·SWITCH语句的转换
switch(a+b)
{
case 1:
    c=d+1;
    break;
case 2:
    d=a+b;
   break;
case 3:
   e=d+1;
   break;
default:
   d=0;
}
先将其转换为:
switch(a+b)
 {
case 1:
    c=d+1;
    d=d;
    e=e;
    break;
case 2:
    c=c;
    d=a+b;
    e=e;
    break;
case 3:
    c=c;
    d=d;
    e=d+1;
    break;
default:
    c=c;
    d=0;
    e=e;
}
再将该运算逻辑转换为以下函数式:
c=f(a,b,c,d)
d=f(a,b,d)
e=f(a,b,d,e)
·WHILE语句的转换
while(a!=0)
{
b=5;
a--;
}
该运算逻辑转换为函数式:
b=f(a,b)
a=f(a)
·DO_WHILE语句的转换
do
{
a=a+1;
i=i+1;
}while(i<100);
先预处理,将该结构转换为基本的循环语句即WHILE语句:
a=a+1;
i=i+1;
while(i<100)
{
a=a+1;
i=i+1;
}
再将该运算逻辑转换为以下函数式:
a=f(a)
i=f(i)
a=f(a,i)
i=f(i)
·FOR语句的转换
for(i=0;i<a;i++)
{
b=b+1;
c=7;
}
先预处理,将该结构转换为基本的循环语句即WHILE语句:
i=0;
while(i<a)
{
b=b+1;
c=7;
i=i+1;
}
再将该运算逻辑转换为以下函数式:
i=f()
b=f(i,a,b)
c=f(i,a,c)
i=f(i,a)
由于这些程序结构控制类的语句在语法上是可以嵌套出现的,因此转换器算法中预处理这类语句的函数之间也可能会递归调用。
例如:
Ifa>b THEN
   c=a+b;
Else
   Ifd>e THEN
      c=d+e;
  END_IF
END_IF
先预处理,将该结构转换为:
Ifa>b
   c=a+b;
Else
   If d>e THEN
       c=d+e;
   Else
    c=c;
  END_IF
END_IF
先将外层分支中的赋值语句和内层的IF_ELSE语句的运算逻辑转换为对应的函数式:
Ifa>b THEN
   c=f(a,b);
Else
   c=f(d,e,c)
End
再将外层的IF_ELSE语句的运算逻辑转换为函数式:
c=f(a,b,d,e,c);
转换工作包含两个算法:转换算法和程序控制语句处理算法,二者构成递归调用关系。
本实施例的中间代码采用语法树形式,每颗语法树对应于一个赋值语句或一个程序控制语句。转换器的“转换算法”的流程如图4所示,包括:
依次遍历当前一层的每一颗语法树,转换算法开始时当前一层指整个中间代码的最外层(步骤110,170),对每一颗语法树,判断该语法树是否对应于赋值语句(步骤120):
如对应于赋值语句,则直接生成函数式,并顺序生成该函数式的序号,将其添加到关系集中(步骤130);
如不对应于赋值语句,则判断是否合法的程序控制语句(步骤140),如果否,则生成错误报告(步骤150),结束转换,如果是合法的程序控制语句,则调用程序控制语句处理算法处理(步骤160)。
对赋值语句,转换成的函数式的因变量应为该赋值语句等号左边的变量,函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则函数式的自变量为空。
图5示出了程序控制语句处理算法的流程,包括以下步骤:
步骤210,按序遍历各个控制分支,对每个控制分支,调用“转换算法”对该控制分支的所有语句依次进行处理,遍历完成后转入下一步;
该步在处理控制分支时,调用了转换算法,在运行转换算法时,对该控制分支当前一层进行遍历(当前一层即为该控制分支代码的最外层),如果还存在嵌套在该控制分支的控制语句,就会再次调用程序控制语句处理算法,如此递归调用,这样最底层的程序控制语句和赋值语句会首先完成转换,然后逐层向上,直到完成对第一层程序控制语句的转换。
步骤220,判断当前处理的是哪种程序控制语句,本实施例中是分为几下几种情况分别处理:
a)对IF语句,先进行分支预处理算法,将其转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
b)对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现。进行转换时,只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式,文中提到的将变量“合并”均指“取并集”。
c)对FOR语句,先用分支预处理算法将其转换成赋值语句和WHILE语句,然后采用WHILE语句的转换方式转换为函数式;
d)对WHILE语句,预处理时将判断条件中的变量合并到该语句各个函数式的自变量中;转换时,再将每个函数式的因变量合并到该函数式的自变量中,得到的函数式即为转换后的函数式;
e)对DO WHILE语句,先用分支预处理算法将其转换成赋值语句和WHILE语句,然后采用WHILE语句的转换方式转换为函数式;
f)对SWITCH语句,先进行分支对等化的预处理,使得各个分支的函数式对等出现。进行转换时,只保留一个分支上的所有函数式,对其中的每一个函数式,将其他分支上对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式。
对IF_ELSE语句和SWITCH语句进行分支对等化的预处理时,逐次比较各分支相同位置上的函数式,如各分支上第n个函数式的因变量有m种,n=1,2,...,,m=2,3,...;则以“该因变量=该因变量”的方式在每个分支补充m-1个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
以两分支为例,如,分支一的第n个函数式为vj=fi(vi1,vi2,…),分支二的第n个函数式为v′j=fi(v′i1,v′i2,…),则可以将vj=vj补充到分支二,作为第n个函数式,将原来的v′j=fi(v′i1,v′i2,…)作为第n+1个函数式,将v′j=v′j补充到分支一,作为第n+1个函数式,vj=fi(vi1,vi2,…)仍作为第n个函数式;
如果步骤220判断出当前语句不是任何一种合法的控制语句时给出错误报告,结束程序控制语句处理算法。
以上程序控制语句处理算法是将程序控制语句分为了三类,一类是条件分支语句,一类是循环语句,一类是SWITCH语句。转换时,以IF_ELSE语句为基本的条件分支语句,其他的条件分支语句先转换为IF_ELSE语句后再进行处理;以WHILE语句为基本的循环语句,其他的循环语句先转换为该WHILE语句后再进行处理。以上虽然是对C语句的语句为例,但程序控制语句的类别都是相似的,因此均可参照以上方式进行处理。因为SWITCH语句其实也是一种多分支的条件分支语句,虽然在本实施例是单独作为一类处理,但在另一实施例中,也是可以作为第一类条件分支语句中的一种,转换为多级IF_ELSE语句然后再进行处理的。
相应地,如图5a所示,可以将转换器分为转换控制单元、代码缓存单元、第一转换单元和第二转换单元,其中:
转换控制单元用于控制控制程序的代码的接收和缓存到代码缓存单元,接收完成后将当前一层设为整个代码的最外层,通知第一转换单元开始转换,该代码包括多条语句或多个对应于语句的语法结构;
代码缓存单元用于缓存输入的控制程序的代码;
第一转换单元用于执行转换算法,依次遍历当前一层的语句或语法结构,对每一语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式,将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的程序控制语句,则调用第二转换单元将其转换为函数式;遍历完成后将得到关系集输出到优化器;
第二转换单元用于将程序控制语句转换为函数式,转换时按序遍历该程序控制语句的各个控制分支,对每个控制分支,将当前一层设为该控制分支代码的最外层,调用第一转换单元对该控制分支的所有语句或对应于语句的语法结构依次进行处理,处理完成后,根据该程序控制语句的类型将程序控制语句转换为相应的函数式。
具体地,
第一转换单元将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则该函数式的自变量为空。
所述第二转换单元根据该程序控制语句的类型将程序控制语句转换为相应的函数时,按以下方式进行:
对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式;
对除SWITCH语句外的其他条件分支语句,先将该语句转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
对WHILE语句,将判断条件中的变量合并到该语句各函数式的自变量中,将各函数式的因变量合并到本函数式的自变量中,得到转换后的函数式。
对除SWITCH语句外的其他循环语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;
对SWITCH语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;或者,先进行分支对等化的预处理,使得各分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将其他分支对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并得到的函数式即为转换后的函数式。
优化器对所述原始集进行寻优的方法在下文再详细说明。
优化器用于接收原始集、目标集及所述关系集,根据所述目标集和关系集对所述原始集寻优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该子集称为冗余最优集。主机和备机间拷贝更新该冗余最优集中变量的值后,该目标集中变量的值在此后任意正整数周期运算结束时保持一致。
由冗余数据分析器运行方式可知优化器的输入应包含三个集合:原始集V,目标集AV和关系集F。现在逐一进行说明:
原始集V:该集合的元素为编程时(也称为组态时)定义的所有变量,使用集合语言可以描述为:V={v1,v2,…,vn},这里vi是工业控制程序中定义的变量,n是定义的变量总数。
目标集AV:该集合可以是原始集V的任意子集,即
Figure G2009102431947D00231
,例如可以将AV取为输出变量集合,双机之间拷贝更新优化器挑选出的冗余数据(OV)就是为了使目标集AV的变量值在此后任意正整数周期运算结束时保持双机一致。
关系集F:关系集既是优化器的输入,也是转换器的输出。
优化器在对原始集V进行寻优后,产生输出,即冗余最优集(OV)。OV是V的满足优化器约束条件且包含元素个数最少的子集,优化器约束条件即双机之间拷贝更新该子集中冗余变量的值应使目标集中变量的值在此后任意正整数周期运算结束时保持双机一致。需要说明一下,虽然OV和AV都是V的子集,但是它们之间没有必然联系。
对于上文中的例1,设AV=V,直观上就能看得出OV={b,e},也即在双机之间拷贝更新变量b,e,是目标集AV的变量值在双机切换后任意周期运算结束时保持双机一致的充分和必要条件。
为清晰描述最优集OV的含义,再举一例:
例2:
VAR//定义变量a,b,c,d,e
a:DINT;
b:BOOL;
c:DINT;
d:DINT;
e:DINT;
END_VAR
IF a>=100
THEN
b:=0;
a:=0;
ELSE
b:=1;
a:=a+1;
END_IF
c:=a*2+1+e;
d:=c-a;
上述代码在运算逻辑上可转换为函数式:
b=f1(a)
a=f2(a)
c=f3(a,e)
d=f4(a,c)
因此,集合V,AV和F分别为:
V={a,b,c,d,e};
AV可以是V的任何子集,此例中取为AV=V;
F={(1,b=f1(a)),(2,a=f2(a)),(3,c=f3(a,e)),(4,d=f4(a,c))}。
直观上就能看得出OV={a,e}
实际上,优化器的约束条件就是要保证将来在控制站中因为各种原因不同步(运算周期个数相差较远)时,控制站双机的以下处理过程可以成功达到同步目的:
双机不同步->双机停止运算->拷贝更新冗余数据(最优集OV)->双机重新开始运算->达到同步目的:经历任意周期的运算后双机目标集AV中的变量应该完全一致。
如果约束条件可以用明确的数学语言进行描述,那么优化器的设计就可以转换成给出一个有约束的最优化问题的求解算法。为方便进行数学描述,此处先定义一种集合的运算“有序化Se(S)”(Se是sequence的简写)。如果V是某个变量名集合(记为V={v1,v2,…,vn}),则Se(V)也是一个集合,定义为:
Figure G2009102431947D00251
实际Se(V)是V的一个多元组。
有了上述准备工作,现在定义一个由集合X(定义域)到集合Y(值域)的映射Fc,即Y=Fc(X):
X:X=Se(V1)
Y:Y=Se(V2)
其中,V1,V2是原始集V的子集。
Fc(这里的F表示函数function;c表示约束,constraint):表示将X中的元素x作为初值,顺序运算表达式f1(),f2(),…,fm(),如果运算fi()时出现无具体值的自变量,将该自变量和fi()的函数值视为可取任意值。经过这样的运算后最终可以得到Y中的元素y。这个映射可能是单值的,如图6a,即从X到Y的变量之间映射是一对一或多对一的,不存在一对多的情况;也可能是多值的,如图6b所示,即从X到Y的变量之间的映射存在一对多的情况。如果映射是单值的,称之为函数。
任取一个X,Y不一定可以使Fc是一个函数,例如,在例2中,如果取:
X=Se({a,b,c,d})={(a,b,c,d)|a,c,d∈Z,b∈{0,1}},
Y=Se({a,b,c,d,e})={(a,b,c,d,e)|a,c,d,e∈Z,b∈{0,1}}
当集合X的元素为某一值时,例如:x={a,b,c,d}={100,1,10,5},经过Y=Fc(X)作用后,得到Y中的对应元素为y={a,b,c,d,e}={0,0,1+e,1+e,e},可见y不唯一,映射Y=Fc(X)是多值的,因此它不是函数。
但如果取:
X=Se({a,e})={(a,e)|a,e∈Z},
Y=Se({a,b,c,d,e})={(a,b,c,d,e)|a,c,d,e∈Z,b∈{0,1}}
显然当集合X的元素为某一值时,经过Y=Fc(X)作用后,得到Y中的对应唯一的元素y。例如:x={a,e}={100,8}时,y={a,b,c,d,e}={0,0,9,9,8},也就是说映射Y=Fc(X)是一个函数,这一点直观上就能看得出。
现在再定义映射Fc的一个幂运算:
Y=Fcn(X)=Fc(Fcn-1(X)),n为任意正整数
当0时,补充定义Y=Fc0(X)=Y
经过这些准备工作,得到优化器约束条件的一个数学描述:最优集OV应满足:对于任意的n(正整数或0),集合X=Se(OV)可使映射Y=Fcn(X)是一个函数,其中Y=Se(AV)。
在以上描述的基础之上,优化器的设计变成了对如下数学问题求解:给定优化器的输入,求一个算法可以求出V的一个子集OV,满足:
1、对于任意正整数的n,集合X=Se(OV)可使映射Y=Fcn(X)是一个函数(单值映射),其中Y=Se(AV)。;
2、满足条件1的情况下,包含元素个数最少。
对于上文中的例2,直观上就能看得出OV={(a,e)|a,e∈Z}。
定理1:给定输入,优化器的输出OV一定存在。
证明:对于任意的正整数n,Se(AV)=Fcn(Se(V))一定是一个函数,所以V满足约束条件;又因为V中元素个数是有限的所以包含元素个数最少且满足约束条件的OV一定存在。
这里需要再说明一下,双机之间拷贝更新最优集OV,应使目标集AV的变量值在此后任意正整数周期而不是一个周期运算结束时保持双机一致,从问题的数学描述来看,即n是任意正整数,不能限制为n=1。现举例说明:
例3:如下的关系集:
y=f(x)
x=f(a)
设AV={y}
分析:如果只要求拷贝更新OV数据的第一个运算周期结束时,AV无扰,那么只要求OV={x}即可,但是从工程逻辑上来看,第二个周期结束时双机的AV变量y的值是否一致就不确定了。对于这样的工程逻辑,为保证AV变量y无扰,显然需要冗余x,a即OV={x,a}。
通过例3,可见双机之间拷贝更最优集OV,应使目标集AV的变量值在此后任意正整数周期而不是一个周期运算结束时保持双机一致,即在优化问题的数学描述中n应为任意正整数,不可以将其限制为n=1,否则不能彻底满足无扰切换的要求。
根据以上优化器数学问题描述,本实施例采用如下算法来求解OV,请参照图7所示的流程:
设算法开始时各个集合的状态为:
原始集V(优化器输入,已给定);
目标集AV(优化器输入,已给定);
关系集F(优化器输入,已给定,为每个函数式设定一个状态,初始时均为“存在状态”)。
最优集OV(优化器输出,空集);
临时变量集:vTempSet(空集)。
用程序结构描述该优化算法如下(该优化算法对应于图7中的流程):
优化算法开始
OV=AV:将AV元素添加到OV中;
While(vTempSet与AV包含元素未完全相同)
{%1
    清空vTempSet,然后复制AV到vTempSet中;
    While(由尾至头遍历关系集F)
    {%2
        if(当前函数式yi=fi(xi1,xi2,...)中的函数值变量yi属于AV)
        {&3
             在AV中删除变量yi
             if(函数式fi的状态为“存在状态”)
             {&4
                将该函数式所有自变量xi1,xi2,...按照不重复原则添
                加到AV中(即已经属于AV的不再添加);
                将函数式fi设置为“被删除状态”;
           }&4
      }&3
}%2
OV=OV+(AV-OV)//将属于AV但不属于OV的元素添加到OV中;
}%1
清空vTempSet
输出OV
优化算法结束
结束状态:
输入:原始集V(无变化),目标集AV(有变化),关系集F(包含元素不变但每个元素状态可能会有变化);
输出:最优集OV(有变化);
临时变量集:vTempSet(无变化,仍为空集)。
用自然语言描述该优化过程,优化器对原始集进行寻优时,包括如下步骤:
先将关系集中所有函数式置为“存在”状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;
每一次遍历过程中,对当前的函数式vj=fi(vi1,vi2…),i=1,2,...,n;如vj不属于AV,则结束对该函数式的处理;如vj属于AV,则从AV中删除vj,并继续判断该函数式是否为“存在”状态,如否,结束对该函数式的处理,如为“存在”状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;
每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV作为最优集输出,结束优化,如果不同,以同样方式继续下一次的遍历。
按例2的情况做一下推演,其中:
V={a,b,c,d,e};
AV可以是V的任何子集,此例中取为AV=V;
F={(1,b=f1(a)),(2,a=f2(a)),(3,c=f3(a,e)),(4,d=f4(a,c))}。
第一次遍历:
遍历前的AV={a,b,c,d,e}
对函数式d=f4(a,c),因变量d属于当前AV,从AV中删除d,此时d=f4(a,c)为存在状态,a,c在AV已存在,取消d=f4(a,c)的存在状态,处理后的AV={a,b,c,e};
对函数式c=f3(a,e),因变量c属于当前AV,从AV中删除c,此时c=f3(a,e)为存在状态,a,e在AV已存在,取消c=f3(a,e)的存在状态,处理后的AV={a,b,e};
对函数式a=f2(a),因变量a属于当前AV,从AV中删除a,此时a=f2(a)为存在状态,自变量a在AV不存在,再加入到AV中,取消a=f2(a)的存在状态,处理后的AV={a,b,e};
对函数式b=f1(a),因变量b属于当前AV,从AV中删除b,此时b=f1(a)为存在状态,自变量a在AV已存在,取消b=f1(a)的存在状态,处理后的AV={a,e};
因此第一次遍历后AV={a,e},将属于AV但不属于OV的元素添加到OV中,有OV={a,e},因此要进行第二次的遍历;
第二次遍历:
遍历前的AV={a,e};
对函数式d=f4(a,c),因变量d不属于当前AV,不做处理;
对函数式c=f3(a,e),因变量c不属于当前AV,不做处理;
对函数式a=f2(a),因变量a属于当前AV,从AV中删除a,因为此时a=f2(a)已取消存在状态,不再对自变量处理,处理后AV={e};
对函数式b=f1(a),因变量b不属于当前AV,不做处理;
因此第一次遍历后AV={e},e已在OV中存在,因此仍有OV={a,e},因为AV在遍历后不同于遍历前,还要进行第三次遍历;
第三次遍历,遍历前AV={e},所有函数式的因变量都不属于AV,因此均不做处理,因此遍历后AV不变,结束优化,得到的最终的OV={a,e}。
将上述冗余数据的自动选择方法应用于采用备份式冗余的计算机控制系统,可以实现无扰切换,该实现无扰切换的方法包括:
按上述冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余变量;
将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上,所述设备工作时运行所述控制程序;
在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后,双机同时启动控制程序。
本实施例中,上述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),上述控制程序为工业控制程序,上述冗余配置的设备为该DCS系统中采用备份式冗余并运行所述工业控制程序的控制站;冗余数据的自动选择在工程师站进行,该工程师站将选择得到的冗余最优集下装到所述控制站。
相应的采用备份式冗余的计算机控制系统包括控制程序的编程设备和控制程序的执行设备,所述执行设备采用备份式冗余的方式配置,还包括上述冗余数据分析器,其中:
上述编程设备用于确定控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,将所述原始集、目标集和控制程序的代码输出到所述冗余数据分析器;
上述冗余数据分析器还用于将得到的冗余最优集配置到所述执行设备中可作为主机的每一个设备上;
上述执行设备作为主机时,在双机运算同步的冗余期间暂停运算,将所述冗余最优集中各个变量的值拷贝给从机,拷贝结束后,与备机同时启动所述控制程序;
上述执行设备作为备机时,在双机运算同步的冗余期间暂停运算,根据从主机拷贝的所述冗余最优集中各个变量的值更新自己内存中的这些变量的值,拷贝结束后,与主机同时启动所述控制程序。
本实施例中,上述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序的编程设备和冗余数据分析器位于该DCS中的工程师站;上述控制程序的执行设备为该DCS中运行工业控制程序的控制站;冗余数据分析器得到工业控制程序的冗余最优集后下装到相应的控制站中。
下面给出上述优化器算法的有效性证明。
为方便描述将主循环While(vTempSet与AV包含元素未完全相同){}记为“%1循环”。为便于研究算法,需要将“%1循环”变为While(1){},即将其变为死循环(为叙述方便,以下记为“%1(1)循环”)来研究各个集合的变化。
因为集合V,AV,F,OV,vTempSet中元素个数都是有限的,且无重数(详见)。因此不妨设:
“%1(1)循环”执行的次数为0或i(i属于正整数,如无特别说明i取值范围均如此);
V集合元素个数为n,F集合元素个数为m,设第i个循环周期结束时F集合“存在状态”元素构成的子集是F1(i),元素个数为m1i;F集合“被删除状态”元素构成的子集是F2(i),元素个数为m2i(补充定义:F1(0)=F,F2(0)=空集,m10=m,m20=0)。
设第i次“%1(1)循环”结束时的AV集合(记作AV(i))中的元素个数为ki(补充:未开始进入循环时的AV集合AV(0)=AV,元素个数k0=n),那么第i次“%1(1)循环”开始时的vTempSet集合(记作vTempSet(i))满足vTempSet(i)=AV(i-1),且vTempSet(i)中的元素个数应为gi=ki-1(补充定义:vTempSet(0)为空集,g0=0)。
vTempSet ( i ) = φ ( i = 0 ) AV ( i - 1 ) ( i = 1,2 , . . . )
g i = 0 ( i = 0 ) k i - 1 ( i = 1,2 , . . . )
注意,以下关系显然成立(i=0,1,2,...):
ki<=n
F1(i)∪F2(i)=F,m1i+m2i=m(i=0,1,2,...)
m1i>=m1i+1,m2i<=m2i+1(由算法中&4括号间的内容决定) F 1 ( i ) ⊇ F 1 ( i + 1 ) , F 2 ( i ) ⊇ F 2 ( i + 1 ) (由算法中&4括号间的内容决定)
优化器核心算法收敛性证明
本小节主要为了证明在优化算法不会出现死循环。首先引理2说明在优化算法中,某一次“%1(1)循环”开始前,AV为空集,则本次“%1循环”结束后,AV仍未空集,即
引理2:对于“%1(1)循环”,若j(0或正整数)满足AV(j)=φ,则AV(j+1)=φ
证明:如果“%1(1)循环”开始前AV是空集,由算法逻辑显然“&3分支”始终无法进入,那么本次“%1(1)循环”结束后,AV不会有任何变化,即仍为空集。
得证。
定理3:
对于“%1(1)循环”,存在一个有限的I(0或正整数),使vTempSet(I)=AV(I)。
证明:
现在分两种情况对上述等价命题进行证明:
情况1(特殊情况):AV是空集(即两个控制器不需要保证任何变量数据实现无扰切换)
由核心算法可得:满足vTempSet(I)=AV(I),显然正确。此时“%1循环”无法进入,OV是空集,
情况2(一般情况):AV是V的非空子集。此时显然“%1循环”至少要进入一次。
使用反证法证明如下:
假设经历任意次(记为i,i为正整数)“%1(1)循环”,每次循环前后AV均会变化,即vTempSet(i)不等于AV(i)。由算法显然可知:每次“%1(1)循环”使得AV发生变化的必要条件是一定要进入“&3分支”(具体来说分为进入“&3分支”不进入“&4分支”或进入“&4分支”两种情形)。由假设每次“%1(1)循环”后,两种情形至少会有一种出现一次。由算法的结构可见,每次“%1(1)循环”AV发生变化的必要条件总共最多只能出现m次,可以分为情形a和情形b:
情形a:每次“%1(1)循环”后只发生若干次(正整数)进入“&3分支”不进入“&4分支”的情形,则有:同时gi<ki,m1i-1=m1i,m2i-1=m2i    (1)
情形b:每次“%1(1)循环”后发生若干次(0或正整数)进入“&3分支”不进入“&4分支”的情形,也发生了若干次(正整数)只进入“&4分支”的情形(记作情形b),则有:
m1i-1>m1i,m2i-1<m2i    (2)
有了上述AV变化的“必要条件”的分析,可以研究n*m个“%1循环”的情况,利用“抽屉原理”将n*m个“%1”周期分为m个组,每组n个,如下所示:
(1,2,...,n)
......
(i*n+1,i*n+2,...,(i+1)*n)
......
((m-1)*n+1,(m-1)*n+2,...,m*n)
对于上述各组,或者出现情形a,或者出现情形b。如果某一组的n次循环只出现情形a,则由(1)显然最迟在该组最后一个“%1(1)循环”结束时AV成为空集,则由引理2,下一个“%1(1)循环”结束后AV仍为空集,这与假设相矛盾。所以每一组(每组有n次“%1(1)”循环)中至少出现一次情形b,这样总共m组循环后,根据(2)m1mn=0且m2mn=m。这样关系集F的所有关系式都成为“被删除状态”,也就是说,当“%1(1)循环”继续进行时,只能出现情形a了,那么在如下的第m+1组循环后:
(m*n+1,m*n+2,...,(m+1)*n)
AV必将变为空集,则由引理2,下一个(第(m+1)*n+1个)“%1(1)循环”结束后AV仍为空集,这与假设相矛盾。
因此假设不成立,原命题正确。
得证。
定理3实际上说明了优化算法一定可以退出“%1循环”,并将退出“%1循环”时循环次数I(下同)的上限估计为(m+1)n次,实际上这是一个非常保守的估计,实际循环结束的次数比这个估计小很多。另外显然可以得到:
推论4:满足定理3的I可以取
Figure G2009102431947D00351
是空集;满足定理3的
Figure G2009102431947D00352
非空。
进一步,还应了解对于“%1(1)循环”,第I+1次及其后的每次循环前后集合AV和OV可能会有什么变化?下述引理和定理回答了这个问题,从而可以说明算法导致AV和OV的变化是“收敛的”。
引理5:对于“%1(1)循环”和非空的AV,一定存在J(正整数),满足:J≤I且 vTempSet ( J ) ⊇ AV ( J )
证明:AV非空时,首次出现vTempSet(J)=AV(J)的“%1(1)循环”次数I>0,另一方面vTempSet(J)=AV(J)是 vTempSet ( J ) ⊇ AV ( J ) 的特殊情况,所以命题显然成立。
得证。
引理5说明对于“%1(1)循环”和非空的AV,一定存在不大于I的正整数J,使得第J次“%1(1)循环”前后,AV集合不变或变为原来的真子集。
引理6:对于“%1(1)循环”和非空的AV,若正整数J满足 vTempSet ( J ) ⊇ AV ( J ) , 则必有 vTempSet ( J + 1 ) ⊇ AV ( J + 1 )
证明:
第J次“%1(1)循环”开始时各集合为:
F1(J-1),F2(J-1),AV(J-1)(即vTempSet(J));
第J次“%1(1)循环”结束时(第J+1次“%1(1)循环”开始时)各集合为:
F1(J),F2(J),AV(J)(即vTempSet(J+1));
第J+1次“%1(1)循环”结束时各集合为:
F1(J+1),F2(J+1),AV(J+1)(即vTempSet(J+2))。
对于本命题,这些集合应满足的关系是:
F 1 ( J - 1 ) ⊇ F 1 ( J ) ⊇ F 1 ( J + 1 ) - - - ( 6.1 )
F 2 ( J - 1 ) ⊇ F 2 ( J - 1 ) ⊇ F 2 ( J + 1 ) - - - ( 6 . 2 )
AV ( J - 1 ) ⊇ AV ( J ) - - - ( 6.3 )
这里采用如下证明方法:对于第J和第J+1次“%1(1)循环”中的子循环“%2循环(用于遍历关系集F)”,进行“同步”比较证明,目的是最终得到第J和第J+1次“%1(1)循环”后得到的AV集合满足: AV ( J ) ⊇ AV ( J + 1 ) . 为此,定义第J次“%1(1)循环”中子循环“%2循环”在遍历了第p个关系式(从第m个关系式开始向前遍历)后,AV集合记作AV(J)(p),补充定义:
AV(J)(m+1)=AV(J-1)
显然应有:AV(J)(1)=AV(J)。
因此原命题:
vTempSet ( J + 1 ) ⊇ AV ( J + 1 ) ⇔ AV ( J ) ⊇ AV ( J + 1 ) ⇔ AV ( J ) ( 1 ) ⊇ AV ( J + 1 ) ( 1 ) - - - ( 6.4 )
现在使用数学归纳法来证明 AV ( J ) ( 1 ) ⊇ AV ( J + 1 ) ( 1 ) , 从而原命题可证。
10首先,对于初始状态显然有: AV ( J ) ( m + 1 ) = AV ( J - 1 ) ⊇ AV ( J ) = AV ( J + 1 ) ( m + 1 )
20假设,对于p(满足:m+1>=p>1)时成立 AV ( J ) ( p ) ⊇ AV ( J + 1 ) ( p ) ,
那么对于p-1的情况,AV(J)(p-1)和AV(J+1)(p-1)是AV(J)(p)和AV(J+1)(p)分别在各自的“%2循环”中遍历了第p-1关系式后的AV集合,在分别遍第p-1个表达式之前,根据(6.1)和(6.2)(将第J次“%1(1)循环”中的被遍历前的第p-1个表达式记作f(J)(p-1)),应有以下几种情况:
2.10f(J)(p-1)状态是“存在状态”,f(J+1)(p-1)是“存在状态”;
该情况说明第p-1个关系式的函数值变量不属于AV(J)(p),由假设该函数值变量也不属于AV(J+1)(p),因此在遍历第p-1个关系式后,两个“%1(1)循环”(J次和J+1次)中的AV集合均无变化,所以 AV ( J ) ( p - 1 ) ⊇ AV ( J + 1 ) ( p - 1 ) 仍然成立。
2.20f(J)(p-1)状态是“存在状态”,f(J+1)(p-1)是“被删除状态”;
该情况说明第p-1个关系式的函数值变量一定属于AV(J)(p),那么该函数值变量可能属于也可能不属于AV(J+1)(p)。
该函数值变量属于AV(J+1)(p)时,因为f(J+1)(p-1)是“被删除状态”,所以只进入“&3分支”不能进入“&4分支”,这样遍历完第p-1个关系式后,AV(J+1)(p-1)较AV(J+1)(p)只减少了一个变量;但是AV(J)(p-1)较AV(J)(p)也只减少了同一个变量,同时可能增加一些新的变量(也可能不增加)。由假设,所以 AV ( J ) ( p - 1 ) ⊇ AV ( J - 1 ) ( p ) 仍然成立。
该函数值变量不属于AV(J+1)(p)时,在第J+1次“%1(1)循环”中无法进入“&3分支”,那么AV(J+1)(p-1)=AV(J+1)(p);另一方面,在第J次“%1(1)循环”中,该函数值变量属于AV(J)(p),这样将进入“&3分支”,该函数值变量将在AV(J)(p)中被删除,然后可能再添加一些变量(进入“&4分支的话”),得到AV(J)(p-1),由于该函数值变量本来就不属于AV(J+1)(p-1)=AV(J+1)(p),根据假设 AV ( J ) ( p - 1 ) ⊇ AV ( J + 1 ) ( p - 1 ) 仍然成立。
2.30f(J)(p-1)状态是“被删除状态”,f(J+1)(p-1)是“被删除状态”;
该情况不能直接说明第p-1个关系式的函数值变量是否属于AV(J)(p),所以又可以分为以下三种子情况:
2.3.10第p-1个关系式的函数值变量不属于AV(J)(p):那么必有该函数值变量也不属于AV(J+1)(p),则必有
AV ( J ) ( p - 1 ) = AV ( J ) ( p ) ⊇ AV ( J + 1 ) ( p ) = AV ( J + 1 ) ( p - 1 )
2.3.20第p-1个关系式的函数值变量属于AV(J)(p)但函数值变量不属于AV(J+1)(p):那么从AV(J)(p)到AV(J)(p-1)减少了该函数值变量,而AV(J+1)(p)=AV(J+1)(p-1),因为该变量本来就不属于AV(J+1)(p),根据假设,所以 AV ( J ) ( p - 1 ) ⊇ AV ( J + 1 ) ( p - 1 ) 成立。
2.3.30第p-1个关系式的函数值变量属于AV(J)(p)也属于AV(J+1)(p):那么从AV(J)(p)到AV(J)(p-1)和从AV(J+1)(p)到AV(J+1)(p-1)均只减少了该函数值变量,根据假设,所以 AV ( J ) ( p - 1 ) ⊇ AV ( J + 1 ) ( p - 1 ) 成立。
按照数学归纳法的意义: AV ( J ) ( 1 ) ⊇ AV ( J + 1 ) ( 1 ) 成立,由(6.4)原命题得证。
得证。
引理6说明对于“%1(1)循环”和非空的AV,若第J(正整数)次“%1(1)循环”前后,AV集合不变或变为原来的真子集,则第J+1“%1(1)循环”前后AV集合的变化仍如此。
定理7(收敛性定理):对于“%1(1)循环”,存在一个有限的J(0或正整数)J≤I,满足任取N(0或正整数)>=J时,都有 vTempSet ( J ) ⊇ AV ( J ) .
证明:
对于AV是空集的情况,J=0;
对于AV不是空集的情况,引理5和引理6构成了证明这种情况的一个数学归纳法。
得证。
定理7实际上说明“%1循环”退出之前,已经保证AV进入到“收敛状态(每次循环结束时,AV总是不变或者变为原来的真子集)”。如果将“%1循环”变为“%1(1)循环”,AV(i)形成的一个序列可以通过微积分学中的闭区间套定理(或单调有界收敛定理)中的方法继续进行研究,由于本主题不再需要进一步的结论,所以本文档不再进行深入论述。
若从某一次起,以后各次“%1(1)循环”前后,某集合不再变化,本文称之为“饱和”。有了上述定理和引理,现在可以回答如下问题了,OV集是否可以达到“饱和”,如能“饱和”是否可在“%1循环”退出之前达到:
推论8:对于优化算法,程序在退出“%1循环”之前,OV集合可以达到“饱和”。
证明:
当程序退出时,“%1循环”已进行到第I次,由定理7,AV集合已经进入到“收敛状态”,在算法中OV集合的变化方式为:OV=OV+(AV-OV),即将AV中不属于OV的元素添加到OV中,显然若AV集合已经进入“收敛状态”后,OV将达到“饱和状态”。
得证。
优化器核心算法有效性证明
上文已经给出了优化器算法应满足条件的数学描述,并证明了最优集OV的存在性。优化器算法应满足:
给定优化器的输入,求一个算法可以求出V的一个子集OV,满足如下两个约束条件:
1、对于任意的n(正整数或0),集合X=Se(OV)可使映射Y=Fcn(X)是一个函数,其中Y=Se(AV)。;
2、满足条件1的情况下,包含元素个数最少。
现证明优化算法的可行性,即需证明当OV=OV时可以满足上述条件1和2,其中OV由优化算法得到。为此先给出几个引理或映射Fc的性质,最后证明OV就是所求的最优集。
在优化算法面对的各类工程中,AV包含的元素个数是不确定的,可能是多个,也可能是1个,甚至理论上也可以是空集。如果能将这些情况都转化为AV只包含一个元素的情况,那么为以后的证明肯定会带来方便。如果在V中增加一个变量(不妨设为output),并在F增加一个元素(m+1,output=f(原来AV中的元素)),最后将得到的OV中去掉output,显然这个OV和对原始问题求得的OV是一致的,即下述引理9成立。
引理9:映射 Y F = Fc F ( x ) ⇔ 映射YO=FcO(X),其中YO=Se({output}),O=F∪{(m+1,output=f(原来AV中的元素))}。
显然得证。
映射Fc和关系及F密切相关,不妨认为由F生成的映射Fc()也可记作FcF(),那么映射Y=Fcn(X)就是 Y = Fc F n ( X ) , 对这种幂映射进行进一步分析,具有性质10:
性质10:对于任意的n(正整数),映射 Y = Fc F n ( X ) ⇔ 映射 Y = Fc G 1 ( X ) = F c G ( X ) , 即它们同时为函数或同时不为函数,其中集合F和G的关系如下:
F={(i,f())|i=1,2,…,m且
f()是 v j = f i ( v i 1 , v i 2 , . . . ) , 它是按照组态逻辑顺序抽象出的第i个数据关系式}
G={(k×m+i,f())|i=1,2,…,m;k=0,1,…,n-1;且
f()是 v j = f i ( v i 1 , v i 2 , . . . ) , 它是按照组态逻辑顺序抽象出的第i个数据关系式}
显然得证。
性质10的物理意义很明显,就是在实际控制中将n(正整数)个周期的IEC运算的效果等价于一个周期内完成一个新的IEC运算,这个新的IEC运算逻辑是由原IEC运算逻辑简单重复n次产生的。所以必有映射 Y = Fc F n ( X ) Y = Fc G 1 ( X ) = F c G ( X ) 同时为函数或同时不为函数。
引理11(函数定义域维数的可扩张性):如果映射Y=FcF(X)是函数,其中X=Se(OV),Y=Se(AV),那么映射 Y = Fc F ( X ) ~ 也是函数,其中 X ~ = Se ( OV ) ~ , 且有
显然得证。 OV ⊆ OV ~ .
引理12(函数值域维数的可扩张性):如果映射Y1=FcF(X),Y2=FcF(X)是函数,其中X=Se(OV),Y1=Se(AV1),Y2=Se(AV2),那么映射 Y ~ = Fc F ( X ) 也是函数,其中 Y ~ = Se ( AV 1 ∪ AV 2 ) .
显然得证。
性质13:如果映射Y1=FcF(X1)和Y2=FcF(X2)均为函数,其中X1=Se(OV1),Y1=Se(AV1),X2=Se(OV2),Y2=Se(AV2),那么映射Y3=FcF(X3)也是函数,其中X3=Se(OV1∪OV2),Y3=Se(AV1∪AV2)。
证明:
由引理11,Y1=FcF(X3)和Y2=FcF(X3)均是函数;
再由引理12,Y2=FcF(X3)是函数。
得证。
现在给出一个定义,OV对关系集F的化简集族:从头到尾遍历F的所有关系式,初始时将OV中的元素视为已确定数值的变量,按照集合F中的关系式的先后顺序,对于函数值y可以确定的关系式改为y=f(),也可以不作任何改动,经过这样一次遍历后,得到所有可能的关系集组成的集合,称之为OV对关系集F的化简集族,记作
Figure G2009102431947D00413
该集族中的元素称为OV对关系集F的化简集,记作
Figure G2009102431947D00414
显然也可以定义OV1对关系集
Figure G2009102431947D00415
的化简集族其中的元素(化简集)可以记为
Figure G2009102431947D00417
......。显然有:
引理14:如果Se(AV)=FcF(Se(OV))是一个函数, F ~ ∈ f ~ ( F , OV ) , 那么 Se ( AV ) = Fc F ~ ( Se ( OV ) ) 也是一个函数
显然得证。
以下算法P实际上是优化算法部分内容(“%2循环”)的等价变化与提炼,算法P可以得到一个化简集,见引理14。
算法P:
OV为空,AV已知;
AVTemp=AV;
While(由尾至头遍历关系集F)
{%5
    if(当前关系式yi=fi(xi1,xi2,...)中的函数值变量yi属于AvTemp)
    {&6
         在AvTemp中删除变量yi
         将该关系式所有自变量xi1,xi2,...按照无重数原则添加到
         AvTemp中(即已经属于AvTemp的不再添加);
       将关系式fi改为y=fi();//与优化算法中的“设置为被删除状态”
       有一致性;
    }&6
}%5
OV=AvTemp;
得到新的F记为
Figure G2009102431947D00421
和OV;
算法结束。
引理15:算法P运算后,映射Se(AV)=FcF(Se(OV))是一个函数,且 F ~ p ∈ f ~ ( F , OV ) (即F变成了一个OV对关系集F的化简集)
证明:由算法P本身的遍历方式以及的定义,引理结论显然成立。
显然得证。
引理16:如果Se(AV)=FcF(Se(OV))是一个函数, F ~ = f ~ ( F , OV ) , 且映射 Se ( AV 1 ) = Fc F ~ ( Se ( OV 1 ) ) 为关系集
Figure G2009102431947D00426
上的一个函数,那么映射Se(AV1)=FcF(Se(OV1∪OV))是关系集F上的一个函数。
证明:
Figure G2009102431947D00427
的定义可知:在完成Se(AV1)=FcF(Se(OV1∪OV))(记为原映射)映射过程中,由于定义域为Se(OV1∪OV),包含了OV所提供的维数,所以按照
Figure G2009102431947D00428
的生成方式可将部分关系式化简为无自变量形式,显然这样不影响原映射的进行,这样原映射就变为 Se ( AV 1 ) = Fc F ~ ( Se ( OV 1 ∪ OV ) ) , 由于已知 Se ( AV 1 ) = Fc F ~ ( Se ( OV 1 ) ) 是一个函数,由引理11(函数定义域维数的可扩张性), Se ( Av 1 ) = Fc F ~ ( Se ( OV 1 ∪ OV ) ) 是一个函数。
所以Se(AV1)=FcF(Se(OV1∪OV))是关系集F上的一个函数。
得证。
引理17:若Se(AV)=FcF(Se(OV))是一个函数, F ~ = f ~ ( OV , F ) , Se ( AV 1 ) = Fc F ~ ( Se ( OV 1 ) ) 为关系集
Figure G2009102431947D00436
上的一个函数,那么映射Se(AV1∪AV)=FcF(Se(OV1∪OV))是关系集F上的一个函数。
证明:
由引理16,Se(AV1)=FcF(Se(OV1∪OV))是关系集F上的一个函数;
由引理11(函数定义域维数的可扩张性),Se(AV)=FcF(Se(OV1∪OV))是关系集F上的一个函数;
进而:
由引理12(函数值域维数的可扩张性),Se(AV1∪AV)=FcF(Se(OV1∪OV))是关系集F上的一个函数。
得证。
若集合AV,关系集F,经过算法P可以得到
Figure G2009102431947D00437
和OV,再任取集合AV1,关系集
Figure G2009102431947D00438
经过算法P得到
Figure G2009102431947D00439
和OV1,由引理15和引理17可知,Se(AV1∪AV)=FcF(Se(OV1∪OV))是一个函数,且
Figure G2009102431947D004310
显然是一个(OV+OV1)对关系集F的化简集,即:
引理18:若集合AV,关系集F,经过算法P可以得到
Figure G2009102431947D004311
和OV,再任取集合AV1,关系集
Figure G2009102431947D004312
经过算法P得到
Figure G2009102431947D004313
和OV1,那么Se(AV1∪AV)=FcF(Se(OV1∪OV))是一个函数且 F ~ p ( 2 ) ∈ f ~ ( OV 1 ∪ OV , F ) .
显然得证。
为证明优化算法满足约束条件1,先给出优化算法的一个等价形式算法Q:
算法Q:
算法初始状态:
输入:原始集V(已给定),目标集AV(已给定),关系集F(已给定,每个关系式均为“存在状态”);
输出:最优集OV(空集);
临时变量集:vTempSet(空集)。
算法:
OV=AV:将AV元素添加到OV中;//以便实现双机立即无扰切换
While(vTempSet与AV包含元素未完全相同)
{%7
    释放vTempSet链表,然后复制AV到中vTempSet;
    While(由尾至头遍历关系集F)
    {%8
        if(当前关系式yi=fi(xi1,xi2,...)中的函数值变量yi属于AV)
        {&9
             在AV中删除变量yi
             将该关系式所有自变量xi1,xi2,...按照无重数原则添加到
             AV中(即已经属于AV的不再添加);
           将关系式fi改为y=fi();//与优化算法中的“设置为被删除状态”
           有一致性;
        }&9
    }%8
    OV=OV+(AV-OV):将属于AV但不属于OV的元素添加到OV中;
}%7
释放vTempSet链表
输出OV
算法结束。
结束状态:
输入:原始集V(无变化),目标集AV(有变化),关系集F(包含元素不变但每个元素状态可能会有变化);
输出:最优集OV(有变化);
临时变量集:vTempSet(无变化,仍为空集)。
(显然“%8循环”为算法P)
现证明优化算法满足约束条件1。
定理19:优化算法满足约束条件1。
证明:
显然算法Q与优化算法一致,因此问题变为证明算法Q满足约束条件1,这里需要注意,算法Q的“%8循环”部分实际上就是算法P。对于AV是空集的情况算法显然成立,现证明AV非空的情况,即“%7循环”至少可以被进入一次,设“%7循环”执行的次数为i,与收敛性定理推导过程类似“%7(1)循环”表示将“%7循环”变为死循环。
(分析:对于i=1,显然算法Q得到的OV(此时OV=AV(1))满足Se(AV)=FcF(Se(BestOV))是一个函数,F变为,也就是说,只要AV(1)中的变量是定值,经过1个周期的运算后,AV中变量的值就会是唯一的定值,但是第一个周期结束时AV(1)中的变量有可能变为未知状态,所以需要一个周期结束时AV(1)中的变量也是定值,所以将AV(1)作为算法Q的“%8循环”部分的开始,得到AV(2)和
Figure G2009102431947D00452
这里:
F ~ P ( 1 ) ∈ f ~ ( AV ( 1 ) , F ) Se ( AV ( 1 ) ) = Fc F ~ P ( 1 ) ( Se ( AV ) ( 2 ) ) 是一个函数
F ~ P ( 2 ) ∈ f ~ ( AV ( 2 ) , F ~ P ( 1 ) )
根据引理16,Se(AV(1))=FcF(Se(AV(2)∪BestOV))是一个函数,即只要BestOV(2)=AV(2)∪BestOV(1)中的变量是定值,那么经过1个周期的运算后,AV(1)的变量为定值,但是BestOV(2)中不属于AV(1)的部分即BestOV(2)-AV(1)的元素值不确定,这个差集一定来自于AV(2),依次类推,...,将一直递归下去。事实上只要能证明如下映射是个函数即可:
Se(BestOV)=FcF(Se(BestOV))且 AV ⊆ BsetOV . )
这里分两步进行:
第一步,用数学归纳法证明以下结论:
对于第i次“%7(1)循环”结束时,F变为:
Se(AV(0)∪AV(1)∪…AV(i-1))=FcF(Se(BestOV(i)))是一个函数且 F ~ P ( i ) ∈ f ~ ( BestOV ( i ) , F )
10对于i=1的情况,显然成立。
20假设,对于i=k时,F变为:
Se(AV(0)∪AV(1)∪…AV(k-1))=FcF(Se(BestOV(k)))是一个函数
F ~ P ( k ) ∈ f ~ ( BestOV ( k ) , F ) 那么按照算法Q的逻辑,第k+1次“%7(1)循环”开始时,AV=AV(k),对
Figure G2009102431947D00464
进行算法Q的“%8循环”,得到
Figure G2009102431947D00465
和AV=AV(k+1)(显然: Se ( AV ( k ) ) = Fc F ~ P ( k ) ( Se ( AV ( k + 1 ) ) ) 是一个函数)。
因此,由引理18,得:
Se(AV(0)∪AV(1)∪…AV(k))=FcF(Se(BestOV(k)∪AV(k+1)))是一个函数且 F ~ P ( k + 1 ) ∈ f ~ ( BestOV ( k ) ∪ AV ( k + 1 ) , F )
有算法Q中的操作“OV=OV+(AV-OV):将属于AV但不属于OV的元素添加到OV中;”易知:BestOV(k+1)=BestOV(k)∪AV(k+1),所以:
Se(AV(0)∪AV(1)∪…AV(k))=FcF(Se(BestOV(k+1)))是一个函数,
F ~ P ( k + 1 ) ∈ f ~ ( BestOV ( k + 1 ) , F ) .
第二步,依据推论8, lim i → + ∞ BestOV ( i ) = BestOV
lim i → + ∞ ( AV ( 0 ) ∪ AV ( 1 ) ∪ . . . AV ( i - 1 ) ) = lim i → + ∞ BestOV ( i - 1 ) = BestOV
上述两个极限状态,只需要在i=J(J的意义参见定理7,收敛性定理)时就可达到OV状态。
因此,Se(BestOV)=FcF(Se(BestOV))且
Figure G2009102431947D00471
成立
所以:优化算法满足约束条件1。
得证。

Claims (19)

1.一种冗余数据的自动选择方法,应用于采用备份式冗余的计算机控制系统,该自动选择方法包括:
确定控制程序中定义的所有变量组成的原始集,以及主备切换时需要保证输出无扰的变量组成的目标集,该目标集为该原始集的子集;
将所述控制程序的代码转换为包含多个函数式及其顺序信息的关系集,转换时,按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息;
根据所述目标集和关系集对所述原始集寻优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该子集称为冗余最优集;该优化器约束条件指主机和备机间拷贝更新冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。
2.如权利要求1所述的自动选择方法,其特征在于:
所述控制程序是用多种语言编写的,所述控制程序的代码为将所述控制程序转换为的统一形式的中间代码。
3.如权利要求1所述的自动选择方法,其特征在于:
所述控制程序的代码包括多条语句或多个对应于语句的语法结构,通过转换算法和程序控制语句处理算法的递归调用完成转换,转换开始时当前一层设为整个代码的最外层;
转换开始后运行转换算法:依次遍历当前一层的语句或语法结构,对每一语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式,将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的程序控制语句,则调用程序控制语句处理算法将其转换为函数式;如该语句或语法结构不合法,做出错处理,结束转换。
4.如权利要求3所述的自动选择方法,其特征在于:
将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则该函数式的自变量为空。
5.如权利要求3或4所述的自动选择方法,其特征在于:
所述程序控制语句处理算法为:按序遍历该程序控制语句的各个控制分支,对每个控制分支,调用所述转换算法对该控制分支的所有语句或对应于语句的语法结构依次进行处理,当前一层为该控制分支代码的最外层,处理完成后,根据该程序控制语句的类型按以下方式进行转换:
对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式;
对除SWITCH语句外的其他条件分支语句,先将该语句转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
对WHILE语句,将判断条件中的变量合并到该语句各函数式的自变量中,将各函数式的因变量合并到本函数式的自变量中,得到转换后的函数式。
6.如权利要求5所述的自动选择方法,其特征在于:
对除SWITCH语句外的其他循环语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;
对SWITCH语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;或者,先进行分支对等化的预处理,使得各分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将其他分支对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并得到的函数式即为转换后的函数式。
7.如权利要求6所述的自动选择方法,其特征在于:
对IF_ELSE语句,或IF_ELSE语句和SWITCH语句进行分支对等化的预处理时,逐次比较各分支相同位置上的函数式,如各分支上第n个函数式的因变量有m种,n=1,2,...,,m=2,3,...;则以“该因变量=该因变量”的方式在每个分支补充m-1个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
8.如权利要求1所述的自动选择方法,其特征在于,根据所述目标集和关系集对所述原始集寻优,选择冗余变量的过程包括:
先将关系集中所有函数式置为“存在”状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;
每一次遍历过程中,对当前的函数式vj=fi(vi1,vi2,…),i=1,2,...,n;如vj不属于AV,则结束对该函数式的处理;如vj属于AV,则从AV中删除vj,并继续判断该函数式是否为“存在”状态,如否,结束对该函数式的处理,如为“存在”状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;
每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。
9.一种冗余数据分析器,用于为采用备份式冗余的计算机控制系统选择冗余变量,其特征在于,包括转换器和优化器,其中:
所述转换器用于接收控制程序的代码,将所述代码转换为包含多个函数式及其顺序信息的关系集并输出到优化器,转换时,按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息;
所述优化器用于接收控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,及所述关系集,根据所述目标集和关系集对所述原始集寻优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该子集称为冗余最优集;该优化器约束条件指主机和备机间拷贝更新所述冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。
10.如权利要求9所述的冗余数据分析器,其特征在于,所述转换器包括转换控制单元、代码控制单元、第一转换单元和第二转换单元,其中:
所述转换控制单元用于控制控制程序的代码的接收和缓存到代码缓存单元,接收完成后将当前一层设为整个代码的最外层,通知第一转换单元开始转换,该代码包括多条语句或多个对应于语句的语法结构;
所述代码缓存单元用于缓存输入的控制程序的代码;
所述第一转换单元用于执行转换算法,依次遍历当前一层的语句或语法结构,对每一语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式,将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的程序控制语句,则调用第二转换单元将其转换为函数式;遍历完成后将得到关系集输出到优化器;
所述第二转换单元用于将程序控制语句转换为函数式,转换时按序遍历该程序控制语句的各个控制分支,对每个控制分支,将当前一层设为该控制分支代码的最外层,调用第一转换单元对该控制分支的所有语句或对应于语句的语法结构依次进行处理,处理完成后,根据该程序控制语句的类型将程序控制语句转换为相应的函数式。
11.如权利要求10所述的冗余数据分析器,其特征在于:
所述第一转换单元将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端的所有变量,如等号右端没有变量,则该函数式的自变量为空。
12.如权利要求10或11所述的冗余数据分析器,其特征在于:
所述第二转换单元根据该程序控制语句的类型将程序控制语句转换为相应的函数时,按以下方式进行:
对IF_ELSE语句,先进行分支对等化的预处理,使两个分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将另一分支上对等的函数式的自变量及判断条件中的变量合并到该函数式的自变量中,合并后得到的函数式即为转换后的函数式;
对除SWITCH语句外的其他条件分支语句,先将该语句转换成IF_ELSE语句,然后采用IF_ELSE语句的转换方式转换为函数式;
对WHILE语句,将判断条件中的变量合并到该语句各函数式的自变量中,将各函数式的因变量合并到本函数式的自变量中,得到转换后的函数式。
13.如权利要求12所述的冗余数据分析器,其特征在于:
所述第二转换单元对除SWITCH语句外的其他循环语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;
对SWITCH语句,先转换成赋值语句和WHILE语句,然后采用赋值语句和WHILE语句的转换方式转换为函数式;或者,先进行分支对等化的预处理,使得各分支的函数式对等出现;然后只保留一个分支上的所有函数式,对其中的每一函数式,将其他分支对等的函数式的自变量和判断条件中的变量合并到该函数式的自变量中,合并得到的函数式即为转换后的函数式。
14.如权利要求13所述的冗余数据分析器,其特征在于:
所述第二转换单元对IF_ELSE语句,或IF_ELSE语句和SWITCH语句进行分支对等化的预处理时,逐次比较各分支相同位置上的函数式,如各分支上第n个函数式的因变量有m种,n=1,2,...,,m=2,3,...;则以“该因变量=该因变量”的方式在每个分支补充m-1个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
15.如权利要求9所述的冗余数据分析器,其特征在于,所述优化器按以下方式对所述原始集进行寻优:
先将关系集中所有函数式置为“存在”状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;
每一次遍历过程中,对当前的函数式vj=fi(vi1,vi2,…),i=1,2,...,n;如vj不属于AV,则结束对该函数式的处理;如vj属于AV,则从AV中删除vj,并继续判断该函数式是否为“存在”状态,如否,结束对该函数式的处理,如为“存在”状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;
每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。
16.一种实现无扰切换的方法,应用于采用备份式冗余的计算机控制系统,该方法包括:
按权利要求1至8中任一权利要求所述的冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余变量;
将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上,所述设备工作时运行所述控制程序;
在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后,双机同时启动控制程序。
17.如权利要求16所述的方法,其特征在于:
所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序为工业控制程序,所述冗余配置的设备为该DCS系统中采用备份式冗余并运行所述工业控制程序的控制站;
所述冗余数据的自动选择在工程师站进行,该工程师站将选择得到的冗余最优集下装到所述控制站。
18.一种采用备份式冗余的计算机控制系统,包括控制程序的编程设备和控制程序的执行设备,所述执行设备采用备份式冗余的方式配置,其特征在于,还包括如权利要求9至15中任一权利要求所述的冗余数据分析器,其中:
所述编程设备用于确定控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,将所述原始集、目标集和控制程序的代码输出到所述冗余数据分析器;
所述冗余数据分析器还用于将得到的冗余最优集配置到所述执行设备中可作为主机的每一个设备上;
所述执行设备作为主机时,在双机运算同步的冗余期间暂停运算,将所述冗余最优集中各个变量的值拷贝给从机,拷贝结束后,与备机同时启动所述控制程序;
所述执行设备作为备机时,在双机运算同步的冗余期间暂停运算,根据从主机拷贝的所述冗余最优集中各个变量的值更新自己内存中的这些变量的值,拷贝结束后,与主机同时启动所述控制程序。
19.如权利要求18所述的计算机控制系统,其特征在于:
所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序的编程设备和冗余数据分析器位于该DCS中的工程师站;
所述控制程序的执行设备为该DCS中运行工业控制程序的控制站;
所述冗余数据分析器得到工业控制程序的冗余最优集后,下装到相应的控制站中。
CN2009102431947A 2009-12-31 2009-12-31 冗余数据的自动选择方法、分析器及实现无扰切换的方法 Active CN101770411B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102431947A CN101770411B (zh) 2009-12-31 2009-12-31 冗余数据的自动选择方法、分析器及实现无扰切换的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102431947A CN101770411B (zh) 2009-12-31 2009-12-31 冗余数据的自动选择方法、分析器及实现无扰切换的方法

Publications (2)

Publication Number Publication Date
CN101770411A true CN101770411A (zh) 2010-07-07
CN101770411B CN101770411B (zh) 2012-07-04

Family

ID=42503285

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102431947A Active CN101770411B (zh) 2009-12-31 2009-12-31 冗余数据的自动选择方法、分析器及实现无扰切换的方法

Country Status (1)

Country Link
CN (1) CN101770411B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104865904A (zh) * 2014-02-20 2015-08-26 南京南瑞继保电气有限公司 一种面向多周期运算任务的无扰组态方法
CN105938356A (zh) * 2016-01-07 2016-09-14 杭州优稳自动化系统有限公司 Dcs系统中控制模块的硬件冗余及运算节奏同步系统
CN110263223A (zh) * 2019-06-25 2019-09-20 深圳市元征科技股份有限公司 一种数据类型转化方法、装置、设备及介质
CN110597904A (zh) * 2018-05-25 2019-12-20 海能达通信股份有限公司 一种数据同步方法、备机和主机
CN110633176A (zh) * 2019-09-26 2019-12-31 成都星时代宇航科技有限公司 工作系统切换方法、立方星和切换装置
CN110737252A (zh) * 2019-09-27 2020-01-31 南京大学 基于设备选择的智能化工系统
CN112015581A (zh) * 2020-08-28 2020-12-01 沃尔士环控系统工程(深圳)有限公司 一种清灰控制器备用点的冗余替换方法、系统及相关组件
CN118426392A (zh) * 2024-07-04 2024-08-02 北京和利时控制技术有限公司 集散控制系统和工程升级方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100502384C (zh) * 2003-07-02 2009-06-17 西安大唐电信有限公司 一种主备用双机进行tcp连接倒换的方法
CN101604270B (zh) * 2009-07-10 2011-04-06 西安电子科技大学 基于vxworks操作系统的ARINC429通信冗余方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104865904A (zh) * 2014-02-20 2015-08-26 南京南瑞继保电气有限公司 一种面向多周期运算任务的无扰组态方法
CN105938356A (zh) * 2016-01-07 2016-09-14 杭州优稳自动化系统有限公司 Dcs系统中控制模块的硬件冗余及运算节奏同步系统
CN110597904A (zh) * 2018-05-25 2019-12-20 海能达通信股份有限公司 一种数据同步方法、备机和主机
CN110597904B (zh) * 2018-05-25 2023-11-24 海能达通信股份有限公司 一种数据同步方法、备机和主机
CN110263223A (zh) * 2019-06-25 2019-09-20 深圳市元征科技股份有限公司 一种数据类型转化方法、装置、设备及介质
CN110263223B (zh) * 2019-06-25 2023-10-20 深圳市元征科技股份有限公司 一种数据类型转化方法、装置、设备及介质
CN110633176A (zh) * 2019-09-26 2019-12-31 成都星时代宇航科技有限公司 工作系统切换方法、立方星和切换装置
CN110633176B (zh) * 2019-09-26 2023-11-10 成都星时代宇航科技有限公司 工作系统切换方法、立方星和切换装置
CN110737252A (zh) * 2019-09-27 2020-01-31 南京大学 基于设备选择的智能化工系统
CN110737252B (zh) * 2019-09-27 2021-02-23 南京大学 基于设备选择的智能化工系统
CN112015581A (zh) * 2020-08-28 2020-12-01 沃尔士环控系统工程(深圳)有限公司 一种清灰控制器备用点的冗余替换方法、系统及相关组件
CN118426392A (zh) * 2024-07-04 2024-08-02 北京和利时控制技术有限公司 集散控制系统和工程升级方法

Also Published As

Publication number Publication date
CN101770411B (zh) 2012-07-04

Similar Documents

Publication Publication Date Title
CN101770411B (zh) 冗余数据的自动选择方法、分析器及实现无扰切换的方法
CN104679828A (zh) 一种基于规则的电网故障诊断智能系统
Boasson Control systems software
CN102890735B (zh) 稳控装置的策略表和策略搜索匹配的建模方法
CN101872184A (zh) 可编程控制器的顺序控制图编程及控制方法
CN102346671B (zh) 基于可扩展式脚本语言的计算方法
CN101877075A (zh) 一种故障诊断知识获取系统
CN107037795B (zh) 一种工业过程控制工艺引导系统
CN101939728A (zh) 作业网络自动生成装置、方法和程序记录介质
Dai et al. Migration from PLC to IEC 61499 using semantic web technologies
CN105159783A (zh) 一种系统任务分配方法
CN112565336A (zh) 智能物联网集中化控制方法、系统、介质、设备及应用
CN114556241A (zh) 将人工智能(ai)集成到自动化中的可编程逻辑控制器(plc)程序中功能块的ai伴侣
CN100541364C (zh) 基于现场总线通信的可编程逻辑控制方法
WO2024066683A1 (zh) 工业互联网操作系统和产品的处理方法
Kronberger et al. Smart manufacturing and continuous improvement and adaptation of predictive models
Steinegger et al. Automated code generation for programmable logic controllers based on knowledge acquisition from engineering artifacts: Concept and case study
CN109933018A (zh) 一种基于服务组合的动态可重构产线控制系统
CN117350501A (zh) 一种大语言模型驱动的人在回路电网调度系统及方法
da Cunha et al. Hierarchical supervisory control based on discrete event systems with flexible marking
EP3014470A1 (en) Modifying an analytic flow
JP7348103B2 (ja) 運転状態分類システム、および、運転状態分類方法
CN102868220B (zh) 电力调度主站式综合智能防误系统综合令智能分解方法
Yu et al. An engineerable procedure description method for industrial automation
CN114819925B (zh) 基于事件序列分析预测的工业物联网系统及其控制方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20211125

Address after: Room 1613, 6 / F, building 1, yard 2, Desheng Middle Road, Beijing Economic and Technological Development Zone, Daxing District, Beijing 100176

Patentee after: Beijing Helishi Control Technology Co.,Ltd.

Address before: 100096, No. 10, building materials Road, Haidian District, Beijing, Xisanqi

Patentee before: BEIJING HOLLYSYS Co.,Ltd.

TR01 Transfer of patent right