AMEsim中存在多种类型的变量,每个子模型所使用的变量种类与数量均在帮助文档有所展示。

变量类型对建模效率、求解精度有着很大的影响,理解各类变量的区别有助于我们加深对AMEsim建模的理解。
1 变量与参数
首先要区分的一个概念就是变量与参数的区别。
在仿真过程中,一些量会随着时间而变化。典型的例子是管道中的压力和负载的转速,这些量称为变量(variables) 。虽然在一些特定的边界条件下它们是恒定的,但由于原则上它们可能随时间变化,因此它们仍然称为变量。
而在模拟运行期间始终是固定的量,称之为参数(parameter) ,这些量通常表示组件的一些基础属性或参数,例如管道的直径和负载的质量。
2 内部变量和外部变量
在AMESim中,子模型(submodel)的变量根据其原理主要分为外部变量、内部变量和局部变量。
区分上述几类变量的关键在于可访问性与可见性这两个特性:
可访问性指的是变量是否能在子模型的不同部分或与其他子模型之间进行读取和写入操作,代表变量的读取和写入权限。
可见性指的是变量在哪些部分可以被“看到”或识别到,代表变量的作用范围。
2.1 外部变量(External Variables)
外部变量是模块与外部环境(例如其他模块或仿真程序)进行交互的接口变量,作为模块的输入或输出变量(外部变量要么是输入,要么是输出)。
-
输入变量(Input Variables) :从外部传入模块的变量,通常由其他模块的输出结果或者用户定义的初始条件提供。例如,给定的输入流量、温度、速度等。
-
输出变量(Output Variables) :模块计算后的结果,通过输出接口传递给其他模块或仿真系统。例如,模块计算后的压力、功率、扭矩等。
外部变量的变化会影响模块的行为,并且模块的结果也可以传递给其他模块,子模型的主要功能是根据其输入计算其输出。
例如对于图示子模型而言,其两个端口的输入(速度、位移、加速度)和输出(力)都属于外部变量
外部变量的可访问性与可见性为:
可访问性:外部变量可以通过端口被其他子模型访问,能够接收输入数据或提供输出数据。
可见性: 外部变量对其他子模型可见,可通过端口进行数据交换。
2.2 内部变量(Internal Variables)
内部变量是在子模型内部定义并用于描述模块内部行为的变量,通常是子模型的状态变量,用来表示子模型内部的物理量、状态量或者模型运算的中间结果,常用于状态监测、绘图或其他辅助功能。
内部变量通常在子模型的内部计算过程中被定义和使用,且在整个子模型的生命周期内有效,其不直接与子模型外部的其他模型或仿真环境进行交互,常见的内部变量包括:
-
状态变量(State Variables) :描述系统动态的变量。
-
计算变量(Computed Variables) :通过其他变量的计算结果得到的变量,用于表示模块的输出或其他间接关系。
内部变量是模块的核心,它们的变化决定了模型的动态特性。
内部变量的可访问性与可见性为:
可访问性:内部变量对子模型外部不可访问,不能作为输入或输出直接与其他子模型通信。子模型内部可访问。
可见性: 内部变量在子模型内可见。
内部变量的一个典型案例是RSTAT
模型,其没有外部端口,因此没有外部变量,但却拥有17个内部变量用于监测仿真过程中的各项数据。


2.3 局部变量(Local variables)
局部变量用于在子模型中用于存储临时的计算数据或控制信息,其生命周期仅限于该函数或代码块的执行期间。与内部变量类似,局部变量不会作为输入或输出与外部模型交互。
与内部变量不同的区别在于:
-
局部变量的作用范围局限于模块或子模型的特定计算步骤,其仅在计算过程中有效,一旦计算完成,局部变量就不再有效。
-
通常局部变量只存在于子模型代码内部,在子模型外部完全无法访问。
局部变量的可访问性与可见性为:
可访问性:局部变量只能在声明它的函数或代码块内部进行读取和写入操作。
可见性: 仅在其声明的函数或代码块内可见。
区别与联系:
-
内部变量主要用于描述和模拟模块内部的动态过程,通常在模块的数学模型中定义。
-
局部变量主要用于存储计算过程中的临时数据,帮助完成某一时刻的计算。
-
外部变量则是模块与外界交互的桥梁,通过输入和输出的方式,模块与其他部分的模型进行通信。
3 变量的详细分类
前文介绍的外部和内部变量还可以进一步分类,分为8种特殊的变量类型,其分别是:
-
Explicit state variable
-
Implicit state variable
-
Constraint variable
-
Duplicate variable (simple or reversed sign)
-
One-line macro variable
-
Multi-line macro variable
-
Fixed variable
-
Activity variable
当上述变量为外部变量时,只能为输出变量。
活动变量(Activity variable)只能为内部变量。
任何不属于上述类别的外部或内部变量均称之为基本变量(basic variable)。
因此,细分过的变量类型可以通过下表进行总结:
变量类型 | 内部变量(External variable) | 外部变量(Internal variable) |
---|---|---|
Basic | Yes | Yes |
Explicit state | Yes | Yes |
Implicit state | Yes | Yes |
Constraint | Yes | Yes |
Duplicate | Yes | No |
One-line macro | Yes | No |
Multi-line macro | Yes | Yes |
Fixed | Yes | Yes |
Activity | No | Yes |
Discrete | Yes | Yes |
3.1 基本变量
基本变量(Basic Variable) 是建模时最基础的变量类型,当变量不属于其他8种特殊类型(如状态变量、约束变量等)时,自动归类为基本变量。
基本变量既可作为外部变量(连接端口间传递数据),也可作为内部变量(仅子模型内部使用)
当基本变量作为外部变量时,其一般会有以下四种形式:
类型 | 特征 | 应用案例 |
---|---|---|
输出 | 必须显式赋值,用于向其他子模型传递数据 | 弹簧力计算结果输出 |
输入 | 依赖外部连接获取数值,未连接时引发错误 | 液压阀控制信号输入 |
带默认值的输入 | 未连接时自动采用预设默认值,增强模型鲁棒性 | BHC11子模型的未连接流量参数 |
未使用的输入 | 声明但实际未参与计算的占位变量 | 预留接口的兼容性设计 |
3.2 状态变量
状态变量是指那些描述系统动态行为的关键变量。它们通常需要通过求解微分方程来确定其值。
状态变量可以分为显式状态变量和隐式状态变量两种类型。
显式状态变量(Explicit State Variables)
显式状态变量是指可以直接计算其导数并用于积分器中的变量。这些变量通常出现在微分方程的左侧,表示系统的状态随时间的变化。
例如,大多数质量子模型使用以下形式的微分方程:
其中 v 是速度,t 是时间。v是一个显式状态变量。
显式状态变量的特点:
-
直接计算导数:显式状态变量的导数可以直接从子模型的方程中计算得出。
-
积分器使用:这些变量的导数被传递给积分器,以计算下一时刻的状态值。
-
初始化:显式状态变量通常需要在仿真开始时进行初始化,可以通过用户输入或默认值设置。
隐式状态变量(Implicit State Variable)
隐式状态变量是指需要通过迭代方法求解非线性方程组来确定其值的变量。这些变量通常出现在复杂的非线性系统中,无法直接从方程中解析求解。
介绍隐式状态变量需要引入残差(residual) 的概念,例如一个典型的隐式状态变量表达式如下:
其残差为:
如上式所示,隐式状态变量通常出现在复杂的非线性系统中,无法直接从方程中解析求解,而是需要通过数值方法迭代求解。残差则是这些数值方法的核心,用来衡量当前状态是否满足系统的约束条件。
隐式状态变量的特点:
-
非线性方程组求解:隐式状态变量的值通常需要通过数值方法(如牛顿法)迭代求解。
-
残差计算:隐式状态变量通常与残差变量关联,集成算法通过调整变量值使残差趋于零。
-
初始化:隐式状态变量也需要在仿真开始时进行初始化,但可能需要更复杂的初始条件设定。
3.3 约束变量
约束变量(Constraint Variables)是指那些用于处理系统中的约束条件的变量。这些变量通常出现在复杂的非线性系统中,无法直接求解其值,而是通过数值方法(如牛顿法)迭代求解,使得系统的约束条件得到满足。
约束变量的核心概念是残差(Residual),即当前状态与约束条件之间的差异。
约束变量与状态变量的区别:
-
显式状态变量:可以直接计算其导数,并通过积分器更新状态。
-
隐式状态变量:需要通过迭代方法求解非线性方程组来确定其值。
-
约束变量:主要用于处理代数约束条件,不直接涉及微分方程,但通过残差函数间接影响系统状态。
特点:
-
约束变量需要在仿真开始时进行初始化,通常通过用户输入或默认值设定。
-
在某些情况下,约束变量的初始值可能难以确定,需要进行适当的估计。
当Amesim检测到代数环时,它将改变一个或多个普通变量的状态,使其成为约束变量,打破代数环。
3.4 重复变量
重复变量(Duplicate Variables) 是指那些在多个地方被使用的相同变量。它们通常用于避免代数环(algebraic loops),并在子模型之间传递数据时保持一致性。
重复变量可以分为简单重复变量和符号反转重复变量两种类型。
通常情况下,重复变量与主变量符号相同。但在某些场景下,需要重复变量与主变量符号相反,这源于Amesim采用的符号约定。
例如,若主变量为速度状态变量,另一个端口可能需要符号相反的同名变量。在MECMAS21子模型的约束变量示意图中,变量v2即为状态变量v1的符号反转重复变量。同理,x2是x1的符号反转重复变量,a2是a1的符号反转重复变量。若未发生符号反转,则为简单重复。
3.5 宏变量
宏变量分为单行宏与多行宏变量:
单行宏变量 (One-line Macro) 仅支持单行赋值操作。其赋值表达式可包含子模型的其他有效变量、实型参数、实型存储变量,以及时间参数和圆周率π。
多行宏变量 (Multi-line Macro) 则是单行宏的扩展版本,支持更复杂的逻辑实现,用于通过分解子模型来消除代数环。
宏变量相较于重复变量,可以实现更复杂赋值逻辑,例如:
简单重复变量:v[23]=v[56];
反向符号重复变量:v[45]=-v[7];
单行宏:v[12]=(v[23]-v[56])*v[78]/1.7027648993e0;
3.6 固定变量
固定变量(Fixed Variables) 是最简单的一类变量。其名称虽含“固定”,实则具有一定灵活性:
固定指其在仿真过程中始终保持初始值不变;
变量则意味着用户可为其赋予任意合理数值。
典型示例是恒定信号源子模型CONS0,其唯一输出为固定变量,始终输出用户设定的常数值。
内部变量虽可设置为固定变量,但此类设置的实际优势并不明显。建议在适用场景下优先使用固定变量替代基础变量,因其有助于规避代数环问题。
3.7 活动变量
活动变量(Activity variables) 是Amesim中用于量化能量交换的特殊变量类型,常见于涉及能量传递的子模型中,主要用于能量转移和耗散分析。
活动变量的表达式为:
其中, 为元件的功率(单位:焦耳/秒,J/s),活动量的单位为焦耳(J)。活动量表征流经被测元件的累积能量绝对值,其定义与传统能量不同,因其考虑功率的绝对值。
定义活动变量时需指定以下属性:
物理类型:
-
R(阻性,如阻尼)
-
C(容性,如弹簧)
-
I(惯性,如质量块)
物理域:
-
液压
-
机械
-
电气
-
热力学
-
磁学
-
电子学
活动变量的典型应用场景:
-
计算子模型活动指数(Activity Index),评估能量交换强度
-
分析机械系统中惯性体的动能变化(如球体运动)
-
监测弹簧-阻尼系统的能量存储与耗散(如地板模型的弹簧和阻尼器)
活动变量为能量流分析提供了标准化量化工具,特别是在需要评估系统能量效率或元件能量负荷的复杂多物理场仿真中具有重要作用。
3.8 离散变量
离散变量(Discrete variables)是Amesim中用于描述分段常量特性的特殊变量类型,表示在仿真过程中仅在特定离散时间点发生变化的量,其数值在非间断点保持恒定。
这类变量在时间域上呈现阶梯状变化:
离散变量
离散变量的关键特性:
-
分段常量性:变量值在两次间断事件之间保持固定
-
重置限制:仅当系统间断标志(discontinuity flag)为零时才允许修改数值
-
存储效率:适合描述状态跳变而非连续演化的过程
典型应用场景:
-
液压系统中的离散分区建模(如阀门切换状态)
-
控制系统中的数字信号处理
-
事件驱动的状态机实现(如机械部件的接触/分离状态)
离散变量特别适合描述具有离散状态切换的物理系统,例如液压控制阀的开启/关闭状态、数字控制信号的阶跃变化等场景,为混合系统建模提供了关键支持。
4 变量的数据结构
在Amesim中,标量(Scalars)和数组(Arrays)是两种基本数据结构类型,其定义与应用如下:
1. 核心定义
-
标量:表示单个独立量值,可视为维度为1的特殊数组。例如液压管道模型
HL000
中的单一压力值。 -
数组:由两个及以上相关量构成的集合,作为单一对象处理。例如长管道模型中不同位置的压力值集合。
2. 典型区别
特征 | 标量 | 数组 |
---|---|---|
数据维度 | 维度1(本质是单值) | 多维结构(最小维度2) |
存储方式 | 独立存储 | 关联量集中存储 |
应用频率 | 大多数库的基础数据类型 | 主要存在于液压等特定领域库 |
3. 应用场景
-
标量适用:集总参数模型(Lumped parameter),当系统特性可用单一值表征时使用,如短管道的整体压力、简单机械部件的速度。
-
数组适用:分布参数需求,当需要考虑空间/时间维度上的参数变化时必需,例如:
-
长管道中不同位置的压力分布
-
机械系统多自由度运动的坐标分量
-
热传导模型中的温度梯度分布
-
4. 工程意义 数组的引入使Amesim能够处理更复杂的物理场问题。例如在液压系统建模中,数组可同时表征管道多个节点的压力、流量参数,突破传统标量方法的空间分辨率限制,这对精确模拟长管道动态特性至关重要。
5 变量的分类体系
上文介绍了AMEsim的各类变量,这里总结下AMEsim变量的完整分类体系,主要从三个维度展开:
一、基础属性分类
-
作用域
-
外部变量:可跨子模型交互,包含四种类型:
-
输出变量(Outputs)
-
输入变量(Inputs)
-
带默认值的输入(Inputs with default)
-
未使用的输入(Inputs unused)
-
-
内部变量:仅在子模型内部存在,可能包含:
-
活动变量(Activity variables)
-
-
-
数据结构
-
标量(Scalars)
-
数组(Arrays)
-
二、功能类型分类
-
核心变量类型
-
基本变量(Basic variables)
-
显式状态变量(Explicit state variables):具有明确初始值
-
隐式状态变量(Implicit state variables):需迭代求解初始值
-
约束变量(Constraint variables):满足代数约束条件
-
-
特殊功能变量
-
固定变量(Fixed variables):仿真全程保持设定值
-
重复变量(Duplicates):含普通重复和符号反转类型
-
宏变量:
-
单行宏(One-line macros)
-
多行宏(Multi-line macros)
-
-
三、数值属性 所有变量必须包含:
-
标题(Title)
-
单位(Unit)
-
量纲(Dimension)
特定类型额外属性:
-
显式/隐式状态变量、约束变量、固定变量包含:
-
最小值(Minimum)
-
默认值(Default)
-
最大值(Maximum)
-
实际设定值(Actual value)
-
总结
在建模过程中,深入理解变量类型对模型构建和仿真效果具有关键作用,例如:
模型计算效率优化
-
子模型排序逻辑:显式状态变量(Explicit state)与隐式状态变量(Implicit state)的区分直接影响积分器选择,如显式状态变量使用常微分方程(ODE)求解器,而隐式状态变量需切换至微分代数方程(DAE)求解器
-
代数环规避:通过合理使用宏变量(Macro variables)或重复变量(Duplicates),可避免因直接参数传递导致的代数循环(Algebraic loops),提升求解速度(如文档中MAS000子模型案例)
物理意义保真度
-
方向敏感参数处理:符号反转重复变量(Reversed-sign duplicates)能准确表征转速、流量等具有方向属性的物理量(如文档中机械系统转速的±2000 rev/min差异)
-
能量交互量化:活动变量(Activity variables)通过积分功率绝对值计算能量传递,特别适用于评估液压/机械系统的能量损耗(如文档中R/C/I类型对应的耗散/容性/惯性活动指标)
系统稳定性控制
-
代数约束管理:约束变量(Constraint variables)强制满足特定方程(如流量守恒),但需控制使用量(文档建议每系统不超过2-3个),否则易引发高索引(Index 2)DAE问题导致求解失败
-
初始条件设定:显式状态变量需明确定义初始值,而隐式状态变量通过迭代求解,正确设置可避免发散(如文档中管道压力节点数组初始化案例)
参数传递机制设计
-
输入输出交互规则:外部变量中的"输入带默认值"(Input with default)允许未连接端口时自动回退至预设值,增强模型鲁棒性(如未连接的液压阀流量参数)
-
多维运动建模:外部数组变量支持机械系统多自由度坐标传递(如文档中二维/三维运动的位置坐标数组)
特殊建模需求实现
-
分布式参数处理:内部数组变量在HL0xx系列管道模型中实现空间离散化(如HL020子模型的5节点压力/流量数组)
-
单位系统转换:针对压力差(Pressure drop)或温差(Temperature difference)类变量,需标记"Difference"属性以确保单位转换时忽略偏移量(如bar与Pa的绝对/相对单位处理)
调试与错误诊断
-
代数环自动检测:当系统出现隐式约束时,Amesim自动将普通变量转为约束变量以打破循环(如文档中MAS000子模型案例)
-
变量类型冲突预警:离散变量(Discrete variables)与连续变量的混合使用可能引发积分步长不匹配,需通过类型检查提前规避