FMI联合仿真为联合仿真环境中仿真工具的耦合提供了接口标准。子系统之间的数据交换仅限于离散的通信点。在两个通信点之间的时间内,子系统由各自的求解器独立求解。主要算法控制子系统之间的数据交换和所有仿真求解器(子)的同步。
使用工具耦合方法进行联合仿真:在工具耦合方法中,FMU实现将FMI函数调用包装到仿真工具提供的API调用中。除了FMU之外,还需要仿真工具来运行一个联合仿真,如图1所示。
*Figure 1 *Cosimulation with tool coupling on a single computer
01
FMU的导出
1. 在SaberRD中创建设计
在将Saber设计导出到FMU之前,必须在SaberRD中创建Saber原理图设计。有关如何创建Saber原理图设计的信息,请参见SaberRD设计创建用户指南中的创建设计。
2. 为输入和输出添加分层端口
*为了将Saber设计导出到FMU,必须在设计中至少定义一个分层端口。您必须在需要导出为FMU中的输入/输出端口的节点上附加一个层次结构端口,如图2所示。
*Figure 2 *Adding hierarchical ports on schematic
*从部件库中的Schematic Connectors类别中选择适当的端口符号,并将其连接到需要导出到FMU的原理图节点。如果是离散端口和模拟控制端口,请将分级输入连接器连接到输入端口,将分级输出连接器连接到输出端口。对于物理模拟端口,如电气和液压端口,连接分层模拟连接器。
*注意:将错误的层次连接器连接到节点将导致FMU导出失败。在原理图中添加端口连接器的顺序很重要,因为在导出的FMU的modelDescription.xml中定义FMU端口时也使用相同的顺序。
3. 在原理图中增加设计参数(可选)
*对于任何需要作为设计参数暴露给父模拟器以便在联合模拟开始时对其进行修改的模型参数,都应该在原理图上添加设计参数。选择需要作为模型属性网格上的参数导出的属性,并将其值更改为所需的名称,该名称将在创建层次符号时用作层次参数。如图3所示。
*Figure 3 *Adding design parameters on schematic
*注意:只有标量、整数和字符串类型的属性可以导出为FMU参数。复合类型的模型参数,如MAST结构、数组、VHDL-AMS记录和向量不允许作为FMU导出的设计参数。
4.为Saber原理图创建层次符号
*一旦Saber设计的层次原理图准备好了,在将其导出到FMU之前,需要使用它的层次符号。
*要创建分层符号,右键单击原理图打开原理图编辑器Schematic Editor弹出菜单,单击Create下拉菜单,选择分层符号Hierarchical Symbol。
*注意:层次符号的名称必须与Saber设计相同。
*Figure 4 *Creating hierarchical symbol for schematic
** 5.编辑层次符号(可选 )**
*如果分层设计有任何设计参数或物理模拟端口,生成的符号需要手动更新,如下所示:在分层符号上添加设计参数:
*打开符号编辑器并加载生成的符号。在符号属性网格上,添加之前在原理图中添加的所有设计参数,并为它们分配适当的值,如图5所示。这些属性可以在父模拟器开始共同模拟时被更改。
Figure 5**Add design parameters on symbol
*更新分层符号上的物理端口方向和类型:对于离散和模拟控制端口,在创建Saber设计原理图时,在端口连接器上定义输入/输出信息。这些类型的端口不需要进一步处理。但是,模拟物理端口能量保守,如电气或液压端口有两个组成部分,单个端口上的通过变量和跨变变量。而且,它们没有方向信息。
*为了能够将物理端口导出到FMU,必须提供物理端口的方向和类型信息。
要提供方向和类型信息,请在符号编辑器中打开符号并选择物理端口。
*单击“ Properties”窗格上的“Add a behavior property”图标,在Property Name字段中,输入因果关系causality,在Initial Value中,提供其方向和类型信息,用空格分隔,如下所示:
*指定模拟端口方向:第一个值指定端口方向,可以是输入,也可以是输出。输入意味着端口从父模拟器读取值,而输出意味着端口将数据发送到父模拟器。默认情况下,方向被设置为输出,这意味着所有物理端口都将数据发送到父模拟器。
模拟端口类型:第二个值表示物理端口的数据类型。要么跨过要么穿过。value, across表示端口与父模拟器交换它的across值,而through表示端口与父模拟器交换它的through值。您还可以使用在MAST或VHDL-AMS中定义的物理单元来指定端口类型。
*添加因果方式的方法如图6所示:
Figure 6**Adding causality
*下表给出了几个定义物理端口因果关系causality的例子:
*更新后的物理端口causality属性如图7所示:
*Figure 7 **Adding causality *on physical port on symbol
6.验证SaberRD设计
*当Saber设计就绪时,在将其导出到FMU之前,验证它在SaberRD中正确工作。
这可以通过创建一个Saber测试来完成,如下所示:
在层次符号的输入端口上应用刺激,并将适当的负载连接到层次符号的输出端口。
运行直流和瞬态分析。
确保在模拟过程中没有错误。
如果模拟成功,请检查模拟结果是否正确。
如果仿真结果正确,Saber设计就可以导出到FMU。
7.导出一个Saber设计到FMU
在SaberRD中选择“File > Export”,选择“Function Mockup Interface (FMI)....”系统弹出“Export Data To Functional Mockup Interface (FMU) Format”对话框,如图8所示。
Figure 8**Saber FMU export
“Export Data To Functional Mockup Interface (FMU) Format”对话框:
Design Symbol: 指定要导出的Saber设计的层次符号名称,包括其位置路径。符号必须是等级符号。与符号相关联的原理图文件也应该在同一目录中。这个字段是强制性的,因为层次符号是“将Saber设计导出到FMU”所必需的。
Platform:指定EMU导出到的系统。支持的系统为win64,win32, linux64, linux32。可以任意选择其中一个平台,默认是win64。
Additional Design Data Files:除了模型( .sin, .vhdl), symbols ( .ai_sym)和schematic ( .ai_sch),可在此指定所有其他文件,例如TLU(table Look-up)模型的外部数据文件( .ai_dat),这些文件需要使用SaberHDL模拟器运行模拟。如果不需要其他设计数据文件,该字段可以留空。
*stopTime: 指定FMI联合仿真的停止时间。默认值是1.0秒。
*stepSize:指定联合仿真期间的通信步长。它必须小于stopTime。默认值是0.001秒。
*Timeout:指定了在共同模拟中完成以下所有任务的最大时间限制,在此时间之后,如果没有完成,父模拟器将失败。
*在父模拟器和子模拟器之间建立连接。
*完成一个单独的沟通步骤,包括以下任务:
*父模拟器将输入数据发送给子模拟器。
*子模拟器完成给定步长的模拟。
*子模拟器将输出数据发送回父模拟器。
注意:
1默认值为60秒。2.建议增加复杂Saber设计的超时值,以避免在协同仿真过程中出现不必要的故障,因为完成一个时间点的仿真可能需要更长的时间。
- Simulator Settings:指定SaberHDL模拟器设置。该字段是可选的,默认模拟器设置,如tniter(目标迭代数)和集成顺序从SaberHDL模拟器。
在以下情况下,需要指定模拟器设置:
*特定模拟器设置以获得更好的收敛性:在一些复杂的Saber设计中,可能需要一些特定的高级模拟器设置以获得更好的收敛性。在将设计导出到FMU之前,需要设置这样的模拟器设置。在协同仿真过程中使用这些设置来提高收敛性能。例如: dc; tr -tend 1 -tstep 1 us -tniter 10 -order 1
*Saber设计没有直流解决方案:如果Saber设计没有直流解决方案,并且需要-trip zero选项来启动瞬态模拟,则可以在模拟器设置中指定。例如tr -tend 1-tstep 1 ms-trip zero。选项 -trip zero允许导出的FMU在共同模拟期间跳过直流分析。
*保存SaberHDL结果:大多数FMI模拟器删除FMU解压缩的临时目录。默认情况下,SaberHDL在这个临时目录下的resources子目录中运行模拟,在共同模拟完成后,SaberHDL结果将被删除。如果您想保存SaberHDL模拟结果,可以使用选项-wdir保存SaberHDL结果。例如,如果你想将Saber结果保存在一个名为saber_results的目录中,设置应该是:dc;Tr-tend 1-tstep 1u-wdir saber_results。
*在FMU中创建默认实验:如果你想在modelDescription.xml中创建默认实验定义,那么可以使用模拟器设置。例如,如果你想创建一个stopTime=5.0, stepSize=0.01的默认实验定义,那么模拟器设置应该是: dc; tr -tend 5.0 -tstep 0.001.。注意,通信步长是模拟器设置中初始时间步长的10倍。
*Communication Port:指定在共同模拟期间父模拟器和子模拟器之间用于通信的TCP/IP端口。默认值是0,当使用它时,导出的FMU自动找到下一个可用端口。但是,可以指定一个特定的端口来建立通信。
02
限制
以下是FMI 2.0 Co-Simulation接口下FMU导出的限制:
*导出的Saber FMU仅支持win64、win32、linux64和linux32平台。
*FMU中只支持将标量数字、MAST中的字符串、real、integer和VHDL-AMS中的字符串类型的参数导出为参数。
*只有一些预定义的离散端口,如MAST中的state nu, state logic_4, state fmi_boolean和VHDL-AMS中的signal std_logic支持导出到FMU。
*只有一些连续的因果端口,如MAST中的输入,ref nu, output, var nu和VHDL-AMS中的quantity in/out real支持导出到FMU。
*仅支持以下预定义物理端口导出到FMU。
*头文件中定义的所有物理引脚.sin在MAST语言中: electrical, magnetic,thermal_k,thermal_c,rotational_vel,rotational_ang,translational_pos,translational_vel,light,hyd_mks,pneumatic.
*VHDL-AMS中定义的性质: electrical, magnetic, rotational, rotational_velocity, translational, translational_v, fluidic, thermal, thermal_c, radiant.
*物理端口默认只导出一个组件到FMU。物理端口有两个组件,跨变量和通过变量。但是,默认情况下,只有一个组件被导出到FMU。这是通过在符号端口上添加因果关系行为来实现的,例如,交叉输入或通过输出。如果您希望将两个组件都导出到FMU,在导出FMU之前,请使用ai_conversion库中的域转换模型将跨变量和通过变量转换为Saber设计中的控制变量端口。这将跨组件和通过组件导出到FMU。
*没有提供源代码。
*导出的FMU不提供输出变量的导数。
*在一个设计中只能实例化一个Saber FMU。
*导出的FMU不能序列化FMU状态。
*导出的FMU不能使用内存管理功能。
03
Saber FMU实例
Saber FMU实例概述
图9显示了三相整流器的Saber设计示例。
设计可以在SaberRD安装目录examples/OtherExamples/FMI2.0/export_cs/ precfier_3p中找到。
本设计有两个设计参数:
*von:六个开关器件的导通压降。默认值是0.7V。
load:输出级的电阻性负载。默认为0.5欧姆。
本设计有三个电压输入接口:
*va,vb,vc:这三个输入都是物理电结点,没有方向。我们希望从父模拟器获得这些端口的跨接电压输入。因此,在这三个符号端口上需要一个属性,与输入值之间的因果关系。
本设计有四个输出端口:
*ia,ib,ic:这三个节点将相电流发送回父模拟器。它们是连续的模拟输出,具有输出的因果关系,不需要在这些符号端口上添加特定的因果关系
*v_dc:这个节点是整流器的输出电压,它已经从两个差分电压转换成一个控制信号。它有输出的方向,所以不需要为它定义因果关系
Figure9**Three-Phase Rectifier Example
输出Saber 示例设计到FMU
要将Saber示例设计导出到FMU,请执行以下步骤:
1.将rectifier_3p示例从安装文件夹复制到本地目录。
2.调用SaberRD并打开这个设计。
3.导出rectifier_3p_saberhdl.fmu。
*选择File->Export,选择Functional Mockup Interface (FMI)....系统弹出“Export Data To Functional Mockup Interface (FMU) Format”对话框。
*选择rectifier_3p.ai_sym为Design Symbol。
*Simulation Settings设置为:dc;tr -tend 10-tstep 1u -wdir saber。
*单击Export,rectifier_3p saberhdl.fmu在同一目录下生成
Figure 10**Export Data To Functional Mockup Interface (FMU) Format
仿真导出的Saber FMU
*任何FMI模拟器都可以用来测试导出的FMU,rectifier_3p. fmu。
*在FMI标准页面上有许多可用的工具:https://fmi-standard.org/download
*在这个例子中,使用了一个免费的模拟器fmuChecker。
*要运行这个示例,请执行以下步骤:
1.将环境变量SABER_FMU_SOLVER设置为Saber的安装路径。例如,C:SynopsysSaberRD64P-2019.06.
2.运行64位版本的fmuChecker: fmuCheck.win64.exe -e log.txt -i v_3p.csv -o result.csv -s 2 -h 1e-3 -n 0 rectifier_3p_saberh.fmu
它运行瞬态模拟2秒,通信步长为1e-3。输出信息保存在log.txt文件中,仿真结果保存在result.csv文件中。
3.在任何兼容的波形查看器(如Scope)中打开result.csv文件。
*结果如图11所示。
*Figure 11 *Three-Phase Rectifier Results
-
连接器
+关注
关注
98文章
14292浏览量
136116 -
仿真器
+关注
关注
14文章
1016浏览量
83621 -
VHDL语言
+关注
关注
1文章
113浏览量
17986 -
模拟器
+关注
关注
2文章
865浏览量
43156 -
AMS
+关注
关注
10文章
209浏览量
86966
发布评论请先 登录
相关推荐
评论