用于安全控制的编译器的再验证的制作方法

文档序号:6412134阅读:110来源:国知局
专利名称:用于安全控制的编译器的再验证的制作方法
技术领域
本发明涉及用于工业控制系统的控制语言编译器的再验证。特别地,本发明揭示一种在编译器被用于编译用户编写的程序之后对编译器进行再验证的方法,该程序用于现实世界实体的安全控制。须经编译器编译的用户编写的程序用来在设备中执行,该设备包括向工业控制系统添加安全部件的功能。本发明保证了不会由于编译器代码中的差错而将错误引入该设备中。这种差错例如可能在编译器代码的分发期间产生。差错也可能由于在编译器运行时计算机的存储器中的故障或者存储编译器代码的磁盘上的故障而产生。本发明保证了这样的错误不会被引入现实世界实体的控制中,否则可能会导致伤害人的事故或是造成对环境的破坏。
背景技术
工业控制系统例如应用在制造和加工工业、例如化学工厂、石油生产工厂、精炼厂、纸浆和造纸厂、钢厂以及自动化工厂中。工业控制系统也广泛地应用在电力工业中。这样的工业控制系统可能需要包括或联合添加安全部件的设备。要求额外的、标准工业控制系统提供的安全部件的处理的例子有在近海生产平台上的处理、在核电站中和化学工厂的危险区域的处理。安全部件可以与安全关闭、火灾和/或同样用于火灾和瓦斯探测的报警系统结合使用。
一个包括安全临界功能的工业控制系统的例子在DE19857683“Safetycritical function monitoring of control systems for process control applications hasseparate unit”中描述。该系统具有一个通过若干分散的数据接收器耦合至不同处理器的主控制器总线。
通用计算机系统的使用提出下面的问题,就是用户编写的程序在执行的过程中并不会受编译器代码中的错误影响。
由Alfred V.Aho,Ravi Sethi和Jeffrey D.Ullman编写的并于1988年由Addison-Wesley出版社出版的“CompilersPrinciples,techniques and tools”包括了对通用编译器的检验的讨论。第731页第11.4段“测试和维护”涉及在使用编译器之前依据标准软件测试来检验编译器。书中建议的一种途径是“回归”测试。保持一组测试程序,一旦编译器被修改,就同时用新的和旧的编译器版本来编译测试程序。任何由这两个编译器产生的目标程序中的差异都被报告给编译器编写者。该书进一步指出选择要包含在测试组中的程序是一个困难的问题。
编译技术领域中的现有技术包括用于编译器优化的方法和系统。
US5577253“Analyzing inductive expressions in a multilanguage optimizingcompiler”描述了一种在计算机系统中执行的方法,在该计算机系统中通过普通编译器后端使用归纳变量来执行多个最优化。这个正申请专利的优化技术没有指出后来对编译器的校正。
US6071316“Automated validation and verification of computer software”揭示了一种用于检验已经被编译的源代码执行代码中所有不同路径的方法。这没有涉及到编译器的校正。
在现实世界实体的安全控制领域中遗留的问题是保证用户编写的程序的最高可能的可靠性。
另一个涉及工业控制系统的问题是系统软件分发(例如通过互联网)的复杂性已经导致在编译器软件中发生差错的危险性增加。
发明人已经发现需要保证用于具有对现实世界实体进行安全控制目的的软件的编译器在代码被分发、作为二进制代码被存储或被装载到RAM中时不改变其产生代码的方式。

发明内容
本发明的一个目的是提供一种在编译器被使用之后对其进行再验证的方法,该编译器用来对由用户编写的、用于在工业控制系统中执行安全控制的程序进行编译。
这个以及其它的目的通过本发明依据权利要求1所描述的方法实现。有益的实施方案在从属权利要求中描述。
根据本发明,以控制语言定义的测试程序被编译。通过检验测试程序正确地执行来对编译器进行再验证。生成用于随后的比较用途的第一软件装置。在编译了用户编写的程序之后,编译测试程序。基于测试程序的编译来生成第二软件装置。通过比较第一和第二软件装置,针对在第一和第二次编译之间引入的差错来对编译器进行再验证。如果再验证表明在编译器中没有差错,用户编写的程序就能够在具有用于控制现实世界实体的安全部件的设备中执行。
须经编译器编译的用户编写的程序用来在一个设备中执行,该设备包括向工业控制系统添加安全部件的功能。如上面所述,依据本发明的方法包括示出如何基于一个被编译的测试程序产生第一和第二软件装置的步骤。典型地,在建立一种控制语言的编译器的新版本或修订版时,生成第一软件装置。第一软件装置典型地同现有的编译器代码的版本或修订版相关。该方法包括在用户编写的程序被编译之后生成第二软件装置的步骤。该方法包括通过将第一软件装置和第二软件装置相比较来利用第一和第二软件装置对编译器进行再验证的步骤。第一软件装置和第二软件装置通过使用相同的原理从编译过的测试程序中导出。
本发明有利于保证不会因为编译器代码或者其执行环境中的差错而将错误引入工业控制系统中。这种差错例如可能在编译器代码的分发期间产生,或者差错可能是由计算机存储器中的故障或存储编译器代码的磁盘中故障引起的。编译器代码中的差错也可能由于计算机寄存器、堆栈存储器或是CPU中的错误而出现。
本发明尤其有用的一个特点是它有助于保证这样的错误不会被引入用于现实世界实体的安全控制的设备中,否则这样的错误可能会导致伤害人的事故或造成对环境的破坏。
典型地,用户编写的程序用控制语言来编写,该控制语言例如基于IEC61131-3。
本发明的一个目的是检测编译器代码或是其执行环境中的错误。本发明在编译的任何时候检测编译器代码中的差错,这保证了由所述编译器编译的、安全临界的用户编写的程序的高可靠性。
本发明的进一步的目的是提供一种计算机程序产品,其包括可以被装载到通用计算机或工作站和/或设备的内存中的软件代码装置,其中该计算机程序产品具有执行上述方法中的至少一个步骤的软件装置。
本发明的又一个目的是提供一种计算机程序,其包括计算机代码装置和/或软件代码部分,用于使计算机或处理器执行上述方法中的任意一个步骤。


本发明将结合所附的示意图做进一步的详细阐述。
图1示出了一个包括一个装载有编译器代码的计算机和一个具有安全控制部件的设备的工业控制系统的总体示意图。
图2示出了基于本发明的方法的流程示意图。
图3示出了本发明的一个实施方案的简图,其中在用户编写的程序被编译之后,执行测试程序的编译。编译后的测试程序与该测试程序的前一次编译相比较。
图4示出了本发明的另一实施方案的简图,其中在用户编写的程序被编译之后,执行测试程序的编译。图中示出第二软件装置被下载到一个执行安全控制的设备,在该设备中第二软件装置与第一软件装置相比较。
具体实施例方式
图1示出了具有包括安全部件6b的设备6a的工业控制系统2的示意图。用于现实世界实体10的安全控制的用户编写的程序典型地在工作站5a或通用计算机中进行编译。这种工作站5a或通用计算机通过通信装置3连接到设备6a上。通信装置3基于例如现场总线技术或例如TCP/IP等通信标准。工业控制系统2包括许多不同的设备,例如控制器6c,PLC7,操作员站或处理入口4以及处理输入输出(I/O)8。上述的设备通常可在工业控制系统中以任何数目并且与其他设备联合存在。包括安全部件6b的设备6a可以是例如PLC或控制器的独立设备。安全部件是这样的,以致设备和/或工业控制系统遵循例如在IEC 61508标准中定义的安全完整性水平(SIL)等安全标准。设备也可以包括具有添加到设备中的安全部件的一个或几个软件模块。设备6a经由例如现场总线或处理输入输出(I/O)等通信装置连接到须进行安全控制的现实世界实体10上。现实世界实体的例子是传动装置、仪表、马达、阀门、泵、风扇等等。一个现实世界实体也可以是一组实体或实体的系统。
在处理控制系统2中用于安全应用的设备6a典型地执行用户编写的应用程序,该应用程序是使用源自本领域技术人员熟悉的IEC 61131-3标准的高级语言来描述的。因此,编译器22典型地是一个针对源自IEC 61131-3标准的高级语言的编译器。
以下,将编译器的发行版、版本或修订版都称作编译器。
用于安全控制的编译器的验证典型地在软件工厂中完成。本文中的软件工厂是指一个场所,在那里可利用足够的和验证合格的测试设备以及胜任的人员来执行对编译器的测试和验证。对编译器的验证和相关的测试应当充分。测试应当例如保证编译器22和安全部件符合安全认证的要求。同时,也需要满足其他要求,例如,需要有足够的性能以便在工业控制系统2中执行其他应用程序或程序。对编译器的验证包括验证应用程序是否在用于对现实世界实体进行安全控制的设备中正确地执行。
除了对编译器进行上述验证之外,本发明还公开了建立一个测试程序20,该测试程序20的目的是使用它作为在软件工厂之外编译器22的再验证的输入。测试程序20应当包括用于安全控制应用的控制语言的所有逻辑。在典型的测试程序中使用的定义典型地来自于IEC 61131-3标准。一个优选的测试程序是通过使用所有的语言、所有的函数和所有的语言结构建立的。这是为了保证编译器22在该测试程序的编译期间分析和检查所有的逻辑表达式,该逻辑表达式以后将在用户编写的程序21中使用。
在本发明的一个实施方案中,来自软件工厂的编译器的一个版本或修订版与测试程序相关。该测试程序在软件工厂中在对编译器进行验证时至少部分被使用。用于后来的比较目的的第一软件装置也与编译器的该版本或修订版相关。更有利的是将测试程序连同编译器的发行版、版本和修订版一起分发。
图2表示基于本发明的方法的流程示意图。测试程序20用控制语言定义。该方法包括通过编译器编译11a测试程序的步骤。该方法还进一步包括通过检验测试程序正确地执行来对编译器进行验证的步骤11b。
图2也表示出该方法包括产生第一软件装置12的步骤。第一软件装置依赖于测试程序20的可执行代码。第一软件装置可以有多种实施方案。在一种实施方案中,第一软件装置23包括编译后的测试程序的可执行源代码。在另一种实施方案中,生成第一软件装置12包括校验和和/或循环冗余校验码的计算。在这种实施方案中,校验和和/或循环冗余校验码是利用作为一个输入的编译后的测试程序计算的。下面将循环冗余校验码称为CRC。CRC可以用几种方法计算或得出。例如,CRC的长度可以是16位或32位。16位多项式CRC-CCITT(X16+X12+X5+1)或者16位多项式(X16+X15+X2+1)是适合用在本发明的实施方案中的多项式的例子。一个可被用于计算CRC的32位多项式的例子是(X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1)。上述32位多项式是在以太网标准IEEE802.3中定义的,并且是在本发明的实施方案中使用的优选的多项式。在一种替代的实施方案中,可以使用校验和,例如奇偶校验。
图2表示出基于本发明的方法包括第二次编译13测试程序20的步骤。编译13测试程序20在编译了用户编写的程序21之后完成。在生成12第一软件装置23、35和第二次编译13测试程序20之间的时间滞后典型地是几天或几周。时间滞后可能长达几年。在生成12第一软件装置和第二次编译13测试程序20之间的时间里,编译器代码中可能已出现差错。这种差错可能例如在编译器代码的分发期间产生,或者差错可能是由计算机存储器中的故障或存储编译器代码的磁盘中的故障引起的。编译器代码中的差错也可能是由于计算机寄存器、堆栈存储器或编译器运行的CPU中的错误而出现的。
此外,图2表示出该方法包括基于对测试程序20的第二次编译而生成14第二软件装置24a、31的步骤。生成12第二软件装置24a、31的步骤是基于与先前生成第一软件装置的步骤相同的原理。如同第一软件装置一样,第二软件装置可以有多种实施方案。在一种实施方案中,第二软件装置24a包括编译后的测试程序20的第二次编译的可执行代码。在另一种实施方案中,生成14第二软件装置包括校验和和/或循环冗余校验码的计算。计算校验和和/或循环冗余校验码的替代方法在上面对生成第一软件装置的阐述中更详细地描述了。图3更详细地示出了生成14第二软件装置24a以及之后比较15软件装置的步骤和启动16用户编写的程序26的步骤的概要。图4表示了在本发明的一种替代的实施方案中第二软件装置31被下载到设备6a中。
图2也示出了该方法包括比较15第一软件装置和第二软件装置的步骤。图3示出了在该方法的一种实施方案中比较步骤是由安装有编译器22的相同的工作站5a或通用计算机来完成的。在这种实施方案中,第一软件装置23和第二软件装置24a的比较步骤15可以通过使用由操作系统提供的标准部件来实现。
在另一实施方案中,比较步骤15是由设备6a完成的。图4示出了这种实施方案的概要。在这种实施方案中,优选的是第一软件装置35应同系统软件一起被下载到设备6a中。图4表示出在测试程序20的第二次编译之前第一软件装置35一般已经被下载到设备6a中。第二软件装置31结合用户编写的程序的成功编译26被下载34。
在本发明的一种实施方案中,对软件装置的比较15包括对暗示值的比较-并且不在计算中包括暗示的值之间进行比较。在后面的情况中,值将会是0,并且0和0之间的比较可能导致所存储的计算被置于某些或全部的位被保持在0的存储器中,并且该比较可能得出无效的结果。这就是为什么非零值(例如暗示值)之间的比较会产生更高的发现错误的几率。
在本发明的一种替代的实施方案中,编译测试程序13、产生14第二软件装置以及比较15第一和第一软件装置的步骤被重复许多次。在这种替代的实施方案中,为了产生第一和第二软件装置的变化,可使用一个附加的数据源。这种实施方案的一个例子是,产生第二软件装置的步骤包括结合一个和第二软件装置一起随时间变化的变量的附加步骤。随时间变化的变量典型地与测试程序的第二次编译相关。在相同的替代的实施方案中,比较步骤可包括下载随时间变化的变量的附加步骤。有利的是使用日期和时间标记。在根据图4的一种实施方案中,日期和时间标记被下载到设备6a中并且将该日期和时间标记与第一软件装置35相结合。使用随时间变化的变量、例如日期和时间标记的优点是,随时间产生第一和第二软件装置的变化。这种变化消除了以下可能性,即在下载期间下载链路中的一个单元存储第二软件装置以及在随后的下载期间将该第二软件装置代替其接收的新的第二软件装置发送出去。
图2也表示出该方法包括使编译后的用户编写的程序26能够在具有用于控制现实世界实体10的安全部件的设备6a中执行的步骤16。该方法的该使能步骤是在假设在先前步骤中没有检测到差错的情况下完成的。
依据本发明的方法至少是部分地在包含在一个计算机程序存储设备中的一组计算机可读指令的控制下执行的。
本发明也公开了一种用于在工业控制系统2中的安全控制的计算机程序产品5b。计算机程序产品5b包括在根据上述的方法对编译器进行再验证之后使用户编写的程序能够执行的功能。此外,计算机产品包括用于执行进一步的操作来接收通过互联网1发送的、包括第一软件装置35的信号的软件装置。
本发明也公开了一种计算机程序,其包括用于使计算机或处理器执行上述方法中任一步骤的计算机代码装置。
本发明的前述公开内容和描述是示例性的和解释性的,在部件、处理和计算步骤以及程序、以及示意性电路和操作方法的细节方面都可以在不背离本发明的精神的情况下作出改变。
权利要求
1.一种在编译器(22)已被使用之后对其进行再验证的方法,该编译器用来编译由用户编写的、用于在工业控制系统(2)中执行安全控制的程序,该方法包括以下步骤-第一次编译(11a)一个测试程序(20),该测试程序以一种控制语言定义;-通过检验该测试程序正确地执行来对编译器进行验证(11b);其特征在于,还包括以下步骤-生成(12)源自编译后的测试程序、用于后面的比较的第一软件装置;-在编译了用户编写的程序之后第二次编译(13)该测试程序;-基于该测试程序的第二次编译生成(14)用于比较的第二软件装置;-比较(15)第一软件装置和第二软件装置;其中针对在第一和第二次编译之间引入的任何差错对编译器(22)进行再验证;-假设再验证表明编译器(22)中没有差错,则使编译后的用户编写的程序能够在具有用于控制现实世界实体(10)的安全部件的设备(6a)中执行(16)。
2.如权利要求1的方法,其特征在于,所述比较步骤(15)在编译器(22)在其中执行的相同的工作站(5a)或通用计算机中执行。
3.如权利要求1的方法,其特征在于,所述软件装置是校验和或循环冗余校验码。
4.如权利要求3的方法,其特征在于,所述比较步骤(15)在具有安全部件的设备(6a)中执行。
5.如权利要求4的方法,其特征在于,所述比较步骤(15)包括下载随时间变化的变量的附加步骤,该变量与校验和或代码在相同的消息中被下载到设备(6a)中,其中随时间变化的变量被用来实现消息的变化。
6.如权利要求1的方法,其特征在于,所述测试程序(20)是以源自IEC6-1131标准的控制语言来定义的。
7.一种包括软件代码装置的计算机程序产品(5b),该软件代码装置可以被装载到通用计算机或工作站(5a)和/或设备(6a)的内存中,其特征在于,所述的计算机程序产品具有装置,用于执行由计算机实现的第二次编译(13)测试程序的步骤、由计算机实现的生成第二软件装置(14)的步骤、由计算机实现的比较(15)第一软件装置和第二软件装置的步骤以及由计算机实现的使用户编写的程序能够在设备(6a)中执行的步骤(16),所有如权利要求1的步骤。
8.一种如权利要求7的计算机程序产品(5b),包括用于执行进一步的操作的软件装置,以便-接收通过互联网(1)发送的、包括第一软件装置(35)的信号。
9.一种计算机程序,包括用于使计算机或处理器执行权利要求1-6中任一步骤的代码装置和/或软件代码部分。
全文摘要
本发明涉及在用于工业控制系统的控制语言编译器每次被使用之后该编译器的再验证。特别地,本发明揭示了一种用于对编译用户编写的程序的编译器进行再验证的方法,该用户编写的程序用于现实世界实体的安全控制。须经编译器编译的用户编写的程序用来在装置中执行,该装置包括向工业控制系统中添加安全部件的功能。本发明保证了不会由于编译器代码中的差错而将错误引入该装置。这种差错可能例如在编译器代码的分发期间产生,或者由计算机的存储器中的故障或者存储编译器代码的磁盘上的故障引起。因此,本发明保证了这样的错误不会被引入到现实世界实体的控制中,否则这样的错误可能会导致伤害人的事故或是造成对环境的破坏。
文档编号G06F9/45GK1666178SQ03815234
公开日2005年9月7日 申请日期2003年6月27日 优先权日2002年6月28日
发明者A·奥佩姆, M·贡马克, K·汉森 申请人:Abb股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1