前言
用通俗的语言来描述,基于模型的设计方法是从部件的功能和原理出发,使用基于模型设计的工具,图形化或者形式化文本的方式建立模型,通过仿真验证模型的正确性。最终自动生成代码,下载到目标平台上运行。从计算机科学的角度来看,基于模型的设计是一种“更高级”的计算机程序设计语言。模型到代码产生是软件自动化技术。
本博文对基于模型设计的概念,术语和相关技术做一个梳理。
系统理论
系统理论是一种从各个组件特定的物理,化学和生物特性中提取出一个复杂的结构的方法。简单地讲,就是考虑他们相互作用的结构。每个独立的部件的功能以及对整体贡献的功能。系统理论的主要方法之一是建立事物的模型。
模型的主要特征
-表现性(Representation)
模型表现了一个事物(A model represents some thing)
模型和事物通过态射(morphism)连接
-抽象性(Abstraction)
模型抑制了无关紧要的细节,专注重要的方面。
-实用性(Pragmatics)
模型为了某一个目的而设计。
模型的表示方法
建模的方法是为了某种目的,提取事物相关的体征,然后使用某一种形式化语言,无歧义地将模型描述出来。最常见的模型语言就是数学。比如E=mc^2 是爱因斯坦相对论的数学模型。当然,模型表示的方法不仅限于数学,具体的可以分为 文本型和图形两类。比如XML语言,状态图都是模型表。
模型和代码的关系
一直以来,模型都是为了理论分析和算法设计的使用,模型能够用来指导编程。但是模型和编码没有直接地联系。渐渐地模型和代码相互融合,最终结的结果是“模型即代码“,完全由代码直接在计算机上运行。下面的图展示的演变的过程。
模型驱动 X(Model Driven X)
- 模型驱动架构Model Driven Architecture (MDA)
- 模型驱动开发Model Driven Development (MDD) (e.g. UML)
- 模型驱动工程Model Driven Engineering (MDE)
- 基于模型的工程Model Based Engineering (MBE)
模型驱动架构
传统设计控制器的方法
传统设计控制器的方法:
- 在图纸上使用块图设计控制器。
- 使用一种程序设计语言完成设计
- 将控制器和控制对象模型(plant model)相集成
- 通过仿真,调节参数,直到满意
基于模型的设计(Model-Based Design)
- 从基于图纸的设计转向可执行模型
- 模型采集有关概念,设计和实现的所以信息
- 在开发的所有阶段(研究,设计,实现和验证)都使用模型
- 模型持续地更新和精益求精
MBA 定义了模型之间的概念区分和模型之间的相互转换
- 模型到模型的转换(Model-to-model transformation)
- 模型到代码的转换(Model-to-code transformation)
MBD:系统仿真
仿真的目的
验证和确认
为改善模型采集数据
软件在环(Software in the Loop)
硬件在环(Hardware in the Loop)
软件在环仿真(Software-in-the-Loop)
目的:验证从模型产生的代码是否功能等同于模型
从模型生成代码
这些代码在开发平台上与plant 模型一起运行
优点:
- 低成本
- 不必指定目标平台
硬件在环仿真(Hardware-in-the-Loop)
实时仿真方式
比如测试汽车ECU,HIL 的目的是为全面测试ECU提供所有电气仿真。
连接实际的ECU 到仿真器
控制对象是仿真的,ECU 是实际的。
MDA 模型驱动架构(Model Driven Architecture)
OMG 标准:模型驱动架构
模型的应用和产生,以改善软件开发过程。
目的:
加快开发过程:
- 通过形式化实现开发自动化(模型到代码自动的转换)。
- 通过抽象降低系统的复杂性。
MDA 过程 (MDA Process)
- 计算独立模型(Computation Independent Model):信息规范
- 平*立模型(Platform Independent Model)
模型独立于特定的计算平台
- 特定平台模型(Platform Specific Model)
- 代码模型和目标平台
MBD 开发环境 (MBD Development Environments)
MBD 开发环境是基于模型的开发工具,下面是一些著名的MBD 开发环境
MatLab/SimuLink
- 多域仿真和动态系统基于模型架构设计的开发环境
- 基本的表示方法是块和它们之间的数据流
- 提供特定领域的工具箱(例如:汽车)
- 提供代码生成的能力
dSPACE
- 汽车工业领先的MBD 开发工具
降低了嵌入式软件的复杂性
- 集成开发环境的特性
-系统设计,快速控制样机(rapid control prototyping),汽车生产,代码生成,硬件在环(HIL)测试
Eclipse Modeling Framework
Eclipse 为基础的模型架构和代码生成能力。
Xtext和Xtend 能够实现模型到模型的转换,模型到代码的转换。
Modelica
Modelica是一个开源的大型复杂系统建模语言,由瑞典的非盈利组织Modelica协会开发。
小结
未来进一步的研究主要集中在:
- 基于eclipse IDE 的DSL ,实现model-model 转换和model - code 的转换。
- modelica 开源项目的研究
感兴趣的读者可以相互交流。