一种将SysML模型进行仿真验证的方法与流程

文档序号:15685240发布日期:2018-10-16 20:59阅读:1261来源:国知局
本发明属于软件模型验证领域,具体涉及将sysml模块定义图和活动图转换为modelica模型并利用openmodelica进行仿真的方法,通过对早期的sysml模型进行仿真来验证系统的业务逻辑。
背景技术
:随着现代软件系统的复杂程度不断递增,系统建模过程变得更加复杂和难以把握。除此之外,如何在系统开发早期阶段对系统的抽象模型进行分析验证也成为了一个研究的难点。基于模型的开发技术优点之一就是可以利用各种方法进行软件正确性和可靠性验证。常见的方法可以分为仿真验证和形式化验证,其中形式化验证方法又可以分为定理证明和模型检测。定理证明是构建一个形式化的公理系统,包括推理规则。使用严格的推导证明来验证软件的正确性。定理证明推导过程中虽然一部分可以做到自动化,但在多数情况下还是需要人工的参与。因此,它不适合用于大型软件系统的性质验证。模型检测是比较常用的方法,通过穷尽系统状态空间进行相关性质的检验,但它的主要难点在于解决状态空间爆炸的问题。仿真验证是相对简便有效的方法,通过对系统模型仿真并分析仿真结果来验证系统性质。simulink被广泛用来对系统模型进行仿真,其方法是建立严格的数学模型。它是根据控制工程中数据流转换的规律来建模、仿真,需要对模型进行手工推导和分解。这无疑增加的了系统验证时的工作难度,而且效率较低。基于modelica语言的建模与仿真可以利用微分方程组对系统的行为进行描述并实现仿真运行,支持面向对象、非因果的连续与离散混合建模仿真。另外,相对于simulink,modelica基于方程的非因果建模仿真可以将使用者从繁琐的推理和分解工作中解脱出来。因此,使用modelica进行仿真是一个较为有效的方法。sysml是一种表意丰富的图形化语言,可以对系统的结构和行为进行详细地描述。但是sysml模型无法直接进行仿真验证,因此,通过将sysml模型转换成modelica模型进行仿真验证可以在早期的开发阶段对系统特定的业务需求进行验证,从而及早发现错误并修正。技术实现要素:本发明的目的是提供一种将sysml模块定义图和活动图转换成modelica模型进行仿真的方法;首先定义sysml模块定义图以及活动图元素到modelica模型元素的转换规则;然后以模块定义图和活动图的xmi文档为输入,解析文档获取模块定义图和活动图的基本元素信息;接着根据模块定义图和活动图中元素与modelica模型中元素的转换规则进行模型转换;最后将转换后的modelica模型导入工具openmodelica中进行仿真验证。实现本发明目的的具体技术方案是:一种将sysml模型进行仿真验证的方法,该方法包括以下具体步骤:步骤1:定义sysml模块定义图以及活动图元素到modelica模型元素的转换规则;步骤2:以模块定义图的xmi文档为输入进行解析,获取模块定义图中基本元素即模块(block)以及模块的值属性信息;步骤3:以活动图的xmi文档为输入进行解析,获取活动图基本元素即活动分区、活动参数、节点以及边的信息;步骤4:根据转换规则将获取的sysml活动图和模块定义图的基本元素转换成modelica模型中的元素;步骤5:将转换后的modelica模型导入仿真工具,根据活动图中决定节点上的条件表达式确定仿真参数,之后进行仿真验证。步骤1中,所述sysml模块定义图以及活动图元素到modelica模型元素的转换规则为:(i)模块定义图的中的每一个模块对应一个modelica模型,模块拥有的值属性对应modelica模型声明区的变量、参数;(ii)活动图中每一个活动分区对应一个modelica模型;基本动作以及发送信号动作转换为方程;等待时间动作节点根据不同类型的时间事件分别进行转换,绝对时间事件的等待时间动作转换为when语句,相对时间事件的等待时间动作需要在声明区先声明一个timer类型实例,之后转换为if语句;接受事件动作转换为modelica模型中的if语句;决定节点与其分支转换为if语句;合并节点与决定节点组合形成的循环结构转换为while语句。步骤2中,模块定义图xmi文档所需要解析的为:<packagedelement>标签,<ownedattribute>标签,<defaultvalue>标签,<type>标签。步骤3中,活动图xmi文档所需要解析的为:<group>标签,<node>标签,<ownedparameter>标签,<edge>标签,<guard>标签。步骤4具体包括:先通过解析活动图xmi文档获取所有活动分区集合、节点集合以及边集合;为每一个活动分区创建一个modelica模型,并通过解析模块定义图xmi文档获取对应模块的变量集合以及参数集合,依次在模型声明区对这些变量和参数进行声明;若活动图中包含相对时间事件的等待时间动作,则在模型声明区声明一个timer实例;然后,从活动分区的开始节点出发向下遍历,并根据不同的节点类型在模型algorithm区域输出不同的内容,包括选择、循环以及并发结构;并发结构的处理方法是每个并发分支单独进行转换,选择结构和循环结构则分别通过选择结构处理方法和循环结构处理方法。步骤5中,所述根据活动图中决定节点上的条件表达式和所覆盖分支上的监值确定仿真参数,具体包括:条件表达式的一般形式为e1ope2,其中e1为仿真参数,e2为数值或布尔值,op为数学比较符号,op∈{<,≤,>,≥,==};所覆盖分支上的监值为false或true;(i)op∈{<,≤},所覆盖分支上的监值为false时,e1的取值为大于e2;所覆盖分支上的监值为true时,e1的取值为小于e2;(ii)op∈{>,≥},所覆盖分支上的监值为false时,e1的取值为小于e2;所覆盖分支上的监值为true时,e1的取值为大于e2;(iii)op为==,e2为数值,所覆盖分支上的监值为false时,e1取值为不等于e2;所覆盖分支上的监值为true时,e1取值为等于e2;(iv)op为==,e2为布尔值,所覆盖分支上的监值为false时,e1取值为false;所覆盖分支上的监值为true时,e1取值true。对软件系统模型的验证可以从多个方面出发,如何在早期开发阶段对系统的性质进行验证已经成为一个研究的难点。本发明通过将sysml活动图和模块定义图转换为modelica模型进行仿真,可以在早期开发阶段进行系统模型验证,发现错误,验证需求是否满足特定业务逻辑。附图说明图1是sysml模块定义图;图2是sysml活动图;图3是图2活动图转换后的modelica模型图;图4是转换后的modelica模型在openmodelica工具中的仿真结果图。具体实施方式本发明包括以下具体步骤:步骤1:定义sysml模块定义图以及活动图元素到modelica模型元素的转换规则。具体为:模块定义图:模块定义图中每一个block元素对应一个modelica模型实例,block的值属性被转换为其对应modelica模型声明区的元素;值属性中的参数将被转换成modelica模型中的参数,包括参数类型、名称以及默认值;值属性中的变量转换成modelica模型的变量,包括变量类型和变量名;活动图:活动图中每一个活动分区元素对应一个modelica模型实例,活动参数对应模型声明区的参数,其余活动图元素将会转换为modelica模型algorithm区域的元素;基本动作以及发送信号动作转换为方程;等待时间动作节点根据不同类型的时间事件分别进行转换,绝对时间事件的等待时间动作转换为when语句,相对时间事件的等待时间动作需要在声明区先声明一个timer类型实例,之后转换为if语句;接受事件动作转换为modelica模型中的if语句;决定节点与其分支转换为if语句,合并节点与决定节点组合形成的循环结构转换为while语句;表1展示了模块定义图以及活动图中元素与modelica模型元素的转换规则。表1.模块定义图、活动图元素与modelica模型元素的转换规则表步骤2:以模块定义图的xmi文档为输入,解析文档提取模块定义图中的基本元素信息。具体为:模块定义图xmi文档中属性xmi:type为"uml:class"的<packagedelement>标签保存了每一个block的信息,标签的name属性记录了block的名称;<packagedelement>标签下的每一个<ownedattribute>标签对应一个block的值属性;<ownedattribute>标签的name属性记录了每一个值属性的名称,而isstatic属性区分了值属性的类型;当isstatic的属性值为“true”时,该值属性为参数变量并含有一个默认值,该默认值由<ownedattribute>标签下的<defaultvalue>标签保存;否则,该值属性代表一般变量;<ownedattribute>标签下的<type>标签记录了值属性所代表的变量的数据类型;表2展示了了模块定义图xmi文档中标签与模块定义图元素的映射关系。表2.模块定义图xmi标签与元素映射关系xmi标签模块定义图元素<packagedelementxmi:type=”uml:class”>模块(block)<ownedattribute>值属性<defaultvalue>参数默认值<type>变量类型步骤3:以活动图的xmi文档为输入,解析文档提取活动图中的基本元素信息。具体为:活动图xmi文档中每一个<group>标签对应一个活动分区,标签的name属性记录了活动分区的名称;<group>标签下的每一个<node>标签对应该活动分区包含的每一个节点;<node>标签的属性xmi:type记录了节点的类型,类型包括各种控制节点和动作节点;当该节点属于动作节点时,其属性name记录了对动作的描述;<ownedparameter>标签对应一个活动参数,该标签中的xmi:type属性记录了活动参数的类型,name属性记录了活动参数的名称;<edge>标签对应一条转移边,标签的source属性记录了转移边源节点的id值,而target属性则记录了转移边目标节点的id值;当该转移边的源节点类型是决定节点时,其<edge>标签下的<guard>标签记录此转移边上的转移条件即监值(guard);表3给出了活动图xmi文档中标签与活动图元素的映射关系。表3.活动图xmi标签与元素映射关系xmi标签活动图元素<group>活动分区<node>结点<ownedparameter>活动参数<edge>边<guard>边上的监值步骤4:根据转换规则将解析获取的活动图和模块定义图的基本元素转换成相对应的modelica模型元素。具体为:首先通过解析活动图xmi文档获取所有活动分区集合、节点集合以及边集合;对每一个活动分区创建一个modelica模型,并通过解析模块定义图xmi文档法获取对应模块的变量集合以及参数集合,依次在模型声明区对这些变量和参数进行声明;若活动图中包含相对时间事件的等待时间动作,则在模型声明区声明一个timer实例;之后,从活动分区的开始节点出发向下遍历,并根据节点的类型在模型algorithm区域输出不同的内容;其中包含选择、循环以及并发结构的处理,并发结构的处理方法是每个并发分支单独进行转换,选择结构和循环结构则分别通过选择结构处理方法和循环结构处理方法;循环结构通过合并结点以及决定结点构建,对应modelica模型中while语句;具体的处理方法如下:当遇到循环结构的入口合并结点时,继续向下找到决定结点;决定节点上的表达式转换为while循环语句中条件表达式;之后选择决定节点true分支继续向下遍历,当再次遇到入口合并结点时则表示循环结构结束;选择结构对应modelica模型中if语句;具体的处理方法如下:当遇到选择结构的入口决定结点时,将决定节点上的表达式转换为if语句之后的条件表达式;然后选择决定节点的true分支,向下遍历依次处理不同类型的结点;如果是一般的动作节点则直接转换为方程;处理完true分支后,以相同的方法处理false分支;同时,每个分支中可以嵌套选择结构和循环结构。步骤5:将转换后的modelica模型导入仿真工具,根据活动图中决定节点上的条件表达式和所覆盖分支上的监值确定仿真参数,之后进行仿真验证。具体为:条件表达式的一般形式为e1ope2,其中e1为仿真参数,e2为数值或布尔值,op为数学比较符号,op∈{<,≤,>,≥,==};所覆盖分支上的监值为false或true;(i)op∈{<,≤},所覆盖分支上的监值为false时,e1的取值为大于e2;所覆盖分支上的监值为true时,e1的取值为小于e2;(ii)op∈{>,≥},所覆盖分支上的监值为false时,e1的取值为小于e2;所覆盖分支上的监值为true时,e1的取值为大于e2;(iii)op为==,e2为数值,所覆盖分支上的监值为false时,e1取值为不等于e2;所覆盖分支上的监值为true时,e1取值为等于e2;(iv)op为==,e2为布尔值,所覆盖分支上的监值为false时,e1取值为false;所覆盖分支上的监值为true时,e1取值true。实施例为了详细说明从sysml模块定义图以及活动图到modelica模型转换并进行仿真的各步骤,本实施例选择返回舱降落伞系统中主降落伞开启作为示例进行描述。下面结合附图对本发明实施例描述如下:步骤1:定义sysml模块定义图以及活动图元素到modelica模型元素的转换规则,如表1所示。步骤2:以图1模块定义图的xmi文档为输入,解析文档中<packagedelement>标签,<ownedattribute>标签,<defaultvalue>标签,<type>标签从而获取模块以及模块值属性元素信息;解析获取的信息如表4所示。表4模块以及模块值属性元素信息步骤3:以图2活动图的xmi文档为输入,解析文档中<group>标签,<node>标签,<ownedparameter>标签,<edge>标签,<guard>标签从而获取活动分区、活动参数、节点以及边元素信息。步骤4:根据转换规则将解析获取的活动图和模块定义图的基本元素转换成相对应的modelica模型元素。图2活动图转换后的modelica模型如图3所示。步骤5:将转换后的modelica模型导入仿真工具,根据活动图中决定节点上的条件表达式和所覆盖分支上的监值确定仿真参数,之后进行仿真验证。表5仿真参数本实施例验证返回舱降落伞系统是否可以正常发出opencmd命令,分析仿真结果发现,在{tm=8,sepflag=1,workmode=0}这组仿真参数下,系统并没有发出opencmd命令,opencmd的值始终为0,如图4所示。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1