用于检查代码等价性的方法与流程

文档序号:13426419
用于检查代码等价性的方法与流程

本发明涉及一种用于检查安全控制系统的两个软件的功能等价性的方法。本发明涉及具有从功能块图自动产生的源代码的控制系统。本发明还涉及永久计算机可读储存器件。本发明还涉及永久计算机可读储存介质。本发明还涉及计算机程序产品、系统和计算机。



背景技术:

为了核电站或其他安全至上系统的安全操作和可靠操作,电力和控制系统是至关重要的,尤其是安全仪表&控制(I&C)系统。对于可能具有多个冗余分区的给定数字安全I&C系统和允许系统工程师在多个后续版本中使用FBD(功能块图)来指定软件的工程系统,需要为每个冗余分区和为每个版本确认软件,直到满足全部接收标准为止。

如果考虑到将存在相当大的相似性:一些FBD在不同的冗余分区中将基本上相同,只有一些FBD将从一个版本变到下一版本,则确认每个冗余分区和每个版本的开销相当大。对FBD的手动修改(在不同冗余分区上或者从一个版本到另一版本)具有以如下方式改变所产生的代码的趋势:该方式放大了这些版本之间的所产生的代码中的差异。这使得通常不可能准确找出所产生的代码中的差异。

迄今为止,全部FBD都必须经历验证和确认(V&V)行为,即使其功能未改变。在应用软件的开发或验证和确认期间,为了省略对功能上等价FBD的确认行为的冗余验证,可能会出现任务以验证两个FBD是功能上等价的。对此任务的需求可能是由识别不同冗余中实现相同功能的功能块图的需求或识别在应用的不同版本之间已经改变的功能块图的需求而引起的。

为了判断一个图是否实现与另一图相同的功能,这两个图的源代码的简单逐行区分可能引起很多误报。这是因为代码发生器在产生用于功能块图的源代码时具有若干自由度。在范围从对符号的不同标识符上至功能块调用的不同顺序化的源代码中可能存在差异。然而,即使存在这些差异,功能块图的功能(即,可观察行为)也可以是相同的。这使得所产生的计算机代码(例如,C代码)的“回译(back-translation)”到工程数据库之内的功能块图非常复杂。

因此本发明的目的是提供一种方法,该方法允许可靠地且精确地确定所产生的两个不同的FBD源代码的等价性。



技术实现要素:

在第一方面中,本发明涉及一种用于检查控制系统(尤其是从具有多个互连功能块的功能块图设计的、基于可编程逻辑控制器的控制系统)的两个软件的功能等价性的方法,所述方法包括以下步骤:

a)借助于遵循第一组顺序化规则的第一代码发生器来从第一多个功能块图产生可编译源代码的第一实例;

b)解析源代码的第一实例并识别全部功能块I/O端口和结点(节点)的组以及数据流的全部功能块I/O端口和结点(弧)之间的全部连接的组;

c)使用来自步骤b)的信息来在上行方向上重建源代码的第一实例的第一数据流图;

d)借助于遵循第一组顺序化规则的第一代码发生器或遵循第二组顺序化规则的第二代码发生器来从第二多个功能块图产生可编译源代码的第二实例;

e)解析源代码的第二实例并识别全部功能块I/O端口和结点(节点)的组以及数据流的全部功能块I/O端口和结点(弧)之间的全部连接的组;

f)使用来自步骤e)的信息来在上行方向上重建源代码的第二实例的第二数据流图;

g)将所述第一识别的数据流图(86)与所述第二识别的数据流图(106)彼此逐个节点地比较,由此检查在所述源代码的第二实例中上至节点的输入的传递闭包是否与在所述源代码的第一实例中相同。

本发明基于以下考虑:从FBD产生的两个源代码的差异的简单比较是不够的,因为可能由于在代码产生中(例如在图中所使用的功能块的顺序化)的自由度而导致很多误报的可能性。因此将期望具有这样的程序:从这些差异中提取但维持基本的信息。

申请人已经认识到两个计算机代码的可靠且精确的比较能够通过从包含流入和流出数据的代码块产生数据图来实现。根据本发明的方法能够可靠地判断两个I&C规格的部分是否保证具有相同的行为,即使他们跨越多个FBD。这通过解析所产生的(C或任何其他正式指定的)代码并在上行方向为每个功能块(FB)传输数据流图来实现。如果全部上行FB是同一类型、具有相同的参数以及通过等价顶点与其他FB或输入信号链接,则他们执行相同的I&C功能。以此方式,可以证明两个比较的FBD组功能上等价。

根据本发明的方法包括将为定向多图的FBD的所产生的代码转变成能够唯一地模拟由FBD实现的功能的定向图。该图的表示按照这样的方式来完成:该方式通过包括全部相关功能特性和上至每个节点的输入的传递闭包来允许对图中的每个节点和每个顶点的唯一识别。这允许对不同FBD的比较以证明他们是否实现相同的功能。

该方法是在计算机上运行的计算机实现的方法,优选地允许用于与其交互,以及优选地连接到用户在其上显示代码比较的结果的显示设备。

在优选的实施例中,在上行方向上构建第一数据图包括识别全部环路,以及用占位符取代他们,使得在环路延迟节点处无限递归停止。

在另一优选的实施例中,在上行方向上构建第二数据图包括识别全部环路,以及用占位符取代他们,使得在环路延迟节点处无限递归停止。

优选地,借助于所述相应的第一代码发生器的第一多个功能块图和/或第二多个功能块图被产生为C计算机语言中的源代码。

优选地,第二组的顺序化规则与第一组的顺序化规则相同。

有利地,第一数据图和/或第二数据图包括以下类型的节点:

-功能块节点,表示功能块的主体;

-功能块端口节点,表示功能块的输入端口或输出端口;

-信号取反器节点,表示对连接在功能块的端口处的模拟信号或二进制信号或其他类型的信号的取反;以及

-信号节点,表示跨图信号或分配给I/O模块的信号。

优选地,功能块节点包括分别作为属性的功能块类型和功能相关设计参数值,以及其中,功能块端口节点包括分别作为属性的端口的方向(功能块的输入或输出)和识别相应的功能块的端口的数字。

优选地,上述的方法应用于例如核电站中的安全控制系统。

有利地,上述的方法应用于包括若干冗余分区的安全控制系统,每个分区运行在至少一个功能块图中指定的至少一个安全功能。

在第二方面中,本发明涉及一种永久计算机可读储存器件,其耦接到计算机且具有储存在其上的指令,当所述指令在所述计算机上运行时,所述指令使能和/或使计算机来执行用于检查控制系统的两个软件的功能等价性的操作,所述操作包括上述的方法。

在第三方面中,本发明涉及一种包含指令的永久计算机可读储存介质,当所述指令被加载至计算机的存储器中并在计算机上运行时,使能和/或使计算机来执行用于检查控制系统的两个软件的功能等价性的操作,所述操作包括上述的方法。

在又一方面中,本发明涉及一种计算机程序产品,其储存在诸如闪存盘、CD、DVD、硬盘的永久计算机可读介质中,且能够被直接加载至计算机的存储器中,包括在计算机上运行时使能和/或使所述计算机来执行上述的方法的软件代码段。

在又一方面中,本发明涉及一种系统,包括:

-至少一个计算器件;

-永久计算机可读储存器件,其耦接到所述计算器件且具有储存在其上的指令,当所述指令在所述计算机上运行时,使能和/或使所述计算机来执行用于检查控制系统的两个软件的功能等价性的操作,所述操作包括上述的方法。

在又一方面中,本发明涉及一种计算机,其包括具有储存在其上的软件代码段的存储器,当所述软件代码段在所述计算机上运行时,使能和/或使计算机来执行上述的方法。

本发明的优点具体如下。相比于处理图形规格,处理所产生的代码是有利的,因为在规定的环境中这更接近于终端产品,且避免了与从图形规格到代码(代码产生)的转化步骤的可靠性相关的问题。另一优点在于相比于通过FB来处理FB(先前的工具已经如此做),能够充分地重建数据流图,因为这捕获了全部输入数据,因此做出声明:“这个软件与那个软件做的一样”100%可靠。

附图说明

通过下面参考附图对其一些优选实施例做出的详细描述,本发明的其它特征和优点将变得更清楚,该优选实施例作为指示给出而非用于限制的目的。

具体地,附图意在提供对本发明的进一步理解,且被并入并构成此说明书的一部分。附图与说明书一起解释本发明的原理。在这些附图中:

图1示出了安全控制系统中的保护功能的示意图;

图2示出了功能块的图以及所产生的此图的源代码中的功能块的两个不同顺序化;

图3示出了使用所产生的FBD源代码的图表示来对所产生的FBD源代码的比较;

图4示出了包括功能块、连接线和信号取反的第一功能块图;

图5示出了模拟图4的功能块图的图的直观表示;

图6示出了包括功能模块和连接线的第二功能块图;以及

图7示出了模拟图6的功能块图的图的直观表示。

具体实施方式

在图1中示出了保护功能的典型结构2。该典型结构2包括在用于核电站的控制系统中的多个冗余中实现的一组I&C功能6、10、14、18。这些功能中的第一个功能6从一个或更多个传感器26接收信号,然后该信号在计算块30中处理。然后计算结果经由安全网络34传递到另一计算块38,在该计算块38中该计算结果被处理成用于控制一个或更多个执行器42的信号。其他功能10、14、18按照相同的方式来实现。

为了实现具有多个冗余的功能,用于功能6、10、14、18的对应的功能块图被实现多次。在典型保护系统中,特定的图必须被实现多达四次以实现这种冗余分区,即使由这些图实现的逻辑是相同的。对于这些功能块图,独立地产生代码,这导致实现等价功能的四个不同源代码。

在该方法的优选实施例中,功能块图通过代码发生器而从工程数据库转变成ANSIC码。为了在所产生的源代码中具有唯一的标识符,一种规格的两个功能块图至少在符号的命名上不同。例如,与功能块图相关的符号包括其名字之内的该图的内部数字ID。此外,所产生的代码中的标识符也能够在一个图的源代码的两个版本之间不同。原因可能是对图自身的改变,以及对互连图的信号的改变。这是由下面的事实引起的:所产生的代码中的标识符可以使用所采用的不能被设计的数据库的内部数据库密钥。一个示例是跨图信号的规格宽的唯一标识符。

下面的例子使用数字图ID(数字99)和数字信号ID(数字1111)示出了功能块图源代码的部分。

两个功能相同的图可以在其源代码方面不同的另一点是功能块调用的顺序化。相同的图可以导致功能块顺序化的不同排列,同时仍是功能等价的(即,具有相同的可观察行为)。例如,在图2中,示出了具有三个不同功能调用A、B和C的非常简单的图50,其在通过代码发生器56转变成源代码时可以产生两个顺序化60、64(其二者正确地实现该图)。在顺序化60中,首先功能A被调用,然后功能B被调用,以及然后功能C被调用。在顺序化64中,首先功能B被调用,然后功能A被调用,以及然后功能C被调用。

下面的例子示出了包含取决于功能块的顺序化的ID的功能块图源代码的部分。

static const fb_123_t locFb_O={...};

static const fb_321_t locFb_1={...};

如果全部顺序化遵守一组给定顺序化规则,则全部顺序化被认为功能上等价。在本实施例中使用的代码发生器产生用于遵从这些规则的功能块图的源代码。在一个功能块图之内的功能块之间的数据交换被严格定义,且使用专门的对象来储存此数据。

功能块图的等价性检查可以用作验证从功能块图产生的代码对输入信号的任意顺序的功能块图上的电路方面完全如指定的那样表现的正式程序,或者用作验证从功能块图产生的一组代码与另一组代码表现完全一样的正式程序。

为了基于其实现的数据流图来比较功能块图,相应的代码被转变成这样的定向图。

在图3中,在转变步骤82中从功能块图产生的第一组三个源代码70、74、78被转变成第一数据流图86。在转变步骤102中从功能块图产生的第二组三个源代码90、94、98被转变成第二数据流图106。在比较步骤110中,比较数据流图86、106。如果他们相同,则断言源代码组70、74、78与源代码组90、94、98的等价性。

在比较两个定向图时,通过定义,如果在两个图中这两个组V(顶点)和A(节点)是相同的,则图是等价的。这样的比较需要每个节点的唯一识别。利用本发明的方法,节点可以通过将节点类型、节点的功能相关特性以及全部节点输入的传递闭包添加到每个节点的识别来唯一地识别。

描述功能块图的逻辑的图优选地包括以下节点类型。

·功能块节点,表示功能块的“主体”;

·功能块端口节点,表示功能块的输入端口或输出端口;

·信号取反器节点,表示对连接在功能块的端口处的模拟信号或二进制信号或其他类型的信号的取反;以及

·信号节点,表示跨图信号或分配给I/O模块的信号。

与被实现的功能相关的功能块图的其他属性被模拟成图的节点的特性。优先考虑下面的属性。

对于功能块节点:

·功能块的类型;

·功能上相关的设计参数值。

对于功能块端口节点:

·端口的方向(输入或输出),

·对相应的功能块的端口的识别。

设计的功能块、功能块图和/或I/O模块之间的数据流通过连接图的节点的定向边沿来模拟。

通过使用上述节点来创建数据流图,他们的特性、功能块图的互连、由功能块实现的功能可以被模拟,且作为结果的图可以通过比较包含的节点和边沿来与其他图进行比较。

图4示出了包含四个功能块124、128、132、136、三个连接线140、144、148以及在块132的上输入处的一个信号取反150的非常简单的功能块图120,块132是ADD块,将经由连接线140从块124传送来的取反信号与经由连接线144从块128传送来的信号相加。

在图5中示出模拟此功能块图120的图的直观表示。方块160、164、168、172仅标记功能块边界,而不模拟图之内的任何节点。方块176表示图4中示出的信号取反150。

图6示出了实现稍微不同逻辑的另一个简图196。该简图包含四个功能块190、194、198、202、三个连接线206、210、214,但是在为ADD块的块198的输入处缺失信号取反。缺失的信号取反为图120与196之间的唯一差异。

在图7中显示对应的图。方块220、224、228、232仅标记功能块边界,而不模拟图之内的任何节点。对包含在图之内的节点的识别必须包括以上命名特性以及节点的输入的传递闭包。下面的示例示出了图7中所示的节点的包括关于节点输入的层级信息的更正式表示。为了更容易读取,示例不包含节点标识符之内的任何其他功能特性。

-A-CONGEN()

-Out1(A-CONGEN())

-A-CONGEN()

-Out1(A-CONGEN())

-In2(Out1(A-CONGEN())))

-In3(Out1(A-CONGEN()))

-ADD(In2(Out1(A-CONGEN()))),In3(Out1(A-CONGEN())))

-Out1(ADD(In2(Out1(A-CONGEN()))),In3(Out1(A-CONGEN()))))

-In1(Out1(ADD(In2(Out1(A-CONGEN()))),In3(Out1(A-CONGEN())))))

-SINK(In1(Out1(ADD(In2(Out1(A-CONGEN()))),In3(Out1(ACONGEN()))))))

将这样的节点表示与全部相关功能特性的组合允许关于使用该节点实现的功能的对每个节点的唯一识别。

注意:观察以上的示例,可以看出两个功能等价节点可能具有绝对正确的相同标识符。对于此示例,这对于两个A-CONGEN功能块和其输出信号是真的。在它们使用不同参数化的情况下,识别将因这些功能参数而不同。

在比较图5和图7的两个图时,包含的节点的组通过缺失取反节点而不同。此外,包含的边沿的组也因缺失节点而不同。基于根据本发明的方法的等价性检查不优先考虑对功能块图的行为无影响的属性,诸如:

·在功能块图上画出功能块的位置和次序,

·如何画出连接线(布线,包括跨图页的连接器),或

·在图的输入和输出区域中跨图信号的位置。

那些是用于功能块图的视觉显示的纯图形属性,且对所产生的代码结构无影响。

使用此方法,功能块图的每个实例能够使用以上列出的功能相关属性来转变成基于唯一数据流的图。通过仅使用针对此转变的功能块图的功能相关属性,可以比较作为结果的图表示。如果两个功能块图的图表示是相同的,则这产生两个功能块图功能上等价的证据。

在比较使用信号互连的多个图时,优选地跨图边界来分析数据流图。这也意味着检测到在图的互连中的差异。当评价功能块图之间的互连时,检查比较的信号是否具有等价的源节点和目标节点。

所实施的方法优选地允许用户定义每组功能块图从哪里读取。这使得用户可以指定一个代码发生目录或两个分离的代码发生目录以用于比较。该方法优选地用于:

·来自应用的一个版本的两组图,例如,用于比较冗余之间的图;

·来自同一应用的两个版本的两组图,例如,用来检查仅引入计划的改变,甚至是

·来自两个不同应用的两组图,例如,用来检查正确地引入复制的图。

在开始比较时,仅当用户明确请求时才优选地处理被标记为可选的属性。默认忽略这些属性。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1