首页 / 专利库 / 软件 / 控制流图 / PLC程序到NuSMV输入模型的自动化构建方法

PLC程序到NuSMV输入模型的自动化构建方法

阅读:90发布:2020-05-15

专利汇可以提供PLC程序到NuSMV输入模型的自动化构建方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及工业自动化控制技术领域,特别是涉及一种PLC程序到NuSMV输入模型的自动化构建方法,包括对PLC的ST语言进行分析,构建ST语言的语法;根据给出的ST语法对ST程序进行处理,将ST程序解析为抽象语法树AST;对抽象语法树AST进行处理,分析ST语言语句的控制流特征,确定各语句生成 控制流图 CFG的 算法 ;根据控制流图CFG对ST程序进行数据流分析,构建状态转换邻接表和变量取值变化邻接表;根据构建的状态转换邻接表和变量取值变化邻接表生成NuSMV输入模型。本发明大大提高NuSMV工具对PLC程序进行模型检测的效率和准确度,实现对工业控制系统PLC代码的安全性验证。,下面是PLC程序到NuSMV输入模型的自动化构建方法专利的具体信息内容。

1.一种PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,包括以下步骤:
步骤1,对PLC的ST语言进行分析,构建ST语言的语法;
步骤2,根据步骤1给出的ST语法对ST程序进行处理,将ST程序解析为抽象语法树AST;
步骤3,对抽象语法树AST进行处理,分析ST语言语句的控制流特征,确定各语句生成控制流图CFG的算法;所述控制流图CFG的结构为:用二元结构CFG=(N,E)表示控制流图CFG,其中,N代表控制流图节点的集合,E代表控制流图弧的集合;
控制流图CFG采用基于十字链表的存储方式进行存储,节点表示的数据结构如下表:
Nnum Firstin Firstout
其中,Nnum表示节点的编号,Firstin指向以该节点为弧头的第一个弧节点,Firstout指向以该节点为弧尾的第一个弧节点;弧表示的数据结构如下表:
tailnum headnum Etype guard assignment Hlink Tlink
其中,tailnum表示弧尾的节点编号,headnum表示弧头的节点编号,Etype表示弧的类型,Etype={1,0},当Etype=1时,表示弧为分支弧,guard指向对应的条件谓词取值表达式,assignment为空,当Etype=0时,表示弧为顺序弧,guard为空,assignment指向对应的赋值语句链表,Hlink指向弧头相同的下一条弧,Tlink指向弧尾相同的下一条弧;
步骤4,根据控制流图CFG对ST程序进行数据流分析,构建状态转换邻接表和变量取值变化邻接表;
步骤5,根据步骤4构建的状态转换邻接表和变量取值变化邻接表生成NuSMV输入模型。
2.根据权利要求1所述的PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,所述步骤1中,对PLC的ST语言进行分析的具体内容是:分析ST语言的架构、关键字、表达式、赋值、注释、操作符优先级、条件语句、循环语句以及跳转语句。
3.根据权利要求1所述的PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,所述步骤2的具体实现过程如下:
步骤201,创建若干个Eclipse项目,通过Eclipse向导:File->New->Project...->Xtext->Xtext project;
步骤202,选择项目名称、语言名称以及文件扩展名;
步骤203,输入ST语言的语法,执行代码生成器生成各种语言组建,在项目中选中文件GenerateDomainmodel.mwe2,点击右键Run As->MWE2 Workow,将会触发Xtext语言生成器,生成解析器和序列化器。
4.根据权利要求1所述的PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,所述步骤3中,确定各语句生成控制流图CFG的算法具体为:根据控制流图CFG的结构生成赋值语句、IF语句、CASE语句、FOR语句、WHILE语句以及REPEAT语句的控制流图;对于赋值语句直接添加到数据列表assignment中;对于IF语句,首先获得条件语句,并根据条件语句的真假创建两条分支弧,在遇到关键字END_IF时,这两条分支指向汇合节点;对于ST语言的CASE语句,表示多分支结构,首先根据CASE变量的N个不同的取值生成N条由CASE顶点到N个不同值节点的弧,然后在遇到关键字END_CASE时,这N条分支指向汇合节点;FOR语句、WHILE语句以及REPEAT语句,均是根据条件语句的真假分别生成两条分支弧,循环体对应生成一条弧,且该弧与条件为真的那条弧的两个节点相同,方向反向;
最后将生成的弧存储到数组列表ArrayList中。
5.根据权利要求4所述的PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,所述步骤4中,根据控制流图CFG对ST程序进行数据流分析,定义如下的数据结构来表示控制流图的状态迁移关系:
Guard State Next
其中,Guard表示状态迁移所需要满足的条件,State表示状态迁移的目标状态,Next指向下一个状态迁移,定义如下数据结构用于表示系统内变量的取值变化:
State′ Expr Next′
其中,State′表示变量被赋值前的状态,Expr表示系统内变量赋值语句右侧的数值或表达式,Next′表示该变量下一个取值变化;
遍历步骤3生成的弧的数组列表ArrayList,参照上述两个数据结构,分别生成状态转换邻接表State_List以及变量取值变化邻接表Var_List。
6.根据权利要求1或者5所述的PLC程序到NuSMV输入模型的自动化构建方法,其特征在于,所述NuSMV输入模型包括状态集合部分、变量声明部分、状态转换部分和变量数据值变化部分;遍历状态转换邻接表生成状态集合部分和状态转换部分,遍历变量取值变化邻接表获得变量声明部分和变量数据值变化部分。

说明书全文

PLC程序到NuSMV输入模型的自动化构建方法

技术领域

[0001] 本发明涉及工业自动化控制技术领域,特别是涉及一种PLC程序到NuSMV输入模型的自动化构建方法。

背景技术

[0002] 工业控制系统广泛应用到工业自动化控制领域,比如电、石油、国防科技等国家基础设施,以及食品、医药、交通等民生领域。工控安全事关经济发展、社会稳定和国家安全。近年来,随着信息化和工业化深入融合,工业控制系统从单机走向互联,从封闭走向开放,从自动化走向智能化,但同时也给工业控制系统安全带来前所未有的挑战。
[0003] 工业控制器,即可编程逻辑控制器(PLC)作为工业控制系统的大脑,是一种专用于工业控制的计算机,通过其上运行的业务代码控制整个系统的运行,PLC代码的安全直接管关系到整个工业控制系统的安全。可编程逻辑控制器支持梯形图语言(LD)、指令表语言(IL)、功能模图语言(FBD)、顺序功能流程图语言(SFC)及结构化文本语言(ST)等多种编程语言。PLC代码安全主要包括两个方面:一是PLC代码自身存在的代码缺陷,比如空指针引用、数组下标越界、无效跳转、无限循环、冗余代码等代码缺陷,二是PLC代码违反安全需求,比如状态冲突、时序冲突、传感器阈值、控制量阈值等安全需求规约。
[0004] PLC代码缺陷的发现及安全规约违反验证主要采用模型检测的方法,此方法成为工业控制系统安全防护中最基本最有效的方法。目前研究中主要有三种模型检测工具,一种是基于SMV的模型检测工具,包含符号模型检测技术和二元决策图,分为NuSMV和CadenceSMV两种类型。另一种是基于时间自动机,其大部分来自于UPPAAL家族或Krono。第三种是SPIN`模型检查器。NuSMV是基于SMV的模型检测工具,广泛应用于可编程逻辑控制器缺陷代码的发现,但是NuSMV不能直接对PLC源程序进行处理,只能手工将源程序翻译为NuSMV输入模型,然后再进行模型检测,不仅浪费大量的人力,而且容易出错。而目前国内外关于PLC程序的研究主要是定义PLC程序指称语义的格局、程序语言的语义函数,但这些研究仅停留在简单对PLC程序语义的形式化定义上面。

发明内容

[0005] 针对现有技术中存在的缺陷,本发明提供了一种PLC程序到NuSMV输入模型的自动化构建方法,大大提高NuSMV工具对PLC程序进行模型检测的效率和准确度,实现对工业控制系统PLC代码的安全性验证。
[0006] 为了实现上述目的,本发明采用以下的技术方案:
[0007] 一种PLC程序到NuSMV输入模型的自动化构建方法,包括以下步骤:
[0008] 步骤1,对PLC的ST语言进行分析,构建ST语言的语法;
[0009] 步骤2,根据步骤1给出的ST语法对ST程序进行处理,将ST程序解析为抽象语法树AST;
[0010] 步骤3,对抽象语法树AST进行处理,分析ST语言语句的控制流特征,确定各语句生成控制流图CFG的算法
[0011] 步骤4,根据控制流图CFG对ST程序进行数据流分析,构建状态转换邻接表和变量取值变化邻接表;
[0012] 步骤5,根据步骤4构建的状态转换邻接表和变量取值变化邻接表生成NuSMV输入模型。
[0013] 进一步地,所述步骤1中,对PLC的ST语言进行分析的具体内容是:分析ST语言的架构、关键字、表达式、赋值、注释、操作符优先级、条件语句、循环语句以及跳转语句。
[0014] 进一步地,所述步骤2的具体实现过程如下:
[0015] 步骤201,创建若干个Eclipse项目,通过Eclipse向导:File->New->Project...->Xtext->Xtext project;
[0016] 步骤202,选择项目名称、语言名称以及文件扩展名;
[0017] 步骤203,输入ST语言的语法,执行代码生成器生成各种语言组建,在项目中选中文件GenerateDomainmodel.mwe2,点击右键Run As->MWE2Workow,将会触发Xtext语言生成器,生成解析器和序列化器。
[0018] 进一步地,所述控制流图CFG的结构为:用二元结构CFG=(N,E)表示控制流图CFG,其中,N代表控制流图节点的集合,E代表控制流图弧的集合;
[0019] 控制流图CFG采用基于十字链表的存储方式进行存储,节点表示的数据结构如下表:
[0020]Nnum Firstin Firstout
[0021] 其中,Nnum表示节点的编号,Firstin指向以该节点为弧头的第一个弧节点,Firstout指向以该节点为弧尾的第一个弧节点;弧表示的数据结构如下表:
[0022]tailnum headnum Etype guard assignment Hlink Tlink
[0023] 其中,tailnum表示弧尾的节点编号,headnum表示弧头的节点编号,Etype表示弧的类型,Etype={1,0},当Etype=1时,表示弧为分支弧,guard指向对应的条件谓词取值表达式,assignment为空,当Etype=0时,表示弧为顺序弧,guard为空,assignment指向对应的赋值语句链表,Hlink指向弧头相同的下一条弧,Tlink指向弧尾相同的下一条弧。
[0024] 进一步地,所述步骤3中,确定各语句生成控制流图CFG的算法具体为:根据控制流图CFG的结构生成赋值语句、IF语句、CASE语句、FOR语句、WHILE语句以及REPEAT语句的控制流图;对于赋值语句直接添加到数据列表assignment中;对于IF语句,首先获得条件语句,并根据条件语句的真假创建两条分支弧,在遇到关键字END_IF时,这两条分支指向汇合节点;对于ST语言的CASE语句,表示多分支结构,首先根据CASE变量的N个不同的取值生成N条由CASE顶点到N个不同值节点的弧,然后在遇到关键字END_CASE时,这N条分支指向汇合节点;FOR语句、WHILE语句以及REPEAT语句,均是根据条件语句的真假分别生成两条分支弧,循环体对应生成一条弧,且该弧与条件为真的那条弧的两个节点相同,方向反向;
[0025] 最后将生成的弧存储到数组列表ArrayList中。
[0026] 进一步地,所述步骤4中,根据控制流图CFG对ST程序进行数据流分析,定义如下的数据结构来表示控制流图的状态迁移关系:
[0027]Guard State Next
[0028] 其中,Guard表示状态迁移所需要满足的条件,State表示状态迁移的目标状态,Next指向下一个状态迁移,定义如下数据结构用于表示系统内变量的取值变化:
[0029]State Expr Next
[0030] 其中,State表示变量被赋值前的状态,Expr表示系统内变量赋值语句右侧的数值或表达式,Next表示该变量下一个取值变化;
[0031] 遍历步骤3生成的弧的数组列表ArrayList,参照上述两个数据结构,分别生成状态转换邻接表State_List以及变量取值变化邻接表Var_List。
[0032] 进一步地,所述NuSMV输入模型包括状态集合部分、变量声明部分、状态转换部分和变量数据值变化部分;遍历状态转换邻接表生成状态集合部分和状态转换部分,遍历变量取值变化邻接表获得变量声明部分和变量数据值变化部分。
[0033] 与现有技术相比,本发明具有以下优点:
[0034] 1、本发明针对目前模型检测工具都拥有独特的输入模型,PLC程序不能作为直接输入,需要人工根据PLC程序构建模型检测器的输入,造成PLC程序的模型检测准确率和效率低的问题,对PLC程序进行解析,控制流分析、数据流分析,将PLC程序自动化构建为模型检测工具的输入模型,提高PLC程序的模型检测准确率以及效率。附图说明
[0035] 图1是本发明一种PLC程序到NuSMV输入模型的自动化构建方法的流程示意图;
[0036] 图2是本发明一种PLC程序到NuSMV输入模型的自动化构建方法的框架图。

具体实施方式

[0037] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述:
[0038] 实施例一,如图1和图2所示,一种PLC程序到NuSMV输入模型的自动化构建方法,包括以下步骤:
[0039] 步骤1,对PLC的ST语言进行分析,构建ST语言的语法;
[0040] 根据IEC61131-3标准,对PLC的ST语言进行分析,分析ST语言的架构、关键字、表达式、赋值、注释、操作符优先级、条件语句、循环语句以及跳转语句等特征,编写对应的语法形式。
[0041] 作为一种实施方式,以条件语句IF语句为例编写对应的语句语法如下:IF_Stmt→IF Condition THEN Statement{ELSE Statement}END_IF。
[0042] 步骤2,根据步骤1给出的ST语法对ST程序进行处理,将ST程序解析为抽象语法树AST;
[0043] 进一步地,利用Xtext特定的编程语言开源框架将ST程序解析为抽象语法树AST;具体实现过程如下:
[0044] 步骤201,创建若干个Eclipse项目,通过Eclipse向导:File->New->Project...->Xtext->Xtext project;
[0045] 步骤202,选择项目名称、语言名称以及文件扩展名;
[0046] 步骤203,输入ST语言的语法,执行代码生成器生成各种语言组建,在项目中选中文件GenerateDomainmodel.mwe2,点击右键Run As->MWE2Workow,将会触发Xtext语言生成器,生成解析器和序列化器,以及一些其他基础结构代码,可以在控制台的日志消息中看到相应的过程。
[0047] 步骤3,对抽象语法树AST进行处理,分析ST语言语句的控制流特征,确定各语句生成控制流图CFG的算法;
[0048] 在本实施例中,用二元结构CFG=(N,E)表示控制流图CFG,其中,N代表控制流图节点的集合,E代表控制流图弧的集合;
[0049] 控制流图CFG采用基于十字链表的存储方式进行存储,节点表示的数据结构如下表:
[0050]Nnum Firstin Firstout
[0051] 其中,Nnum表示节点的编号,Firstin指向以该节点为弧头的第一个弧节点,Firstout指向以该节点为弧尾的第一个弧节点;弧表示的数据结构如下表:
[0052]tailnum headnum Etype guard assignment Hlink Tlink
[0053] 其中,tailnum表示弧尾的节点编号,headnum表示弧头的节点编号,Etype表示弧的类型,Etype={1,0},当Etype=1时,表示弧为分支弧,guard指向对应的条件谓词取值表达式,assignment为空,当Etype=0时,表示弧为顺序弧,guard为空,assignment指向对应的赋值语句链表,Hlink指向弧头相同的下一条弧,Tlink指向弧尾相同的下一条弧。
[0054] 根据控制流图CFG的结构生成赋值语句、IF语句、CASE语句、FOR语句、WHILE语句以及REPEAT语句的控制流图;
[0055] 对于赋值语句直接添加到数据列表assignment中;对于IF语句,首先获得条件语句,并根据条件语句的真假创建两条分支弧,不管IF语句中有没有ELSE关键字,都会有两条对应于IF条件为真或为假的分支,并且最终在遇到关键字END_IF时,这两条分支指向汇合节点;对于ST语言的CASE语句,表示多分支结构,首先根据CASE变量的N个不同的取值生成N条由CASE顶点到N个不同值节点的弧,然后在遇到关键字END_CASE时,这N条分支指向汇合节点;FOR语句、WHILE语句以及REPEAT语句,均是根据条件语句的真假分别生成两条分支弧,循环体对应生成一条弧,且该弧与条件为真的那条弧的两个节点相同,方向反向;
[0056] 最后将生成的弧存储到数组列表ArrayList中。
[0057] 步骤4,根据控制流图CFG对ST程序进行数据流分析,构建状态转换邻接表和变量取值变化邻接表;
[0058] 在本实施例中,根据控制流图CFG对ST程序进行数据流分析,定义如下的数据结构来表示控制流图的状态迁移关系:
[0059]Guard State Next
[0060] 其中,Guard表示状态迁移所需要满足的条件,State表示状态迁移的目标状态,Next指向下一个状态迁移,定义如下数据结构用于表示系统内变量的取值变化:
[0061]State Expr Next
[0062] 其中,State表示变量被赋值前的状态,Expr表示系统内变量赋值语句右侧的数值或表达式,Next表示该变量下一个取值变化;
[0063] 遍历步骤3生成的弧的数组列表ArrayList,参照上述两个数据结构,分别生成状态转换邻接表State_List以及变量取值变化邻接表Var_List。
[0064] 步骤5,根据步骤4构建的状态转换邻接表和变量取值变化邻接表生成NuSMV输入模型。
[0065] 所述NuSMV输入模型包括状态集合部分、变量声明部分、状态转换部分和变量数据值变化部分;遍历状态转换邻接表生成状态集合部分和状态转换部分,遍历变量取值变化邻接表获得变量声明部分和变量数据值变化部分。
[0066] 以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈