CN115398358A - 用于分析可编程逻辑控制器程序的方法 - Google Patents
用于分析可编程逻辑控制器程序的方法 Download PDFInfo
- Publication number
- CN115398358A CN115398358A CN202080098637.2A CN202080098637A CN115398358A CN 115398358 A CN115398358 A CN 115398358A CN 202080098637 A CN202080098637 A CN 202080098637A CN 115398358 A CN115398358 A CN 115398358A
- Authority
- CN
- China
- Prior art keywords
- program
- model
- ast
- iniconf
- prop
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/041—Function-oriented details
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/05—Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/042—Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Automation & Control Theory (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Programmable Controllers (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开了一种PLC程序分析方法,其中,程序(PROG)被转换(TRANS1)成逻辑框架中的程序模型(PMOD),从该程序模型中确定属性(Prop)。与互锁属性(IntProp)相结合的所述属性由自动求解器(SMT)验证。如果属性(Prop)的对置是可满足的,则提供代表模型的输入和内部存储器值的反例(PROOF NOK)。反例(PROOF NOK)被转换为所述模型的错误初始配置(IniConf)。利用所述模型错误初始配置(IniConf)模拟模型的执行(EXE),并且记录所述模型模拟的错误中间配置(AST‑IntConf)直到所述属性违反。所述原始程序(PROG)的错误初始和中间配置(Lad‑IniConf,Lad‑IntConf)是从所述模型的错误初始配置(IniConf)和所述模型模拟的错误中间配置(AST‑IntConf)导出的并且被显示。提供了一种用于执行所述方法的装置。
Description
技术领域
本发明涉及用于分析以IEC 61131-3标准中描述的语言编写的程序的方法和装置。这种程序尤其旨在用于可编程逻辑控制器(PLC)以执行工业系统的控制。
本发明更具体地涉及用于分析、检测和纠正这种PLC程序中的错误的方法和装置。
背景技术
可编程逻辑控制器(PLC)是工业数字计算机,其被用作制造过程的自动化控制器,诸如装配线或机器人设备。
PLC配备了根据输入和内部存储器的值计算输出的软件,因此取代了硬接线继电器、定时器和定序器。标准IEC 61131-3描述了用于对PLC进行编程的不同编程语言,诸如:梯形逻辑(Ladder)、指令列表(IL)、结构化文本(ST)、顺序功能图(SFC)和功能块图(FBD)。特别是,也称为梯形逻辑的梯形图语言是一种用于开发PLC软件的编程语言。该语言使用继电器逻辑硬件的电路图通过图形图表示PLC程序。
软件开发过程的一部分专门用于功能规范。在本发明的公开中,功能规范也称为用户规范。功能规范通常由用自然语言编写的文档组成,并指定程序要做什么。功能规范描述了程序预期执行的功能。然后,使用根据功能规范编写的程序开发软件。
软件开发过程的另一部分专门用于调试。调试包括检查程序是否按照功能规范文档中的给定规范安全运行。在生产环境中实施之前需要进行调试,因为就人员和物质损失以及工厂关闭时间而言,工厂中的程序漏洞(bug)可能非常昂贵。就停机时间以及有时会造成人员和硬件损坏而言,工厂自动化系统中的程序漏洞也可能代价高昂。
为调试程序配置了不同类型的测试。
第一种类型涉及单一测试和集成测试,并且包括检查不同组件的行为和常见交互。这些测试被配置为检测特别是导致运行时间错误的编程错误。
第二种类型的测试与系统测试(也称为功能测试)和验收测试有关,并且包括检测关于程序的功能规范的错误。功能测试评估程序是否符合功能规范中指定的要求被编写。因此,功能测试允许从最终用户的角度并根据业务需求验证程序是否正确和安全地运行。
对程序运行测试的常用方法是模拟方法,它包括设置由初始配置定义的一些测试并在所述测试上执行程序以检查其在这些配置下的行为。该程序通常在工厂的软件模拟中执行。
这种调试方法的主要缺点是它并不详尽且耗时且因此成本高昂。这种非穷举性使得完全不可能保证选定的测试在生产环境中覆盖程序的所有可能执行。在测试阶段之后,程序漏洞可能会保留在程序中,因为唯一的保证是程序不会对测试的配置产生程序漏洞。
模型检验方法包括连续执行要测试的程序模型,而不是程序本身,以节省时间和资源。然而,与执行路径相关的复杂性通常是指数级的,尤其是对于工业应用而言。测试效率受到CPU时间的限制,因此,这种方法仍然不是详尽的。
此外,测试是部分或全部开发并手动运行的,因为需要手动定义至少一些配置来生成和执行所述测试。尽管部分测试生成和执行可以被自动化,但是这种方法的另一个缺点是程序员仍然必须分析测试的输出值,有关该程序漏洞的唯一可用信息是输入和内部存储器的初始配置,这些信息会导致程序漏洞。因此,通常很难理解错误的根本原因,以及为什么所考虑的初始配置会在程序的某个点导致该错误。
这种方法的另一个缺点是程序漏洞可能源于关于功能规范开发测试的方式。
首先,用自然语言编写功能规范是不精确的并且可能是模棱两可的。尽管可能已经出现了用自然语言表达规范的一些标准化方法,但是这种方法可能会在开发人员可能误解规范并编写不相关代码的实现时间并且在测试人员可能会由于对规范的误解导致设置不充分的测试时间产生歧义。
其次,用自然语言编写功能规范是非常耗时的。但是最重要的是,本文档也旨在用于需要阅读和解释它以构建适当功能和认可测试的测试工程师。所有这些阶段都是非常耗时的,因此成本高昂。
第三,这种方法并不详尽,因为使用自然语言产生的歧义可能会在测试开发过程中包含一些未指定的部分。未能提供明确的功能规范增加了基于测试的调试过程中遇到的详尽性问题。无法测试软件的所有可能执行,并且即使成功通过测试,程序漏洞也可能保留在代码中。
已经开发了一些方法来以明确的方式表达功能规范,以便在测试步骤中开发测试而不存在误解的风险。这些方法中的一些基于允许以非常精确和明确的方式表达时间规范的正式方法。然而,这些方法很难操作,特别是对于普通工程师来说,因为逻辑知识通常是适当使用这些方法所必需的。一个示例包括提供预定义规范的模板,诸如要填充空白的自然语言句子。但是,这种方法仅应用于时间规范。时间规范只能用非详尽的形式方法来验证,例如应用于形式模型而不是直接应用于程序的模型检验方法。
本公开的一个目的是提供一种用于详尽地验证可编程逻辑控制器程序的解决方案,该解决方案保证程序的所有可能执行都被覆盖。
发明内容
根据本发明的一个方面,公开了一种可编程逻辑控制器程序分析方法,该可编程逻辑控制器程序分析方法包括以下步骤:
-将可编程逻辑控制器程序类型的原始程序转换为逻辑框架中的程序模型;
-至少基于所述程序模型,将用户规范转换为逻辑框架中的规范模型;
-至少从所述程序模型和预定义的语言形式化来确定与所述原始程序的内部变量有关的一组属性;
-通过自动求解器验证与从规范模型获得的互锁属性相结合的所述一组属性的可满足性,并且如果与所述一组属性的属性的对置是可满足的,则提供代表程序模型的输入的一组反例以及可满足所述属性对置的内部存储器值,或者如果始终满足所述一组属性,则提供其确认;
-将反例转换为所述程序模型的错误初始配置,所述初始配置包括输入和内部存储器的初始值;
-用所述程序模型的错误初始配置模拟程序模型的执行,并从执行开始到所述属性违反,记录所述程序模型模拟的错误中间配置,所述中间配置包括内部存储器的中间值;
-将所述程序模型的错误初始配置和所述程序模型模拟的错误中间配置转换为所述原始程序的错误初始配置和错误中间配置;并且显示所述程序错误初始配置和错误中间配置。
在这些布置下,当违反与程序相关的一个或更多个属性时,就会出现程序漏洞。属性与程序的输入、输出和本地存储器的值有关。本发明允许在模拟环境或真实环境中执行程序之前检测这种违反。该方法包括找到在程序执行期间导致错误的输入和本地存储器的初始值。调试被自动化并被加速。该方法是详尽的,因为它保证如果使用所描述的方法没有发现错误场景,则没有执行配置违反程序属性。实际上,在现有技术中,即使在执行测试期间没有检测到属性违反,也不能保证该属性将在所有可能执行中成立。
更具体地,本发明提供了一种解决方案来明确表达PLC程序的功能规范并完全自动化和加速这种功能规范的验证。
由于规范模型是在一个逻辑框架中表达的,所以对所述一组属性的可满足性的验证与规范模型相结合保证了如果没有发现规范违反,那么没有程序的执行在生产时间违反规范。
然后在可满足性验证步骤中自动验证规范模型。在此验证步骤中使用演绎验证确保如果未发现属性违反,则没有程序的执行会违反功能规范。这种方法是详尽的,与用于验证PLC程序的功能规范的通常基于测试的方法相反,通常基于测试的方法不能测试根据所述功能规范编写的程序的所有可能执行。因此,借助本发明的PLC程序分析方法,可以明确地、完整地、自动地指定和验证PLC程序规范。
该方法涵盖了经验证的PLC程序及其功能规范的所有可能执行。因此,由于获得的初始配置和中间配置,可以在方法的最后步骤中提供有关错误场景的有用信息以及程序代码,以指示在程序执行期间发生此类错误的位置、方式和原因。属性违反得到了准确的解释。计算导致属性违反的初始配置,并记录和检索从初始配置到违反属性的程序点的执行信息,诸如存储器分配。
本发明除了保证PLC程序的执行安全性和合理性之外,还提供了一种验证功能规范的解决方案。该方法检测由程序员在一阶逻辑中表达的运行时间错误或功能规范违反,作为互锁属性。当发现运行时间错误或规范违反时,本发明提供有用的调试信息。根据PLC程序的编程语言,本发明提供关于导致所述运行时间错误或规范违反的初始配置和中间配置的所有执行信息。
如果检测到规范违反,则会显示程序员了解何时以及为何违反规范所需的所有信息。这种信息通常包括导致所述规范违反的存储器的初始值和中间值。
该程序可以在执行期间打印与存储器值相关的附加信息(诸如导致属性违反的初始值和中间值)以及如何修复程序漏洞。因此,该方法允许自动调试,因为不需要人工干预来确定要运行的测试、监督它们的执行和分析它们的结果。
该方法还允许更快的调试,因为它依赖于属性验证,而不是在多个测试配置下连续执行程序来模拟,因为自动模拟的情况对工业规模的复杂程序有限制。因此减少了中央处理单元上的执行时间。通过本发明的PLC程序分析方法,可以在几秒钟内验证典型工业规模的PLC程序。
由于这些配置,提供了一种高效、详尽且快速的工具,其可以安全地减少PLC程序的部署时间,并提高工厂自动化行业对PLC程序的信心。
程序模型最好用可以在数学上证明的一阶逻辑框架表示,因此可用于表示计算问题。此外,一阶逻辑适用于表达从PLC程序模型和相应功能规范得出的属性,与高级逻辑框架相比,一阶逻辑属性的生成更容易自动化。
根据一个实施方式,将用户规范转换为规范模型的步骤包括中间步骤,在中间步骤中,使用功能规范模板和由PLC程序使用的设备的选择来表达用户规范。
用户规范描述了PLC程序预期执行的功能,并且通常在根据所述用户规范开发的PLC程序之前被编写。PLC程序功能通常以自然语言指定,这导致用户规范以非正式语言表达。用户规范转换步骤的这个中间步骤允许以正式语言表达所述用户规范。
这样,从使用功能规范模板表达的用户规范和PLC程序使用的设备选择,在逻辑框架中生成规范模型。PLC程序使用的设备的选择可以从所述程序模型中提供。因此,生成的规范模型与程序模型相关。根据一个实施方式,将原始程序转换为程序模型的步骤包括将所述原始程序表达为抽象语法树的第一中间步骤、以及从所述抽象语法树生成程序模型的第二中间步骤。
这种中间步骤的实现是有利的,因为抽象语法树可以通过其包含的每个元素的属性和注释等信息来增强。所述抽象语法树优选地以诸如OCAML之类的功能语言来描述。抽象语法树还允许存储每个元素在PLC程序中的位置,这对于在程序模型的模拟执行期间检索错误中间配置很有用。
为此,模拟程序模型执行的步骤优选地包括:
-第一中间步骤,将所述程序模型错误初始配置转换为对应于抽象语法树的错误初始配置;
-第二中间步骤,计算具有所述相应初始配置的抽象语法树并检索与抽象语法树对应的内部存储器的中间值。
抽象语法树表示是有利的,因为它允许生成无法通过简单执行PLC程序获得的中间值,诸如连接指令的逻辑门处的值。
根据一个实施方式,将原始程序转换为程序模型的步骤包括静态单一赋值变换的中间步骤。静态单一分配变换优选地应用于抽象语法树表示并且有利于在执行期间跟踪内部存储器值。
根据一个实施方式,在确定所述一组属性的步骤期间,使用狄克斯特拉最弱先验条件演算来计算所述一组属性以确定关于所述一组属性的先验条件,基于其先验条件执行所述一组属性的验证。先验条件是属性固有的基本假设。满足的先验条件意味着该属性被验证并且在其执行期间没有发生错误。
根据一个实施方式,使用可满足性模求解器来验证与互锁属性结合的所述一组谓语的可满足性,该求解器是被配置为解决可满足性模理论问题的自动求解器,该可满足性模理论问题是以一阶逻辑表示为逻辑公式的决策问题。
根据本发明的另一方面,公开了一种包括指令的计算机程序,当这些指令由至少一个处理器运行时,这些指令用于执行如上文所述的方法。
在优选实施方式中,所述计算机程序在演绎程序验证平台上执行。
本发明还旨在提供一种存储根据本发明的计算机程序并且使计算机执行如上定义的方法的步骤的非暂时性计算机可读介质。
根据本发明的另一方面,公开了一种用于执行如前所述的可编程逻辑控制器程序分析方法的装置。在一个实施方式中,这样的装置可以包括处理电路PC(如图7的示例中所示的),处理电路PC包括:
-存储器MEM,其存储上述计算机程序指令、以及可能还有其它数据,诸如临时计算数据,
-处理器PROC,其用于读取存储器MEM的内容并执行根据本发明的方法的步骤,以及
-可能地,输入/输出接口INT,其用于接收/发送数据(通过网络或任何其它链接),以处理/由处理器PROC处理。
附图说明
本发明的其它特征和优点从以非限制性示例的方式给出并且参考比以上论述的图7更多的附图给出的对其实施方式之一的以下详细描述中变得明显,其中:
[图1]
图1示出了在所公开的方法中涉及的一组示例性步骤。
[图2]
图2表示用于实现所公开方法的步骤的图形界面的一部分。
[图3]
图3表示在所公开方法的特定实施方式中的梯形图的示例。
[图4a]
图4a示出了在所公开的方法中涉及的中间步骤的执行结果。
[图4b]
图4b示出了在所公开的方法中涉及的中间步骤的执行结果。
[图5]
图5示出了在所公开的方法中涉及的中间步骤的另一种执行结果。
[图6]
图6示出了作为所公开的方法执行的结果的错误场景。
[图7]
图7示出了用于执行所公开的方法的装置。
具体实施方式
在图中,相同的附图标记表示相同或相似的元件。
图1示出了由参考数字10表示并且在PLC程序演绎验证中涉及的一组示例性步骤。这组步骤表示分析和验证PLC程序的方法的实现的全局架构。
在图1所示的示例中,该方法包括七个步骤。前六个步骤可应用于以任何PLC编程语言编写的PLC程序。第七步骤是根据编写PLC程序的编程语言来实现的。图1表示根据本发明的方法的以下步骤:
·在该方法的第一步骤(TRANS1)中,PLC程序(PROG)被转换为程序模型(PMOD);
·在第二步骤(TRANS2)中,功能规范被转换为规范模型(SMOD)。规范模型(SMOD)以程序模型(PMOD)的逻辑框架表示,并使用规范模板和PLC程序使用的设备的选择来生成。功能规范有利地在图形界面上表达,该图形界面显示用于正式表达所述功能规范的功能规范模板。更准确地说,功能规范模板与PLC程序使用的设备的选择一起被显示在图形界面上;
·在第三步骤(PredT)中,从程序模型(PMOD)、规范模型(SMOD)和预定义的PLC语言形式化生成要验证的属性。
·在方法的第四步骤(SMT)中,使用自动求解器正式证明第三步骤中生成的属性或找到这些属性的反例;
·在第五步骤(TRANSB)中,属性反例(PROOF NOK)—如果有的话—被转换为模型配置,尤其是转换为初始模型配置;
·在第六步骤(EXE)中,模拟PLC程序的执行,以便根据第五步骤中获得的模型的初始配置计算内部存储器的所有中间值。如果在第四步骤中返回的属性反例中提供了所有中间值,则此步骤是可选的;
·在第七步骤(DISP)中,模型中间值被转换回具有中间值信息的PLC程序。当使用的PLC语言是梯形逻辑时,结果以图形方式打印给用户,类似于原始梯形图程序。
该方法的第一步骤(TRANS1)是转换步骤,包括将PLC程序(PROG)转换为程序模型(PMOD)。
所述PLC程序PROG可在以下称为PLC的可编程逻辑控制器上执行。PLC能够存储和执行指令,诸如排序、计时、计数、算术、数据操作和通信,以控制工业机器和过程。以输入和输出连接的形式提供与现场设备的接口电路。
在一个具体实施方式中,PLC程序以梯形逻辑编写,并且梯形图以图解图的形式表示PLC程序的顺序控制逻辑。梯形图语言是模拟继电器逻辑电路图的图形语言,如图3所示,它代表梯形图的示例。梯形逻辑实际上是基于规则的语言。规则(也称为“梯级”)在被一组数据中的条件激活时被实例化。根据所述激活选择一组并且执行属于那些规则的语句。当使用诸如继电器等的机电设备实现时,构成程序的各种规则作为软件的一部分在连续循环中顺序执行。每秒执行多次循环可以实现同时立即执行的效果。梯级以给定的顺序执行,以实现可编程控制器的正确操作。更具体地,梯形图程序可以包括连续执行的一个循环,例如每100毫秒。
梯级输入是逻辑检验器,也称为“触点”。所谓的“触点”可以是指通过集成或外部输入模块从物理设备(诸如,按钮和限位开关)到可编程控制器的物理或硬输入。触点也可以表示内部存储位的状态,这些位可能在程序的其它地方生成。
梯级输出是由“线圈”表示的执行器。“线圈”可以表示操作连接到可编程控制器的某些设备的物理输出,或者可以表示在程序的其它地方使用的内部存储位。每个触点或线圈对应于可编程控制器的存储器中的单个位的状态。这些指令提供了检查存储器中的特定位地址的ON/OFF状态并控制内部输出和外部输出的状态的能力。与机电继电器不同,梯形图程序可以多次引用单个位的状态,相当于具有无限多触点的继电器。
在梯形图中,梯级被构建为连接指令的网络。指令之间的连接表示所述指令之间的逻辑关系。例如,在梯形逻辑中,OR逻辑通过两个触点的并联连接来实现,而AND逻辑通过梯形逻辑作为触点的串联连接来实现。
在第一步骤(TRANS1)中运行的转换是通过实现转换算法来执行的。转换算法使用PLC语言原语的预定义模型化,以将PLC程序(PROG)转换为以逻辑框架表示的程序模型(PMOD)。PLC语言原语由构成PLC逻辑电路的逻辑指令元素组成,诸如由触点表示的逻辑检验器、由线圈表示的执行器、功能块以及更普遍的任何基本或增强的梯形图语言指令。
程序模型(PMOD)最好用一阶逻辑的逻辑框架来表示。一阶逻辑是命题逻辑的扩展,并且考虑命题在世界的局部视图(称为域)中是真还是假。一阶逻辑包括字母表、一阶语言、一组公理和一组推理规则。由于一阶逻辑可以在数学上证明,因此它在表示计算问题时很有用。一阶逻辑包括语法和语义。一阶逻辑的语法是一种用于表达概念的形式语言,一阶逻辑公式的语义确定了任何一阶逻辑公式的值。
鉴于PLC程序的顺序结构,转换仅对循环本身中包含的指令操作。因此,不需要用时序逻辑表达程序模型,因为程序不涉及循环的连续执行。在转换的第一步骤期间,代数数据类型被用于对程序的输入、内部存储器和输出进行建模,而多态类型被用于分解模型原语的数量。
指令的建模在于将它们表示为一阶公式,以表示谓语。谓语基本上是二进制变量和非二进制变量的二进制值函数。可以从这些谓语中获得执行时输入和本地存储器的授权值。指令建模可以与被表示为一阶公式的属性相关联,这些属性表示执行时输入和本地存储器的授权值,即,指令在被执行时不会引发错误的值。这些公式可能与附加信息相关联,例如它们所引用的指令和错误原因。
PLC程序模型(PMOD)是使用包括所述谓语的数学语句生成的。换句话说,PLC程序的目标是用选定数学逻辑中的一组谓语来表达的。这种数学语句的验证确保了程序的计算方法是正确的。这种数学语句的验证清楚地说明了计算方法执行预期计算的原因。这种验证也称为证明,并且确保执行的安全性和与数学语句相关的程序的合理性。如果证明在程序执行期间,没有遇到运行时间错误(诸如,非法访问存储器或溢出、尝试除以0等非法操作或在涉及连续执行循环、像无限循环的终止问题的其它类型程序的情况下),则可以确保执行的安全性。程序合理性也称为功能正确性,并且包括验证程序是否完成了它应该做的事情。
在形式逻辑中,当且仅当系统中可以证明的每个公式对于系统的语义在逻辑上都是有效的时,逻辑系统才具有可靠性。换句话说,当系统的所有定理都是重言式时,系统是合理的。演绎系统的合理性是这样一种属性:在该演绎系统中可证明的任何句子对于该理论所基于的语言的语义理论的所有解释或结构也是正确的。
在优选实施方式中,第一步骤(TRANS1)包括第一中间步骤(AST-TRANS),其中,PLC程序首先被表示为抽象语法树,也称为AST表示或语法树,并且以下简称为首字母缩略词AST。然后,在第二中间步骤(MOD-TRANS)中,从PLC程序的AST表示生成PLC模型。
抽象语法树是用编程语言编写的源代码的抽象语法结构的树表示。树的每个节点表示出现在源代码中的构造,在本实施方式中,该构造是PLC程序。
可以使用AST包含的每个元素的属性和注释等信息来编辑和增强AST。对于PLC程序的源代码,这种编辑和注释是不可能的,因为它意味着改变它。
与PLC程序相比,它的AST并不包含真实语法中出现的每一个细节,而只是包含诸如大括号、分号或括号等的结构和内容相关细节。像if-condition-then表达式这样的句法结构可以通过具有三个分支的单个节点来表示。
由于编译器的连续分析阶段,AST通常包含有关程序的额外信息。用AST表示PLC程序是有利的,因为它允许存储每个元素在PLC程序中的位置,这在该方法的后续步骤中很有用。这个中间步骤也很有趣,因为AST的完整遍历通常允许验证程序的正确性。
在本实施方式中,所述AST表示优选地以诸如OCAML的功能语言来描述。
在优选实施方式中,转换算法包括第三中间步骤,其中静态单一分配变换(SSAT)被用于在程序执行期间跟踪内部存储器值。在诸如PLC语言之类的命令式编程语言中,赋值允许变量在其生命周期和范围内的不同时间保持不同的值。静态单一赋值变换有利于跟踪在每个执行阶段分配的值。为了对用命令式语言编写的程序执行演绎验证,可以实现到函数模型的变换,如果是这样,则可以在模型上执行,尤其是在AST表示上执行,这要归功于静态单一赋值变换。静态单一赋值变换可以被看作是一个链接步骤,它允许将信息添加到模型元素(如代码位置),以便将它们链接到PLC程序元素。因此,可以很容易地执行追溯到原始PLC程序(PROG)。图4b提供了这种静态单一赋值变换的示例,其中,整数D1在模型执行的不同步骤中的值被存储为(d1_1,d1_2,d1_3)的值。这种变换的等价物在图4a的梯形图中表示。
图2示出了用于执行第二步骤的示例性图形界面的摘录。
将用户规范转换为规范模型的第二步骤(TRANS2)有利地通过图形用户界面实现,以用于完全且自动地表达和指定PLC程序的功能规范。由于使用了演绎验证工具,第二步骤允许以详尽的方式表达和指定PLC程序的功能规范。
在特定实施方式中,将用户规范转换为规范模型的第二步骤(TRANS2)在用户表达功能规范时执行。在有利的实施方式中,用户通过图形界面表达功能规范。在通过图形界面输入功能规范时,可以向用户建议基于程序模型的功能规范模板。功能规范的表达变得容易且明确。功能规范模板与PLC程序使用的设备列表一起被有利地建议给用户,因此可用于表达功能规范。在图2中,部分A表示用户可以通过单击选择的设备列表。
与功能规范表达和验证的经典技术相比,此步骤允许以逻辑属性的形式精确地陈述功能规范,这归功于使用向用户提出的模板。结果,规范模型(SMOD)是基于与功能规范相对应的逻辑属性生成的,并且以逻辑框架表示。
在将功能规范转换为规范模型时,给予用户实时反馈。实时反馈以图2的部分B所示的自然语言和图2的部分C所示的梯形图语言给出。这样,用户就能够毫不含糊地表达功能规范。无论原始PLC程序使用何种编程语言,都可以通过梯形图等图形方式给予用户有关表达的功能规格的反馈。
该方法的第三步骤(PredT)包括从PLC程序模型(PMOD)生成属性(Prop)。第三步骤将程序模型(PMOD)与预定义的语言形式化(LForm)相结合,以获得与所述程序模型(PMOD)相关的属性(Prop)。然后,获得关于所述属性的条件(Cond)。
这些属性代表了程序模型执行时执行的操作,并且期望在执行的每个阶段得到验证。它们类似于在每次递归调用时验证循环不变量。所述属性的条件可以分为两类:先验条件和后验条件。
先验条件(PreCond)表示属性(Prop)固有的潜在假设,并且应该在其执行之前进行验证;否则可能会发生错误。更具体地,当调用例程时,假定满足与所述例程属性对应的先验条件,从而验证所述例程属性。
例如,阶乘函数程序包括一个循环,该循环表示对变量执行的递归演算。这种循环的一个先验条件是计算阶乘的变量在循环开始时必须是正整数。
后验条件代表在验证先验条件的情况下调用例程时预期的结果。因此,可以从例程结束时在属性计算时预期的结果中推断出例程属性的先验条件。在循环的情况下,先验条件和后验条件密切相关甚至相似,并形成循环不变量,特别是在涉及连续执行循环的程序中。如果在循环的执行阶段满足后验条件,则保证下一个阶段的先验条件也得到满足。
为此,该第三步骤(PredT)使用狄克斯特拉最弱先验条件演算来计算所述属性并确定与模型属性(Prop)相关的先验条件(PreCond)。图5示出了在第三步骤中生成和计算的属性示例,以获得先验条件。图5的属性可以被解读为:“如果X中存储的值为“ON”/“True”,则D1中存储的值大于0且小于9999”。可以在第三步骤中生成和计算的属性的另一个示例被表示如下:
||X||->(Y1 and(not Y2))or((not Y1)and Y2)
该属性表示“如果X中存储的值是“ON”/“True”,那么输出Y1和Y2中的一个且只有一个具有存储的值“ON”/“True””。
对一阶逻辑属性执行狄克斯特拉(Dijkstra)最弱先验条件演算确保这样的计算是合理的,同时最小化计算出的属性的大小。先验条件提供了每个属性的定义域。这一步确保了证明的合理性,因为满足的先验条件意味着例程属性成立并且在其执行期间没有发生错误。因此,如果满足属性,或者换句话说,所述属性的对置不可满足,则执行相应的PLC程序时不会发生错误。
在有利的实施方式中,其它属性由用户规范(FUNC)表示。用户规范也称为功能规范,并且描述程序的预期行为,即,程序必须执行以满足程序用户所需的功能、以及输入和输出的请求属性。例如,在工业环境中,仅当传感器接收到给定范围内的信号时,才可以请求机械臂操作。用户规范的其它示例包括以下类型的条件:“不应一次激活两个或更多个特定输出”;“如果一个或更多个特定输入被激活,那么一个或更多个特定输出应该/不应该被激活”;“一次只能激活特定输出中的一个输出”。
编写的程序应该符合上述规范;但是,从用户规范推导的计算属性是一项额外的安全措施,因为编写的程序可能包含运行时间错误。这些属性是互锁属性(IntProp),并且是通过在一阶逻辑中表达功能规范获得的。更具体地说,互锁属性(IntProp)是从在第二步骤(TRANS2)中获得的规范模型(SMOD)中获得的。所述互锁属性是与模型的属性一起计算的,作为要满足的附加后验条件。因此,使用狄克斯特拉最弱先验条件演算,先验条件(PreCond)也可以从这些互锁属性中导出。
高级逻辑框架也可用于第一步骤、第二步骤和第三步骤;然而,一阶逻辑通常足以表达源自PLC模型(Prop)和相应功能规范(IntProp)的属性。高级逻辑框架可能会在最终应用程序方面引入不必要的复杂性。此外,与高级逻辑框架相比,一阶逻辑属性的生成更容易自动化。
从功能规格导出的属性的计算确保当模型的属性得到满足时,在执行时间不会发生因违反功能规格而导致的错误。
第三步骤也称为谓语变换,并且最好在演绎程序验证平台(PLAT)上进行计算,该平台包括接收程序模型作为输入并生成各种程序的形式证明的适当工具。第一步骤还优选地在演绎程序验证平台(PLAT)上计算。更具体地说,第一步骤的静态单一赋值变换可以由演绎程序验证平台(PLAT)来执行。指令模型化可以通过外部模型化工具执行,该模型化工具可以包括在所述演绎程序验证平台中下载的库,并且包括PLC语言的预定义模板和模型。在有利的实施方式中,所述平台(PLAT)是WHY3类型的,并且程序模型(PMOD)以WHYML类型的编程语言表达。
该方法的第四步骤(SMT)使用自动求解器,以便正式证明第三步骤中生成的属性,或找到这些属性的反例。如果所述生成的属性总是被满足,或者如果它们的对置不可满足,则所述生成的属性被正式证明。所述属性(Prop)或其对置的可满足性根据其先前定义的先验条件(PreCond)进行评估。
在优选实施方式中,第四步骤由可满足性模理论(SMT)问题的自动定理证明器执行,它可用于证明大量内置逻辑理论及其组合中的一阶公式的有效性或双重地可满足性。这种求解器被配置为解决可满足性模理论问题,这些问题以一阶逻辑表示为逻辑公式的决策问题。SMT问题是SAT问题,其中,命题变量被另一个数学理论的公式代替。更具体地说,SMT问题被表示为一组SMT实例,这些实例是具有附加解释的一阶逻辑中的公式,。
第三步骤中先前使用的演绎程序验证平台一般也包括自动求解器。因此,它也可以用于计算第四步骤。可以优选使用的求解器的示例是CVC4。另一个示例可以是Z3和Alt-Ergo。求解器必须被配置为与平台适当交互以运行证明并提供反例。所述交互包括指示需要证明或反例的模型元素。在所述平台(PLAT)是WHY3的优选实施方式中,需要证明或反例的模型元素可以由WHYML语言的特定函数标记,如图4b所示,带有标签“模型-跟踪”。
解答是关于背景理论被启发式地执行的,并且包括确定SMT实例是否可满足。自动定理证明器有利地包括模型生成能力,这是提供反例的关键特征。从第三步骤获得的属性至少在整数线性算术理论方面得到解决,并且最好是记录、线性实数算术和串的理论。在有利的实施方式中,自动定理证明器基于具有多态类型的一阶逻辑,并且优选地包括内置基本理论,诸如有理数和整数线性算术、数组、元组、记录、归纳数据类型、位向量、串、和未解释函数符号的相等性。在更优选的实施方式中,这种自动定理证明器还包括对量词的支持。
如果在使用SMT求解器计算时满足在第三步骤获得的属性(Prop,IntProp),则由SMT求解器生成代表满足属性的证明的响应(PROOF OK)。然后,确保程序(PROG)的任何指令在生产时间不会出错,和/或用户表达的功能规范(FUNC)对PLC程序(PROG)的所有可能执行成立。因此证明了程序(PROG)的合理性。
否则,如果属性(Prop,IntProp)的对置是可满足的,则求解器会提供该属性的反例。代表所述反例的响应(PROOF NOK)由SMT求解器生成,并且对应于导致不满足所述属性的情况的模型配置。特别是,反例的内容至少涉及初始配置,因为形式证明是基于先验条件(PreCond)评估的。
该方法的第五步骤将获得的属性反例(PROOF NOK)转换(TRANSB)为模型配置,并且更具体地说,转换为初始模型配置。所述模型配置包括模型的输入和内部存储器值。该转换是基于所述预定义语言形式化(LForm)执行的,并且作为程序模型(PMOD)的第三步骤中的属性生成过程的逆来操作。
所获得的属性反例包括对应于初始(IniConf)和中间(IntConf)模型配置的数据,因为程序模型和演绎验证过程是功能性的。所述初始模型配置(IniConf)包括在开始执行程序模型(PMOD)时模型的输入和内部存储器的初始值,这导致不满足所述属性的情况。所述中间模型配置包括在程序模型(PMOD)的执行开始和所述属性不被满足的模型位置之间的内部存储器的中间值。
但是,所述反例并不包含执行过程中产生的所有中间值。例如,可以在PLC程序变量X的执行期间将四个值分配给PLC程序变量X。因此,这四个值被分配给代表变量X的四个中间变量(X1,X2,X3,X4)。获得的反例在某些情况下可能不会返回与所有中间变量(X1,X2、X3、X4)对应的值。
如下详述,克服这种情况的优选方法是从获得的反例中选择初始配置,并通过执行具有从反例中选择的所述初始配置的程序模型(IniConf)来重新计算中间变量(X1,X2,X3,X4)的值。
第六步骤包括模拟PLC程序的执行(EXE),以便从第五步骤中获得的模型的初始配置计算内部存储器的中间值。
在优选实施方式中,第六步骤包括第一中间步骤(AST-TRANSB),其包括将在第五步骤中获得的模型初始配置(IniConf)转换为AST表示的相应初始配置(AST-IniConf),优选地以OCAML语言表达。这种转换可以从AST表示到模型的转换得到,如第一步骤中操作的那样。
第六步骤包括第二中间步骤(AST-SyEx),其包括通过模拟执行引擎用所述相应的初始配置(AST-IniConf)计算AST表示,以便检索和记录AST表示内部存储器的中间值(AST-IntConf)。AST表示执行操作为PLC程序执行的模拟。中间值的收集被执行到发生错误或违反规范的执行点。第六步骤也可以在所述演绎程序验证平台上执行。
AST表示是有利的,因为它允许生成不能通过执行PLC程序获得的中间值。原因之一是在程序模型中,连接指令的逻辑门不被表示为变量。因此,在这些代码位置发生的错误不会在返回的反例中明确说明。在第一步骤中转换时,这些代码位置的值会丢失,并且不在第四步骤提供的反例值中检索到。但是,这些代码位置处的值对于适当解释导致错误的原因至关重要。第六步骤还允许检索在这些代码位置处的值,这归功于已应用单个静态分配的AST表示的执行。
该第六步骤提供模型错误场景,通过这些场景收集导致错误或违反规范的值。模型错误场景基于AST表示配置(AST-IniConf、AST-IntConf)。
第七步骤(DISP)将模型错误场景转换回PLC程序。AST表示配置(AST-IniConf、AST-IntConf)被转换回PLC程序的相应配置。PLC程序分析方法的第七步骤是以语言为中心,并且根据编写PLC程序的编程语言来实现。由于AST中包含的有关原始程序的额外信息(在第一步骤(TRANS1)中生成并在后续步骤的不同过程和转换中保存),该方法能够将错误场景返回给程序员。该信息以程序本身的形式方便地表示,并带有使程序员了解功能规范违反或运行时间错误发生的原因和时间以及如何修复PLC程序的指示。在梯形图编程的特定情况下,这种错误场景的表示可以以图形方式显示。
图6示出了具有二进制值的颜色的错误场景和所述错误场景的整数值的标签。如果PLC程序是用梯形图编程语言编写的,则梯形图程序以图形方式显示,如图6所示,并包含与以下相关的信息:程序中的错误位置;在所述错误之前的执行路径,并且其例如用颜色高亮来指示;从程序执行的开始到错误或违反规范的输入和内部存储器的值。错误场景、连同在第一步骤中添加到程序模型中的错误位置和原因信息提供了与被发现的错误以及如何修复它有关的非常完整的信息。
图7示出了用于执行如前所述的可编程逻辑控制器程序分析方法的装置。在所示实施方式中,这样的装置包括处理电路PC,该处理电路PC包括:
-存储计算机程序的存储器MEM,该计算机程序包括用于执行根据本发明的方法的指令、以及可能还有其它数据,诸如临时计算数据,
-处理器PROC,其用于读取存储器MEM的内容并执行根据本发明的方法的步骤,以及
-可能地,输入/输出接口INT,其用于(通过网络或任何其它链接)接收/发送将被处理/由处理器PROC处理的数据。
Claims (10)
1.一种可编程逻辑控制器程序分析方法,所述可编程逻辑控制器程序分析方法包括以下步骤:
-将可编程逻辑控制器(PLC)程序的类型的原始程序(PROG)转换(TRANS1)为逻辑框架中的程序模型(PMOD);
-至少基于所述程序模型(PMOD),将用户规范转换(TRANS2)为逻辑框架中的规范模型(SMOD);
-至少从所述程序模型(PMOD)和预定义语言形式化确定与所述原始程序的内部变量有关的一组属性(Prop);
-通过自动求解器(SMT)验证与从规范模型(SMOD)获得的与互锁属性(IntProp)关联的所述一组属性(Prop)的可满足性,并且如果所述一组属性(Prop)中的属性(Prop)的对置是能够满足的,则提供代表所述属性(Prop)对置能够满足的程序模型的输入和内部存储器值的一组反例(PROOF NOK),或者如果所述一组属性(Prop)总是满足,则提供所述一组属性的确认(PROOF OK);
-将反例(PROOF NOK)转换为所述程序模型的错误初始配置(IniConf),所述初始配置(IniConf)包括输入和内部存储器的初始值;
-使用所述程序模型的错误初始配置(IniConf)模拟所述程序模型的执行(EXE),并且从执行开始到属性违反,记录所述程序模型模拟的错误中间配置(AST-IntConf),所述中间配置包括内部存储器的中间值;
-将所述程序模型的错误初始配置(IniConf)和所述程序模型模拟的错误中间配置(AST-IntConf)转换为所述原始程序(PROG)的错误初始配置和错误中间配置(Lad-IniConf,Lad-IntConf);并且显示所述程序错误初始配置和错误中间配置(Lad-IniConf,Lad-IntConf)。
2.根据权利要求1所述的可编程逻辑控制器程序分析方法,其中,将用户规范转换(TRANS2)为规范模型(SMOD)的步骤包括中间步骤,在所述中间步骤中,使用功能规范模板和由所述PLC程序使用的设备的选择来表达所述用户规范。
3.根据权利要求1或2所述的可编程逻辑控制器程序分析方法,其中,将所述原始程序(PROG)转换(TRANS1)为所述程序模型(PMOD)的步骤包括:第一中间步骤,将所述原始程序(PROG)表达(AST-TRANS)为抽象语法树(AST);以及第二中间步骤,从所述抽象语法树(AST)生成(MOD-TRANS)所述程序模型(PMOD)。
4.根据权利要求3所述的可编程逻辑控制器程序分析方法,其中,模拟模型执行的步骤包括:
-第一中间步骤(AST-TRANSB),将所述模型错误初始配置(IniConf)转换为与所述抽象语法树对应(AST)的错误初始配置(AST-IniConf);
-第二中间步骤(AST-SyEx),利用对应的初始配置(AST-IniConf)计算所述抽象语法树(AST)并且检索与所述抽象语法树(AST)对应的内部存储器的中间值(AST-IntConf)。
5.根据权利要求1至4中的任一项所述的可编程逻辑控制器程序分析方法,其中,所述程序模型(PMOD)以一阶逻辑框架表示。
6.根据权利要求1至5中的任一项所述的可编程逻辑控制器程序分析方法,其中,将所述原始程序(PROG)转换(TRANS1)为所述程序模型(PMOD)的步骤包括:静态单一赋值变换(SSAT)的中间步骤。
7.根据权利要求1至6中的任一项所述的可编程逻辑控制器程序分析方法,其中,在确定所述一组属性(Prop)的步骤中,使用狄克斯特拉最弱先验条件演算计算所述一组属性(Prop),以确定对所述一组属性(Prop)的先验条件(PreCond),基于所述一组属性的先验条件(PreCond)执行对所述一组属性(Prop)的验证。
8.根据权利要求1至7中的任一项所述的可编程逻辑控制器程序分析方法,其中,使用可满足性模求解器(SMT)来验证与互锁属性关联的所述一组属性的可满足性。
9.一种计算机程序,所述计算机程序包括指令,所述指令用于当这些指令由处理器运行时执行根据权利要求1至8中的任一项所述的方法。
10.一种用于执行根据权利要求1至8中的任一项所述的可编程逻辑控制器程序分析方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP20315085.9A EP3889703B1 (en) | 2020-03-31 | 2020-03-31 | Method and apparatus for expressing and verifying functional specifications of a programmable logic controller program |
EP20315085.9 | 2020-03-31 | ||
PCT/JP2020/049302 WO2021199552A1 (en) | 2020-03-31 | 2020-12-23 | Method for analyzing a programmable logic controller program |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115398358A true CN115398358A (zh) | 2022-11-25 |
Family
ID=70482571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080098637.2A Pending CN115398358A (zh) | 2020-03-31 | 2020-12-23 | 用于分析可编程逻辑控制器程序的方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230030253A1 (zh) |
EP (1) | EP3889703B1 (zh) |
JP (1) | JP7418608B2 (zh) |
CN (1) | CN115398358A (zh) |
WO (1) | WO2021199552A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11906943B2 (en) * | 2021-08-12 | 2024-02-20 | Nozomi Networks Sagl | Method for automatic translation of ladder logic to a SMT-based model checker in a network |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108681503B (zh) * | 2018-03-23 | 2021-10-22 | 杭州电子科技大学 | 可编程控制器程序的安全检查方法、装置和设备 |
CN109032056B (zh) * | 2018-06-13 | 2020-01-10 | 华东师范大学 | 可编程逻辑控制器编程语言转换方法 |
CN110674049B (zh) * | 2019-09-28 | 2023-06-06 | 中电智能科技有限公司 | 一种面向plc逻辑编程的智能形式化验证方法 |
-
2020
- 2020-03-31 EP EP20315085.9A patent/EP3889703B1/en active Active
- 2020-12-23 WO PCT/JP2020/049302 patent/WO2021199552A1/en active Application Filing
- 2020-12-23 CN CN202080098637.2A patent/CN115398358A/zh active Pending
- 2020-12-23 JP JP2022561256A patent/JP7418608B2/ja active Active
- 2020-12-23 US US17/788,625 patent/US20230030253A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230030253A1 (en) | 2023-02-02 |
WO2021199552A1 (en) | 2021-10-07 |
JP7418608B2 (ja) | 2024-01-19 |
JP2023506097A (ja) | 2023-02-14 |
EP3889703A1 (en) | 2021-10-06 |
EP3889703B1 (en) | 2023-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Heitmeyer et al. | Using abstraction and model checking to detect safety violations in requirements specifications | |
Bozzano et al. | The FSAP/NuSMV-SA safety analysis platform | |
US10915422B2 (en) | Automatic setting of multitasking configurations for a code-checking system | |
US9317408B2 (en) | System and method for systematic error injection in generated code | |
JP7204955B2 (ja) | プログラマブルロジックコントローラプログラムを分析する方法、コンピュータプログラム及び装置 | |
US20140214396A1 (en) | Specification properties creation for a visual model of a system | |
He et al. | Model-based verification of PLC programs using Simulink design | |
US11593076B2 (en) | Method for merging architecture data | |
Sinha et al. | Reliability and availability prediction of embedded systems based on environment modeling and simulation | |
US20230030253A1 (en) | Method for analyzing a programmable logic controller program | |
Arcaini et al. | Modeling and analyzing using asms: the landing gear system case study | |
Sülflow et al. | Verification of PLC programs using formal proof techniques | |
US20240103479A1 (en) | Computer implemented method for checking correctness of plc program | |
Bouali et al. | Formal verification for model-based development | |
Burnard et al. | Verifying and validating automatically generated code | |
de Assis Barbosa et al. | On the automatic generation of timed automata models from isa 5.2 diagrams | |
Debbi | Counterexamples in Model Checking-A survey | |
Lahtinen et al. | Verifying large modular systems using iterative abstraction refinement | |
Peixoto et al. | Model-based testing of software for automation systems using heuristics and coverage criterion | |
EP4287027A1 (en) | Method and system for generating test cases for an engineering program | |
Kunze | Automated test case generation for function block diagrams using java path finder and symbolic execution | |
Mitra et al. | Proof of Concept on Application of Formal Methods at different phases of development cycle of Avionics Software A Landscaping | |
Zhao et al. | Toward Reliable Programmable Logic Controller Function Block Diagrams | |
Cousineau et al. | A Methodological Guide for the Validation of Logic Modelling of Ladder Instructions | |
Jeon et al. | Verification of function block diagram through verilog translation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |