simulink 模型上即时地翻译并运行类 ocl 的查询...4 driver是epsilon...

40
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulink 模型上即时地翻译并运行类 OCL 的查询 孙子平 清华大学 2019 11 25 孙子平 (清华大学) Simulink 模型上即时地翻译并运行类 OCL 2019 11 25 1 / 40

Upload: others

Post on 02-Feb-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    在 Simulink 模型上即时地翻译并运行类 OCL 的查询

    孙子平

    清华大学

    2019 年 11 月 25 日

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 1 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 2 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    介绍

    目标将 Simulink 模型转换成类 OCL 语言1能操控的格式。具体来说,本论文所指的类 OCL 语言是指 Epsilon 框架2下的 EOL 语言3。

    方法为 Epsilon 框架提供额外的 Simulink driver4,将 Epsilon 的操作直接转发给 MATLAB 的 API。

    最后论文对比了它与 Massif 之间的性能,得出它的方法在总执行时间上有一定的优势。

    1Object Constraint Language,一种操控 UML 的语言2一个模型管理框架,提供导入、转换、验证模型的一系列语言和工具3Epsilon 里最基础的语言,用于操控模型4driver 是 Epsilon 最底层对不同模型的统一抽象,有诸如 XML、EMF 之类的 driver孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 3 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 4 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 5 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Simulink 模型

    图 1: Simulink 模型示例

    1 Simulink 模型有 3 种元素,Block、Line 和 Port2 有子类型,如 Port 有 input 和 output 两种子类型,而图中素有高亮的元素都是 Block 的子类型,有 DiscretePulseGenerator、Gain、SecondOrderIntegrator 和 Outport

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 6 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    MATLAB 命令

    load_system carModelblocks=find_system('carModel','FindAll','on','Type','Block')gainBlocks=find_system('carModel','FindAll','on','BlockType','Gain')gain=add_block('simulink/Math Operations/Gain',

    'carModel/SubSystem/Gain')chartBlockType=get_param(gain,'BlockType')set_param(gain,'Name','newName')

    Listing 1: MATLAB/Simulink 命令

    上面的展示了:查找、添加、获取属性、修改属性。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 7 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    MATLAB Java API

    MATLAB 有 C++、Python、C、Fortran 和 Java 的接口。下面是 Java的 API。MATLABEngine eng = MATLABEngine.startMATLAB();eng.eval("load_system model;");eng.eval("m = getSimulinkBlockHandle('model')");Object m = eng.getVariable("m");eng.close()

    Listing 2: MATLAB Java API

    本论文使用了 MATLAB Java API。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 8 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 9 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Epsilon 架构

    Epsilon Model Connectivity (EMC)

    Epsilon Object Language (EOL)

    PatternLanguage (EPL)

    TransformationLanguage (ETL)

    ValidationLanguage (EVL)

    MigrationLanguage(Flock)

    Model-to-TextLanguage (EGL)

    RefactoringLanguage (EWL)

    ComparisonLanguage (ECL)

    MergingLanguage (EML)

    Unit Testing Framework (EUnit)

    EMF(XMI 2.x)

    MDR(XMI 1.x) PTC-IM XML

    MATLABSimulink

    图 2: Epsilon 架构

    EOL 是类 OCL 的模型查询转换语言,这是基础。EVL 用于验证的语言。ETL 用于模型之间转换的语言。EMC 是不同模型的抽象层,具体的实现称为 driver。本论文的贡献是实现了灰色的 MATLAB Simulink driver。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 10 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    EOL 代码示例

    var element = M!Block.all.first();var name = element.name;element.evaluate();var newElement = new M!Block;newElement.name = "My Block";

    Listing 3: EOL 示例代码

    all 是关键字,返回一个 collection,所有的 collection 有 first() 方法获取第 1 个元素。除此之外还演示了创建元素、获取修改属性和调用方法。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 11 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 12 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Massif 简介

    Eclipse Modelling Framework(EMF) 希望基于领域特定模型构建 Java 应用。这是论文的一个对照。Massif 项目用于将 Simulink 模型转换成 EMF 兼容的模型或者反之。这种转换是部分的,没有考虑到嵌套的 Stateflow 元素。

    图 3: Massif 元模型提供的 Simulink 元素类型

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 13 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Massif 值得注意的特点

    注意以下两点:

    在 Massif 中找不到 Simulink 对应的 block,都会被认为是 Block类型,有一个 parameters 属性,保存着 Property 的数组用以记录属性。

    Simulink 有 140 个 Block 类型,而 Massif 只有 11 个实际 Block类型。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 14 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 15 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    转换的架构

    论文称他们的工作为 Simulink EMC driver,下图是整体架构。

    图 4: Simulink EMC driver 架构

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 16 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    转换的示例

    考虑下面的 EOL 程序:Block.all.select(b|b.Name == 'MyBlock');

    它会首先翻译成下面的代码,其中? 会分别替换成模型名和 Block:find_system(?, 'type', '?',...)

    它会返回标识符集合,然后在获取 Name 属性的时,进一步执行下面的代码,其中占位符被替换成标识符:

    get_param(?, 'Name)

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 17 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 18 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    创建 Simulink block 元素

    当 EOL 中调用 new 关键字时,会调用 SimulinkModel 中下面的方法:createInstance(type:String)

    这个方法会调用 MATLAB 的 add_block 函数。下面是创建 Simulinkblock 元素的 EOL 代码示例。var sum = new `simulink/Math Operations/Sum`;var subsystem = new `simulink/Ports & Subsystems/Subsystem`;

    Listing 4: 创建 block 模型元素

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 19 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    创建 Simulink line 元素

    MATLAB 中并没有 add_port 函数。而 add_line 函数需要指定源和目标端口。因而 driver 并不是使用 new 创建 line,而是通过方法。下面是创建 Simulink line 元素的 EOL 代码示例。pulse.link(gain);gain.linkTo(integrator, 1);integrator.linkFrom(outport1, 1);integrator.linkFrom(outport2, 2);

    Listing 5: block 元素的连接方法

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 20 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    删除 Simulink 元素

    当 EOL 中调用 delete 关键字时,会调用 SimulinkModel 中下面的方法:

    deleteElementInModel(element:SimulinkModelElement)

    它会进一步调用 MATLAB 的 delete_block 或 delete_line。下面是删除 Simulink 元素的 EOL 代码示例。delete sum;delete subsystem;

    Listing 6: 删除模型元素

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 21 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    读取 Simulink 元素

    下面的 EOL 代码在给定模型 M 之后获取不同元素。这些方法调用会进一步调用 MATLAB 的 find_system 函数。

    var blocks = M!Block.all();var lines = M!Line.all();var ports = M!Port.all();var sums = M!Sum.all();var subsystems = M!SubSystem.all();M.allContents();

    Listing 7: 获取模型元素

    all 关键字会触发 getAllOfKindFromModel(kind:String) 的执行,其中 kind 参数可以是 Block、Line 和 Port。如果不是这些值,就会查询 MATLAB 子类型。而 allContents() 方法会调用allContentsFromModel() 方法,它汇总了所有的元素。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 22 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    更新 Simulink 元素

    SimulinkModel 将对模型属性的获取和修改传递到SimulinkPropertyGetter 和 SimulinkPropertySetter 的实例上。然后这两个方法会调用 get_param 和 set_param。下面的 EOL 代码展示了 getter 和 setter。subsystem.name = "Controller";var subsystemName = subsystem.name;sum.description = "Sum block";var sumDescription = sum.description;var inportHandles = subsystem.LineHandles.Inport;

    Listing 8: 获取设置模型元素属性

    第 5 行,LineHandles 返回了结构数组,这是 MATLAB 特有的类型存储着键值对,通过 MATLAB 的 getfield(element,property) 函数获取,论文的 driver 能处理这种情况。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 23 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    调用 MATLAB 方法除了连接方法外,driver 还提供了 getType()、getParent() 和getChildren() 等等。但 MATLAB 提供的函数比这些方法多很多,当出现未知的方法调用时,以下的策略会被使用。许多 Simulink API 会以模型元素作为第一个参数,就像下面这样:method_name(element, arg0, ..., argN)

    而 EOL 像下面这样执行方法:element.methodName(arg0, ..., argN);

    因此可以将 EOL 方法调用转成 MATLAB 的格式。像下面的 EOL 语句:subsystem.find_mdlrefs();subsystem.find_mdlrefs("AllLevels",true);

    会被转换为如下的 MATLAB 命令:find_mdlrefs(subsystem)find_mdlrefs(subsystem,'AllLevels',true)

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 24 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 25 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Stateflow 示例

    论文的 driver 能够处理 Stateflow 模型。下图是一个示例:

    图 5: Stateflow 模型示例

    在 MATLAB 中,所有的 Stateflow 类型都是以 Stateflow. 为前缀的,我们保留了这种约定。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 26 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    Stateflow 的所有模型元素都需要一个父亲才能实例化。然而除了创建时指定父亲,论文的 driver 能够延迟对模型元素的初始化,直到它的parent 属性被指定的时候,这个模型元素才会被真正地创建。使用下面的 EOL 语句可以创建上页中的模型:var on = new `Stateflow.State`;on.Name = "ON";on.parent = chart;var off = new `Stateflow.State`(chart);off.Name = "OFF";var tOnOff = new `Stateflow.Transition `(chart);tOnOff.Source = on;tOnOff.Destination = off;tOnOff.LabelString = "E1";

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 27 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 28 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    评测的模型

    有两种方式将 Simulink 转换为 Epsilon 能操控的模型:使用论文提出的 Simulink EMC driver 转成 Epsilon 可操控的,称为live;使用 Massif 转成 EMF 兼容的表示,在用 Epsilon 导入(对照),称为 Massif/EMF。

    此外 Epsilon 可以通过 CacheModel 缓存元素,论文还比较了缓存开启和禁用下的性能。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 29 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 30 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    示例测试脚本

    论文中采用 EVL 验证脚本的执行速度作为评判方法优劣的指标。这里是一个 EVL 验证脚本的示例,这个脚本用于验证 block 名是否为小写。context Block {

    critique BlockNameIsLowerCase {check: self.Name == self.Name.toLowerCase()fix {

    title: "Name to lower case"do {

    self.Name = self.Name.toLowerCase();}

    }}

    }

    Listing 9: 示例 EVL 脚本

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 31 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    验证步骤

    模型从转换、加载、验证可以分为 3 个步骤。其中步骤 0 只有 Massif需要。

    图 6: 验证的配置

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 32 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    验证脚本

    两种方式的 EVL 脚本是不相同的,比如访问一个 block 的PortDimension 属性,在 Simulink EMC driver 下是这样的:block.PortDimension;

    而在 Massif/EMF 下,我们通过 parameters 访问,如下:block.parameters.selectOne(p | p.name == "

    PortDimension").value;

    论文选取了 9 个测试脚本,live 的测试脚本有 96 行,而 Massif/EMF 的测试脚本有 110 行。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 33 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    模型选择

    论文在 GitHub 上寻找大于 1MB 的 Simulink 文件,找到了 70 个模型,然后挑选出 7 个能在 2 小时内用 Massif 转换到 EMF 的。下表展现了各个模型的大小及其中元素的个数。

    Size Block Inport Outport Goto From SubSystem1.112 8785 1373 1177 69 103 7171.131 8628 1372 1167 62 93 7401.133 8645 1372 1167 62 93 7401.134 9536 1489 1269 38 57 8611.135 8645 1372 1167 62 93 7401.138 8651 1376 1177 62 93 7451.141 8634 1374 1156 67 99 714

    表 1: 各个模型不同类型的元素个数

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 34 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 35 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    总的执行时间

    1.110 1.115 1.120 1.125 1.130 1.135 1.140MATLAB File size (MB)

    0

    10

    20

    30

    40

    50

    60

    70

    80

    90

    Tim

    e (m

    in)

    Massif Live Massif-Cached Live-Cached

    图 7: 总的执行时间相较于原始 MATLAB 文件大小

    可以看出总的执行时间开启缓存的 live 更优。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 36 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    每阶段执行时间

    1.110 1.115 1.120 1.125 1.130 1.135 1.140(a) MATLAB File size (MB)

    100

    101

    102

    103

    Tim

    e (s

    ) log

    sca

    le

    Stage = Import

    ApproachMassifLiveMassif-CachedLive-Cached

    1.110 1.115 1.120 1.125 1.130 1.135 1.140(b) MATLAB File size (MB)

    Stage = Loading

    1.110 1.115 1.120 1.125 1.130 1.135 1.140(c) MATLAB File size (MB)

    Stage = Validation

    图 8: 各阶段的执行时间(对数坐标)相对于原始 MATLAB 文件大小

    可以看出,Massif/EMF 主要的时间都花在了导入模型的阶段。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 37 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    目录

    1 介绍

    2 背景MATLAB/SimulinkEpsilonMassif

    3 实现Simulink 元素Stateflow 元素

    4 评测实验配置结果

    5 结论

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 38 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    结论

    1 性能:对于大型文件 live 方式更有优势,但如果验证的文件有很繁重的查询的时候,Massif/EMF 可能更好。live 的性能受限于MJ-API。

    2 元模型保真:live 方法极大地保留了 MATLAB 原始的 API。此外live 方法还保留了 Stateflow 元素。还有 MATLAB 特定的数据类型可以通过 live 方法获取,而在 EMF 中,它们是字符串。

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 39 / 40

  • ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    ...

    .

    感谢

    谢谢大家!

    孙子平 (清华大学) 在 Simulink 模型上即时地翻译并运行类 OCL 的查询 2019 年 11 月 25 日 40 / 40

    介绍背景MATLAB/SimulinkEpsilonMassif

    实现Simulink元素Stateflow元素

    评测实验配置结果

    结论