CN115391173A - 从Simulink-StateFlow模型到NuSMV模型的转换方法 - Google Patents
从Simulink-StateFlow模型到NuSMV模型的转换方法 Download PDFInfo
- Publication number
- CN115391173A CN115391173A CN202210789598.1A CN202210789598A CN115391173A CN 115391173 A CN115391173 A CN 115391173A CN 202210789598 A CN202210789598 A CN 202210789598A CN 115391173 A CN115391173 A CN 115391173A
- Authority
- CN
- China
- Prior art keywords
- model
- program
- nusmv
- simulink
- statement
- 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
- 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/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种从Simulink‑StateFlow模型到NuSMV模型的转换方法,包括如下步骤:对待评估***进行需求分析,构建Simulink‑StateFlow模型;提取模型中的程序语句、自定义函数语句、逻辑顺序关系,分别构建程序语句数据表、自定义函数数据表、逻辑顺序数据表;整合模型程序及顺序,生成模型信息表;对Matlab编程语言进行分析,构建Matlab语法规则;根据语法规则对模型信息表中的程序语句进行处理,将其解析为抽象语法树;对抽象语法树进行处理,确定转换为NuSMV语句的算法;根据转换算法处理模型信息表,生成NuSMV模型。本发明大大提高了NuSMV工具对Simulink‑StateFlow模型进行模型检测的效率和准确度,实现对控制***Simulink需求模型的安全性验证。
Description
技术领域
本发明属于***安全可靠性领域,具体为一种从Simulink-StateFlow模型到NuSMV模型的转换方法。
背景技术
模型检测是用来在程序执行过程中证明***性质正确性的形式化验证方法。其主要思想是先建立待检测***的有限状态模型,然后用算法穷尽检测模型中的状态,判断其是否满足待测属性,若不满足,则根据反馈信息判断具体***中是否确实存在违反此属性的执行路径,即反例路径。模型检测的过程包括***建模、性质描述和***验证。***建模选用一种形式化描述方法,将待验证的***设计转化为验证工具所能接受的模型。建模中会采用抽象的方法去除不重要或不相关的细节,以避免引入过多的细节而引起状态***。***所要验证的性质通常是采用逻辑公式来描述,如时态逻辑,能够描述***随着时间变化而引起的行为变化。模型检测提供了许多验证模型是否满足性质的方法,但这并不能保证这些性质包含所有***所要满足的性质,因此要求设计人员在性质描述时要保证性质的完整性。***验证是通过模型检测算法对***的状态空间进行穷尽搜索。验证结束后,如果未发现违反性质描述的状态,则表明该模型满足期望的性质;否则给出一个反例路径以供参考。
形式化验证是一种验证***正确性的方法,相对于传统的验证方法,(模拟、仿真和测试),形式化验证的主要思路是使用数学的公式、定理和***来验证***的正确性。目前的形式化验证方法可以用于验证硬件***、软件***和其他***。Simulink是MATLAB中的一种可视化仿真工具,支持***设计、仿真、自动代码生成以及嵌入式***的连续测试和验证。Simulink建模过程中可使用自定义的模块库以及求解器,能够进行动态***建模和仿真。对Simulink生成的仿真***模型进行形式化验证,是针对自动化***可靠性验证的一种新途径。
NuSMV是一种符号模型检测工具,该工具将***模型以抽象的符号语言建立并表示,对SMV符号模型检查器进行了再实现和扩展,旨在对工业规模的设计进行可靠性验证,用作其他验证工具的后端及正式验证技术的研究工具。目前NuSMV已经成为***及软件形式化验证领域广泛使用的工具之一,其实用性和可拓展性受到业内的一致认可。但是NuSMV不能直接对Simulink的StateFlow流程图和有限状态机模型直接进行处理,只能手动将源程序翻译为NuSMV输入模型,然后对该模型进行形式化验证,寻找缺陷代码。这样不仅会浪费大量的人力和时间成本,而且并不能保证手动转换模型的正确性。由于在语义定义等理论方面不能得到充足的支撑,国内外针对于Simulink模型可靠性检测的研究内容主要集中于构建可靠性测试剖面,如操作剖面、马尔可夫剖面、使用剖面等,并基于测试剖面开展测试工作,目前并没有较好的形式化验证方式为其可靠性检测提供支持。
发明内容
针对现有技术中存在的缺陷,本发明提供一种Simulink-StateFlow模型转换到NuSMV模型的转换方法,用于提高NuSMV工具对Simulink-StateFlow模型进行可靠性检测的效率和准确率,实现对***模型的安全性验证。
为达到以上目的,本发明采取的技术方案是:
一种从Simulink-StateFlow模型到NuSMV模型的转换方法,包括以下步骤:
步骤1、对待评估的***进行需求形式化分析,并构建Simulink-StateFlow模型;生成项目工程文件,项目工程文件包括:JSON格式文件、C语言格式文件和SVG格式文件;
步骤2、分析JSON格式文件的格式特征,从JSON格式文件中提取程序语句,构建程序语句数据表;
步骤3、分析C语言格式文件的格式特征,从C语言格式文件中提取自定义函数语句,构架自定义函数数据表。
步骤4、分析SVG格式文件的格式特征,读取步骤2中提取到的程序语句的逻辑顺序关系,构建逻辑顺序数据表。
步骤5、根据步骤2、步骤4中构建的程序语句数据表和逻辑顺序数据表,使用算法整合模型程序及顺序,生成Simulink模型信息表。
步骤6,对程序语句所使用的Matlab编程语言进行分析,构建Matlab语言的语法规则;
步骤7,根据步骤6给出的Matlab语言的语法规则对Simulink模型信息表中的程序语句进行处理,将程序语句解析为抽象语法树AMT。
步骤8,对抽象语法树AMT进行处理,确定转换为NuSMV语句的转换算法;根据转换算法,处理Simulink模型信息表,生成NuSMV模型。
步骤1中,构建Simulink-StateFlow模型的具体内容是:绘制模型的图块、起点、转移、连接点,输入程序语句,编写自定义函数。
Simulink状态图绘制完成后,通过Simulink菜单:File->Export Model to->Web,选择导出模式为Entire Model-Export,生成项目工程文件;JSON格式文件用于记录Simulink建模过程中填写的所有状态迁移所需程序语句;C语言格式文件用于记录Simulink建模过程中填写的所有自定义函数语句;SVG格式文件用于记录Simulink建模过程中所绘制的所有状态迁移流程。
步骤2中,提取程序语句的算法具体为:遍历JSON数据文件序列、过滤冗余项inspector、提取程序语句所在项、过滤冗余字符、整合数据结构。根据JSON格式文件特征,定义如下的数据结构来表示程序语句数据表的数据关系:[Sid,ExecutionOrder,Program],其中,Sid表示程序的标识编号,ExecutionOrder表示程序执行的分支顺序信息,ExecutionOrder={1,2},当ExecutionOrder为1时,表示该程序语句所在分支为优先执行的分支,当ExecutionOrder为2时,表示该程序语句执行顺序处于分支1之后,Program表示具体的程序语句体。
步骤3中,提取自定义函数语句的算法具体为:遍历C语言格式文件序列、定位自定义函数关键词所在行、提取函数名、提取函数体、过滤冗余字符、整合数据结构。根据C语言格式文件和自定义函数体格式,定义如下的数据结构来表示自定义函数数据表的数据关系:[FunctionTitle,FunctionBody],其中,FunctionTitle表示自定义函数的函数名,FunctionBody表示自定义函数的函数体。
步骤4中,使用的读取算法具体如下:
步骤401、读入SVG格式文件;
步骤402、在各图块内部进行逻辑排序操作。首先寻找块内各框图的起点,计算并标明起点坐标、编号、类型;其次寻找块内各框图中的连接点,计算并标明连接点坐标、类型、编号;寻找块内各框图中的转移,计算并标明转移起始端点坐标、终止端点坐标、类型、编号;针对每一组转移,寻找其起始和到达的起点或连接点;最后读取规范化转移列表信息,根据前置连接点和后置连接点,过滤掉连接点的中间运算,列举转移间的逻辑关系;
步骤403、在各图块之间进行逻辑排序操作。首先寻找总框图的起点,并标明起点坐标、编号、类型;寻找总图中的转移,并标明转移起始端点坐标、终止端点坐标、类型、编号;寻找块内各图块中的上下边界,并标明图块边界的坐标、类型、编号;针对每一组转移,寻找其起始和到达的图块边界;读取规范化转移列表信息,根据前置图块边界和后置图块边界,列举转移和图块间的逻辑关系;
步骤404、整合步骤402与步骤403中获得的逻辑关系信息。
定义如下的数据结构来表示程序对应的框图编号关系:[Identifier_Front,Identifier_Behind]。其中,Identifier_Front表示逻辑前置元素的编号,Identifier_Behind表示逻辑后置元素的编号,在逻辑顺序层面,元素Identifier_Front在元素Identifier_Behind之前,二者之间存在一条有向路径。
定义如下的数据结构来表示SVG中图形元素的标识关系:[Element_Identifier,Element_ID,Element_ParentID]。其中,Element_Identifier表示SVG中元素对应的自定义编号,Element_ID表示SVG中元素对应的原始标识号,Element_ParentID表示SVG图中每条程序语句对应的框图的原始标识号。
定义如下的数据结构来表示SVG中图形元素中起点的状态信息:[StartPoint_Identifier,StartPoint_Type,StartPoint_ParentID]。其中,StartPoint_Identifier表示SVG图中的所有起点对应的自定义编号,StartPoint_Type表示SVG图中起点的类型,StartPoint_Type={block_in,block_out},当StartPoint_Type取值block_in时,表示该起点位于图块之内,当StartPoint_Type取block_out时,表示该起点位于图块之外,StartPoint_ParentID表示每个起点对应的图块的原始标识号。
参照以上三个数据结构,分别生成逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID,以及起点状态信息表List_StartPoint,将SVG图中提取到的逻辑信息存储到以上表中。
步骤5中,整合模型程序及顺序的算法具体如下:
步骤501、读取起点状态信息表List_StartPoint、逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID以及程序语句数据表List_JsonProgram;
步骤502、整合数据表中的起点信息、图块信息、程序语句信息;
步骤503、记录每个框图内的程序语句数目;
步骤504、采用栈型结构辅助整理所有程序语句的先后顺序,构建程序数据存放栈。
步骤505、生成Simulink模型信息表,Simulink模型信息表包括有序程序语句表List_ProgramOrder和元素分支映射表Map_Branch。
步骤6中,对Matlab编程语言进行分析的具体内容是:程序语句的提取和排序、程序语句词法解析、判断程序语句类型、调整程序语句、去除冗余项、添加计数器、生成转换模型。
步骤7中,将程序语句解析为抽象语法树的具体内容是:读取程序语句并标识、识别提取标识符、运算符提取中间量和标识函数,为程序语句中各个量赋予权重、利用栈和链表依据权重对程序语句各个量排序。
所述步骤8具体如下:
步骤801、自动化转换定义与初始化语句;转换过程中,待转换程序语句支持的基本类型包括整数型、实数型、字符数据、逻辑值型、阵列数据、Matlab-Simulink的内置函数及使用Matlab编辑器编写的自定义函数,整数型包括多位有符号字和无符号字整数,实数型包括单精度浮点数和双精度数浮点数;NuSMV支持类型包括布尔型、整数型、枚举型、有符号字、无符号字、数组型和set类型。
其中,程序语句中的逻辑值型与NuSMV中的布尔型对应;程序语句中的整数型与NuSMV中的整数型对应;程序语句中的单精度浮点数与NuSMV中的有符号字对应;程序语句中的双精度浮点数与NuSMV中的无符号字对应。
程序语句中的状态变量直接映射到NuSMV的状态变量,且类型相同,名称保持不变;环境变量的转换取决于状态变量,在模型转换过程中根据实际情况,将环境变量先通过状态变量表述,然后再对状态变量进行转换。
步骤802、将自定义函数转换为NuSMV中的模块;自定义函数同样使用Matlab编程语言编写。对于函数语句中算数运算符的转换,需要同时对结果进行验证,使其符合NuSMV常量的取值范围。在NuSMV验证的过程中,只有验证模型中可被NuSMV识别的Matlab函数会被调用参与运算和执行,其他在书写程序语句及自定义函数时使用的Matlab内置函数不可被识别,需要在语法分析的过程中被筛选定位,将其单独转换为可识别的语句或程序步骤。而后将转换后的自定义函数体返回。
步骤803、判断语句类型,自动转换赋值语句、循环语句和判断语句;对于循环及判断语句,NuSMV中使用case表达式描述条件的转移过程,将待转换状态模型中的每一条转移映射为NuSMV中的条件表达式。针对状态模型中的每一个待定状态,找出状态模型中所有改变NuSMV环境变量的赋值行为,并将其转换为对应的case子句。
步骤804、生成转换后的NuSMV模型。
本发明的有益效果:本发明针对目前Simulink-StateFlow模型不能作为直接输入,需要人工重构NuSMV模型进行可靠性检测,造成模型检测的效率和准确率低的问题,对Simulink-StateFlow模型进行解析,并构建信息提取和语法树转换的模型转换方法,将Simulink-StateFlow流程图和有限状态机模型自动化转换为NuSMV模型检测工具的输入模型,提高Simulink程序的模型检测的效率和准确率。
本发明针对形式化验证领域,由Matlab/Simulink-StateFlow***仿真模型到NuSMV验证模型的转换过程中,为两种模型提供语义互通途径,解决现有的手动翻译方式存在的人力、时间浪费且不能保证转换正确性的问题。
本发明在前期进行信息提取的过程中,分别对Simulink-StateFlow模型导出工程的三种附带信息文件进行了处理,即JSON文件、SVG文件、C文件,完整地进行了冗余过滤,提取出转换所需的逻辑信息、语句信息及函数信息。
传统的由Simulink-StateFlow模型的XML文档中提取信息的方式较为复杂,甚至需要大量人工编码成本;本发明提出采用语法树解析的方式提取模型的SVG文档信息,提高读取效率,节省转换时间。
本发明在进行转换的过程中,编写了一套对于StateFlow工具绘制图模型的逻辑信息提取方法,适用于绘图中不同颜色、不同图形大小的各种信息模型的SVG导出文件。
本发明在进行转换过程中,针对采用Matlab/Simulink建模所使用的半形式化语言,到转换为用于形式化输入的SMV模型语言,形成了对应的语言转换规则,并针对循环、分支等段落语句以及自定义函数也形成了相应转换规则。
附图说明
本发明有如下附图:
图1是本发明一种Simulink-StateFlow模型到NuSMV模型的转换方法的流程示意图;
图2是本发明一种Simulink-StateFlow模型到NuSMV模型的转换方法的框架图。
具体实施方式
以下结合附图和实施例对本发明作进一步详细说明。
实施例一,如图1和图2所示,一种从Simulink-StateFlow模型到NuSMV模型的转换方法,包括以下步骤:
步骤1,对待评估的***进行需求形式化分析,并构建Simulink-StateFlow模型;
构建Simulink-StateFlow模型的具体内容是:绘制模型的图块、起点、转移、连接点,输入程序语句,以及编写自定义函数。
Simulink-StateFlow模型允许用户建立有限的状态,用图形的形式绘制出状态迁移的条件,并使用规定的命令设计状态迁移执行的任务,以此构造出整个有限状态机***。根据待评估的***的运行状态进行需求分析,在Simulink工具中构建***的整体状态转换流程,绘制模型的图块、起点、转移、连接节点,并填写相应的状态迁移所需程序命令,必要时设立自定义函数语句以辅助所需命令。
Simulink状态图绘制完成后,通过Simulink菜单:File->Export Model to->Web,选择导出模式为Entire Model-Export,生成对应的项目工程文件。项目工程文件中含有三个必要文件:一是某JSON格式文件,记录Simulink建模过程中填写的所有状态迁移所需程序语句;二是某C语言格式文件,记录Simulink建模过程中填写的所有自定义函数语句;三是某SVG格式文件,记录Simulink建模过程中所绘制的所有状态迁移流程。
步骤2,对步骤1中构建完成并导出的Simulink项目工程文件进行解析,分析JSON格式文件的格式特征,从JSON格式文件中提取程序语句,构建程序语句数据表;
使用的提取算法具体为:遍历JSON数据文件序列、过滤冗余项inspector、提取程序语句所在项、过滤冗余字符和整合数据结构。
在本实施例中,根据JSON格式文件特征,定义如下的数据结构来表示程序语句数据表的数据关系:[Sid,ExecutionOrder,Program],其中,Sid表示程序的标识编号,ExecutionOrder表示程序执行的分支顺序信息,ExecutionOrder={1,2},当ExecutionOrder为1时,表示该程序语句所在分支为优先执行的分支,当ExecutionOrder为2时,表示该程序语句执行顺序处于分支1之后,Program表示具体的程序语句体。参照该数据结构,生成程序语句数据表List_JsonProgram,将程序语句信息存储到程序语句数据表中。
步骤3,对步骤1中构建完成并导出的Simulink项目工程文件进行解析,分析C语言格式文件的格式特征,从C语言格式文件中提取自定义函数语句,构架自定义函数数据表。
使用的提取算法具体为:遍历C语言格式文件序列、定位自定义函数关键词所在行、提取函数名、提取函数体、过滤冗余字符和整合数据结构。
在本实施例中,根据C语言格式文件和自定义函数体格式,定义如下的数据结构来表示自定义函数数据表的数据关系:[FunctionTitle,FunctionBody],其中,FunctionTitle表示自定义函数的函数名,FunctionBody表示自定义函数的函数体。参照该数据结构,生成自定义函数数据表List_CustomFunction,将自定义函数信息存储到自定义函数数据表中。
步骤4,对步骤1中构建完成并导出的Simulink项目工程文件进行解析,分析SVG格式文件的格式特征,读取步骤2中提取到的程序语句的逻辑顺序关系,构建逻辑顺序数据表。使用的读取算法具体如下:
步骤401,读入SVG格式文件;
步骤402,在各图块内部进行逻辑排序操作。首先寻找块内各框图的起点,计算并标明起点坐标、编号、类型;其次寻找块内各框图中的连接点,计算并标明连接点坐标、类型、编号;寻找块内各框图中的转移,计算并标明转移起始端点坐标、终止端点坐标、类型、编号;针对每一组转移,寻找其起始和到达的起点或连接点;最后读取规范化转移列表信息,根据前置连接点和后置连接点,过滤掉连接点的中间运算,列举转移间的逻辑关系;
步骤403,在各图块之间进行逻辑排序操作。首先寻找总框图的起点,并标明起点坐标、编号、类型;寻找总图中的转移,并标明转移起始端点坐标、终止端点坐标、类型、编号;寻找块内各图块中的上下边界,并标明图块边界的坐标、类型、编号;针对每一组转移,寻找其起始和到达的图块边界;读取规范化转移列表信息,根据前置图块边界和后置图块边界,列举转移和图块间的逻辑关系;
步骤404,整合步骤402与步骤403中获得的逻辑关系信息。
在本实施例中,定义如下的数据结构来表示程序对应的框图编号关系:[Identifier_Front,Identifier_Behind]。其中,Identifier_Front表示逻辑前置元素的编号,Identifier_Behind表示逻辑后置元素的编号,在逻辑顺序层面,元素Identifier_Front在元素Identifier_Behind之前,二者之间存在一条有向路径。
在本实施例中,定义如下的数据结构来表示SVG中图形元素的标识关系:[Element_Identifier,Element_ID,Element_ParentID]。其中,Element_Identifier表示SVG中元素对应的自定义编号,Element_ID表示SVG中元素对应的原始标识号,Element_ParentID表示SVG图中每条程序语句对应的框图的原始标识号。
在本实施例中,定义如下的数据结构来表示SVG中图形元素中起点的状态信息:[StartPoint_Identifier,StartPoint_Type,StartPoint_ParentID]。其中,StartPoint_Identifier表示SVG图中的所有起点对应的自定义编号,StartPoint_Type表示SVG图中起点的类型,StartPoint_Type={block_in,block_out},当StartPoint_Type取值block_in时,表示该起点位于图块之内,当StartPoint_Type取block_out时,表示该起点位于图块之外,StartPoint_ParentID表示每个起点对应的图块的原始标识号。
参照以上三个数据结构,分别生成逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID,以及起点状态信息表List_StartPoint,将SVG图中提取到的逻辑信息存储到以上表中。
步骤5,根据步骤2、步骤4中构建的程序语句数据表和逻辑顺序数据表,使用算法整合模型程序及顺序,生成Simulink模型信息表。
整合模型程序及顺序的算法具体如下:
步骤501,读取起点状态信息表List_StartPoint、逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID以及程序语句数据表List_JsonProgram;
步骤502,整合数据表中的起点信息、图块信息、程序语句信息;
步骤503,记录每个框图内的程序语句数目;
步骤504,采用栈型结构辅助整理所有程序语句的先后顺序,构建程序数据存放栈。
步骤505,生成Simulink模型信息表(包括有序程序语句表List_ProgramOrder和元素分支映射表Map_Branch)。
步骤6,对程序语句所使用的Matlab编程语言进行分析,构建Matlab语言的语法规则;
在本实施例中,对Matlab编程语言进行分析的具体内容是:程序语句的提取和排序、程序语句词法解析、判断程序语句类型、调整程序语句、去除冗余项、添加计数器和生成转换模型。
步骤7,根据步骤6给出的Matlab语言的语法规则对Simulink模型信息表中(包括有序程序语句表List_ProgramOrder和元素分支映射表Map_Branch)的程序语句进行处理,将程序语句解析为抽象语法树AMT。
步骤8,对抽象语法树AMT进行处理,确定转换为NuSMV语句的转换算法;根据转换算法,处理Simulink模型信息表,生成NuSMV模型。
进一步地,所述步骤7中,将程序语句解析为抽象语法树的具体内容是:读取程序语句并标识、识别提取标识符、运算符提取中间量和标识函数,为程序语句中各个量赋予权重,以及利用栈和链表依据权重对程序语句各个量排序。
将程序语句解析为语法树的具体内容也可以是:采用语言分析器ANTLR4及特定Matlab-Simulink规则完成。所形成的抽象语法树AMT在形式上等同于上述方案的形成结果。
进一步地,所述步骤8具体如下:
步骤801,自动化转换定义与初始化语句。转换过程中,待转换程序语句支持的基本类型包括整数型、实数型、字符数据、逻辑值型、阵列数据、Matlab-Simulink的内置函数及使用Matlab编辑器编写的自定义函数,整数型包括多位有符号字和无符号字整数,实数型包括单精度浮点数和双精度数浮点数;NuSMV支持类型包括布尔型、整数型、枚举型、有符号字、无符号字、数组型和set类型。
其中,Simulink-StateFlow模型中的程序语句中的逻辑值型(Logical,0~1)与NuSMV中的布尔型(boolean)对应;程序语句中的整数型(Int/Unit,-231~231)与NuSMV中的整数型(integer,-231+1~231-1)对应;程序语句中的单精度浮点数(Single)与NuSMV中的有符号字(signed)对应;双精度浮点数(Double)与NuSMV中的无符号字(unsigned)对应。
程序语句中的字符型和其他类型一般以枚举的形式出现,对应NuSMV中的枚举类型。程序语句中的状态变量可直接映射到NuSMV的状态变量,且类型相同,名称保持不变;环境变量的转换取决于状态变量,在模型转换过程中根据实际情况,将环境变量先通过状态变量表述,然后再对状态变量进行转换。
步骤802,将自定义函数转换为NuSMV中的模块。自定义函数同样使用Matlab编程语言编写。对于函数语句中算数运算符的转换,需要同时对结果进行验证,使其符合NuSMV常量的取值范围。在NuSMV验证的过程中,只有验证模型中可被NuSMV识别的Matlab函数会被调用参与运算和执行,其他在书写程序语句及自定义函数时使用的Matlab内置函数(如反卷积函数decnov、创建全零数组函数zeros等)不可被识别,需要在语法分析的过程中被筛选定位,将其单独转换为可识别的语句或程序步骤。而后将转换后的自定义函数体返回。
步骤803,判断语句类型,自动转换赋值语句、循环语句和判断语句。对于循环及判断语句,NuSMV中使用“case”表达式描述条件的转移过程,将待转换状态模型中的每一条转移映射为NuSMV中的条件表达式。针对状态模型中的每一个待定状态,找出状态模型中所有改变NuSMV环境变量的赋值行为,并将其转换为对应的case子句。
步骤804,生成转换后的NuSMV模型。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的实质和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的保护范围。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (10)
1.一种从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,包括如下步骤:
步骤1、对待评估的***进行需求形式化分析,并构建Simulink-StateFlow模型;生成项目工程文件,项目工程文件包括:JSON格式文件、C语言格式文件和SVG格式文件;
步骤2、分析JSON格式文件的格式特征,从JSON格式文件中提取程序语句,构建程序语句数据表;
步骤3、分析C语言格式文件的格式特征,从C语言格式文件中提取自定义函数语句,构架自定义函数数据表;
步骤4、分析SVG格式文件的格式特征,读取步骤2中提取到的程序语句的逻辑顺序关系,构建逻辑顺序数据表;
步骤5、根据步骤2、步骤4中构建的程序语句数据表和逻辑顺序数据表,使用算法整合模型程序及顺序,生成Simulink模型信息表;
步骤6,对程序语句所使用的Matlab编程语言进行分析,构建Matlab语言的语法规则;
步骤7,根据步骤6给出的Matlab语言的语法规则对Simulink模型信息表中的程序语句进行处理,将程序语句解析为抽象语法树AMT;
步骤8,对抽象语法树AMT进行处理,确定转换为NuSMV语句的转换算法;根据转换算法,处理Simulink模型信息表,生成NuSMV模型。
2.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于:步骤1中,构建Simulink-StateFlow模型的具体内容是:绘制模型的图块、起点、转移、连接点,输入程序语句,以及编写自定义函数;
Simulink状态图绘制完成后,通过Simulink菜单:File->Export Model to->Web,选择导出模式为Entire Model-Export,生成项目工程文件;JSON格式文件用于记录Simulink建模过程中填写的所有状态迁移所需程序语句;C语言格式文件用于记录Simulink建模过程中填写的所有自定义函数语句;SVG格式文件用于记录Simulink建模过程中所绘制的所有状态迁移流程。
3.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤2中,提取程序语句的算法具体为:遍历JSON数据文件序列、过滤冗余项inspector、提取程序语句所在项、过滤冗余字符和整合数据结构;根据JSON格式文件特征,定义如下的数据结构来表示程序语句数据表的数据关系:[Sid,ExecutionOrder,Program],其中,Sid表示程序的标识编号,ExecutionOrder表示程序执行的分支顺序信息,ExecutionOrder={1,2},当ExecutionOrder为1时,表示该程序语句所在分支为优先执行的分支,当ExecutionOrder为2时,表示该程序语句执行顺序处于分支1之后,Program表示具体的程序语句体。
4.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤3中,提取自定义函数语句的算法具体为:遍历C语言格式文件序列、定位自定义函数关键词所在行、提取函数名、提取函数体、过滤冗余字符和整合数据结构;根据C语言格式文件和自定义函数体格式,定义如下的数据结构来表示自定义函数数据表的数据关系:[FunctionTitle,FunctionBody],其中,FunctionTitle表示自定义函数的函数名,FunctionBody表示自定义函数的函数体。
5.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤4中,使用的读取算法具体如下:
步骤401、读入SVG格式文件;
步骤402、在各图块内部进行逻辑排序操作;首先寻找块内各框图的起点,计算并标明起点坐标、编号、类型;其次寻找块内各框图中的连接点,计算并标明连接点坐标、类型、编号;寻找块内各框图中的转移,计算并标明转移起始端点坐标、终止端点坐标、类型、编号;针对每一组转移,寻找其起始和到达的起点或连接点;最后读取规范化转移列表信息,根据前置连接点和后置连接点,过滤掉连接点的中间运算,列举转移间的逻辑关系;
步骤403、在各图块之间进行逻辑排序操作;首先寻找总框图的起点,并标明起点坐标、编号、类型;寻找总图中的转移,并标明转移起始端点坐标、终止端点坐标、类型、编号;寻找块内各图块中的上下边界,并标明图块边界的坐标、类型、编号;针对每一组转移,寻找其起始和到达的图块边界;读取规范化转移列表信息,根据前置图块边界和后置图块边界,列举转移和图块间的逻辑关系;
步骤404、整合步骤402与步骤403中获得的逻辑关系信息。
6.如权利要求5所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于:定义如下的数据结构来表示程序对应的框图编号关系:[Identifier_Front,Identifier_Behind];其中,Identifier_Front表示逻辑前置元素的编号,Identifier_Behind表示逻辑后置元素的编号,在逻辑顺序层面,元素Identifier_Front在元素Identifier_Behind之前,二者之间存在一条有向路径;
定义如下的数据结构来表示SVG中图形元素的标识关系:[Element_Identifier,Element_ID,Element_ParentID];其中,Element_Identifier表示SVG中元素对应的自定义编号,Element_ID表示SVG中元素对应的原始标识号,Element_ParentID表示SVG图中每条程序语句对应的框图的原始标识号;
定义如下的数据结构来表示SVG中图形元素中起点的状态信息:[StartPoint_Identifier,StartPoint_Type,StartPoint_ParentID];其中,StartPoint_Identifier表示SVG图中的所有起点对应的自定义编号,StartPoint_Type表示SVG图中起点的类型,StartPoint_Type={block_in,block_out},当StartPoint_Type取值block_in时,表示该起点位于图块之内,当StartPoint_Type取block_out时,表示该起点位于图块之外,StartPoint_ParentID表示每个起点对应的图块的原始标识号;
参照以上三个数据结构,分别生成逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID,以及起点状态信息表List_StartPoint,存储SVG图中提取到的逻辑信息。
7.如权利要求6所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤5中,整合模型程序及顺序的算法具体如下:
步骤501、读取起点状态信息表List_StartPoint、逻辑顺序数据表List_ElementOrder、元素编号信息表List_IdentifierID以及程序语句数据表List_JsonProgram;
步骤502、整合数据表中的起点信息、图块信息、程序语句信息;
步骤503、记录每个框图内的程序语句数目;
步骤504、采用栈型结构辅助整理所有程序语句的先后顺序,构建程序数据存放栈;
步骤505、生成Simulink模型信息表,Simulink模型信息表包括有序程序语句表List_ProgramOrder和元素分支映射表Map_Branch。
8.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤6中,对Matlab编程语言进行分析的具体内容是:程序语句的提取和排序、程序语句词法解析、判断程序语句类型、调整程序语句、去除冗余项、添加计数器和生成转换模型。
9.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于,步骤7中,将程序语句解析为抽象语法树的具体内容是:读取程序语句并标识、识别提取标识符、运算符提取中间量和标识函数,为程序语句中各个量赋予权重,以及利用栈和链表依据权重对程序语句各个量排序。
10.如权利要求1所述的从Simulink-StateFlow模型到NuSMV模型的转换方法,其特征在于:所述步骤8具体如下:
步骤801、自动化转换定义与初始化语句;转换过程中,待转换程序语句支持的基本类型包括整数型、实数型、字符数据、逻辑值型、阵列数据、Matlab-Simulink的内置函数及使用Matlab编辑器编写的自定义函数,整数型包括多位有符号字和无符号字整数,实数型包括单精度浮点数和双精度数浮点数;NuSMV支持类型包括布尔型、整数型、枚举型、有符号字、无符号字、数组型和set类型;
其中,程序语句中的逻辑值型与NuSMV中的布尔型对应;程序语句中的整数型与NuSMV中的整数型对应;程序语句中的单精度浮点数与NuSMV中的有符号字对应;程序语句中的双精度浮点数与NuSMV中的无符号字对应;
程序语句中的状态变量直接映射到NuSMV的状态变量,且类型相同,名称保持不变;环境变量的转换取决于状态变量,在模型转换过程中根据实际情况,将环境变量先通过状态变量表述,然后再对状态变量进行转换;
步骤802、将自定义函数转换为NuSMV中的模块;自定义函数同样使用Matlab编程语言编写;对于函数语句中算数运算符的转换,需要同时对结果进行验证,使其符合NuSMV常量的取值范围;在NuSMV验证的过程中,只有验证模型中能够被NuSMV识别的Matlab函数会被调用参与运算和执行,其他在书写程序语句及自定义函数时使用的Matlab内置函数不可被识别,需要在语法分析的过程中被筛选定位,将其单独转换为可识别的语句或程序步骤;而后将转换后的自定义函数体返回;
步骤803、判断语句类型,自动转换赋值语句、循环语句和判断语句;对于循环及判断语句,NuSMV中使用case表达式描述条件的转移过程,将待转换状态模型中的每一条转移映射为NuSMV中的条件表达式;针对状态模型中的每一个待定状态,找出状态模型中所有改变NuSMV环境变量的赋值行为,并将其转换为对应的case子句;
步骤804、生成转换后的NuSMV模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210789598.1A CN115391173A (zh) | 2022-07-06 | 2022-07-06 | 从Simulink-StateFlow模型到NuSMV模型的转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210789598.1A CN115391173A (zh) | 2022-07-06 | 2022-07-06 | 从Simulink-StateFlow模型到NuSMV模型的转换方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115391173A true CN115391173A (zh) | 2022-11-25 |
Family
ID=84115922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210789598.1A Pending CN115391173A (zh) | 2022-07-06 | 2022-07-06 | 从Simulink-StateFlow模型到NuSMV模型的转换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115391173A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117648833A (zh) * | 2024-01-30 | 2024-03-05 | 浙江大学 | Simulink到SysML的模型生成方法和装置 |
-
2022
- 2022-07-06 CN CN202210789598.1A patent/CN115391173A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117648833A (zh) * | 2024-01-30 | 2024-03-05 | 浙江大学 | Simulink到SysML的模型生成方法和装置 |
CN117648833B (zh) * | 2024-01-30 | 2024-05-17 | 浙江大学 | Simulink到SysML的模型生成方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Balanyi et al. | Mining design patterns from C++ source code | |
Waters | The programmer's apprentice: A session with KBEmacs | |
CN103955426B (zh) | 一种检测c代码空指针引用的方法及*** | |
CN109189479B (zh) | 一种用于处理器指令集的并行自动化验证方法 | |
AU4098700A (en) | Circuit arrangement for measuring the resistances of a pressure-sensitive resistance mat | |
CN111459799A (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
CN104298594A (zh) | 一种源代码中值计算错误的自动检测和定位方法 | |
CN114510267B (zh) | 基于Linux***的程序ABI接口兼容性计算方法 | |
CN102054100A (zh) | 一种基于静态分析的rtl设计错误检测方法和*** | |
Min et al. | Survey on software clone detection research | |
CN115391173A (zh) | 从Simulink-StateFlow模型到NuSMV模型的转换方法 | |
Bernaerts et al. | Validating industrial requirements with a contract-based approach | |
CN105022692A (zh) | 一种死锁检测验证方法 | |
US9298858B1 (en) | System and method for reducing models based on a criterion | |
CN101930401A (zh) | 一种基于检测对象的软件漏洞模型检测方法 | |
CN104885060A (zh) | 数据漏更新检查装置、数据漏更新检查方法、数据漏更新检查程序 | |
CN115080448B (zh) | 一种软件代码不可达路径自动检测的方法和装置 | |
CN115039083A (zh) | 逻辑连接程序执行时生成的异步算法合法性验证使能方法 | |
CN111506513B (zh) | 一种基于层次化模型的文件***测试方法 | |
CN114781330A (zh) | 一种基于需求建模的类型检查方法 | |
CN110659200A (zh) | 航空机载软件的源码和目标码对比分析方法及*** | |
CN114090611A (zh) | 一种端子接线表生成电缆清册的方法、装置及电子设备 | |
Miceli et al. | A metric based technique for design flaws detection and correction | |
Sun et al. | A hierarchical CPN model automatically generating method aiming at multithreading program algorithm error detection | |
AU760395B2 (en) | Program reproducing method and device, and medium on which program for program reproduction recording |
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 |