一种基于中间语言的PLC程序验证方法转让专利

申请号 : CN201810667508.5

文献号 : CN109143953B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 史建琦黄滟鸿何积丰李昂蔡方达

申请人 : 华东师范大学上海丰蕾信息科技有限公司

摘要 :

本发明公开了一种基于中间语言的PLC程序验证方法,包括:中间语言转换、迁移系统构造、性质验证以及验证结果处理。其中,所述中间语言转换包括了对梯形图语言、功能块图语言或顺序功能图语言等图形类PLC语言的中间语言转换,结构化文本语言或指令表语言等文本类PLC语言的中间语言转换,以及PLC程序运行环境配置的中间语言转换,并获得统一的中间语言程序。本发明实现了通过统一的中间语言程序,对因在不同运行环境下而具有一种或多种编程语言的PLC程序及其PLC运行环境配置的多种性质验证工作,在提供了一个完整的PLC程序验证方案的同时,大大提高了对PLC程序的验证效率。

权利要求 :

1.一种基于中间语言的PLC程序验证方法,其特征在于,包括:对由一种或多种PLC语言编写的目标程序及其运行环境配置进行中间语言转换,获得对应所述目标程序及其运行环境配置的统一的中间语言程序,所述中间语言为基于CSP通信顺序进行语言进行扩展的ICIL工业控制中间语言;

通过所述中间语言的程序模型定义和操作语义对中间语言程序进行定义,并结合原子谓词以及标记函数构造中间语言程序的迁移系统;

通过多种逻辑模型对所述迁移系统进行性质验证,从而对中间语言程序进行性质验证,得到性质验证结果;

根据所述性质验证结果以及对应的评估标准对所述迁移系统进行评估,对不满足性质验证的中间语言程序给出反例。

2.根据权利要求1所述的PLC程序验证方法,其特征在于,所述一种或多种PLC语言包括:梯形图语言、功能块图语言、顺序功能图语言、结构化文本语言和/或指令表语言。

3.根据权利要求2所述的PLC程序验证方法,其特征在于,对所述梯形图语言、功能块图语言或顺序功能图语言进行的中间语言转换,包括:将由梯形图语言、功能块图语言或顺序功能图语言编写的PLC程序转换为PLCOpen XML文件;

对所述PLCOpen XML文件中的每类元素设计相应的转换规则,从而将由梯形图语言、功能块图语言或顺序功能图语言编写的PLC程序转换为中间语言程序。

4.根据权利要求2所述的PLC程序验证方法,其特征在于,对所述结构化文本语言、指令表语言进行中间语言转换,包括:将由结构化文本语言、指令表语言编写的PLC程序解析为抽象语法树;

对抽象语法树中每一类语法元素设计转换规则,从而将由结构化文本语言、指令表语言编写的PLC程序转换为中间语言程序。

5.根据权利要求1所述的PLC程序验证方法,其特征在于,所述对中间语言程序进行定义包括:对所述中间语言程序的程序模型进行定义;

以及通过操作语义对中间语言程序状态之间的迁移关系进行定义。

6.根据权利要求5所述的PLC程序验证方法,其特征在于,所述中间语言程序模型包括:中间语言程序的程序状态和初始程序状态。

7.根据权利要求6所述的PLC程序验证方法,其特征在于,所述中间语言程序的程序状态包括:中间语言程序的程序状态集合和程序工作集合。

8.根据权利要求1所述的PLC程序验证方法,其特征在于,所述多种逻辑模型包括:时态逻辑、计算树逻辑、霍尔逻辑以及分离逻辑。

9.根据权利要求1所述的PLC程序验证方法,其特征在于,所述对应的评估标准为通过PLC安全评估标准设计的适用于所述性质验证结果的评估标准。

说明书 :

一种基于中间语言的PLC程序验证方法

技术领域

[0001] 本发明涉及程序验证领域,特别是涉及了一种基于中间语言的PLC程序验证方法,用于PLC程序及其运行环境配置的运行进行验证。

背景技术

[0002] 早期的PLC编程中,不同的电气设备提供商,包括西门子、三菱、倍福等厂商都有各自的PLC编程语言规范。这对不同厂商设备之间的PLC程序移植工作造成了巨大困难。1993年,国际电工委员会(International.Electrotechnical.Commission,IEC)颁布了PLC编程的国际标准IEC 61131-3。该标准统一了五种PLC编程语言(梯形图、功能块图、顺序功能图图、结构化文本以及指令表语言)的规范,从而为解决不同设备间的PLC程序的移植问题给出了解决方案。
[0003] 由于PLC编程语言中的五类语言具有不同的特征,因此,为了满足不同PLC编程人群的使用,以及适应不同的PLC应用场景,在现有的PLC程序验证方法中需要针对每种语言设计相应的验证方案,进而对PLC应用程序进行验证。例如,目前已有一些验证方案设计了单类PLC编程语言转换到形式化模型的转换技术,从而将包含单类PLC语言的应用程序转换为形式化建模语言,其中现有的建模语言包括,时间自动机、Petri网、NuSMV输入模型等,并在支持该语言的验证工具中对该程序的性质进行验证。然而,由于针对不同的PLC编程语言需要设计不同的形式化建模语言转换方案,但在实际应用中,一个PLC程序往往包含多种编程语言,因此对PLC程序的验证工作将会耗费大量的转换时间。
[0004] 本发明提出了基于IEC 61131-3中间语言程序的PLC程序验证技术,用于将PLC编程语言统一为统一的中间语言程序,并通过对中间语言程序的验证实现对原PLC程序的验证工作。该方法利用了统一形式的中间语言程序,避免了由中间语言程序向形式化建模语言进行转换的转换工作,而采用对中间语言程序构造迁移系统的方式进行形式化验证工作,大大减少了对PLC程序进行验证的复杂度。

发明内容

[0005] 针对上述内容,本发明公开了一种基于中间语言的PLC程序验证方法,包括:对由一种或多种PLC语言编写的目标程序及其运行环境配置进行中间语言转换,获得对应所述目标程序及其运行环境配置的统一的中间语言程序;对所述中间语言程序进行定义,通过包括所述中间语言程序的定义结果、原子谓词以及标记函数,构造中间语言程序的迁移系统;通过多种逻辑模型对所述迁移系统进行性质验证,从而对中间语言程序进行性质验证,得到性质验证结果;根据所述性质验证结果以及对应的评估标准对所述迁移系统进行评估,对不满足性质验证的中间语言程序给出反例。
[0006] 进一步的,所述一种或多种PLC语言包括:梯形图语言、功能块图语言、顺序功能图语言、结构化文本语言和/或指令表语言。
[0007] 更进一步的,对所述梯形图语言、功能块图语言或顺序功能图语言进行的中间语言转换,包括:将由梯形图语言、功能块图语言或顺序功能图语言编写的PLC程序转换为PLCOpen XML文件;对所述PLCOpen XML文件中的每类元素设计相应的转换规则,从而将由梯形图语言、功能块图语言或顺序功能图语言编写的PLC程序转换为中间语言程序。
[0008] 更进一步的,对所述结构化文本语言、指令表语言进行中间语言转换,包括:将由结构化文本语言、指令表语言编写的PLC程序解析为抽象语法树;对抽象语法树中每一类语法元素设计转换规则,从而将由结构化文本语言、指令表语言编写的PLC程序转换为中间语言程序。
[0009] 进一步的,所述对中间语言程序进行定义包括:对所述中间语言程序的程序模型进行定义;以及通过操作语义对中间语言程序状态之间的迁移关系进行定义。
[0010] 更进一步的,所述中间语言程序模型包括:中间语言程序的程序状态和初始程序状态。
[0011] 更进一步的,所述中间语言程序的程序状态包括:中间语言程序的程序状态集合和程序工作集合。
[0012] 进一步的,所述多种逻辑模型包括:时态逻辑、计算树逻辑、霍尔逻辑以及分离逻辑。
[0013] 进一步的,所述对应的评估标准为通过PLC安全评估标准设计的适用于所述性质验证结果的评估标准。
[0014] 本发明实现了通过统一的中间语言程序,对因在不同运行环境下而具有一种或多种编程语言的PLC程序及其PLC运行环境配置的多种性质验证工作,在提供了一个完整的PLC程序验证方案的同时,大大提高了对PLC程序的验证效率。

附图说明

[0015] 通过阅读下文具体实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出具体实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0016] 图1为本发明的方法流程图。
[0017] 图2为本发明的一种可选实施例交通灯点亮顺序功能图示意图。
[0018] 图3为本发明的一种可选实施例的迁移系统结构示意图。
[0019] 图4为本发明迁移系统安全性质验证第一过程示意图,其中所述迁移系统根据一种可选实施例交通灯点亮顺序功能图的中间语言程序而构造。
[0020] 图5为本发明迁移系统安全性质验证第二过程示意图,其中所述迁移系统根据一种可选实施例交通灯点亮顺序功能图的中间语言程序而构造。

具体实施方式

[0021] 下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0022] 本发明公开了一种基于中间语言的PLC程序验证方法,通过将包括由一种或多种PLC语言编写的目标程序以及PLC运行环境配置转换成统一的中间语言程序,从而利用该中间语言程序对PLC及其运行环境的运行过程进行分析,并给出安全评估结果。本发明做到了通过统一的中间语言程序,对因在不同运行环境下而具有一种或多种编程语言的PLC程序以及PLC运行环境配置的性质验证工作,在提供了一个完整的PLC程序验证方案的同时,大大提高了PLC程序的验证效率。下面将结合具体附图对本发明进行进一步的说明。
[0023] 如图1所示,为本发明验证方法的过程示意图,包括,中间语言转换、迁移系统构造、性质验证以及验证结果处理。其中,所述中间语言转换为通过对应的转换规则,将由一种或多种PLC语言编写的目标程序以及PLC运行环境配置转换为统一的中间语言程序;所述迁移系统构造为,通过中间语言的程序模型定义和操作语义对所述中间语言程序进行定义,并结合原子谓词以及标记函数等完成对应中间语言程序的迁移系统的构造。构造出的迁移系统将作为性质检测的依据。所述性质验证为利用多种逻辑模型对所述迁移系统的多种性质进行验证,进而发现PLC程序以及PLC运行环境配置的安全性质、死锁性质、活性、公平性以及其它时序性质等进行验证(视需要而定);所述验证结果处理为根据所述性质验证的结果以及对应的评估标准,从而做出评估或给出PLC程序以及PLC运行环境配置不满足相关性质的反例,其中,所述对应的评估标准为通过PLC安全评估标准设计的适用于性质验证结果的评估标准。下面将对中间语言以及本发明方法进行更详细说明。
[0024] 具体的,所述中间语言为基于CSP(Communicating Sequential Language)通信顺序进行语言进行扩展的ICIL(Industrial Controller Intermediate Language)工业控制中间语言,下面简称为中间语言,该语言中扩展了模块元素、语句元素以及周期式通道元素。其中,模块元素用于统一表示通信顺序进行语言IEC 61131-3表示的程序、函数以及函数功能块(FunctionBlock)。由于CSP通信顺序进行语言中没有语句的概念,因此本发明在中间语言中扩展了语句元素,用于程序执行时的计算。此外,由于周期式通道在CSP通信顺序进行语言的通道元素中加入了周期式执行的条件,使得中间语言不但能够表示普通通道上的消息收发,还能用于表示消息在通道上的延迟收发,从而用于表示IEC 61131-3语言中顺序功能块图的步激活后,在进入新一轮周期继续执行步动作的行为。
[0025] 更具体的,由于PLC目标程序可以由5种PLC语言进行单独编写或者混合开发,而不同的PLC编程方案则是由其多种环境配置所决定的,因此在本发明中包括了对梯形图语言、功能块图语言、顺序功能图图语言、结构化文本语言以及指令表语言的转换算法与转换规则。其中,对于采用图形化语言(梯形图语言、功能块图语言以及顺序功能图图语言)编写的程序,首先将其转换为PLCOpen XML文件,用PLCOpen XML文件表示原有的图形程序;接着,利用针对PLCOpen XML文件中每类元素设计的转换规则,从而将PLCOpen XML文件转换为ICIL程序;对于采用文本类语言(结构化文本语言、指令表语言)编写的程序,首先将其解析为抽象语法树,再利用针对抽象语法树中每一类语法元素设计的转换规则,将文本类程序转换为中间语言程序,从而完成由一种或多种PLC语言编写的目标程序的统一的中间语言程序的转换。同时,由于PLC运行环境配置包括了PLC资源、任务调度方式、任务优先级、存取路径变量的配置等,在中间语言转换过程中还将对所述环境配置根据其对应的转换规则进行中间语言转换。
[0026] 上述中获得的中间语言程序将作为迁移系统构造的依据,首先通过中间语言的程序模型定义对所述中间语言程序进行定义,将中间语言程序的程序状态转换为中间语言程序的程序集合和程序工作集合;再通过操作语义对中间语言程序的执行对其程序状态造成的影响进行定义,即程序状态的迁移关系;最后,通过原子谓词以及标记函数等对迁移系统的性质描述,从而完成对中间语言程序的迁移系统进行构造。此外,所述中间语言程序中还包括其初始程序状态,因此完成后的迁移系统包括,程序状态集合、程序工作集合、程序状态的迁移关系、初始程序状态、原子谓词以及标记函数等。构造完成的迁移系统将用于下一步的性质验证。
[0027] 所述性质验证中包含多种逻辑模型,包括,时态逻辑、计算树逻辑、霍尔逻辑、分离逻辑。其中所述时态逻辑和所述计算树逻辑用于时态验证;所述霍尔逻辑用于验证计算机程序运行逻辑的正确性;所述分离逻辑为霍尔逻辑的一种扩展,用于通过分离连词(separating conjunction)和框架规则(frame rule)来增强对使用可共享可变数据结构的程序验证的适用性和可扩展性。通过上述逻辑模型对由一种或多种PLC语言编写的目标程序以及其运行环境配置运行的安全性质、死锁性质、活性、公平性以及其他时序性质进行验证。其性质验证结果将用于下一步的验证结果处理。
[0028] 在所述验证结果处理的过程中,本发明根据PLC评估标准,如,IEC 611508、IEC 62061、IEC 61511标准,进而设计了对应性质验证结果的评估标准,用于对本发明性质验证结果的评估,并对不满足性质检验的程序给出对应的程序执行反例。
[0029] 具体实施例一(图形化语言之顺序功能图的中间语言转换)
[0030] 如图2所示,为本发明的一种可选实施例交通灯点亮顺序功能图示意图,包括,初始化(Init)、步骤0(Step0)、步骤1(Step1)、步骤2(Step2)、步骤3(Step3)以及步骤4(Step4);该顺序功能图图的控制实现为使得红灯、黄灯及绿灯在每个周期内按照一定顺序进行切换,其切换顺序为:绿灯亮1秒,黄灯亮1秒,红灯亮1秒,黄灯亮1秒。其中,变量DO_G、DO_R以及DO_Y分别表示绿灯、红灯以及黄灯的点亮信号,变量TON_G、TON_R以及TON_Y1分别表示绿灯点亮时间的计时器、红灯点亮时间的计时器以及黄灯点亮时间的计时器,TON_Y2在两个周期间用于对两个周期点亮顺序进行区分的黄灯点亮计时器。变量ISwitch表示红绿灯的开关。如图2所示,在采用图形化语言编写的PLC程序中,其程序结构主要由步(Step)以及步与步之间的关系组成,因此对采用图形化语言编写的PLC程序的中间语言转换主要是针对于步和步与步之间关系的转换,其部分转换规则如下:
[0031] 规则1:若列表fireNextMsgs不为空,设mi为该列表中的任意元素,则在其stepBody中添加如下述ICIL语句:
[0032] 语句1、if(mi.fireCond){};
[0033] 语句2、elseif(mi.fireCond){};
[0034] 语句3、else{};
[0035] 若fireNextMsgs存在包括条件fireCond的元组,则将包括fireCond的元组转换为语句1和/或语句2所示的代码,并且将fireNextMsgs列表中第一个元组对应的代码为语句1,其余元组对应的代码为语句2,最后将不包括fireCond的元组转换为如语句3所示的代码。若fireNextMsgs列表中不存在包括条件fireCond的元组,则直接转换为如语句3所示的代码。
[0036] 规则2:若init不为真,则第i步iStep的中间语言ICIL程序代码如下所示。
[0037] sname()=(;stepBody;)□Skip;
[0038] 其中,fireStmt为((c?m0→Skip)□(c?m1→Skip)□...□(c?mn→Skip))[0039] 设m0到mn为fireCurrMsgs列表中的所有消息。在fireStmt语句中,若周期式通道c接收到相应消息,表明步s处于活动状态,且stepBody将被执行。由于当通道c接收到相应消息时,表明步s立即为活动状态,因此该进程将通道接收消息以及步被激活的操作合并为原子操作,同时该步进程构造了与进程跳转Skip的一般选择关系,从而表示若接收到fireCurrMsgs列表中的任意消息则执行stepBody,否则不发生动作。其中,一般选择可用于防止进程sname()在本周期发生阻塞,从而无法进入下一个周期的情况。
[0040] 规则3:若init为真,即步s为初始步,则第i步iStep的ICIL代码如下所示:
[0041] sname()=if(_init){sname.X=true;stepBody;}
[0042] else{(;stepBody;)□Skip;}
[0043] 其中,在fireStmt语句中,若周期式通道c接收到相应消息,表明步s处于活动状态,且stepBody将被执行。
[0044] 通过上述转换规则将图2所示的顺序功能图转换为的中间语言程序如位于本文说明书后的实施例一中间语言程序所示。在进行安全性质验证前,需根据所述中间语言程序进行迁移系统构造,包括,对所述中间语言程序的程序模型进行定义;以及通过操作语义对中间语言程序状态之间的迁移关系进行定义,再结合原子谓词以及标记函数等,进而完成对所述迁移系统进行构造。
[0045] 如图3所示,为本发明的一种可选实施例的迁移系统结构示意图。其中,g、y1、r、y2分别表示绿、黄、红、黄信号灯的颜色,Pi表示中间语言程序的变化,包括;P1绿信号灯到黄信号灯的变化、P2黄信号灯到红信号灯的变化、P3红信号灯到黄信号灯的变化以及P4黄信号灯到绿信号灯的变化。为了说明性质验证的具体实施过程,以下述例子进行说明。
[0046] 如图4所示,为本发明迁移系统安全性质验证第一过程示意图,其中,为了验证“红灯亮之前为黄灯亮”的性质,构造了能够接受该安全性质对应的非法前缀的非确定有限自动机模型。其中,所述有限自动机模型包括,中间变量q0、q1以及状态变量qF。该模型可以将迁移系统作为输入,从而对红灯亮之前为黄灯亮这一性质进行验证。
[0047] 如图5所示,为本发明迁移系统安全性质验证第二过程示意图。图中所示模型为通过将图3中的迁移系统与图4中的非确定有限自动机进行叉乘,从而获得的叉乘自动机模型,通过深度遍历该模型,检查状态中是否包含图4所示的有限自动机NFA中的可接受状态qF(即红灯亮之前存在的其它颜色灯亮的状态),由于该本实施例程序中不包含该状态,因此本模型中亦不包含该状态,所以该交通信号灯程序满足“红灯亮之前为黄灯亮”的性质。
[0048] 实施例二(表格语言之指令表中间语言转换)
[0049] 本实施例将以指令表转换规则说明IEC 61131-3语言转换到中间语言ICIL语言的过程。指令表如下表1所示,
[0050] 表1
[0051] 1 LD diviser(*读取除数*) 9 SY divrem(*存储余数*)2 EQ0(*与零比较*) 10 JMP END(*跳转到End*)
3 JMPC Error(*若满足,跳转到Error*) 11 Error:LD 0(*读取0*)
4 LD dividend(*读取被除数*) 12 ST quotient(*将商置0*)
5 DIV divisior(*除以除数*) 13 SY divrem(*将余数置0*)
6 ST quotient(*存储商*) 14 LD 0(*读取布尔量0*)
7 LD dividend(*读取被除数*) 15 STN diverr(*取反后将diberr置1*)
8 MOD dibisor(*对除数进行模除*) 16 End:RET(*返回*)
[0052] 本发明通过采用如表2所示的转换规则,将上述指令表表1转化为中间语言程序,其过程为,首先根据表2中的转换规则对指令表语言进行翻译,然后将指令表语言中的标记(该例子中为Error和End)对应的程序段转换为中间语言ICIL程序中的进程;最后将指令表语言程序段之间的跳转转化为中间语言ICIL程序进程的调用执行。
[0053] 上述中,关于跳转Skip指令的转换,首先将指令表语言主程序中所有被标记的子程序(即带有label的程序段)及主程序转换为进程,最终将指令表语言程序段的跳转转换为中间语言ICIL程序进程的调用执行。
[0054] 表2
[0055]
[0056]
[0057] 其中,bILOp及bICILOp分别表示指令表语言与ICIL语言中的二元操作符,uILOp及uICILOp分别表示指令表语言与ICIL语言中的一元操作符。如图4中的表1至6行记录所示,一些操作被转换为了赋值语句,如第7行所示,原有的函数调用被转换为了ICIL语言中的模块调用语句,如第8行所示,原有的RET指令被转换为Skip进程。关于指令表中跳转指令的转换,首先将指令表语言主程序中所有被标记的子程序(即带有label的程序段)及主程序转换为进程,最终将指令表语言程序段的跳转转换为ICIL进程的调用执行。
[0058] 需指出的是,本发明中中间语言的转换规则并不限于本发明中所示形式,本发明中只针对部分转换规则通过实施例对本发明的一种基于中间语言的PLC程序验证方法进行了说明,如实施例一中对多种性质验证中的安全验证过程进行了说明。
[0059] 以上,仅为本发明示例性的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
[0060] 实施例一中间语言程序
[0061] Step0:
[0062] TON_G(IN:=DO_GANDISwitch,
[0063] PY:=T#IS);
[0064] TON_R(IN:=DO_R,PY:=T#IS);
[0065] TON_Y1(IN:=DO_Y,PY:=T#IS);
[0066] TON_Y2(IN:=DO_Y,PY:=T#IS);
[0067] ElapseTime:=TON_G.ET;
[0068] Step1:
[0069] DO_G:=TRUE;
[0070] DO_R:=FALSE;
[0071] DO_Y:=FALSE;
[0072] Step2:
[0073] DO_G:=FALSE;
[0074] DO_R:=FALSE;
[0075] DO_Y:=TRUE;
[0076] Step3:
[0077] DO_G:=FALSE;
[0078] DO_R:=TRUE;
[0079] DO_Y:=FALSE;
[0080] Step4:
[0081] DO_G:=FALSE;
[0082] DO_R:=FALSE;
[0083] DO_Y:=TRUE;
[0084] 实施例二中间语言程序
[0085]