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

文档序号:6585278阅读:842来源:国知局
专利名称:冗余数据的自动选择方法、分析器及实现无扰切换的方法
技术领域
本发明涉及冗余配置系统中冗余数据的自动选择方法,相应分析器,及通过挑选
冗余数据以保证双机切换时实现输出无扰切换的方法、系统。
背景技术
—个简单而典型的冗余配置的分布式控制系统(DCS)应包括工程师站,服务器,操作站,控制站等等,如图l所示。图中的服务器和控制站均为冗余配置,各个通讯网络也采用了冗余配置。 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(Vu,Vi2,…),i = 1,2,... ,n;如Vj不属于AV,则结束对该函数式的处理;如Vj属于AV,则从AV中删除Vj,并继续判断该函数式是否为"存在"状态,如否,结束对该函数式的处理,如为"存在"状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态; 每一次遍历结束后,将AV中的变量合并到0V中,并判断当前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-l个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。 进一步地,所述的冗余数据分析器,其特征在于,所述优化器按以下方式对所述原始集进行寻优 先将关系集中所有函数式置为"存在"状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式; 每一次遍历过程中,对当前的函数式Vj = fi(Vu,Vi2,…),i = 1,2,... ,n;如Vj不属于AV,则结束对该函数式的处理;如Vj属于AV,则从AV中删除Vj,并继续判断该函数式是否为"存在"状态,如否,结束对该函数式的处理,如为"存在"状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态; 每一次遍历结束后,将AV中的变量合并到0V中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。 上述冗余数据自动选择方法和分析器,能够从所有的变量中自动挑选出冗余最优集作为冗余数据,这些冗余数据的值相同时,就能使输出变量在此后保持一致,且挑选出的冗余最优集包含的元素少,占用的软硬件资源少。 本发明要解决的另一技术问题是提供一种实现无扰切换的方法和系统,可以从原始集中自动选择得到较少的冗余变量,主机和备机之间拷贝更新选择的冗余变量的值,能使输出变量在此后任意正整数周期保持双机一致。 为解决这个问题,本发明提供了一种实现无扰切换的方法,应用于采用备份式冗余的计算机控制系统,该方法包括 所述的冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余
将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上,
11所述设备工作时运行所述控制程序; 在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后,双机同时启动控制程序。 进一步地,所述的方法,其特征在于 所述采用备份式冗余的计算机控制系统为分布式控制系统(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)可以是原始集的任意子集,控制站主从机之间的冗余(主机将部分或全部数据拷贝给从机)就是要保证目标集中的变量值在双机切换时可以无扰。从现场控制的角度看,目标集可以由工业控制程序中的输出变量(例如输出变量可能是阀门开度值)组成,当然目标集也可以就是原始集,因此冗余数据分析器将目标集的组成作为程序的输入,这样就保证了目标集设定的灵活性。冗余数据分析器的功能就是根据工业控制程序从原始集中挑选出的子集,将来主从机之间冗余这个子集来实现目标集无扰切换,这个子集称之为冗余最优集(0V)。如果将从原始集挑选出冗余最优集的过程视为对原始集的寻优,那么在寻优过程中每次得到的子集都应满足条件双机之间拷贝更新该子集中冗余变量的值可使目标集中变量的值在此后任意正整数周期运算结束时保持双机一致,该条件就是优化约束条件。冗余最优集是满足优化约束条件且包含元素个数最少的原始集的子集。 显然,冗余数据分析器确定最优集的依据就是工业控制程序,这些程序是由多种编程语言(如ST, LD, CFC, SFC等)编写而成。对于冗余数据分析器而言,从这些语言编写成的源代码开始分析是没有必要的,因为这相当于进行了一部分编译的分析工作,而这个工作是编程器原有的主要工作之一。因此,本实施例在编程器将各种语言编写的工业控制程序转成统一形式的中间代码后,再传送到冗余数据分析器,同时向冗余数据分析器传送原始集和目标集,由冗余数据分析器最终给出冗余最优集。 中间代码可以是一种统一的语法结构,例如树或图。本实施例中,中间代码是编程器和冗余数据分析器约定的一种语法树结构,该语法树结构可以表示各种语言编写的工业控制程序的运算逻辑。编程器将各种语言描述的工业控制程序转成用该结构描述的中间代码,直接保存在内存中交给冗余数据分析器进行分析。工业控制程序的语句到语法树结构的转换是已有的一种做法,这里不再详细进行介绍。在其他例中,中间代码也可以是某种统一的语言,例如C语言、ST语言或CFC语言等等。 图3示出了冗余数据分析器的构成与数据流,如图所示,冗余数据分析器由两部分构成转换器和优化器,其中
13
转换器用于接收控制程序的中间代码,将中间代码转换为包含多个函数式及其顺序信息的关系集(F)并输出到优化器。转换时,按工业控制程序的执行顺序,依照中间代码表示的运算逻辑将中间代码转换为反映变量之间关系的多个函数式。更具体地,是按照所述控制程序的代码的执行顺序,提取出所述代码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息。 关系集是转换器的输出也是优化器的输入,关系集的元素为函数式及其在编程时的逻辑顺序号组成的二元组。该二元组用集合语言可以描述为
F = {(i, fi()) I i = 1,2, ...m} 其中,分量i表示该函数式的顺序号,m是关系集中元素的总个数。转换得到的第i
个函数式fi()可表示为Vj二fi( ,^, ),Vj,Vil,Vi2,…均为原始集中的变量。其中Vj
是转换时从中间代码表示的运算逻辑中提取出的因变量,也可称为函数值变量;Vil,vi2,…
是转换从中间代码表示的运算逻辑中提取出的与因变量Vj相关的所有自变量。也即将每
个因变量及其相关的自变量表示为一个函数式。而函数式的顺序号要保证按该顺序号顺序执行函数式fi()&()f")…和执行工业控制程序对于原始集变量值的变化是等价的。
为了方便理解,下面对关系集的形成进行举例说明。这些例子的输入应是由语法树结构的中间代码来表示,为便于阅读,此处使用c语言进行描述。
0093]假设中间代码如下所示力=/(W0094]例1 :
0095]VAR
0096]a:DINT
0097]b :DINT
0098]c :DINT
0099]d細L
0100]e :DINT
0101]END—VAR
0102]原始集V和目标集AV为0103]V = {a, b, c, d, e};此例中取为AV =0104]中间代码为0105]a := 1 ;
0106]b : = b+1 ;0107]c := a氺2+l+e ;0108]IF e > ==100THEN
0109]d := 0 ;
0110]ELSE
0111 ]d := 1 ;
0112]END—IF
0113]上述运算逻辑可转换为以下函数式0114]a = f! 0
<formula>formula see original document page 15</formula> 因此,关系集F为<formula>formula see original document page 15</formula>
转换器的工作是将中间代码进行转换生成关系集,在上面的例子中可见,对于中间代码中的赋值语句可以直接转换 再例如 a = b+c ;应转换为函数式<formula>formula see original document page 15</formula>
c := a*2+l+e ;应转换为函数式<formula>formula see original document page 15</formula>
c := c+1 ;应转换为函数式<formula>formula see original document page 15</formula> c := 5 ;应转换为函数式<formula>formula see original document page 15</formula> 对于程序结构控制类的语句,例如IF, IF_ELSE, FOR, WHILE, DO_WHILE, SWITCH等
有时要先进行一些预处理,然后再进行转换,例如 IF—ELSE语句的转换 if (e >= 10) { d = 0; } else { d = c; } 再将该运算逻辑转换为函数式d = f (c, e) "F语句的转换 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+1break 5cass 2 :
d = a+bbreak ^C3S6 3 :e = d+1 ;break 5default :d = 0 ;
先将其转换为switch(a+b)
C3S6 1 :
C = d+1 ;
d = d
breakC3S6 2 :
c = c ^d = a+b
break ^
C3S6 3 :c = c ^d = d ;e = d+1break j
default :c = cd = 0
6
6
再将该运算逻辑转换为以下函数式
c = f (a, b, c, d)d = f (a, b, d)e = f (a, b, d, e) WHILE语句的转换:0191] while (a ! = 0)
:0192] {
:0193] b = 5 ;
:0194] a—;
:0195] }
:0196] 该运算逻辑转换为函数式
:0197] b = f(a,b)
:0198] a = f(a)
:01"] D0_WHILE语句的转换
:0200] do
:0201] {
:0202] a = a+1 ;
:0203] i = i+1 ;
:0204] }while(i < 100);
:0205] 先预处理,将该结构转换为基本的循环语句即WHILE语句
:0206] a = a+1 ;
:0207] i = i+1 ;
:0208] while (i < 100)
:0209] {
:0210] a = a+1 ;
:0211] i = i+1 ;
:0212] }
:0213] 再将该运算逻辑转换为以下函数式
:0214] a = f(a)
:0215] i = f (i)
:0216] a = f(a,i)
:0217] i = f(i)
:0218] .FOR语句的转换
:0219] for(i = 0 ;i < a ;i++)
:0220] {
:0221] b = b+1 ;
:0222] c = 7 ;
:0223] } 先预处理,将该结构转换为基本的循环语句即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); 转换工作包含两个算法转换算法和程序控制语句处理算法,二者构成递归调用 关系。 本实施例的中间代码采用语法树形式,每颗语法树对应于一个赋值语句或一个程
18转换算法"的流程如图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,...;
19则以"该因变量=该因变量"的方式在每个分支补充111-1个函数式,补充的函数式的因变量 是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式 与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个 函数式开始进行下次比较。 以两分支为例,如,分支一的第n个函数式为Vj = fi(Vil, vi2,…),分支二的第n
个函数式为v' j = fi(v' n,v' i2,…),则可以将Vj二Vj补充到分支二,作为第n个函
数式,将原来的v' j = fi(v' n,v' i2,…)作为第n+l个函数式,将v' j = v' j补充
到分支一,作为第n+1个函数式,Vj = & (vn, 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二 {Vl,v2,…,vJ,这里Vi是工业控制程序中定义的变量,n是定义的变 量总数。 目标集AV :该集合可以是原始集V的任意子集,即AV G V ,例如可以将AV取为输
出变量集合,双机之间拷贝更新优化器挑选出的冗余数据(0V)就是为了使目标集AV的变
量值在此后任意正整数周期运算结束时保持双机一致。 关系集F :关系集既是优化器的输入,也是转换器的输出。 优化器在对原始集V进行寻优后,产生输出,即冗余最优集(OV) 。 OV是V的满足
优化器约束条件且包含元素个数最少的子集,优化器约束条件即双机之间拷贝更新该子集
中冗余变量的值应使目标集中变量的值在此后任意正整数周期运算结束时保持双机一致。
需要说明一下,虽然OV和AV都是V的子集,但是它们之间没有必然联系。 对于上文中的例l,设AV = V,直观上就能看得出OV = {b,e},也即在双机之间拷
贝更新变量b, e,是目标集AV的变量值在双机切换后任意周期运算结束时保持双机一致的
充分和必要条件。 为清晰描述最优集OV的含义,再举一例
例2 : VAR〃定义变量a, b, c, d, e
e :DINT ;
END—VAR
IF a > = 100
THEN
b:=0;
a:=0;
ELSE
b : = 1 ;
a:=a+l;
END—IF
c:=a*2+l+e;
d : = c-a ; 上述代码在运算逻辑上可转换为函数式 b = f!(a) a = f 2 (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 = f\(a)) , (2, a = f2(a)) , (3, c = f3(a, e)) , (4, d = f4(a, c))}。
直观上就能看得出0V = {a, e} 实际上,优化器的约束条件就是要保证将来在控制站中因为各种原因不同步(运 算周期个数相差较远)时,控制站双机的以下处理过程可以成功达到同步目的
双机不同步->双机停止运算_>拷贝更新冗余数据(最优集OV)-〉双机重新开 始运算_ >达到同步目的经历任意周期的运算后双机目标集AV中的变量应该完全一致。
如果约束条件可以用明确的数学语言进行描述,那么优化器的设计就可以转换成 给出一个有约束的最优化问题的求解算法。为方便进行数学描述,此处先定义一种集合的 运算"有序化Se(S)"(Se是sequence的简写)。如果V是某个变量名集合(记为V = {Vl, v2,…,vJ),则Se(V)也是一个集合,定义为
Se(V)4(^A,…e (变量v,的定义域"
实际Se (V)是V的一个多元组。 有了上述准备工作,现在定义一个由集合X(定义域)到集合Y(值域)的映射Fc, 即Y = Fc (X):
22
X :X = Se (VI)
Y:Y = Se(V2)
其中,V1,V2是原始集V的子集。 Fc (这里的F表示函数function ;c表示约束,constraint):表示将X中的元素x 作为初值,顺序运算表达式4(),&0,…,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 G Z, b G {0, 1}}, Y = Se ({a, b, c, d, e}) = {(a, b, c, d, e) | a, c, d, e G Z, b G {0, 1}} 当集合X的元素为某一值时,例如x = {a, b, c, d} = {100, 1 , 10, 5},经过Y =
Fc(X)作用后,得到Y中的对应元素为y = {a,b,c,d,e} = {0,0, l+e, l+e, e},可见y不唯
一,映射Y二Fc(X)是多值的,因此它不是函数。 但如果取 X = Se ({a, e}) = {(a, e) | a, e G Z}, Y = Se ({a, b, c, d, e}) = {(a, b, c, d, e) | a, c, d, e G Z, b G {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 = Fc° (X) = Y 经过这些准备工作,得到优化器约束条件的一个数学描述最优集0V应满足对 于任意的n(正整数或O),集合X = Se(0V)可使映射Y = Fcn(X)是一个函数,其中Y = Se(AV)。 在以上描述的基础之上,优化器的设计变成了对如下数学问题求解给定优化器 的输入,求一个算法可以求出V的一个子集0V,满足 1、对于任意正整数的n,集合X = Se(0V)可使映射Y = Fcn(X)是一个函数(单值 映射),其中Y = Se(AV)。; 2、满足条件1的情况下,包含元素个数最少。 对于上文中的例2,直观上就能看得出0V = {(a, e) |a, e G Z}。 定理1 :给定输入,优化器的输出0V —定存在。 证明对于任意的正整数n,Se(AV) = Fcn(Se(V)) —定是一个函数,所以V满足约 束条件;又因为V中元素个数是有限的所以包含元素个数最少且满足约束条件的OV—定存 在。 这里需要再说明一下,双机之间拷贝更新最优集OV,应使目标集AV的变量值在此 后任意正整数周期而不是一个周期运算结束时保持双机一致,从问题的数学描述来看,即n是任意正整数,不能限制为n = 1。现举例说明
例3 :如下的关系集
y = f (x)
x = f (a)
i殳AV = {y} 分析如果只要求拷贝更新OV数据的第一个运算周期结束时,AV无扰,那么只要 求0¥= {x}即可,但是从工程逻辑上来看,第二个周期结束时双机的AV变量y的值是否一 致就不确定了。对于这样的工程逻辑,为保证AV变量y无扰,显然需要冗余x, a即OV二 {x, a}。 通过例3,可见双机之间拷贝更最优集0V,应使目标集AV的变量值在此后任意正 整数周期而不是一个周期运算结束时保持双机一致,即在优化问题的数学描述中n应为任 意正整数,不可以将其限制为n = l,否则不能彻底满足无扰切换的要求。
根据以上优化器数学问题描述,本实施例采用如下算法来求解OV,请参照图7所 示的流程 设算法开始时各个集合的状态为
原始集V(优化器输入,已给定);
目标集AV (优化器输入,已给定); 关系集F(优化器输入,已给定,为每个函数式设定一个状态,初始时均为"存在状 态")。
最优集0V (优化器输出,空集);
临时变量集vTempSet (空集)。 用程序结构描述该优化算法如下(该优化算法对应于图7中的流程) 优化算法开始 OV = AV :将AV元素添加到OV中; While (vTempSet与AV包含元素未完全相同) {% 1 清空vTempSet,然后复制AV到vTempSet中; While (由尾至头遍历关系集F) {% 2 if(当前函数式yi = fi(Xn,Xi2,...)中的函数值变量yi属于AV) {&3 在AV中删除变量yi; if (函数式f i的状态为"存在状态") {&4 将该函数式所有自变量Xil, xi2,...按照不重复原则添 加到AV中(即已经属于AV的不再添加); 将函数式&设置为"被删除状态"; } &4 } &3
24
} % 2 0V = 0V+ (AV-OV) 〃将属于AV但不属于OV的元素添加到OV中; } % 1 清空vT卿Set 输出OV 优化算法结束 结束状态 输入原始集V (无变化),目标集AV (有变化),关系集F (包含元素不变但每个元
素状态可能会有变化); 输出最优集OV (有变化); 临时变量集vTempSet (无变化,仍为空集)。 用自然语言描述该优化过程,优化器对原始集进行寻优时,包括如下步骤 先将关系集中所有函数式置为"存在"状态;然后根据输入的原始集V、目标集AV
和关系集F,从尾至头遍历关系集F中的函数式; 每一次遍历过程中,对当前的函数式Vj = fi(Vu,Vi2…),i = 1,2,... ,n ;如、不 属于AV,则结束对该函数式的处理;如Vj属于AV,则从AV中删除Vj,并继续判断该函数式 是否为"存在"状态,如否,结束对该函数式的处理,如为"存在"状态,还要将该函数式所有 自变量合并到当前的AV中并取消该函数式的存在状态; 每一次遍历结束后,将AV中的变量合并到OV中,并判断当前AV中的变量是否与
该次遍历前的相同,如果相同,则将当前的OV作为最优集输出,结束优化,如果不同,以同
样方式继续下一次的遍历。 按例2的情况做一下推演,其中 V = {a, b, c, d, e}; AV可以是V的任何子集,此例中取为AV = V ;
F = {(1, b = f\(a)) , (2, a =
第一次遍历
遍历前的AV = {a, b, c, d, e
对函数式(1 = f4(a, c),因变 为存在状态,a, c在AV已存在,取消d
对函数式c = f3(a, e),因变 为存在状态,a, e在AV已存在,取消c 对函数式a = 4(a),因变量a属于当前AV,从AV中删除a,此时a = f2(a)为存 在状态,自变量a在AV不存在,再加入到AV中,取消a二&(a)的存在状态,处理后的AV = {a, b, e}; 对函数式b = fJa),因变量b属于当前AV,从AV中删除b,此时b = f工(a)为存 在状态,自变量a在AV已存在,取消b = ^ (a)的存在状态,处理后的AV = {a, e};
因此第一次遍历后AV二 (a,eh将属于AV但不属于OV的元素添加到OV中,有OV ={a, e},因此要进行第二次的遍历;
第二次遍历
f2(a)) , (3, c = f,(a, e)) , (4, d = f4(a, c
d属于当前AV,从AV中删除d,此时d二 f4(a, c) f4(a,c)的存在状态,处理后的AV = {a,b,c,e}; c属于当前AV,从AV中删除c,此时c = f3(a, e) f3(a, e)的存在状态,处理后的AV = {a, b, 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 = ^ (a),因变量b不属于当前AV,不做处理; 因此第一次遍历后AV = {e} , e已在0V中存在,因此仍有OV = {a, e},因为AV在 遍历后不同于遍历前,还要进行第三次遍历; 第三次遍历,遍历前AV = {e},所有函数式的因变量都不属于AV,因此均不做处 理,因此遍历后AV不变,结束优化,得到的最终的OV = {a, e}。 将上述冗余数据的自动选择方法应用于采用备份式冗余的计算机控制系统,可以 实现无扰切换,该实现无扰切换的方法包括 按上述冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余 将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上, 所述设备工作时运行所述控制程序; 在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗 余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后, 双机同时启动控制程序。 本实施例中,上述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),上 述控制程序为工业控制程序,上述冗余配置的设备为该DCS系统中采用备份式冗余并运行 所述工业控制程序的控制站;冗余数据的自动选择在工程师站进行,该工程师站将选择得 到的冗余最优集下装到所述控制站。 相应的采用备份式冗余的计算机控制系统包括控制程序的编程设备和控制程序 的执行设备,所述执行设备采用备份式冗余的方式配置,还包括上述冗余数据分析器,其 中 上述编程设备用于确定控制程序中定义的所有变量组成的原始集,主备切换时需 要保证输出无扰的变量组成的目标集,将所述原始集、目标集和控制程序的代码输出到所 述冗余数据分析器; 上述冗余数据分析器还用于将得到的冗余最优集配置到所述执行设备中可作为 主机的每一个设备上; 上述执行设备作为主机时,在双机运算同步的冗余期间暂停运算,将所述冗余最
优集中各个变量的值拷贝给从机,拷贝结束后,与备机同时启动所述控制程序; 上述执行设备作为备机时,在双机运算同步的冗余期间暂停运算,根据从主机拷
贝的所述冗余最优集中各个变量的值更新自己内存中的这些变量的值,拷贝结束后,与主
机同时启动所述控制程序。 本实施例中,上述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所 述控制程序的编程设备和冗余数据分析器位于该DCS中的工程师站;上述控制程序的执行 设备为该DCS中运行工业控制程序的控制站;冗余数据分析器得到工业控制程序的冗余最
26优集后下装到相应的控制站中。 下面给出上述优化器算法的有效性证明。 为方便描述将主循环While (vTempSet与AV包含元素未完全相同){}记为"% 1 循环"。为便于研究算法,需要将"% l循环"变为While (1){},即将其变为死循环(为叙述 方便,以下记为"% 1(1)循环")来研究各个集合的变化。 因为集合V,AV,F,OV,vTempSet中元素个数都是有限的,且无重数(详见)。因此 不妨设 " % ! (D循环"执行的次数为0或i (i属于正整数,如无特别说明i取值范围均如 此); V集合元素个数为n,F集合元素个数为m,设第i个循环周期结束时F集合"存在 状态"元素构成的子集是巳(i),元素个数为mli ;F集合"被删除状态"元素构成的子集是 F2 (i),元素个数为m2i (补充定义F! (0) = F, F2 (0)=空集,ml。 = m, m2。 = 0)。
设第1次"% 1(1)循环"结束时的AV集合(记作AV(i))中的元素个数为ki(补充 未开始进入循环时的AV集合AV(O) 二AV,元素个数k。二n),那么第i次"X 1(1)循环"开 始时的vTempSet集合(记作vTempSet (i))满足vTempSet (i) = AV (i-l),且vTempSet (i) 中的元素个数应为gi = k卜!(补充定义vTempSet (0)为空集,g。 = 0)。 注意,以下关系显然成立(i =0,1,2,...)
ki < = nFji) U F2(i) = F, mli+m2i = m(i = 0, 1,2,...) mli > = mli+1, < = m2i+1 (由算法中&4括号间的内容决定)柳3柳+ l), F2(/)^(/ + l)(由算法中&4括号间的内容决定)
优化器核心算法收敛性证明 本小节主要为了证明在优化算法不会出现死循环。首先引理2说明在优化算法 中,某一次"% 1(1)循环"开始前,AV为空集,则本次"X 1循环"结束后,AV仍未空集,即
引理2:对于"% 1(1)循环",若j(0或正整数)满足AV(j)=小,则AV(j+l)= 证明如果"% 1 (1)循环"开始前AV是空集,由算法逻辑显然"&3分支"始终无法 进入,那么本次"% 1(1)循环"结束后,AV不会有任何变化,即仍为空集。 得证。 定理3 : 对于"% 1(1)循环",存在一个有限的I(O或正整数),使vTempSet(I) =AV(I)。 证明 现在分两种情况对上述等价命题进行证明 情况1 (特殊情况)AV是空集(即两个控制器不需要保证任何变量数据实现无扰 切换)
由核心算法可得满足vTempSet(I) = AV(I),显然正确。此时"% 1循环"无法 进入,0V是空集, 情况2(—般情况)AV是V的非空子集。此时显然"% l循环"至少要进入一次。
使用反证法证明如下 假设经历任意次(记为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:每次"X 1(1)循环"后只发生若干次(正整数)进入"&3分支"不进入 "&4分支"的情形,则有v7V附/ 5^(/) c ^F0'),同时gi < ki, mli—! = mli, m2i—! = m2i (1)
情形b:每次"X 1(1)循环"后发生若干次(0或正整数)进入"&3分支"不进入 "&4分支"的情形,也发生了若干次(正整数)只进入"&4分支"的情形(记作情形b),则 有 mli—! > mli, m2i—丄< m2i (2) 有了上述AV变化的"必要条件"的分析,可以研究n*m个"% 1循环"的情况,利 用"抽屉原理"将n*m个"% 1"周期分为m个组,每组n个,如下所示
(1,2,…,n)
...... (i氺n+l, i氺n+2, , (i+l)氺n)
...... ((m_l)*n+l, (m_l)*n+2, , m*n) 对于上述各组,或者出现情形a,或者出现情形b。如果某一组的n次循环只出现 情形a,则由(1)显然最迟在该组最后一个"% 1(1)循环"结束时AV成为空集,则由引理 2,下一个"% 1(1)循环"结束后AV仍为空集,这与假设相矛盾。所以每一组(每组有n次 "% l(l)"循环)中至少出现一次情形b,这样总共m组循环后,根据(2)mU二0且m2,二 m。这样关系集F的所有关系式都成为"被删除状态",也就是说,当"% 1 (1)循环"继续进 行时,只能出现情形a 了,那么在如下的第m+l组循环后
(m*n+l, m*n+2, , (m+l)*n) AV必将变为空集,则由引理2,下一个(第(m+l)^+l个)"% 1(1)循环"结束后
AV仍为空集,这与假设相矛盾。 因此假设不成立,原命题正确。 得证。 定理3实际上说明了优化算法一定可以退出"% 1循环",并将退出"% 1循环"时 循环次数I(下同)的上限估计为(m+l)n次,实际上这是一个非常保守的估计,实际循环结 束的次数比这个估计小很多。另外显然可以得到推论4 :满足定理3的I可以取1=0<^ AV是空集;满足定理3的IX)e AV非空。 进一步,还应了解对于"% 1(1)循环",第I+1次及其后的每次循环前后集合AV和
28OV可能会有什么变化?下述引理和定理回答了这个问题,从而可以说明算法导致AV和0V 的变化是"收敛的"。 引理5 :对于"% 1(1)循环"和非空的AV,一定存在J(正整数),满足J《I且 vremp&" J) 2 #0/) 证明:AV非空时,首次出现vT卿Set (J) = AV(J)的"% 1 (1)循环"次数I > 0, 另一方面vTempSet(J) = AV(J)是vrem/7&^/) 3 JrG/)的特殊情况,所以命题显然成立。
得证。 引理5说明对于"% 1(1)循环"和非空的AV,一定存在不大于I的正整数J,使得 第次"% 1(1)循环"前后,AV集合不变或变为原来的真子集。 引理6 :对于"% 1(1)循环"和非空的AV,若正整数J满足vre琴&"J)2 ^fX/),则
必有vr呻&"j+1) 2 +1) 证明 第J次"% 1 (1)循环"开始时各集合为
F丄(J-l) , F2 (J-l) , AV (J—1)(即vT卿Set (J)); 第J次"% 1 (1)循环"结束时(第J+l次"% 1 (1)循环"开始时)各集合为 F丄(J) , F2 (J) , AV (J)(即vT卿Set (J+l)); 第J+l次"% 1(1)循环"结束时各集合为 F丄(J+l) , F2 (J+l) , AV (J+l)(即vT卿Set (J+2))。 对于本命题,这些集合应满足的关系是 AOZ — Dsi^J^S^GZ + l) (6.1)^G/-1)gAG/ —1)+1) (6.2)^rc/—1)2爿H7) (6.3) 这里采用如下证明方法对于第J和第J+l次"% 1 (1)循环"中的子循环"% 2循 环(用于遍历关系集F)",进行"同步"比较证明,目的是最终得到第J和第+1次"% 1(1) 循环"后得到的AV集合满足"F0/)2W07 + 1)。为此,定义第次"% 1(1)循环"中子循环 "% 2循环"在遍历了第p个关系式(从第m个关系式开始向前遍历)后,AV集合记作AV (J)
(P),补充定义: AV(J) (m+l) = AV(J-1) 显然应有AV (J) (1) = AV (J)。
因此原命题 vr,&"J+i)2 <=> k7)2,cz+i) e k;j)(i)2I("i)(1) (6.4) 现在使用数学归纳法来证明^r0/)(1) 3 ^F07 + 1)(1),从而原命题可证。
10首先,对于初始状态显然有^rG/)(w + l)二Jr(/-1)2 ^爿厂0/ + 1)(附+ 1) 2°假设,对于p (满足m+l > = p > 1)时成立^rC/)0) 2」r(J + l)0), 那么对于p-l的情况,AV(J) (p-l)和AV(J+1) (p-l)是AV(J) (p)和AV(J+1) (p) 分别在各自的"% 2循环"中遍历了第p-l关系式后的AV集合,在分别遍第p-l个表达式 之前,根据(6. 1)和(6. 2)(将第J次"X 1(1)循环"中的被遍历前的第p-l个表达式记作 f(J) (P-1)),应有以下几种情况: 2. l°f (J) (p-l)状态是"存在状态",f (J+l) (P-1)是"存在状态";
该情况说明第p-1个关系式的函数值变量不属于AV(J) (p),由假设该函数值变量
也不属于AV(J+1) (p),因此在遍历第p-l个关系式后,两个"X 1(1)循环"(J次和J+l次)
中的AV集合均无变化,所以乂rO/)(P -1) 2 ^ + - l)仍然成立。 2. 2°f (J) (p-1)状态是"存在状态",f (J+l) (p-1)是"被删除状态"; 该情况说明第p-l个关系式的函数值变量一定属于AV(J) (p),那么该函数值变量
可能属于也可能不属于AV(J+1) (p)。 该函数值变量属于AV(J+1) (p)时,因为f (J+l) (p-1)是"被删除状态",所以只进 入"&3分支"不能进入"&4分支",这样遍历完第p-1个关系式后,AV(J+1) (p-1)较AV(J+1) (P)只减少了一个变量;但是AV(J) (p-1)较AV(J) (p)也只减少了同一个变量,同时可能增 加一些新的变量(也可能不增加)。由假设,所以」「0/)(^-1)2 ^「0/-1)(^)仍然成立。
该函数值变量不属于AV(J+1) (p)时,在第J+1次"X 1(1)循环"中无法进入"&3 分支",那么AV(J+1) (p-l) = AV(J+1) (p);另一方面,在第次"% 1(1)循环"中,该函数值 变量属于AV(J) (p),这样将进入"&3分支",该函数值变量将在AV(J) (p)中被删除,然后可 能再添加一些变量(进入"&4分支的话"),得到AV(J) (p-l),由于该函数值变量本来就不 属于AV(J+1) (p-l) = AV(J+1) (p),根据假设JFG/)(P —1)2乂r(J + l)(P-l)仍然成立。
2. 3°f (J) (p-l)状态是"被删除状态",f (J+l) (p-l)是"被删除状态";
该情况不能直接说明第p-l个关系式的函数值变量是否属于AV(J) (p),所以又可 以分为以下三种子情况 2.3."第p-l个关系式的函数值变量不属于AV(J) (p):那么必有该函数值变量也 不属于AV(J+1) (p),则必有 ^ rC -1)=爿2 + l)(P) = + l)O -1) 2. 3. f第p-l个关系式的函数值变量属于AV(J) (p)但函数值变量不属于AV(J+1) (p):那么从AV (J) (p)到AV (J) (p-l)减少了该函数值变量,而AV (J+l) (P) = AV (J+l) (P-1),因为该变量本来就不属于AV(J+1) (p),根据假设,所以^r0/)0-1)2^r07 + l)O-l)成立。 2.3.3。第p-l个关系式的函数值变量属于AV(J)(p)也属于AV(J+l) (p):那么从 AV(J) (p)到AV(J) (p-l)和从AV(J+1) (p)到AV(J+1) (p-l)均只减少了该函数值变量,根据 假设,所以^ r( -1) 2 ^ + - l)成立。 按照数学归纳法的意义JfX/)(l) = JrOZ + l)(l)成立,由(6. 4)原命题得证。
得证。 引理6说明对于"% 1(1)循环"和非空的AV,若第J(正整数)次"% 1(1)循环" 前后,AV集合不变或变为原来的真子集,则第J+l "% 1(1)循环"前后AV集合的变化仍如 此。
定理7(收敛性定理):对于"%1(1)循环",存在一个有限的J(0或正整数)J《1, 满足任取N(0或正整数)> =J时,都有v7^^&《J) 2 ^rO/)。
证明 对于AV是空集的情况,J = 0 ; 对于AV不是空集的情况,引理5和引理6构成了证明这种情况的一个数学归纳 法。
得证。 定理7实际上说明"% 1循环"退出之前,已经保证AV进入到"收敛状态(每次循 环结束时,AV总是不变或者变为原来的真子集)"。如果将"% 1循环"变为"% 1(1)循环", AV(i)形成的一个序列可以通过微积分学中的闭区间套定理(或单调有界收敛定理)中的 方法继续进行研究,由于本主题不再需要进一步的结论,所以本文档不再进行深入论述。
若从某一次起,以后各次"% 1(1)循环"前后,某集合不再变化,本文称之为"饱 和"。有了上述定理和引理,现在可以回答如下问题了,OV集是否可以达到"饱和",如能"饱 和"是否可在"% l循环"退出之前达到 推论8 :对于优化算法,程序在退出"% 1循环"之前,0V集合可以达到"饱和"。
证明 当程序退出时,"% 1循环"已进行到第I次,由定理7, AV集合已经进入到"收敛 状态",在算法中0V集合的变化方式为0V = 0V+ (AV-0V),即将AV中不属于0V的元素添加 到0V中,显然若AV集合已经进入"收敛状态"后,0V将达到"饱和状态"。
得证。 优化器核心算法有效性证明 上文已经给出了优化器算法应满足条件的数学描述,并证明了最优集0V的存在 性。优化器算法应满足 给定优化器的输入,求一个算法可以求出V的一个子集OV,满足如下两个约束条 件 1、对于任意的n(正整数或0),集合X二Se(0V)可使映射Y二Fcn(X)是一个函数, 其中Y = Se(AV)。; 2、满足条件1的情况下,包含元素个数最少。 现证明优化算法的可行性,即需证明当0V = 0V时可以满足上述条件1和2,其中 0V由优化算法得到。为此先给出几个引理或映射Fc的性质,最后证明0V就是所求的最优集。 在优化算法面对的各类工程中,AV包含的元素个数是不确定的,可能是多个,也可 能是1个,甚至理论上也可以是空集。如果能将这些情况都转化为AV只包含一个元素的情 况,那么为以后的证明肯定会带来方便。如果在V中增加一个变量(不妨设为output),并在 F增加一个元素(m+l,output = f(原来AV中的元素)),最后将得到的OV中去掉output, 显然这个0V和对原始问题求得的0V是一致的,即下述引理9成立。 引理9 :映射& = (X) O映射Y。 = Fc。 (X),其中Y。 = Se ({output}) , 0 = FU {(m+l, output = f(原来AV中的元素)))。
显然得证。 映射Fc和关系及F密切相关,不妨认为由F生成的映射Fc()也可记作FcF(),那 么映射Y = Fcn(X)就是:r = ,对这种幂映射进行进一步分析,具有性质10 : 性质10 :对于任意的n (正整数),映射r = F《(X) O映射F = = ,即
它们同时为函数或同时不为函数,其中集合F和G的关系如下
f = {(i, f ()) |i = 1,2,…,m且
f ()是"=/(、,",2,—),它是按照组态逻辑顺序抽象出的第i个数据关系式}
G = {(kXm+i, f ()) I i = 1,2, ...,m;k = 0,l,…,n—l;且
f ()是"=/(、^,2,—),它是按照组态逻辑顺序抽象出的第i个数据关系式}
显然得证。 性质10的物理意义很明显,就是在实际控制中将n(正整数)个周期的IEC运算 的效果等价于一个周期内完成一个新的IEC运算,这个新的IEC运算逻辑是由原IEC运算 逻辑简单重复n次产生的。所以必有映射r = F《(X)和r = (X) = Fce(X洞时为函数或同 时不为函数。 引理ll(函数定义域维数的可扩张性)如果映射Y = FcF(X)是函数,其中X = Se(0V), Y = Se(AV),那么映射J^Fc,(f)也是函数,其中f = &(涼),且有
显然得证。C^G涼。 引理12(函数值域维数的可扩张性)如果映射^ = FcF(X), Y2 = FcF(X)是函 数,其中X = Se(0V), Y丄=Se(AV》,Y2 = Se (AV2),那么映射f = F (X)也是函数,其中 显然得证。 性质13 :如果映射Y丄=FcF (X》和Y2 = FcF (X2)均为函数,其中X! = Se (0V》, Y丄=Se(AV》,X2 = Se(0V2), Y2 = Se (AV2),那么映射Y3 = FcF(X3)也是函数,其中X3 = Se (0V丄U 0V2) , Y3 = Se (AV丄U AV2)。
证明 由引理11 , = FcF (X3)和Y2 = FcF (X3)均是函数;
再由引理12, Y2 = FcF(X3)是函数。
得证。 现在给出一个定义,OV对关系集F的化简集族从头到尾遍历F的所有关系式, 初始时将OV中的元素视为已确定数值的变量,按照集合F中的关系式的先后顺序,对于函 数值y可以确定的关系式改为y = f(),也可以不作任何改动,经过这样一次遍历后,得到 所有可能的关系集组成的集合,称之为OV对关系集F的化简集族,记作/(OF,F),该集族 中的元素称为OV对关系集F的化简集,记作# 。显然也可以定义对关系集f的化简集族 /(尺C^),其中的元素(化简集)可以记为#(2)。......。显然有 引理14 :如果Se(AV) = FcF(Se(0V))是 一 个函数,#e /(F,),那么 &"。 = Fc^(&(OF))也是一个函数 显然得证。 以下算法P实际上是优化算法部分内容("% 2循环")的等价变化与提炼,算法
P可以得到一个化简集,见引理14。 算法P : OV为空,AV已知; AVT卿=AV ; While (由尾至头遍历关系集F) {% 5
if(当前关系式yi = fi(xn,Xi2,...)中的函数值变量yi属于AvTemp) {&6 在AvTemp中删除变量yi ; 将该关系式所有自变量Xil, xi2,...按照无重数原则添加到 AvTemp中(即已经属于AvTemp的不再添加); 将关系式&改为y = fi 0 ;〃与优化算法中的"设置为被删除状态" 有一致性; } &6 } % 5 0V = AvT卿; 得到新的F记为A和0V ; 算法结束。 引理15 :算法P运算后,映射Se(AV) = FcF (Se (0V))是一个函数,且& e/CF,Or) (即F变成了一个0V对关系集F的化简集) 证明由算法P本身的遍历方式以及/(F,OF)的定义,引理结论显然成立。
显然得证。 引理16 :如果Se(AV) = FcF(Se(0V))是 一 个函数,Fe /(F,OF),且映射 &(#1) = /^(&(0。)为关系集^上的一个函数,那么映射&(^1) :Fcp(Se((^ U 0V))是 关系集F上的一个函数。
证明 由,的定义可知在完成Se(AV》二Fcp(Se((^ U 0V))(记为原映射)映射过
程中,由于定义域为Se(0K U 0V),包含了 0V所提供的维数,所以按照f的生成方式可
将部分关系式化简为无自变量形式,显然这样不影响原映射的进行,这样原映射就变为 &0^) = &#(&((^^6^)),由于已知&04。 = 7^(&(0。)是一个函数,由引理ll(函数定
义域维数的可扩张性),&G^^i^(&(OF^OF))是一个函数。 所以Se(AV》=FcF(Se(0V丄U 0V))是关系集F上的一个函数。
得证。 弓|理17 :若Se(AV) =FcF(Se(0V))是 一 个函数,f e/(OF,F), Se^FO-Fc^S^O^))为关系集,上的 一 个函数,那么映射Se(A^ U AV)= FcF(Se(0V丄U 0V))是关系集F上的一个函数。
证明 由引理16, Se(AV》=FcF(Se(0V丄U 0V))是关系集F上的一个函数; 由引理ll(函数定义域维数的可扩张性),Se(AV) 二Fcp(Se((^ U 0V))是关系集
F上的一个函数; 进而 由引理12 (函数值域维数的可扩张性),Se (AV丄U AV) = FcF(Se (0V丄U 0V))是关
系集F上的一个函数。 得证。
若集合AV,关系集F,经过算法P可以得到A和OV,再任取集合AVp关系集A ,经过 算法P得到,尸)和0Vp由引理15和引理17可知,Se(AV! U AV) = FcF(Se(OV! U OV))是一 个函数,且/f显然是一个(0V+0V》对关系集F的化简集,即 引理18 :若集合AV,关系集F,经过算法P可以得到A和0V,再任取集合AV"关系 集& ,经过算法P得到^2)和0Vp那么Se(AVi U AV) = Fcp(Se((^ U 0V))是一个函数且 ^2)e/(C^uOr,F)。
显然得证。
为证明优化算法满足约束条件l,先给出优化算法的一个等价形式算法Q : 算法Q : 算法初始状态
输入原始集V (已给定),目标集AV (已给定),关系集F (已给定,每个关系式均 为"存在状态");
输出最优集0V(空集); 临时变量集vTempSet (空集)。 算法
0V = av :将av元素添加到0V中;〃 以便实现双机立即无扰切换 While (vTempSet与AV包含元素未完全相同) {% 7
释放vTempSet链表,然后复制AV到中vTempSet ; While (由尾至头遍历关系集F) {% 8
if(当前关系式yi = fi(x^Xi2,...)中的函数值变量yi属于AV) {&9
在AV中删除变量yi ;
将该关系式所有自变量Xil, xi2,...按照无重数原则添加到 AV中(即已经属于AV的不再添加); 将关系式4改为y = 4 0 ;〃与优化算法中的"设置为被删除状态" 有一致性;
}&9 } % 8
0V = 0V+(AV-0V):将属于AV但不属于OV的元素添加到OV中; } % 7
释放vTempSet链表 输出OV 算法结束。 结束状态
输入原始集V (无变化),目标集AV (有变化),关系集F (包含元素不变但每个元 素状态可能会有变化);
输出最优集0V(有变化); 临时变量集vTempSet (无变化,仍为空集)。(显然"% 8循环"为算法P) 现证明优化算法满足约束条件1 。 定理19 :优化算法满足约束条件1 。
证明 显然算法Q与优化算法一致,因此问题变为证明算法Q满足约束条件l,这里需要
注意,算法Q的"% 8循环"部分实际上就是算法P。对于AV是空集的情况算法显然成立,
现证明AV非空的情况,即"% 7循环"至少可以被进入一次,设"% 7循环"执行的次数为
i,与收敛性定理推导过程类似"^ 7(1)循环"表示将"% 7循环"变为死循环。(分析对于i = l,显然算法Q得到的OV(巧"此时OV:AV(l))满足Se (AV)=
FcF(Se(BestOV))是一个函数,F变为,也就是说,只要AV(l)中的变量是定值,经过1个周
期的运算后,AV中变量的值就会是唯一的定值,但是第一个周期结束时AV(l)中的变量有
可能变为未知状态,所以需要一个周期结束时AV(l)中的变量也是定值,所以将AV(l)作为
算法Q的"% 8循环"部分的开始,得到AV (2)和巧2),这里 巧)£ /(^ j/①,。&(J K(l)) = &, (&(J F(2)))是一个函数 戶尸E /(J r(2),野)) 根据引理16, Se(AV(l)) = FcF (Se (AV (2) U BestOV))是 一 个函数,即只要 Best0V(2) =AV(2) U BestOV(l)中的变量是定值,那么经过1个周期的运算后,AV(1)的 变量为定值,但是Best0V(2)中不属于AV(l)的部分即BestOV(2)-AV(1)的元素值不确定, 这个差集一定来自于AV(2),依次类推,...,将一直递归下去。事实上只要能证明如下映射 是个函数即可 Se (BestOV) = FcF (Se (BestOV))且爿F £ foe,(9F 。)
这里分两步进行 第一步,用数学归纳法证明以下结论
对于第i次"% 7(1)循环"结束时,F变为 Se(AV(O) U AV(l) U…AV(i-1)) = FcF (Se (Best0V (i)))是 一 个函数且 1°对于i = 1的情况,显然成立。
2°假设,对于i = k时,F变为: Se(AV(O) U AV(l) U…AV(k-1)) = FcF(Se (Best0V (k)))是一个函数
巧"e /(5M0r(",F)那么按照算法Q的逻辑,第k+l次"% 7(1)循环"开始 时,AV = AV (k),对巧"进行算法Q的"% 8循环",得到巧"1)和AV = AV (k+l)(显然 = Fc^) ^ + l)))是一个函数)。 因此,由引理18,得 Se(AV(O) U AV(l) U…AV(k)) = FcF(Se (Best0V(k) U AV(k+l)))是一个函数且
35
有算法Q中的操作"OV = OV+(AV-OV):将属于AV但不属于OV的元素添加到OV 中;"易知BestOV(k+l) = BestOV(k) U AV(k+l),所以 Se(AV(O) U AV(l) U…AV(k)) = FcF(Se (BestOV (k+1)))是一个函数, e /(Bes,Or(A; +1), 。 第二步,依据推论8,芑S 5eWOF(/) = 5erfOr 而lim(」F(0)u ^r(l)u…v4F(/ —1))= lim 5eWOK(/ —1) = SeWOr 上述两个极限状态,只需要在i = J(J的意义参见定理7,收敛性定理)时就可达 到0V状态。 因此,Se (BestOV) = FcF (Se (BestOV))且乂F £ 5sWOF
成立 所以优化算法满足约束条件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,...;则以"该因变量=该因变量"的方式在每个分支补充111-1个函数式,补充的函 数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量, 补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之 后,从第n+m个函数式开始进行下次比较。
8. 如权利要求1所述的自动选择方法,其特征在于,根据所述目标集和关系集对所述 原始集寻优,选择冗余变量的过程包括先将关系集中所有函数式置为"存在"状态;然后根据输入的原始集V、目标集AV和关 系集F,从尾至头遍历关系集F中的函数式;每一次遍历过程中,对当前的函数式Vj = fi(vn,Vi2,…),i = 1,2,... ,n ;如Vj不属 于AV,则结束对该函数式的处理;如Vj属于AV,则从AV中删除Vj,并继续判断该函数式是 否为"存在"状态,如否,结束对该函数式的处理,如为"存在"状态,还要将该函数式所有自 变量合并到当前的AV中并取消该函数式的存在状态;每一次遍历结束后,将AV中的变量合并到0V中,并判断当前AV中的变量是否与该次 遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如 果不同,以同样方式继续下一次的遍历。
9. 一种冗余数据分析器,用于为采用备份式冗余的计算机控制系统选择冗余变量,其 特征在于,包括转换器和优化器,其中所述转换器用于接收控制程序的代码,将所述代码转换为包含多个函数式及其顺序信 息的关系集并输出到优化器,转换时,按照所述控制程序的代码的执行顺序,提取出所述代 码表示的运算逻辑中存在的因变量及与每一因变量相关的所有自变量,将每一因变量及其 自变量表示为反映变量之间关系的一函数式并记录各函数式的顺序信息;所述优化器用于接收控制程序中定义的所有变量组成的原始集,主备切换时需要保证 输出无扰的变量组成的目标集,及所述关系集,根据所述目标集和关系集对所述原始集寻 优,从原始集中选择出满足优化器约束条件且包含元素个数最少的子集作为冗余数据,该 子集称为冗余最优集;该优化器约束条件指主机和备机间拷贝更新所述冗余最优集中变量 的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。
10. 如权利要求9所述的冗余数据分析器,其特征在于,所述转换器包括转换控制单元、代码控制单元、第一转换单元和第二转换单元,其中所述转换控制单元用于控制控制程序的代码的接收和缓存到代码缓存单元,接收完成 后将当前一层设为整个代码的最外层,通知第一转换单元开始转换,该代码包括多条语句 或多个对应于语句的语法结构;所述代码缓存单元用于缓存输入的控制程序的代码;所述第一转换单元用于执行转换算法,依次遍历当前一层的语句或语法结构,对每一 语句或语法结构,如该语句或该语法结构对应的语句为赋值语句,则直接转换为一函数式, 将该函数式及其顺序号添加到所述关系集中;如该语句或该语法结构对应的语句是合法的 程序控制语句,则调用第二转换单元将其转换为函数式;遍历完成后将得到关系集输出到 优化器;所述第二转换单元用于将程序控制语句转换为函数式,转换时按序遍历该程序控制语 句的各个控制分支,对每个控制分支,将当前一层设为该控制分支代码的最外层,调用第一 转换单元对该控制分支的所有语句或对应于语句的语法结构依次进行处理,处理完成后, 根据该程序控制语句的类型将程序控制语句转换为相应的函数式。
11. 如权利要求IO所述的冗余数据分析器,其特征在于所述第一转换单元将赋值语句或对应于赋值语句的语法结构转换为一函数式时,该函 数式的因变量为该赋值语句等号左边的变量,该函数式的自变量应为该赋值语句等号右端 的所有变量,如等号右端没有变量,则该函数式的自变量为空。
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_l个函数式,补充的函数式的因变量是其他分支第n个函数式的因变量且不同于该分支第n个函数式的因变量,补充的函数式与该第n个函数式位置连续且其中每一位置上的函数式的因变量均相同,之后,从第n+m个函数式开始进行下次比较。
15. 如权利要求9所述的冗余数据分析器,其特征在于,所述优化器按以下方式对所述原始集进行寻优先将关系集中所有函数式置为"存在"状态;然后根据输入的原始集V、目标集AV和关系集F,从尾至头遍历关系集F中的函数式;每一次遍历过程中,对当前的函数式Vj = fi(vn,Vi2,…),i = 1,2,... ,n ;如Vj不属于AV,则结束对该函数式的处理;如Vj属于AV,则从AV中删除Vj,并继续判断该函数式是否为"存在"状态,如否,结束对该函数式的处理,如为"存在"状态,还要将该函数式所有自变量合并到当前的AV中并取消该函数式的存在状态;每一次遍历结束后,将AV中的变量合并到0V中,并判断当前AV中的变量是否与该次遍历前的相同,如果相同,则将当前的OV中的变量作为确定的冗余变量输出,结束优化,如果不同,以同样方式继续下一次的遍历。
16. —种实现无扰切换的方法,应用于采用备份式冗余的计算机控制系统,该方法包括按权利要求1至8中任一权利要求所述的冗余数据的自动选择方法选择得到冗余最优集,其中包含一个或多个冗余变量;将所述冗余最优集配置到采用备份式冗余的设备中可作为主机的每一个设备上,所述设备工作时运行所述控制程序;在实现主机和备机的双机运算同步的冗余期间,双机暂停运算,由主机将所述冗余最优集中各个变量的值拷贝给从机,从机更新自己内存中的这些变量的值,拷贝结束后,双机同时启动控制程序。
17. 如权利要求16所述的方法,其特征在于所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序为工业控制程序,所述冗余配置的设备为该DCS系统中采用备份式冗余并运行所述工业控制程序的控制站;所述冗余数据的自动选择在工程师站进行,该工程师站将选择得到的冗余最优集下装到所述控制站。
18. —种采用备份式冗余的计算机控制系统,包括控制程序的编程设备和控制程序的执行设备,所述执行设备采用备份式冗余的方式配置,其特征在于,还包括如权利要求9至15中任一权利要求所述的冗余数据分析器,其中所述编程设备用于确定控制程序中定义的所有变量组成的原始集,主备切换时需要保证输出无扰的变量组成的目标集,将所述原始集、目标集和控制程序的代码输出到所述冗余数据分析器;所述冗余数据分析器还用于将得到的冗余最优集配置到所述执行设备中可作为主机的每一个设备上;所述执行设备作为主机时,在双机运算同步的冗余期间暂停运算,将所述冗余最优集中各个变量的值拷贝给从机,拷贝结束后,与备机同时启动所述控制程序;所述执行设备作为备机时,在双机运算同步的冗余期间暂停运算,根据从主机拷贝的所述冗余最优集中各个变量的值更新g己内存中的这些变量的值,拷贝结束后,与主机同时启动所述控制程序。
19.如权利要求18所述的计算机控制系统,其特征在于所述采用备份式冗余的计算机控制系统为分布式控制系统(DCS),所述控制程序的编程设备和冗余数据分析器位于该DCS中的工程师站;所述控制程序的执行设备为该DCS中运行工业控制程序的控制站;所述冗余数据分析器得到工业控制程序的冗余最优集后,下装到相应的控制站中。
全文摘要
本发明公开了一种冗余数据的自动选择方法、分析器及实现无扰切换的方法,其中冗余数据的自动选择方法包括确定控制程序中定义的所有变量组成的原始集,以及主备切换时需要保证输出无扰的变量组成的目标集,将所述控制程序的代码转换为包含多个函数式及其顺序信息的关系集,提取运算逻辑中的因变量、对应的自变量及对应的函数式,根据所述目标集和关系集对所述原始集寻优,选择出冗余最优集,使主机和备机件拷贝更新冗余最优集中变量的值后,所述目标集中变量的值在此后任意正整数周期运算结束时保持一致。本发明解决了冗余配置系统中从原始集中选择得到较少的冗余变量,这些冗余变量的值相同时,能保证输出变量在此后任意正整数周期保持一致。
文档编号G06F11/14GK101770411SQ20091024319
公开日2010年7月7日 申请日期2009年12月31日 优先权日2009年12月31日
发明者刘立忠 申请人:北京和利时系统工程有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1