了解fmi、ssp与dcp

990 阅读8分钟

fmi是仿真模型规范,ssp是存储模块参数的规范,而dcp是分布式仿真的应用层通信协议。

一、fmi、ssp与dcp

FMI

1. 为什么需要FMI

仿真软件面临的难题:

  • 模型是多来源且异构的
  • 工具之间的接口不统一,难以实现多工具的联合仿真
  • 封装模型传递过程中无法有效利用已确定的仿真参数和架构信息或数据,需要二次设置参数和重新拖拽连接模型
  • 数据交互的通信协议和接口不统一
  • 代表非实时、软实时和硬实时系统之间的软硬件工具的联合仿真通信方法有待完善,简化应用配置工作,降低应用门槛

仿真工作可以分为系统级以及部件级,系统级相当于制造汽车,而部件级表示制造汽车过程中涉及的架构、零件等设计流程。在这个研发过程中,会使用到不同供应商提供的软件。这些软件接口不一,模型不一致,很难进行协同研发。在这种情况下,FMI应运而生。

FMI标准的诞生来自于欧盟Modelisar项目,最初由Daimler AG发起、组织和领导,有28个欧洲伙伴参与,这包括工具供应商、工业用户和科研机构。Modelisar项目于2008年启动,第一期项目到2011年结束,第一期项目共投入经费超过3千万欧元,制定了FMI1.0标准。2012年,FMI2.0标准的制定纳入到Modelica协会管理下(Modelica协会是Modelica语义制定和维护的非营利组织),并在2014年初推出了FMI2.0的成熟标准。

2. FMI的主要设计思想

FMI为针对功能和性能模型重用的接口标准,通过FMI标准导出的文件是一个压缩包,文件的扩展名为“.fmu”,故称依据FMI标准导出的用于模型重用的文件为FMU文件,即Functional Mock-up Unit。

FMU的压缩包文件里包含了:

  • 描述模型接口信息和数据的“.xml”文件(modelDescription.xml)
  • 实现模型动态行为功能的文件(C代码或二进制文件)
  • 其他用户希望包含在FMU中的文件和数据

FMI规范:

  • 模型重用
    • 模型交换(不包含求解模型方程的求解器)
    • 联合仿真(依据Co-Simulation方法导出,包含求解器)
  • 模型导出加密(知识产权保护)

2.1 Model Exchange(模型交换)

此方法导出的FMU文件不包含求解器,其只包括输入/输出接口和描述物理动态行为的微分代数方程、时间、状态和离散事件等信息。FMU的求解使用导入它的工具的求解器,并与其他模型一起求解,由于使用一个求解器,提高了求解的效率和精度,此方法特别适合大规模模型集成的应用情况,同时其求解占用的系统开销很小,也适合嵌入式系统的应用。FMI标准的专家推荐模型集成和重用优选Model Exchange方法。

2.2 Co-Simulation方法

Co-Simulation即为联合仿真方法,此方法并不是FMI标准首创,而是在FMI标准的Co-Simulation方法制定之前既已存在。它基于传统的联合仿真方法,并进行了优化和丰富:

  • 支持主/从架构
  • 考虑不同能力的仿真工具
  • 支持简单和复杂的耦合算法:
    • 迭代和直接反馈算法
    • 固定和变化的通信步长
  • 允许(高阶)连续输入的插值
  • 支持本地和分布式联合仿真方案

按照使用场景,分为以下三种模式:

  • 代码导出方式的Co-Simulation(不依赖工具,可独立运行)
  • 工具耦合方式的Co-Simulation(依赖指定软件,同一平台多线程)
  • 分布式方式的Co-Simulation(依赖指定软件,分布于不同平台中)

FMI标准虽然提供了模型交换和联合仿真的功能,但是还无法描述结构相对复杂的模型。

3. 文件结构

3.1 modelDescription.xml

信息描述文件采用XML格式,其中包含模型的所有变量信息,下表列出了变量信息的属性及其意义。

属性名描述信息
name变量的名字。在一个FMU中,变量名字是一个变量的唯一标识,即在同一个FMU中不允许出现两个名字一样的变量。
valueReference
一个变量的操作编号,用于FMU操作函数中对变量的操作。在一个FMU中,其值对于任何一种数据类型(下表中的declaredType)数据是唯一的,即数据类型和 valueReference可以在FMU操作函数中唯一标识一个变量。
description一个可选的信息用于描述变量的作用或其它。
variability定义该变量值的可改变性。可以取以下值:

constant:变量的值是不可改变的;
parameter:被看作是模型的参数,变量的值在初始化(初始化函数见下文)之后就不能再修改了;
discrete:变量值仅在初始化和触发事件时可以被更改;
continues:任何时间都可以修改变量值,但只有当变量的类型为Real时才可用。
causality定义变量与外界交互时出现的形态,当FMU需要与其它模型相关联时才能发挥作用,其可取值如下(默认状态下,其值为internal。):

input:表明变量可以从外界获得输入值,用于FMU自身的求解,默认状态下,其初始值为下表中”start”的值;
output:为其它FMU提供输入结果,使本FMU的计算结果可以影响到其它模型;
internal:FMU的内部变量,在初始化工作结束后提供数据值,不能用于模型间的连接操作,在初始化之前,其值为”start”的值;
none:不影响模型运算的变量,用于标记一些环境相关的值,用的不多。
alias可选属性。定义变量是否为一个别名变量,其可取值如下(默认值为noAlias):

noAlias:表明变量不是一个别名变量;
alias:表明变量是一个别名变量,真实值可以通过其进行读写操作;
negatedAlias:是一个别名变量,但其值和真实值的符号总是相反。
declaredType变量的类型,FMI1.0 标准提供的变量类型为 Real、Integer、Boolean、String和Enumeration五种,针对各自类型,FMI提供对应的读写函数
start变量的初始值,如果一个变量的causality=”input”,则其必须拥有start属性。
fixed用来定义”start”属性的含义,如果fixed=true, start属性值将会被直接初始化到变量的值,否则,会经过迭代计算获得,默认值为true。

3.2 DLL

执行库文件,以动态链接库的形式(.dll)存在,其中包含FMU求解所需要的所有函数接口,默认采用C语言格式编写,可以提供源码或二进制形式的文件,能够被其它不同平台所调用

3.3 其它文件

模型其它相关信息,如图标、文档等,该部分不参与模型的运行,作为辅助信息提供给模型使用者。

SSP

SSP(SystemStructure and Parameterization)是一种与工具无关的格式,用于描述、打包和交换系统的结构及其参数化。该标准由一组基于XML格式的文件组成,这些XML使用信号流和参数化的方法描述了一个组件模型网络。该标准的XML描述文件是工具中立的,主要用于不同工具之间仿真系统的信息交换。

"*.SPP"压缩包格式:

  • *.fmu:Functional Mock-up Unit
  • *.ssm:SystemStructure Parameter Mapping
  • *.ssv:SystemStructure Parameter Values
  • *.ssd:SystemStructure Definition
  • *.ssb:SystemStructure Signal Dictionaries

SSP标准的主要目的是:

  • 为组件网络(特别是FMUs)的连接结构定义标准化格式。
  • 定义一种标准化的方法来存储和应用这些组件的参数。
  • 所开发的标准/APIs在开发过程的所有阶段都可用(架构定义、集成、仿真、MiL、SiL、HiL中的测试)。
  • 视作FMI2.0标准的拓展,与FMI在功能上有效互补

DCP

DCP(DistributedCo-Simulation Protocol),即分布式联合仿真协议。它是一种应用层通信协议,旨在将模型或实时系统集成到仿真环境中。它支持使用底层传输协议(如UDP、TCP或CAN)交换与仿真相关的配置信息和数据。同时,DCP支持集成来自不同供应商的工具和实时系统。DCP旨在提高基于工作流仿真的效率,并减少系统集成中的调试工作量。

总结

FMI、SSP、DCP犹如系统仿真技术在复杂系统模型集成和仿真应用时的利器:FMI提供了统一的接口实现模型交换(ME)和联合仿真(CO)两种工作模式;SSP有效补充了基于FMI标准进行模型重用时的参数和架构信息与数据;DCP规范了通信,将FMI应用范围推广到实时应用领域,且实现了V流程下MiL、SiL、HiL模型的连续传递重用,实现了非实时、软实时和硬实时系统的通信联合仿真。

二、参考资料

FMI、SSP、DCP简介