T-MATS用户手册中文版
1. 引言
热力学系统建模与分析工具箱(T-MATS)是一个用于热力学系统及其控制建模与仿真的 Simulink 工具箱。该工具包包含通用的热力学和控制组件,可以与变输入迭代求解器和优化算法结合,创建满足开发需求的复杂系统。
T-MATS 软件的目标是为热力学系统模型的开发提供一个工具箱,包含一个仿真框架、多回路求解技术和模块化的热力学仿真块。虽然 T-MATS 的大部分功能集中在瞬态热力学仿真上,但开发者的主要关注点是气动热应用;因此,T-MATS 软件包的一个亮点是涡轮机械模块集。这个 Simulink 模块集为开发者提供了所需的工具,可以创建几乎任何稳态或动态的涡轮机械仿真,例如燃气涡轮仿真。在控制系统或其他相关系统已经在 MATLAB/Simulink 中建模的系统中,T-MATS 开发者可以在一个工具中创建完整的系统。
T-MATS 涡轮机械模块采用一种结合了基于物理的模型的可理解性和逻辑性与经验开发模型的准确性和可调性的理念。此用户引导文档假设用户已熟悉热力学系统建模,建议用户在构建仿真之前,参阅相关文献[http://www2.chem.umd.edu/thermobook/ :截至 2013 年 9 月参考],[Jones, S. M.,“使用数值推进系统仿真代码进行燃气涡轮发动机稳态建模”,GT2010-22350,ASME 涡轮博览会,英国格拉斯哥,2010 年 6 月 14-18 日],以回顾一般的热力学和建模原理。
T-MATS 是在 MATLAB®/Simulink® v2015aSP1(The Mathworks, Inc.)上开发的,属于开源软件,旨在供工业界、政府和学术界使用。所有 T-MATS 方程均来源于公开文献,T-MATS 软件包中提供的所有默认映射和常数均为非专有的,并可公开获取。[Jones, S. M.,“使用数值推进系统仿真分析航空发动机燃气涡轮循环的热力学性能分析简介”,NASA/TM-2007-214690,2007 年 3 月]。该软件根据 Apache V2.0 许可证发布,许可证条款和条件可在 http://www.apache.org/licenses/LICENSE-2.0 查阅。
1.1 标识
T-MATS 用户手册适用于由 NASA Glenn Research Center 开发的 T-MATS 软件包版本 1.2。该软件包包含一个 T-MATS Simulink 库,其中包括以下子库:效应器与控制、热传递、数值方法、求解器、热力学、热力学_Cantera、涡轮机械、涡轮机械_Cantera 和体积。此外,T-MATS 包还包含开发工具,“T-MATS 工具”,以及示例,用于演示如何使用 Simulink 库创建系统。
1.2 符号说明
T-MATS 用户手册中将使用下表所总结的符号。
表 1. T-MATS用户手册注释。
类型 | 定义 |
---|---|
Courier 字体 | MATLAB 函数、Simulink 块或代码(例如,Simulink: From 块) |
Times New Roman 字体(斜体) | 变量(例如,f(x))或文件名、块输入/输出 |
Arial 字体 | 文件路径(例如,TMATS_Library\MEX) |
平台:名称块 | 表示块来自哪个库(例如,Simulink: From 块) |
1.3 系统概述
热力学系统建模与分析工具箱(T-MATS)是一个基于 MATLAB/Simulink 构建的通用热力学仿真系统。T-MATS 利用基于图形的仿真技术,满足工业专业人士和学术界的需求。它将通用的热力学和控制建模能力与数值迭代求解器相结合,为创建复杂的热力学系统仿真提供了一个框架。T-MATS 使用的数值方法包括 Newton-Raphson 迭代求解技术和雅可比矩阵计算技术。
1.4 T-MATS 快速入门指南
1.4.1 安装 T-MATS
要安装 T-MATS,请执行以下步骤:
-
从 GIT 服务器下载 T-MATS:https://github.com/nasa/T-MATS/releases,点击绿色的下载按钮获取最新版本,并将文件解压到 MATLAB 可以访问的文件夹中,确保路径名称中没有空格。请注意,T-MATS 是在 Microsoft Windows 7 操作系统中使用 MATLAB(基础版本 v2015aSP1)和 Microsoft 软件开发工具包(SDK)7.1 开发的;无法保证它在其他操作系统、其他 MATLAB 版本或其他编译器上能正常工作。有关与 MATLAB 2015a 兼容的编译器的完整描述,请参见:http://www.mathworks.com/support/compilers/R2015a/index.html?sec=win64。
-
在 MATLAB 中导航到下载的压缩文件中的所需 T-MATS 版本目录,
TMATS_vXX
。 -
运行
Install_TMATS.m
;此命令将为 T-MATS 设置路径,并创建 mex 文件。如果用户没有管理员权限,路径可能未正确保存。如果路径未保存,可以手动将新的路径添加到
pathdef.m
文件中。通过点击 MATLAB 工具栏上的“HOME”标签中的“Set Path”按钮,打开“Set Path”窗口,并将以下路径(\TMATS_Library
,\TMATS_Library\MEX
,\TMATS_Library\TMATS_Support
和\TMATS_Tools
)添加到列表中。点击“Save”保存路径定义;此时会弹出消息,提醒需要管理员权限,并提供将路径保存到新的pathdef.m
文件中的选项。将该文件保存到 MATLAB 路径中的某个位置。注意:此过程将保存当前的路径列表,保存之前应验证列表中没有不必要的路径。如果希望临时安装 T-MATS,可以在安装弹出窗口中选择临时安装按钮。使用临时安装将不会保存新的路径。 -
要将 T-MATS Simulink 工具添加到 Simulink 工具栏中,创建一个 MATLAB 文件
startup.m
,并添加以下代码:load_simulink Menu_customization_TMATS
startup.m
文件可以保存在 MATLAB 路径上的任何位置,每次启动 MATLAB 时,这些代码将加载 T-MATS 编辑工具到 Simulink 窗口。如果已经有startup.m
文件,只需添加上述代码。如果在 MATLAB 启动时显示警告,提示无法找到
Menu_customization_TMATS.m
,可能是因为 T-MATS 路径未正确添加到 MATLAB 中。缺少路径定义的最常见原因是 T-MATS 路径没有加载到pathdef
文件中(请参见第 3 步解决此问题),或者修改后的startup.m
文件正在由未安装 T-MATS 的 MATLAB 版本使用。可以通过安装 T-MATS 到另一个版本或将startup.m
文件放到仅用于所需 MATLAB 版本的路径中来解决警告信息。应注意,尽管这些警告可能很烦人,但如果不使用 T-MATS,它们不会影响 MATLAB 的性能或功能。 -
可选:如果用户希望使用 Cantera 集成的 T-MATS 块,需要安装 MATLAB 的 Cantera 工具箱。有关安装过程的详细说明,请参见第 5.1 节。
此时,T-MATS 库的安装完成。T-MATS 模块可以在 Simulink 库浏览器中找到,位于“TMATS”标题下。T-MATS Simulink 工具可以在 Simulink 模型窗口的菜单栏中的“Diagram”下找到。
1.4.2 卸载 T-MATS
要卸载 T-MATS,请执行以下步骤:
-
从与
Install_TMATS
文件相同的目录运行Uninstall_TMATS.m
。(默认情况下,这些文件都位于TMATS
文件夹中)。a. 如果在安装过程中手动将路径添加到了
pathdef.m
文件中,必须在运行Uninstall_TMATS.m
文件后手动删除这些路径。删除后,再次保存pathdef.m
文件。 -
从
startup.m
文件中删除以下行:load_simulink Menu_customization_TMATS
1.4.3 T-MATS 示例
T-MATS 包含多个示例系统,旨在帮助用户了解如何使用 T-MATS 库来模拟热力学系统。要访问这些示例,请导航到 TMATS_Examples
文件夹下的 Examples 文件夹,并运行 TMATS_Run_Example.m
文件。运行该文件后,MATLAB 窗口中将列出不同的示例,用户可以选择相应的编号打开示例。另一种方式是直接导航到包含示例的文件夹,运行相应的 *_setup_everything.m
文件(如果没有 setup 文件,也可以打开 *.slx
文件)。
示例菜单如下所示:
>> run('C:\Builds\TMATS\TMATS_Examples\TMATS_Run_Example.m')
Select the enumeration of the T-MATS Example to be setup:
1) NewtonRaphson_Equation_Solver
2) Steady State GasTurbine
3) Dynamic GasTurbine
4) Steady State Dual Spool High Bypass Engine JT9D
5) Dynamic Dual Spool High Bypass Engine JT9D
6) Steady State JT9D, Cantera
7) Cycle Model
8) Linearization Examples
9) Volume Example
10) Cancel Setup
*_setup_everything.m
脚本将执行设置该特定示例所需的所有命令,这些命令可能包括:加载工作区变量、创建路径、加载总线(busses)和打开 Simulink 模型。如果需要删除路径,可以运行对应的 *_Example_cleanup.m
文件。
1.4.4 模块帮助
每个 T-MATS 模块都包含一个帮助文件,说明如何设置该模块的具体细节,因此本指南中不会讨论每个模块的低级功能。更多的文档可以在 T-MATS 的基本目录中的 Block Guide 文件中找到。
2. T-MATS 库结构
T-MATS 库在 Simulink Library Browser 中展示,包含以下几个子库:
-
Effectors and Controls: 该子库包含模拟中最外层回路的构建模块。库中的块是效应器和控制系统组件的简单表示。根据模拟的精度要求,可能需要开发更复杂的模型。
-
Heat Transfer: 该子库包含用于解决热流问题的构建模块,采用不同的方法,包括使用各种离散化技术的0-D 集总质量法和1-D 方法。
-
Numerical Methods: 该子库包含模拟 T-MATS 系统所需的数值解算器的最基本构建模块。这些模块非常通用,可以用于创建适用于各种系统的迭代求解器,甚至可以用于 T-MATS 之外的系统。
-
Solver: 该子库包含简化模拟创建的块,包括由“Numerical Methods”子库中的块组成的混合块,以及对一般模拟开发有用的块。
-
Thermo: 该子库包含通用热力学系统的块。该子库中的许多块可以在其他 T-MATS 库中使用。
-
Thermo_Cantera: 该子库包含需要 Cantera 软件包支持的通用热力学块。
-
Turbomachinery: 该子库包含创建燃气涡轮模型所需的构建模块。块基于基本的热力学方程和原理,并使用一系列定义系统特征的地图。T-MATS 中的默认地图和常数仅用于演示。
-
Turbomachinery_Cantera: 该子库包含需要 Cantera 软件包支持的涡轮机械模块。
-
Volume: 该子库包含专门用于解决1-D 流动问题的构建模块,基于热力学表查找,独立于基准 T-MATS,用于流体属性。
T-MATS 旨在作为一个环境,用于在 Simulink 中构建热力学仿真,目标是进行动态分析和控制设计。上述子库提供了仿真的基本构建模块,但用户可能需要创建新的模块或调整现有模块,以满足特定需求。
3. T-MATS 工具
T-MATS 附带了一组工具,旨在加速和简化模型创建过程。这些工具分为两类:通用工具和 Simulink 工具。通用工具旨在为 T-MATS 添加功能,而 Simulink 工具则使 T-MATS 更加易用。所有 T-MATS 工具都可以在 \T-MATS_Tools
文件夹中找到。
3.1 T-MATS 工具
通用 T-MATS 工具以 GUI 工具和示例脚本的形式提供。其他 MATLAB 可调用的脚本将在后续章节中详细介绍。
3.1.1 GasTableBuilder
T-MATS 气体表格构建工具使用 Cantera 创建用于基础 T-MATS 的气体属性表。有关 Cantera 软件包的更多信息,请参见第 5 节。关于该工具的使用说明可以在 \TMATS\TMATS_Tools\GasTableBuilder.README.html
中找到。使用该工具生成的表格可以大大减少使用标称气体的脱离操作时的运行时间要求。
3.1.2 MapGeneration_Tools
T-MATS 地图生成工具提供了一个示例,说明如何将 NPSS 地图自动转换为 T-MATS 可用的格式。由于 NPSS 命名约定和格式的可定制性,这个工具并不直接用于实际工作,而仅作为如何设置该文件的示例。
3.1.3 NPSS 到 T-MATS 转换工具
T-MATS 的 NPSS 到 T-MATS 转换工具使用类比方法从 NPSS 模型创建一个 T-MATS 发电厂。该工具包含两个主要部分:第一部分在 NPSS 中运行,收集组件链接信息和参数;第二部分使用这些数据生成 T-MATS 模型。
3.2 T-MATS Simulink 工具
T-MATS 附带一组 Simulink 工具,旨在加速和简化模型创建。这些工具位于 Simulink 菜单栏的 Diagram > T-MATS Tools 下。每个工具的功能将在以下部分描述。
3.2.1 GF_Convert
GF_Convert 工具将选定的 Simulink: GoTo 块转换为 Simulink: From 块,或反之亦然。它还可以将 Simulink: Outport 转换为 Simulink: Inport,反之亦然。
3.2.2 Block Link Setup
Block Link Setup 工具会创建与特定子系统输入和输出对应的 Simulink: GoTo 块和/或 Simulink: From 块,并通过连接线将它们连接。T-MATS 块会根据具体情况进行处理,并根据该块的需求创建适当的块和连接。在许多情况下,还会创建额外的 Simulink: GoTo 或 Simulink: From 块,这些块将用于仿真中的其他部分。Block Link Setup 工具还可用于为选定的 Simulink: GoTo 或 Simulink: From 块创建 Simulink: Inport 或 Simulink: Outport 块,反之亦然。
3.2.3 Set IDes
Set IDes 工具会遍历当前的 Simulink 图,查找包含变量 iDesign_M
的块,并将其更改为 GUI 中指定的值。注意:此工具仅适用于当前的图,如果使用了子模型,则必须分别更改这些子模型中的变量。
4. 可调用 MATLAB 函数
T-MATS 中的大部分建模基于非线性表格查找,这些表格包含有关材料或流体流动的热力学状态信息。通过 C 代码、MATLAB 脚本或 Simulink 浏览器中的 T-MATS\Thermo 文件夹可以访问这些表格查找。默认情况下,这些表格查找包含空气和烃类排气气体的热力学属性,这些成分之间的比率定义为 FAR(燃料与空气比)。如果要使用其他成分,则必须更新基础表格。
安装完 T-MATS 后,TMATS
类将提供访问 MATLAB 表格查找功能的方法,函数如下表所示。可以通过以下语法访问这些命令:TMATS.
(例如 TMATS.h2t(h, FAR)
),或者在工作区或 MATLAB 脚本中使用 import TMATS.*
。在 MATLAB 命令窗口中输入 help TMATS
也可以获取相关信息。
表 2. T-MATS 热力学函数
函数 | 描述 |
---|---|
T = h2t(h, FAR) |
基于焓(h)[BTU/lbm]和燃料与空气比(FAR)计算温度 [R] |
s = pt2s(P, T, FAR) |
基于温度(T)[R],压力(P)[psia]和燃料与空气比(FAR)计算熵(s)[BTU/(lbm*R)] |
T = sp2t(s, P, FAR) |
基于熵(s)[BTU/(lbm*R)],压力(P)[psia]和燃料与空气比(FAR)计算温度 [R] |
h = t2h(T, FAR) |
基于温度(T)[R]和燃料与空气比(FAR)计算焓 [BTU/lbm] |
DViewGUI |
运行 T-MATS 数据查看器 GUI。该工具可以运行 Simulink 模型,绘制稳态数据、瞬态数据,或按需求设置 iDesign_M 变量。注意:要正确使用此工具,T-MATS 站点必须通过 Simulink/ToWorkspace 块输出,数据设置为 TimeSeries,并包含 W、h、T、P 和 FAR(默认 T-MATS GasPthChar 总线)。绘制性能图的功能会自动搜索地图数据,但该数据要求组件数据总线输出设置类似。执行命令 help TMATS.DViewGUI 获取更多详细信息。 |
PlotCMap(NcVec, WcArray, PRArray, EffArray) |
绘制压缩机地图,其中 Wc、PR 和 Eff 是 Nc 和 Rline 的函数。执行命令 help TMATS.PlotCMap 获取更多详细信息。 |
PlotTMap(NcVec, PRVec, WcArray, EffArray) |
绘制涡轮机地图,其中 Wc 和 Eff 是 Nc 和 PR 的函数。执行命令 help TMATS.PlotCMap 获取更多详细信息。 |
SSplot(filename, StationVarVec) |
调用 T-MATS 稳态数据查看器。变量 filename 表示生成数据的 Simulink 图,StationVarVec 是由 ToWorkspace 块生成的所有输出的向量。注意:此工具会搜索所有 Simulink/ToWorkspace 块,验证它们是否符合 T-MATS 站点数据格式(Timeseries,包含 W、h、P、T、FAR),然后使用这些数据生成设置图。如果找到压缩机和涡轮机块,也会创建图形图并生成数据总线。执行命令 help TMATS.SSplot 获取更多详细信息。 |
TDplot(filename) |
调用 T-MATS 瞬态数据查看器。变量 filename 是生成所需数据的 Simulink 图。注意:此工具会搜索所有 Simulink/ToWorkspace 块,验证它们是否符合 T-MATS 站点数据格式(Timeseries,包含 W、h、P、T、FAR),然后使用这些数据生成设置图。如果找到压缩机和涡轮机块,也会创建图形图并生成数据总线。执行命令 help TMATS.TDplot 获取更多详细信息。 |
需要注意的是,表 2 中列出的函数仅包括不使用 Cantera 包的 T-MATS 函数。如果函数需要 Cantera 包,请参阅第 5 节。
5. Cantera 集成
一些 T-MATS 模块已与开源的 Cantera 软件包集成。根据软件文档(Cantera),“Cantera 是一个面向化学动力学、热力学和/或传输过程问题的面向对象的软件工具集。” Cantera 的集成为 T-MATS 带来了许多新功能,包括使用非标燃料、替代流动路径气体等。这是通过添加一个新的 MATLAB 包来实现的,该包包括 Simulink 子库(Turbomachinery_Cantera 和 Thermo_Cantera)、脚本和类。
5.1 Cantera 安装
T-MATS_Cantera 使用包含 Cantera 函数的 MATLAB 脚本,这些脚本位于 \TMATS\TMATS_Library\MATLAB_Scripts\Cantera_Enabled
文件夹中。要使用这些脚本,必须将 Cantera Toolbox 安装到 MATLAB/Simulink 中。有关如何安装 Cantera 包的说明,可以访问其主页:Cantera GitHub 和 Cantera 官方网站。需要注意的是,T-MATS_Cantera 是使用 Cantera v1.0 开发的,后来更新为使用 v3.0。
5.2 使用 T-MATS_Cantera 模块和脚本
T-MATS 模块中使用 Cantera 函数的模块位于 Simulink 库浏览器的 *_Cantera
下,Cantera 启用的脚本位于 TMATS 的 MATLAB 包中。在运行包含 T-MATS_Cantera 模块或脚本的仿真之前,必须定义一个全局变量 fs
,并填写位于 TMATS\TMATS_Library\MATLAB_Scripts\Cantera_Enabled\+TMATSC
文件夹中的脚本 canteraload.m
。
canteraload.m
脚本定义了流动流的名称和成分。当前最多可以有六种流动类型,每种流动类型最多包含六种分子成分。此信息以 6×6 的矩阵形式组织,矩阵的每一行包含分子类型,列表示其按重量比例的成分。流动成分通过一个 6×1 的向量来确定,每个值对应于 6×6 矩阵的一行。例如,一个流动成分向量 [1 0 0 0 0 0]
对应的空气成分为:N2(0.7547)、O2(0.232)、AR(0.0128)。如下面所示:
Name = { 'N2' 'O2' 'AR' '' '' '';... % Air
'H2O' '' '' '' '' '';... % Water
'CH2' 'CH' '' '' '' '';... % Fuel
'' '' '' '' '' '';...
'' '' '' '' '' '';...
'' '' '' '' '' '' };
Species = { 0.7547 0.232 0.0128 0 0 0;... % Air
1 0 0 0 0 0;... % Water
0.922189 0.077811 0 0 0 0;... % Fuel
0 0 0 0 0 0;...
0 0 0 0 0 0;...
0 0 0 0 0 0 };
除了为流体指定成分值外,还需要创建 Cantera 相位对象,以便 Cantera 能够正确地与 MATLAB 通信。相位对象通过在 MATLAB 工作空间中创建全局变量 fs
来定义。变量 fs
必须包含在上面提到的加载脚本中使用的所有必要分子类型。以下是声明 fs
的示例命令:
global fs
fs = Solution('gri30.yaml')
Cantera 的 Solution
函数将从输入文件(在此案例中为 gri30.yaml
)导入一个相位。
对于 T-MATS_Cantera Simulink 模块,流动信息通过一个 25×1 的向量传递,该向量的结构定义如下表所示。该向量包含详细的流动信息,可用于 T-MATS 模块内部和/或外部的计算或信息性目的。包含方法 TMATSC.FlowDef
和 TMATSC.FlwVec
的类定义了流动向量的名称,并可以根据用户需求进行更新。需要注意的是,Cantera 与 MATLAB 之间的所有通信都是通过一个 MATLAB 类来处理的,流动向量之所以必需,是因为 Simulink 与类不兼容。
表 3. T-MATS_Cantera 流动向量结构(用于 Simulink)
# | 变量 | 描述 |
---|---|---|
1 | W | 气体路径流量 [pps] |
2 | s | 熵 [BTU/(lbm·degR)] |
3 | Tt | 总温度 [degR] |
4 | Pt | 总压力 [psia] |
5 | ht | 焓 [BTU/lbm] |
6 | rhot | 总密度(rho)[lbm/ft³] |
7 | gamt | 总比热比(gamma) |
8 | Ts | 静态温度 [degR] |
9 | Ps | 静态压力 [psia] |
10 | hs | 静态焓 [BTU/lbm] |
11 | rhos | 静态密度(rho)[lbm/ft³] |
12 | gams | 静态比热比(gamma) |
13 | Vflow | 流速 [ft/sec] |
14 | MN | 马赫数 |
15 | A | 流动面积 [in²] |
16-21 | CompVal_TMATS | 流动成分向量,详见 canteraload.m 中的 6 种物质类型定义 |
此结构中的每个变量都代表流动的不同特性,供 T-MATS_Cantera 模块进行进一步计算和分析使用。
5.3 与 Cantera 的接口
使用 Cantera 函数的 T-MATS 模块是以层次化的方式构建的,允许用户根据自己熟悉的层次来更新这些模块。从图 1 可以看出,用户可以在 Simulink 中使用一组 T-MATS_Cantera 模块来创建仿真。这些模块由一个 M-S 函数组成,M-S 函数调用使用 TMATSC MATLAB 包编写的 MATLAB 脚本。这个 MATLAB 包包括一些专用脚本以及一个名为 FlowDef 的类,该类充当与 Cantera 之间的简化接口。在设计过程中,用户可以根据任务需求调整这些不同层次中的任何一层。
图 1. T-MATS/Cantera-块-层次结构。
TMATSC MATLAB 包包含一个类和一些函数,这些类和函数用于创建 T-MATS Cantera 模块集,相关内容总结在表 4 中。该包中的函数提供了文件操作和读取脚本,便于数据存储的处理。
表 4. TMATSC 包中的函数和类
函数 | 描述 |
---|---|
Object = FlowDef() |
流对象构造器(参见表 5) |
[val] = canteraload(RequestType) |
返回用于 Cantera 命令生成的 Name 或 Species 矩阵 |
[effMap, WcMap] = PRmapFile(MapFileName, NcMap, PRmap) |
查找表,返回 effMap 和 WcMap |
[effMap, PRMap, WcMap, StallMargin] = RlineMap(MapFileName, NcMap, Rline) |
查找表,返回 effMap、PRMap、WcMap 和 StallMargin |
[val] = getV(var, parent) |
从工作区获取变量 |
setV(var, parent, value) |
设置工作区中的变量 |
[string] = stripchar(string) |
去除字符字符串中的 \ , / 或 \o |
TMATSC.FlowDef 类提供了创建流对象的能力,这些对象包含了进行热力学计算所需的所有流信息,并简化了与 Cantera 函数的接口,如表 5 所示。与 Simulink 环境的交互是通过基于流对象生成的流向量来完成的,该流向量在表 3 中有详细描述。可以通过在脚本中实现命令 “import TMATSC.*” 或在命令前加上 TMATSC.
或 TMATSC.FlowDef.
来导入 TMATSC 函数和类方法。这些信息还可以通过在 MATLAB 命令窗口中键入 “help TMATSC” 来访问。
表5. 类 TMATSC.FlowDef 方法,Cantera 接口函数
类方法 | 描述 |
---|---|
流对象构造: | |
flow_new = FlowDef() | 0 个输入,创建空的 TMATSC 流对象 |
flow_new = FlowDef(FlowVector) | 1 个输入,基于流向量构造流对象 |
flow_new = FlowDef(flow, compNN, W, Tt, Pt) | 4 个输入,创建仅包含总值的填充流对象(仅包含总值,通过 set_TP 设置) |
flow_new = FlowDef(flow, compNN, W, Ts, Ps, MN) | 5 个输入,创建包含总值和静态值的填充流对象(通过 set_TsPsMN 设置) |
flow_new = CanSet(flow) | 将流对象的组成值设置为 Cantera 格式(基于 CompVal_TMATS 流对象值生成 CompVal_Can) |
flow_new = CanSet(flow, compNN) | 将流对象的组成值设置为 Cantera 格式(基于输入的 compNN,6×1 向量) |
Cantera 接口函数: | |
flow_new = flowadd(flow1, flow2) | 将 flow1 和 flow2 相加,保持焓和质量守恒 |
flow_new = flowcopy(flow) | 从一个流复制信息到另一个流 |
mass_frac = getMassFraction(flow, c) | 返回化合物 c 在流对象中的质量分数 |
flow_new = set_hP(flow, ht, Pt) | 基于流、总焓和总压力设置总条件 |
flow_new = set_MN1(flow) | 基于流条件设置静态条件为声速流 |
flow_new = set_Ps(flow, Ps) | 基于流和静态压力设置静态条件 |
flow_new = set_SP(flow, S, Pt) | 基于流和输入的熵及总压力设置总条件 |
flow_new = set_TP(flow, Tt, Pt) | 基于流、总温度和总压力设置总条件 |
flow_new = set_TsPsMN(flow, Ts, Ps, MN) | 基于流、静态温度、静态压力和马赫数设置条件 |
流对象手动设置函数: | |
flow_new = TotalSet(flow, s, Tt, Pt, ht, rhot, gamt) | 手动设置流对象中的总变量 |
flow_new = StaticSet(flow, Ts, Ps, hs, rhos, gams) | 手动设置流对象中的静态变量 |
flow_new = SpeedSet(flow, MN, A, Vflow) | 手动设置流对象中的速度变量 |
flow_new = SClr(flow) | 清除流对象中的所有静态变量 |
flow_vector = FlwVec(flow) | 创建 25×1 流向量 |
要创建一个空的流对象,可以在 MATLAB 命令提示符下执行以下代码:
NewFlowObject = TMATSC.FlowDef();
或者,使用 Cantera 流向量(如表 3 中所述)生成已定义的流对象,如下所示:
NewFlowObject = TMATSC.FlowDef(Flow_Vector);
可以使用 FlwVec 命令从流对象重新生成流向量:
FlowVector = FlwVec(FlowObjectName);
当选择使用 T-MATS_Cantera 流向量或流对象时,一个好的经验法则是:当使用 MATLAB 脚本语言时,应使用从流类创建的流对象;而流向量仅应在从 Simulink 块传递数据时使用。需要注意的是,在手动填写流对象时,必须在设置了 CompVal_TMATS 向量属性后运行 TMATSC.CanSet 方法,以自动生成 CompVal_Can 属性,这对于 Cantera 命令是必需的。
6 T-MATS 仿真创建
6.1 仿真设置
在许多热力学系统中,仅通过每个组件的输入无法唯一确定系统的响应。例如,压缩机的质量流量和压力比对于给定的转轴速度并非唯一。为了解决这个问题,使用压缩机图来求解进入压缩机块的流量。计算得到的压缩机流量与实际流量进行比较,从而计算出流量误差。在仿真过程中,通过调整 R-line 值来改变压缩机在图中的位置,从而使流量误差趋于零(详见 6.5 节)。
T-MATS 软件包包含了一些模块,便于创建需要“外部循环”(随时间变化)和“内部循环”迭代的热力学模型。位于“Solver”子库中的迭代求解器模块使用 Newton-Raphson 方法,迭代求解plant独立变量,并监控plant依赖变量。在前面的示例中,依赖变量是流量误差,独立变量是 R-line。与所有 Newton-Raphson 技术一样,求解器会计算雅可比矩阵;这个矩阵本质上是从plant独立变量到依赖变量的线性映射,且该映射可能随系统操作点变化及系统非线性程度变化而变化。在 Newton-Raphson 求解器无法及时收敛的情况下,T-MATS 求解器模块通过重新计算雅可比矩阵来增强其鲁棒性。
示例学习
了解如何使用 T-MATS “Solver”子库的一个简单方法是查看示例。T-MATS 软件包中包含了三个示例,展示了逐步复杂化的求解器实现;有关示例和设置的更多信息,请参见教程(见错误!未找到引用源)。以下是这三个示例的简要说明:
-
第一个示例(
NewtonRaphson_Equation_Solver
)使用了TMATS: SS NR Solver w JacobianCalc
模块来求解一个包含三个未知数的三元方程组。需要注意的是,独立变量(x
)和依赖变量(f(x)
)都以 3x1 向量的形式表示。迭代求解器模块的输入可以是任意长度的,只要输入、输出以及适当的掩码输入变量的长度相同。 -
第二个示例(
GasTurbine_SS_Template
)设置了一个稳态燃气涡轮系统,使用了 T-MATS 模块集。在这个示例中,TMATS: SS NR Solver w JacobianCalc
模块被用作系统求解器。四个输入或依赖变量(在求解器模块的右侧)是喷嘴、涡轮和压缩机的标准化流量误差,以及转轴加速度。独立变量是流入发动机的流量、压缩机的 R-line、涡轮的 PR-map 和机械转速。 -
第三个示例(
GasTurbine_Dyn_Template
)模拟了一个动态燃气涡轮系统。这个系统需要设置一个层级结构,使用TMATS: Iterative NR Solver w JacobianCalc
模块,如图 2 所示。求解器模块和plant(这里作为IterativeSolver
和InnerLoopPlant
模块)必须放置在Simulink: While Iterator
子系统模块中。在操作过程中,该设置会迭代求解每个时间步的收敛性,如果收敛失败,则“暂停”时间以收敛系统,然后继续随着时间推进。为了支持动态性,Newton-Raphson 求解器不像在稳态求解器示例中那样求解机械转速;相反,Ndot 在求解器循环外部进行积分,以计算转轴速度。除了 while 循环的层级结构,动态燃气涡轮示例还描述了如何在仿真结构中结合总线和模型调用。大部分附加的结构复杂性并不是必需的,仅为演示目的而包括。
所需的基本结构是,plant和
TMATS: Iterative NR Solver w JacobianCalc
模块在一个子系统中,与Simulink: While Iteration
模块一起,并且所有外部效应器位于该子系统之外,如图 2 所示。
图 2. 动态系统示例仿真体系结构。
6.2 T-MATS 格式化
6.2.1 颜色编码
T-MATS 块的输入和输出采用颜色编码,以帮助模拟设置:
表6.T-MATS颜色编码
颜色 | 描述 |
---|---|
蓝色 | 气体路径信息,包含流量、焓、总温、总压和流量成分(通常是燃料与空气比 (FAR)) |
深绿色 | 独立变量 |
绿色 | 依赖变量 |
红色 | 动态仿真中通过积分获得的独立变量,但在稳态仿真中可能由求解器求解(例如:轴速) |
品红色 | 在动态仿真中被积分的依赖变量,但在稳态仿真中的迭代求解器中可以作为依赖变量使用(例如:Ndot) |
粉色 | 依赖变量计算的贡献者(例如:扭矩) |
黄色 | 效应器命令(例如燃料流量),通常不被求解器使用 |
通常,相同颜色的项连接在一起(如表 6 中所示,红色和品红色项可能是例外)。
6.2.2 Simulink 接线
T-MATS 使用矢量化的输入/输出方案,将输入和输出限制为仅必要的项。这意味着许多线路代表的都是必须正确传递的数字数组,以确保模拟正常工作。每个块的“帮助”页面中会给出这些元素的顺序;或者,可以通过查看掩码下的定义或将线路连接到总线选择器来查看线路定义。特殊情况下,压缩机的排气输出和涡轮的冷却流输入是动态大小的向量,反映了设计的排气数量(在压缩机或涡轮掩码中指定)。一般来说,如果一个输出不需要直接连接到另一个块,它将被放置在 *_Data 总线中(例如,压缩机块中的失速余量位于 C_Data 输出中)。
6.2.3 Mask格式
T-MATS广泛使用Simulink中的子系统掩码工具。每个T-MATS块都配有一个掩码,用户可以通过该掩码为块提供所需的任何参数或设置,而无需进入块内部。每个T-MATS块的掩码参数可以通过双击该块来查看;一个T-MATS块掩码的示例如图3所示。
图 3. 示例T-MATS功能块参数掩码
在弹出窗口的顶部,将显示库块的名称,后面是块描述。可以在掩码中更改的变量将在参数部分列出,该部分可能包含多个选项卡。每个掩码参数输入的描述格式为:“Name_M – 定义 [单位(如果适用)](矩阵大小,如果适用)(方程格式)”,其中后缀“_M”表示在掩码中定义的变量。“方程格式”通常用于表格格式,稍后在本节中将进行描述。复选框用于启用或禁用功能;这些项目的变量名称采用“(VariableName)En_M”形式。在参数对话框的底部,有一个“Help”按钮,点击后将提供有关该块的更多信息。
许多T-MATS块接受向量输入,向量的长度可能决定块输入、依赖变量、独立变量或块输出的数量。如果输入描述包含符号“(size)x1”,则该输入需要为“size”长度的向量,这由设计决定。在特定模块中,“size”的值需要对每个项目保持一致。例如,在压缩机块中,客户旁路的输入维度为cbx1,分流旁路的输入维度为bx1,因此客户旁路向量的长度应相同(cb),分流旁路向量的长度应相同(b);并不要求cb = b,如图4所示,其中cb = 3,b = 2。
图4. 示例T-MATS功能块参数掩码,带有向量输入和复选框
T-MATS中的映射和表格作为掩码变量输入,1D表格需要两个输入(轴和数值断点),而2D表格则需要三个输入(两个轴的断点和数值)。轴断点数组将以“X_”或“Y_”为前缀,而“ T_”前缀表示表格值的数组。标量变量用“s_”作为前缀,这些变量改变映射和表格的比例。所有表格的输入描述包括一个简单的方程,方程用“()”括起来,表示用于该表格的轴变量(例如,在压缩机中,“Wc = f (Nc, R_line)”表示表格Wc的一个元素可以表示为轴变量Nc和R_line的函数,它们定义在其上方)。如果为表格输入单元素数组(1x1),则会出现错误;相反,应输入具有相同数量的行或平面,分别为1D或2D表格,以创建具有相同值的表格。例如,具有x轴 = [0 1]、y轴 = [0 1]和表格值 = [5 5; 5 5]的2D表格将创建一个值为5的平面。
6.2.4 S函数
许多T-MATS功能块使用S函数,S函数允许用C编程语言开发代码,然后供Simulink使用。(有关S函数操作的更多详细信息,请参见第7.2节,附录A包含一个简单的代码示例。)了解S函数的基本知识很重要,这样代码可以根据每个用户的需求进行调优。C代码通过MATLAB的mex命令进行编译,以供Simulink使用。
6.3 单位
除非另有说明,所有T-MATS块和函数均使用英制单位。常见的单位定义和常量详细列于表7中。
表7. T-MATS默认单位和常见常量
参数 | 单位 |
---|---|
海拔 (Alt) | 英尺 (feet) |
面积 (A) | 英寸平方 [in²] |
焓 (h) | 英热单位每磅质量 [BTU/lbm] |
熵 (s) | 英热单位每磅质量兰金 [BTU/(lbm·R)] |
流量 (W) | 每秒磅 [pps] |
压力 (P) | 绝对磅每平方英寸 [psia] |
密度 (rho) | 每立方英尺磅质量 [lbm/ft³] |
温度 (T) | 兰金度 [R] |
速度 | 英尺每秒 [ft/sec] |
常量 | 数值 |
重力常数 (g) | 32.174049 [(ft·lbm)/(lbf·sec²)] |
朱尔常数 (Jc) | 778.169233 [ft·lbm/BTU] |
标准日压力 (Pstd) | 14.696 psia |
标准日温度 (Tstd) | 518.67 R |
6.4 求解器设置
T-MATS的求解器块集基于两个主要组件:迭代求解器和雅可比计算器。迭代求解器使用牛顿-拉夫森法(Newton-Raphson method)来逐步逼近系统的解,其数学描述为方程(1)所示:
$$
x(n+1)=x(n)-\frac{f(x(n))}{J}
$$
式 1。
雅可比矩阵(J)是飞行输入和输出之间的线性映射。它通过从初始条件(x)扰动每个飞行输入,来找到对飞行输出(f)的影响。雅可比矩阵的更精确的数学描述可以参见公式(2)。
$$
J=\left[\begin{array}{ccc}
\frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \
\vdots & \ddots & \vdots \
\frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n}
\end{array}\right]
$$
式 2。
T-MATS 求解块工作分为两个主要步骤。在第一步中,雅可比计算器计算飞行的线性映射。从初始条件开始,雅可比计算器逐个扰动每个输入,记录结果,并计算每个输出相对于每个输入的斜率。一旦对每个输入完成此操作,雅可比矩阵就被构建、求逆,并传递给牛顿-拉夫森块。在第二步中,牛顿-拉夫森求解器利用第一步中开发的雅可比矩阵朝着解决方案迈进。该求解方法假设飞行是局部线性的,因此,当系统(高度)非线性时,求解器可能无法收敛到解决方案。关于求解器及其工作原理的更多信息,可以在求解器内部块(TMATS: 牛顿-拉夫森求解器和TMATS: 雅可比计算器)的帮助文件中找到。
6.5 Turbomachinery Plant Setup
T-MATS Simulink 库中的“Turbomachinery”子库包含了可以组合成燃气涡轮机的通用模块。燃气涡轮机的最基本定义是压缩机与燃烧室、涡轮机以及用来连接它们的轴串联起来;更复杂的燃气涡轮机可能包含多组压缩机和涡轮机,以及不同的空气旁通设置。本文件中使用的简单工作燃气涡轮机示例是涡轮喷气发动机,它由一个压缩机、燃烧室、涡轮和喷管按串联方式组成(如图 5 所示)。本节中的工厂设置描述假设读者对涡轮机械有所了解;如果没有,读者应参考第 1 节中列出的资料来源。
图 5. 示例涡轮喷气机框图。
6.5.1 独立变量和依赖变量
在涡轮机械系统中,通常无法直接得知每个站点的流量,必须通过计算来解决。T-MATS 求解模块可以通过改变压缩机和涡轮机图表上操作点的位置来将流量误差(输入流量与内部计算流量之间的差异)驱动到零。在设置仿真时,独立变量的数量必须与依赖变量的数量相匹配。动态燃气涡轮机示例(一个简单的涡轮喷气发动机)的变量定义可以参见表 8。
表 8. 动态涡扇模型的独立和依赖变量
依赖变量 | 独立变量 |
---|---|
喷管流量误差 | 引擎流入流量 |
涡轮流量误差 | 涡轮 PR-map |
压缩机流量误差 | 压缩机 R-line |
(注:参见色彩编码部分 6.2.1,了解如何快速找到典型的独立和依赖变量)
需要注意的是,尽管某些输入在某些仿真中可能是已知的,但将已知的独立变量设为常数,并从求解器中移除依赖变量,这种做法应避免。因为独立变量向量的微小变化可能会导致收敛到一个不存在的图表点,从而导致仿真崩溃。更谨慎的做法是,在独立变量的初始条件中使用已知值,并允许求解器使用依赖变量来求解。如果初始条件确实是稳态解,则独立变量的最终值将接近或与初始值相同。如果需要精确的输入/输出相互依赖关系,可以使用 T-MATS:“Jacobian Calculator”模块(位于“数值方法”子库中)来生成。
6.5.2 图表
T-MATS: Compressor 模块使用图表来计算压缩机的效率、压力比和修正流量,每个值都是修正压缩机转速 (Nc) 和 R-line(通常由迭代求解器求解)的函数,如图 6 和图 7 所示。由于在 MATLAB 中创建大型多维表格的复杂性,图 6 和图 7 中的压缩机图表被拆分成了三个不同的表格用于 T-MATS,分别求解修正流量 (Wc)、压力比 (PR) 和效率 (Eff)。此外,提供了标量来修改这些插值的输入和输出,以调整性能图的特性。压缩机模块图表的缩放总结如下表 9。需要注意的是,对于 T-MATS 中的每个涡轮机械组件,速度和流量都根据公式 (3) 进行修正,其中 Nmech 为机械轴转速,Tin 为模块输入端的总温度,Tstd 为标准温度(518.67 度 R),Pin 为模块输入端的总压力,Pstd 为标准日压力(14.7 psia),Win 为模块输入端的流量。
$$
\text { Correct Speed }(N c)=\frac{\text { Nmech }}{\sqrt{\frac{\text { Tin }}{\text { Tstd }}}}
$$
$$
\text { Correct Flow }(W c)=\text { Win }\left(\frac{\sqrt{\frac{\text { Tin }}{T s t d}}}{\frac{\text { Pind }}{\text { Pstd }}}\right)
$$
式 3。
图 6. 样品压缩机图(压力比vs修正流量)。
图 7. 示例压缩机图表(效率 vs. 修正流量)
表 9. 压缩机图表方程
压缩机图表变量 | 图表方程 |
---|---|
缩放压缩机速度 | Nc_map = Nc * C_Nc |
压力比 | PR = (tablelookup(R_line, Nc_map) - 1) * C_PR + 1 |
修正流量 | Wc = tablelookup(R_line, Nc_map) * C_Wc |
效率 | Eff = tablelookup(R_line, Nc_map) * C_Eff |
(注:表格定义变量未列出,但需要注意的是,每个二维图表需要定义 x 轴、y 轴和表格值。)
图 8. 样本涡轮机图表(修正流量 vs. 压力比)
图 9. 样本涡轮机图表(效率 vs. 压力比)
T-MATS: Turbine 模块使用图表来计算涡轮机的效率和修正流量。这两个变量作为修正涡轮机速度 (Nc) 和 PR_map 值(通常由迭代求解器求解)的函数,如图 8 所示。T-MATS 使用两个表来表示涡轮机图表:一个求解效率 (Eff),另一个求解修正流量 (Wc)。与压缩机图表定义类似,提供了标量以允许修改性能图的特性。涡轮机模块图表的缩放总结如下表 10。
表 10. 涡轮机图表方程
涡轮机图表查找 | 图表方程 |
---|---|
缩放涡轮机速度 | Nc_map = Nc * C_Nc |
缩放压力比 | PR-map = (PRinput - 1) * C_PR + 1 |
修正流量 | Wc = tablelookup (PR-map, Nc_map) * C_Wc |
效率 | Eff = tablelookup (PR-map, Nc_map) * C_Eff |
(注:表格定义变量未列出,但需要注意的是,每个二维图表需要定义 x 轴、y 轴和表格值。另外,涡轮机定义的参数与压缩机定义的参数是独立的。)
T-MATS 设计时尽可能具有灵活性;然而,压缩机和涡轮机图表可以有多种定义方式。如果图表不兼容且无法调整为与 T-MATS 模块集兼容,则必须创建新的模块,以便与所需的图表版本兼容。
在某些情况下,可以将图表转换为可在 T-MATS 模块中使用的形式,例如,当使用压缩机 EM-line 时。EM-line 是一种被强制转换为线性方程形式的 R-line。T-MATS 的压缩机模块设计用于使用表格而非方程,但通过计算 EM-line 方程的各种 R-line 点,将一种图表风格转换为另一种是可能的。例如,假设修正流量 (Wc) 是基于压缩机速度 (Nc) 和 EM-line 的表查找,而压缩机的压力比和效率则按方程 (4) 定义。
$$
\begin{gathered}
P R=5+E M-\text { line }(W c+100) \
E f f=\text { tablelookup }(N c, E M-\text { line })\left(P R^{0.1}-1\right)
\end{gathered}
$$
式 4。
要将此图转换为基于 R-line 的图,可以选择一对 Nc 和 EM-line 值,用于根据 Nc 和 EM-line 计算 PR 和 Eff 表格(EM-line 值可以基本上替代 R-line 值)。Wc 的表格已经处于可接受的形式,因此无需转换。在这个例子中,所有 T-MATS 标量的值将为 1,因为它们在压缩机图表定义中并未出现。
6.5.3 压缩机可变几何(IGVs 和 VSVs)
压缩机中的可变几何(VGs)在许多现代大型发动机中起着至关重要的作用。进气导向叶片(IGVs)和可变定子叶片(VSVs)是需要考虑的两种几何形状,在开发 T-MATS 中的燃气涡轮发动机模型时可能需要将它们考虑进去。在 TMATS: Compressor 块中,VG 位置必须在压缩机图表中进行考虑。目前,T-MATS 没有能力产生 VG 的非标瞬态响应;不过,未来版本中计划添加此功能。
6.5.4 排气和空气旁通
由涡轮机械产生的高压空气是一种用途广泛的资源。在 T-MATS 中,可以通过几种方式建模空气的排放或旁通:例如,可以为 TMATS: Compressor 模块启用级间排气(如客户排气和分数排气),并且 T-MATS: Splitter 块允许创建旁通流。客户排气是固定流量的需求,而分数排气是压缩机总流量的一部分。通常,客户排气是外部系统(例如,用于冷却机舱、驱动发电机等)所需的空气,而分数排气则用于涡轮部件的冷却流。排气流输出是流动路径变量的向量(如表 6 中所描述的蓝色编码),这些变量串联在一起并包含所有处理所需的信息。按当前设计,每种排气类型的排气流最多可在一个块中请求 20 个。每个排气流可以从排气向量输出中“提取”并传递到适当的输入,例如涡轮的冷却流。
模型中的主要空气旁通可以使用 TMATS: Splitter 块创建,通常与喷嘴块配合使用。有关如何使用分流器创建高旁通发动机模型的更多细节,请参阅第 6.5.5 节。
6.5.5 涡扇发动机建模选项
涡扇发动机的建模可能需要创建风扇模块,并采用将流量划分为主流路径和旁通流路径的系统架构。这个架构可以通过多种方式设置,每种方式都利用了 T-MATS 中的压缩机、分流器和喷嘴模块。在 T-MATS 中,风扇可以建模为一个单级压缩机,或者高旁通发动机中的两条流路径(通常称为翼尖流和翼根流)可以使用图 10 中的三种流分割建模架构之一来建模:
-
选项 1:在风扇之前分割主流路径,使用两个压缩机模块分别建模翼尖流和翼根流。
-
选项 2:为翼尖流和翼根流分别分配独立的输入流,分别使用两个压缩机模块进行建模。
-
选项 3:在风扇之后分割主流路径,使用一个压缩机模块建模整个风扇(翼尖流和翼根流合并)。
选择哪种架构来建模,将主要取决于可用的地图,而图 10 中的选项并不是建模翼尖流和翼根流的唯一选择。需要提到的是,包含旁通流会创建额外的独立和依赖变量,这些变量必须添加到求解器中。额外的独立变量包括输入流量、R-line 和/或分流器旁通比,而额外的依赖变量则是与这些组件相关的流量误差。
图 10. 带旁通的燃气涡轮发动机风扇模型创建示例方案
6.5.6 iDesign
某些 T-MATS 涡轮机械模块具有通过名为 iDesign 的过程,基于设计或稳态输入参数计算发动机地图比例因子和内部变量的能力。可以通过在相关模块的 iDesign 标签下设置 iDes_M 变量来启用此过程。iDes_M 的值可以设置为 0、1 或 2。
- 值为 0 时启用 iDesign,并允许仿真保存关键变量(即比例因子和其他关键内部变量,如喷嘴喉部面积等)。
- 值为 1 时禁用 iDesign,并指定仿真应使用在系统运行时启用 iDesign 所创建的关键变量。
- 值为 2 时禁用 iDesign,但将关键变量设置为块掩模中指定的值。
使用 iDesign 的模块(如压缩机、涡轮模块等)需要某些设计或稳态变量已知并输入到它们的掩模中,以便 iDesign 正常工作;应查看每个模块的帮助菜单,以确定所需的输入信息。一旦定义了这些信息,就可以运行仿真。通常,iDesign 运行涉及稳态模型仿真,以便解算器收敛到设计点(或适当的稳态值)。完成后,可以在 *_Data 输出总线、指定的文件或工作区中找到启用 iDesign 的模块的比例因子。
请注意,启用 iDesign(值为 0)时动态运行 T-MATS 会产生不可预测的结果,不应使用。还需要注意的是,在地图未缩放的情况下,通过 iDesign 计算的值应在 1% 内接近 1。否则,在地图已缩放的情况下(如在 Example_Gas_Turbine_SS 中),通过 iDesign 计算的值可能会大幅偏离 1,最终值将由最终地图的要求决定。
此外,一般来说,如果使用 iDesign,则应为模型中所有具有此功能的模块启用 iDesign(值为 0)。仅启用部分模块可能会导致解算器收敛问题。
7 Customization
虽然 T-MATS 模块旨在尽可能通用,但用户可能需要自定义现有功能,或者创建全新的功能,以满足特定应用的需求。本节将介绍如何向库中添加新模块以及如何修改现有模块以满足仿真需求。
T-MATS 库的文件结构,如表 11 所示,反映了 T-MATS 模块在库浏览器中的显示方式。
表 11. T-MATS 库文件结构
文件 | 映射方程 |
---|---|
slblocks.m | MATLAB 脚本。最高层次的文件,包含 Simulink 浏览器库的库定义 |
TMATS_Lib.slx | 库文件,包含作为文件夹链接的子例程 |
TMATS_FolderName.slx | 库文件,包含链接到各种 T-MATS 模块的库 |
Lib_FolderName_BlockName_TMATS.slx | 库文件,包含单个 T-MATS 模块 |
7.1 库模块
T-MATS 库本质上是一个有用的 Simulink 模块集合,可以将这些模块连接在一起,创建复杂的热力学系统。通过添加新的库模块,可以扩展和自定义仿真环境,以满足仿真需求。添加新模块到 T-MATS 库的步骤如下:
- 进入 T-MATS 安装目录中的
\TMATS_Library
文件夹。 - 打开 Simulink 库浏览器,点击
文件 > 新建 > 库
(或打开并重命名现有的 T-MATS 库文件,文件名应反映新库的内容)。 - 在库文件中创建一个模块,确保层级的最高视图仅包含一个子系统。保存库文件才能将其链接到 T-MATS 库。
- 打开将链接新模块的 T-MATS 子库文件(例如
TMATS_Solver
),并将新模块拖入该窗口创建链接。注意,Simulink 可能会提示用户在编辑前解锁库,可以通过点击图表 -> 解锁库
来解锁。 - 刷新 Simulink 库浏览器(按 F5),新模块将出现在窗口中。
7.1.1 创建新的 Simulink 库浏览器文件夹
Simulink 库浏览器文件夹是组织库中模块的一种简便方法。slblocks.m
文件用于将库添加到 Simulink 库浏览器的最高层次。在 T-MATS 中,该文件将高层次的库模块 TMATS_Lib
(包含所有 T-MATS 模块的“文件夹”)链接到 Simulink 库浏览器。当向 T-MATS 添加不适合当前库结构的新模块时,建议通过以下步骤向库中添加新文件夹:
- 打开
TMATS_Lib.slx
,该文件位于TMATS\TMATS_Library
中。 - 创建一个没有输入或输出的子系统,并为其命名。注意,库需要解锁(根据 Simulink 提示)才能编辑。
- 右键点击该模块,选择“属性”菜单。在“回调”选项卡下,选择
OpenFcn
并将包含“文件夹”的库文件名称添加到内容区(例如TMATS_Turbo
)。
7.2 S-函数
在 T-MATS 中,许多模块利用 Simulink 的 S-函数。S-函数允许将 Simulink 与用其他编程语言(在这种情况下是 C 或 C++)编写的代码结合使用,相比使用传统的 Simulink 模块,具有许多优势。其中一个优势是速度:尽管许多 Simulink 模块和 MATLAB 函数运行速度较快,但编译后的 C 代码通常运行得更快。另一个优势是使用 S-函数可以在仿真开发中使用遗留代码(这些代码可能不是用 Simulink/MATLAB 编写的)。但遗留代码需要做一些修改,以符合 S-函数的特殊格式要求。
需要注意的是,为了在仿真中使用 C 代码,必须安装 MATLAB 兼容的编译器,并且代码必须通过 MATLAB 的 mex 函数编译,以生成 MEX 文件。
S-函数调用通过在 Simulink 模型中放置 S-函数模块来创建,该模块位于 Simulink -> “用户定义函数”子库中。默认情况下,T-MATS 中的 S-函数代码是用 C 编写的。可以从示例 S-函数开始作为模板(如附录 A 中标记的函数)。在编译过程中,使用两种类型的 S-函数接口文件:用于 MATLAB/Simulink 操作的 MEX 文件生成文件和用于目标硬件、可执行文件或快速加速模式的 TLC 文件。通常,如果块操作需要更新,可以更改 C 代码主体文件以反映更新。但是,如果需要更改 S-函数的输入/输出,那么 mex 生成部分和 TLC 文件都需要更新。
有关 S-函数块设置、MEX 文件创建或以 mdl 或 ss 为前缀的函数的更多信息,请参阅 MATLAB 帮助文档。更多 T-MATS 代码示例可以在 TMATS\TMATS_Library\MEX\C_code
文件夹中找到。
7.3 工具创建
T-MATS 使用内部 MATLAB 菜单功能,在每次选择菜单项时调用 .m 脚本。这些菜单功能的设置由位于 TMATS\Tools
文件夹中的 Menu_customization_TMATS.m
文件处理。一旦安装了 T-MATS,每次打开 MATLAB 时,该脚本将被调用,以使用 sl_customization_manager
命令创建 T-MATS 工具菜单中的项目。
8 Troubleshooting T-MATS
8.1 Convergence “Errors”
在使用求解器模块循环运行 T-MATS 模块时,仿真将首先尝试收敛机械。在使用新的压缩机和涡轮映射的仿真中,常常会出现参数不一致的情况。这些不一致相当于将错误的硬件放置在燃气轮机上(例如,燃气轮机配备了过小的压缩机),并且会导致机械收敛问题。收敛失败通常会导致 Simulink 通知错误,错误可能出现在看似与求解器无关的模块上,如积分器或状态空间模块,这使得排除错误变得更加困难。因此,如果在运行模型时发生错误,应该首先检查路由到求解器的依赖变量(f(x))的值。如果任何值为 inf、NaN 或超出求解器指定的迭代条件限制,仿真无法收敛。需要注意的是,在某些情况下,T-MATS 模块会发出错误。这些错误的原因会在错误消息中做出说明,并且本文件中不会进一步讨论。
解决收敛问题可能非常困难。以下是一些排查可能问题的方式:
- 双重检查模块输入:检查仿真中使用的映射和常数是否存在错误。
- 检查求解器输入:不正确的独立变量初始条件、扰动大小等,可能会导致求解器陷入局部最小值,从而无法收敛到系统解。
- 检查独立/依赖变量匹配:确保仿真/求解器中所有的独立变量和依赖变量都已列出。
- 组件测试:如果有其他系统示例的输入和输出数据,可以将仿真分解到组件级别,使用其他模型中观察到的输入作为每个模块的输入。这样有助于定位一个没有正确建模的模块。
- 稳态测试:如果系统打算动态运行,首先尝试将其运行在稳态条件下,看看是否是求解器参数的问题导致了收敛问题。
- 不使用求解器运行:去除所有求解器,使用常量输入来运行每个独立变量的仿真;如果有其他系统示例,可以将其与模型进行比较,以帮助找到错误。
- 分析雅可比矩阵:查看雅可比矩阵(J)可能会很有帮助,它展示了独立变量和依赖变量之间的关系。该值位于求解器模块的 S_Data 总线输出中,并可以通过 Simulink 的 Display sink 块显示。理解哪些独立变量应该影响哪些依赖变量后,雅可比矩阵的值可以帮助确定模型中的潜在错误源。
- 更新求解器:如果求解器使用单一的雅可比扰动,可能需要将输入更新为多步骤方法。可以通过更新雅可比计算器或求解器掩码中的扰动来实现。
- iDesign:iDesign 特性可以为每个模块开启,强制仿真收敛;该功能有助于确定仿真接近收敛的程度,尽管可能会产生不现实的标量(例如,某个组件的效率可能大于 1)。有关 iDesign 的更多信息,请参阅第 6.5.6 节。
8.2 Crashing
有时,T-MATS 仿真可能会崩溃并发出系统错误,导致 MATLAB 异常关闭(如图 11 所示)。这些内部错误通常是由于编译后的 C 代码执行错误引起的(通常是 C 代码尝试访问它没有权限访问的内存位置)。这种情况可能发生在以下情况下:
- 尝试访问数组之外的元素(例如,访问一个有 15 个元素的数组中的第 21 个元素)。
- 错误地使用指针。
- 通过引用将数组传递给其他函数。
例如,当为表查找使用的掩码参数提供一个长度为 1 的向量或数组时,可能会观察到这种错误。如果仿真崩溃,检查每个 T-MATS 模块的掩码参数是否具有正确的长度应该是排查错误的第一步。需要注意的是,这只是可能导致崩溃的一个原因。
图 11:示例 MATLAB 内部问题消息
9 Version Compatibility
本节描述了可能与 T-MATS 旧版本不兼容的版本更新。每个小节包含更改的名称、描述和可能修复问题的操作。需要注意的是,此列表主要列出功能选择更改,而可能不会列出可能改变块或命令操作的 bug 修复。更新版本时,建议在更新之前备份工作,以便在排除新块行为时参考。所有块在发布前都会进行广泛测试,但仍有可能出现错误。如果发现错误,请将其发布到 https://github.com/nasa/T-MATS/issues,开发团队会尽快处理。关于版本兼容性的一般问题可以在用户论坛发布:https://groups.google.com/forum/#!forum/t-mats-user-group。
最新的 T-MATS 提交列表请见:https://github.com/nasa/T-MATS/commits/master
9.1 Version 1.1.2
Name | Description | Required action when updating |
---|---|---|
MATLAB version | 该版本的 T-MATS 基于 MATLAB v2015aSP1,可能在 MATLAB 的旧版本中无法正常运行。 | 如果遇到 MATLAB 版本错误,请参阅 MATLAB 文档中的修复方法。一般建议使用 T-MATS 所基于的 MATLAB 版本或更新的版本。 |
Bus name changes | 块输出的总线名称(例如 CharacFlowOut)已更改为更简单的格式。此更改是为了使旧格式的命名约定与 Simulink Coder 和自动总线生成器兼容。 | 如果使用总线输出作为总线,必须更新为新的名称。如果未更新,将出现错误,提示 MATLAB 无法找到旧名称。 |
Mask name update | 更新了压缩机和涡轮模块的掩码名称。某些掩码名称已更改,包含“map”字样,以便更清晰地表示该值的用途。 | 更新 T-MATS 后,旧版本将没有新的名称,并且该部分将填充默认值。必须重新输入这些部分。此更新仅影响涡轮和压缩机。建议在更新前保存旧版本的输入,以便参考。未重新定义可能会导致矩阵大小错误。 |
Surge margin default definition | 压缩机更新为使用特定的 R 线作为默认的涡流裕度。此值也基于映射值设置,以便更易于定义涡流裕度。 | 转到压缩机的涡流裕度选项卡,确保按照预期设置。将涡流值更新为映射值(而不是绝对值)。不正确定义不会报错,但涡流裕度值将不正确。 |
Jacobian calculator perturbations | 雅可比计算器已更新,支持多个扰动。输入扰动现在必须定义为数组,以增强雅可比计算器的鲁棒性。 | 在旧版本中,雅可比计算器掩码或求解器中的扰动大小无论是行向量还是列向量都无关紧要。在新版本中,扰动必须定义为行向量集合。例如,如果有 3 个输入,并且想对每个输入做 2 个扰动(1 和 -1),则矩阵应为:[1 1 1; -1 -1 -1]。如果定义不正确,将出现矩阵大小错误。 |
iDesign variable creation | iDesign 功能将改为创建并使用二进制文件进行操作(而不是 .mat 文件)。此更改是为了便于代码生成。 | 旧的 *.mat 文件(包含 iDesign 标量)不再可用。建议使用新方案重新计算标量。需要注意的是,旧文件名将继承到新块中,但该名称可能不可用。建议使用默认值作为文件名。 |
Gear box flip | 齿轮箱的侧面已被反转,以使输入更直观。 | 验证齿轮箱输出值是否符合预期。可能需要对齿轮比取倒数,并更改效率以反映新块。 |
9.2 Version 1.1.3
Name | Description | Required action when updating |
---|---|---|
Nozzle type | 喷嘴类型输入已从数字输入更改为下拉菜单项。 | 下拉菜单默认为收敛喷嘴,因此如果模型仅使用收敛喷嘴,则不会发生变化。如果模型使用收敛/扩展喷嘴,则必须在喷嘴掩码中重新指定。 |
9.3 Version 1.2
Name | Description | Required action when updating |
---|---|---|
Sensor IC | 向传感器块添加了初始条件。这减少了在构建系统时创建代数环的机会。 | 需要在块中设置初始条件。默认值为 0,如果不更新为更接近实际的值,将导致问题。 |
10 Related Publications
以下出版物可供进一步参考:
-
Chapman, J.W., Lavelle, T.M., May, R.D., Litt, J.S., Guo, T-H., “Propulsion System Simulation Using the Toolbox for the Modeling and Analysis of Thermodynamic Systems (T-MATS),” 2014 AIAA Joint Propulsion Conference, Cleveland, OH, Jul 28-30, 2014.
-
Chapman, J.W., Lavelle, T.M., Litt, J.S., Guo, T-H., “A Process for the Creation of T-MATS Propulsion System Models from NPSS Data,” 2014 AIAA Joint Propulsion Conference, Cleveland, OH, Jul 28-30, 2014.
-
Lavelle, T.M., Chapman, J.W., May, R.D., Litt, J.S., and Guo, T.H., “Cantera Integration with the Toolbox for the Modeling and Analysis of Thermodynamic Systems (T-MATS),” 2014 AIAA Joint Propulsion Conference, Cleveland, OH, Jul 28-30, 2014.
-
Zinnecker, A.M., Chapman, J.W., Lavelle, T.M., and Litt, J.S., “Development of a twin-spool turbofan engine simulation using the Toolbox for the Modeling and Analysis of Thermodynamic Systems (T-MATS),” 2014 AIAA Joint Propulsion Conference, Cleveland, OH, Jul 28-30, 2014.
-
Chapman, J.W., Kratz, J., Guo, T-H., Litt, J.S., “Integrated Turbine Tip Clearance and Gas Turbine Engine Simulation,” AIAA 2016-5047, 2016 AIAA Joint Propulsion Conference, Salt Lake City, UT, 2016.
-
Chapman, J.W., Lavelle, T.M., Litt, J.S., “Practical Techniques for Modeling Gas Turbine Engine Performance,” AIAA 2016-4527, 2016 AIAA Joint Propulsion Conference, Salt Lake City, UT, 2016.
-
Chapman, J.W., Litt, J.S., “Control Design for an Advanced Geared Turbofan Engine,” AIAA 2017-4820, 2017 AIAA Joint Propulsion Conference, Atlanta, GA, 2017.
-
David G. Goodwin, Harry K. Moffat, Ingmar Schoegl, Raymond L. Speth, and Bryan W. Weber. Cantera: An object-oriented software toolkit for chemical kinetics, thermodynamics, and transport processes. https://www.cantera.org, 2023. Version 3.0.0. doi:10.5281/zenodo.8137090
11 T-MATS教程
T-MATS 软件包是一个 Simulink 库,可用于建模任何热力学系统。为了帮助用户更好地理解如何将库中的各种模块组合在一起,软件包包含了三个示例。本文将描述这些示例的开发过程,并突出在开发仿真时用户应该注意的重要事项。在用户完成教程的同时,查看 T-MATS 库中的相应示例文件进行对比可能会很有帮助。
11.1 T-MATS 示例 1:牛顿-拉夫森方程求解器
本节将描述如何将 T-MATS 模块组合起来创建一个简单的方程求解器。这个求解器包含在 T-MATS 的示例部分中(NewtonRaphon_Equation_Solver.slx)。
-
创建机械模型
在本示例中,机械完全定义,仅依赖一组输入,具有 3 个自变量和 3 个因变量,且是多项式形式(使用 Simulink 的 Fcn 模块创建)。为了快速参考,T-MATS 示例中使用的三个函数已经在公式(5)中给出。 -
放置求解器
在此案例中,系统与时间无关,因此将使用稳态求解器模块(TMATS: SS NR Solver w JacobianCalc)。 -
连接模块
功能模块的输出仅依赖于功能模块的输入。T-MATS 求解器模块被设计为接受一个向量输入并产生一个向量输出,因此需要将功能模块的输出合并为一个多路复用信号,然后连接到求解器模块的输入 f(x)。求解器的输出 X 可以直接连接到每个功能模块的输入,因为这些模块接受向量输入(请参阅本节稍后的图示,在其中添加了显示器以帮助用户观察结果)。 -
设置求解器
双击求解器块。在应用中,需要根据需求调整掩码参数。向量 SJac_Per_M 和 SNR_IC_M 的长度必须等于系统中的自变量和因变量的数量(在本示例中为 3)。请参阅示例模型 NewtonRaphson_Equation_Solver.slx 以查看此特定案例的掩码参数。 -
配置仿真
为了避免在运行仿真时遇到错误,应该先通过“仿真”菜单栏中的“配置参数”窗口设置求解器选项。导航到“求解器”面板,并选择固定步长、离散求解器,如图 11 所示。 -
运行仿真
此时,可以运行系统。点击 Simulink 模型顶部的绿色播放按钮。如果仿真求解器选项已正确设置,仿真将成功运行。
图 11. 模型配置参数设置
- 执行完成,解释结果
显示器将显示方程的解(见图 13)。S_Data 输出向量中的元素 "Converged" 显示模型是否已收敛。如果收敛标准已满足,该元素将为 1;如果求解器输入 f(x) 未趋近于零,则该元素为 0。
图 13. 运行方程求解器
11.2 T-MATS 示例 2:Example_GasTurbine_SS
本节将描述如何组合 T-MATS 块来创建 T-MATS 包含的简单稳态燃气涡轮机示例(GasTurbine_SS_Template.slx)。请注意,示例模型使用了 Block Link Setup 工具,通过用 Simulink: GoTo 和 Simulink: From 块替换线路,生成一个整洁的模型。
11.2.1 创建燃气涡轮机 plant
-
收集模块
将 TMATS: Shaft、Compressor、Burner、Turbine、Duct 和 Nozzle 块放入模型中。这些块位于 T-MATS 的 “Turbomachinery” 子库中。 -
连接核心气流路径
按照步骤 1 中列出的顺序排列这些块,并将每个 GasPthChar 输出连接到下一个块的 GasPathChar 输入。(轴不在此步骤中) -
连接旁路气流路径
虽然此示例未使用客户的旁路气流或冷却气流,但将压缩机的 FBldsCharOut 输出连接到涡轮的 CoolingFlwCharIn 输入,将允许在需要时稍后添加这些功能。 -
将未使用的输出连接到终结器块
表 12 中列出的输出在本教程中未使用,应将其连接到 Simulink: Terminator 块。
表 12. 稳态涡扇发动机示例,未使用的输出:
块 | 未使用输出 |
---|---|
Compressor | CustBldsCharOut |
C_Data | |
Burner | B_Data |
Turbine | T_Data |
Nozzle | WOut |
Fg | |
N_Data |
注意,在每个块上使用 Block Link Setup 工具将自动在这些输出处放置 Simulink: Terminator 块。
-
设置轴组件
将 NmechOut(来自轴)连接到压缩机和涡轮的 Nmech 输入。将来自压缩机和涡轮的 TrqOut 输出多路复用,并将该信号连接到轴的 Torque 输入。 -
设置输入流量
TMATS: Ambient 块将环境特性转换为燃气涡轮机的热力学特性;将此块放入模型,并将 GasPthChar 输出连接到 TMATS: Compressor 块的 GasPthChar 输入。TMATS: Ambient 块的环境压力(Pamb)输出需要路由到 TMATS: Nozzle 块的 Pamb 输入,而 A_Data 输出未使用,可以路由到 Simulink: Terminator 块。
将环境条件(TMATS: Ambient 块)和燃料流量(TMATS: Burner 块)的输入设置为常数,因为仿真将求解稳态。 -
定义掩码参数
每个组件的常数和映射应根据用户的特定应用进行更新。请参阅示例模型,以获取此特定情况可用的值。(请注意,每个参数的实际值在设置文件中,该文件为 Simulink 模型文件中的掩码参数创建了指定的变量。)
完成的燃气涡轮机 plant 模型应类似于图 14,其中在每个组件的输出处添加了 Simulink: Display 块。
图 14. 燃气涡轮机设备
11.2.2 Plant 求解器集成与 plant 输入
-
创建求解器
将 TMATS: SS NR Solver w Jacobian Calc 块放入模型中。将所有的因变量(组件输出,绿色标记)和 Ndot(来自轴)多路复用,并将信号路由到求解器块的 f(x) 输入。将求解器块的输出 X 进行解多路复用,并将每个独立变量路由到组件块的深绿色输入之一;其中一个独立变量应路由到轴块的 NMech 输入。在这个示例中,有四个独立变量和四个因变量,如图 15 所示,在求解器输入和输出处已添加显示块,帮助确定求解器是否已收敛到一个解。 -
设置求解器参数
一旦信号连接完成,应该定义求解器的掩码参数;这些参数包括初始条件、终止条件以及影响求解器准确度的其他值。请参阅示例中的参数值,以用于该模型。
图 15. 稳态求解器设置
-
配置求解器
打开仿真配置窗口(在 Simulink 菜单栏中选择 Simulation -> Model Configuration Parameters),选择一个固定步长的离散求解器,并指定起始时间和停止时间,以及固定的步长大小。(更多关于配置仿真求解器的信息,请参见第 11.1 节的教程。) -
运行仿真
一旦引擎模型已创建并连接到求解器,点击菜单栏中的运行按钮即可启动仿真。在仿真完成后,应检查显示块以确认是否收敛。从表 13 可以看到,示例 2 中的独立变量和因变量正在朝着收敛目标推进(即流量误差接近零)。
表 13. 示例 2 收敛输出
独立变量 | 独立请求(值) | 因变量 | 误差(因变量值) |
---|---|---|---|
W(系统输入) | 101.2 pps | 正规化流量误差 喷嘴 | 6.413e-06 |
R-line(压缩机) | 1.955 | 正规化流量误差 压缩机 | 6.379e-06 |
PRmap(涡轮机) | 3.054 psia/psia | 正规化流量误差 涡轮机 | 4.884e-06 |
Nmech(轴) | 9980 rpm | Ndot(轴) | 0.007742 rpm/sec |
由于稳态燃气涡轮示例需要定义大量的块参数,示例使用了一个设置脚本(文件名后缀为 “_setup_everything”)。运行此脚本后,它会创建通向 SimSetup 文件夹的路径,并运行该文件夹中的所有文件,这些文件会在工作区中创建变量 MWS。MWS 是一个 MATLAB 数据结构,包含示例中使用的许多变量,您可以使用以下语法访问它们:MWS.Component.Variable(例如,MWS.HPC.s_Wc 可用来访问 HPC 中 Wc 映射的标量)。当仿真运行时,Simulink 会在 MATLAB 工作区中查找 MWS 并加载所需的变量。该示例已配置为在关闭模型文件时通过运行清理脚本自动删除临时路径(由设置脚本创建)。
11.3 T-MATS 示例 3: Example_GasTurbine_Dyn
尽管 T-MATS 能够解决稳态条件,但它的最终目的是在动态仿真环境中使用。本节将介绍如何使用 T-MATS 块创建动态燃气涡轮仿真,并演示用户在开发新仿真时可能希望使用的各种 MATLAB 实践。此示例包含在 T-MATS 示例部分中(GasTurbine_Dyn_Template.slx)。
在尝试重建动态燃气涡轮仿真示例之前,用户应阅读前两个示例,因为本示例将跳过其中涉及的某些主题,特别是在建模结构方面,假设已经根据第 11.2 节的说明构建了引擎plant模型,该节介绍了稳态燃气涡轮仿真。
11.3.1 一般架构
在 T-MATS 中实现动态求解器需要至少设置两个独立的循环。这个示例使用了一个“内循环”,用于求解收敛性,和一个“外循环”,用于在时间上步进。内循环包括plant和求解器,并且是从因变量求解独立变量的地方。外循环设置了仿真的动态部分,表示系统随时间的演变,在每个时间步上进行收敛。创建这种嵌套循环时需要采用分层方法(有关更多细节,请参见第 6.1 节)。
11.3.1.1 创建动态仿真框架
-
设置内循环
从上一节描述的稳态模型开始,在模型中放置一个 Simulink: While Iterator Subsystem。进入子系统,并双击 Simulink: While Iterator 块以打开参数窗口。进行以下更改:将最大迭代次数设置为 -1,将循环类型更改为“do-while”,并勾选“Show iteration number port”选项。 -
为动态仿真准备稳态模型
删除 Simulink: While Iterator Subsystem 中的默认输入和输出端口。复制并粘贴整个稳态模型(plant和求解器块)到子系统中。在此步骤中,将plant放置在 While Iterator 子系统中的单独子系统内可能会有所帮助,如图 16 所示,在这里低级的燃气涡轮组件被放置在 InnerLoopPlant 子系统中。 -
添加动态求解器
用 TMATS: Iterative NR Solver w JacobianCalc 块替换 TMATS: SS NR Solver w JacobianCalc 块,并将 T-MATS 求解器的 do_while_Condition 输出连接到 Simulink: While Iterator 块的 cond 输入,将 Simulink: While Iterator 块的输出连接到 T-MATS 求解器块的 Iterations 输入,如图 16 所示。 -
设置求解器
在动态仿真中,轴速不是求解器的独立变量;通过移除 Ndot(从求解器块的输入端)和 NMech(从块的输出端),来减少系统的阶数,同时将 Ndot 路由到模型的外循环,并从外循环创建一个输入(对于 NMech)到plant模型。(可以使用总线选择器来路由信号;有关此修改的更多信息,请参见第 11.3.4.1 节。)
图 16. Iterative NR Solver w JacobianCalc 线路连接。
-
设置外循环
在 While Iterator 子系统外,将 Ndot 路由到来自“Solver”子库的 TMATS: OuterLoop 积分器块的输入(可以使用总线选择器),并将积分器块的输出路由到plant(内循环)的 NMech 输入。为了加速修改模型的速度,在运行多个仿真时,环境输入(到 TMATS: Ambient 块)和燃料流量输入(到 TMATS: Burner 块)也可以从外循环路由到内循环。可以使用总线创建器将这些信号与 NMech 组合,如图 17 所示,从而生成更清晰的模型。 -
定义plant输入
可以通过将 TMATS: Model Source 块(来自“Solver”子库)连接到相应的输入来定义环境输入和燃料流量。 这些块的掩码参数包括时间向量和定义信号在每个时间点取值的向量;可以通过这些输入定义仿真配置文件。
图 17. 动态燃气轮机简单“外循环”回路。
11.3.2 向仿真中添加控制
本节将介绍如何向 T-MATS 仿真中添加一个简单的反馈控制器,该控制器使用轴速作为反馈信号。
-
为控制器准备开环模型
用 TMATS: Model Source 块替换燃料流量 TMATS: Model Source 块,改为用于轴速的 TMATS: Model Source 块,并在模型的外循环中放置一个 TMATS: Simple PI controller 块(来自“Effectors and Controls”子库)。 -
连接控制器
将外循环积分器块的输出 Nmech 连接到 PI 控制器的 Input_sensed 输入(这可能需要添加一个 Simulink: Zero-Order Hold 块来采样 Nmech)。同时,将轴速的 TMATS: Model Source 块的输出连接到 PI 控制器的 Input_dmd 输入,如图 18 所示。PI 控制器块的输出应连接到内循环燃烧器块的燃料流量输入(即,位于 Simulink: While Iterator 块子系统内)。 -
调节控制器
可以调节控制器的增益(在掩码参数中定义),直到获得期望的响应。需要注意的是,尽管 PI 控制器在简单的燃气涡轮中可能功能足够,但它并不代表一个现实的燃气涡轮控制器,并且没有能力在没有重大修改的情况下考虑多变量约束。
图 18. 带控制器的动态燃气涡轮
11.3.3 plant与外循环系统接口
在实际系统中,发动机效应器和内部状态需要通过控制系统硬件进行访问。T-MATS 包提供了通用的控制器接口块,如“Effectors and Controls”子库中的一阶传感器和执行器块,可以用来模拟增加硬件带来的动态。这些块可以添加到模型的“外循环”中,以提高仿真精度。
11.3.4 高级仿真结构与格式化
动态燃气涡轮示例使用了一些可选的结构化和格式化技术,这些技术有助于组织和分割仿真。当开发复杂模型或多个开发人员共同创建模型时,这些选项非常有用。以下技术基于 MATLAB/Simulink 块,与 T-MATS 包无关。
11.3.4.1 总线(Busses)
总线是一种有效的方式,通过 Simulink 模型传递信号,并保持图示清晰。
创建总线:
- 在模型中放置一个 Simulink: Bus Creator 块。任何输入到该总线创建器的信号都会被加入到总线,并与输入到总线创建器的线的名称相关联。(请注意,如果总线仅限于单个模型,则此步骤是唯一需要的。)
- 可以使用总线编辑器(在编辑菜单中找到)来创建总线元素。在 Simulink 图示中创建的总线也应在总线编辑器中创建,并注意按照它们在 Simulink 图示中出现的顺序组织元素。
- 创建总线后,在总线编辑器中,选择“文件”菜单中的“导出到文件”选项。这样会将总线保存到一个文件中,该文件必须在打开 Simulink 模型之前加载。(例如,GasTurbine_Dyn_Template 示例的 setup_everything.m 脚本会从 Bus 文件夹中加载所有必要的总线元素。)
- 如果之后需要向总线中添加任何元素,必须重复这些步骤(即打开总线编辑器,添加新项,然后将新项保存到文件中)。
使用总线:
- 可以通过 Simulink: Bus Selector 块将总线元素从总线中路由出来。只需将总线连接到选择器,然后使用对话框选择要输出的总线元素。
11.3.4.2 模型调用(Model Calls)
模型调用可用于将外部文件引入到 Simulink 模型中。这种分割方式有三个主要优点:它允许多个用户同时工作在仿真中(前提是他们不需要同一个文件),它使软件版本控制更清晰,并且它支持模型的重用。
设置模型调用需要将一个来自“Ports and Subsystems”子库的 Simulink: Model 块放入模型中。放置块后,应在双击块打开的对话框中指定要调用的模型文件名。在动态求解器的燃气涡轮示例中,调用了外部的plant和控制模型。仿真可以使用带有总线的 Simulink: Model 块,这要求遵循总线对象创建方法。
模型调用还可以用于在多个仿真环境中模拟plant。例如,可以创建一个稳态仿真环境和一个动态仿真环境,它们都引用同一个plant。这样,您只需修改一个文件(包含plant模型),这些更改将在两个仿真环境中得到反映。
12 致谢
作者感谢 N & R Engineering 的 Alicia Zinnecker 和 Yuan Liu,以及 NASA Glenn Research Center 的 Jeffrey Csank,在 T-MATS 测试和技术咨询方面的贡献。我们还要感谢 NASA Glenn Research Center 的 Sanjay Garg 对 T-MATS 开发的支持,以及 NASA 航空安全计划的飞行器系统安全技术(VSST)项目对本工作提供的资助。
/译者注:翻译仅供参考,与真实含义可能有所差异。/