初始化信号和离散状态
Simulink® 允许您指定信号和离散状态的初始值,即信号和离散状态在仿真的开始时间时的值。您可以使用信号对象为模型中的任何信号或离散状态指定初始值。此外,对于有些模块,例如,Outport、Data Store Memory 或 Memory,您可以使用信号对象和/或模块参数指定模块状态或输出的初始值。在这种情况下,Simulink 会执行检查,以确保通过信号对象和参数指定的值保持一致。有关初始化总线信号的信息,请参阅指定总线元素的初始条件
如果您指定信号对象来初始化信号或离散状态,或者指定变量作为模块参数的值,Simulink 会将您指定的名称解析为相应的对象或变量,如符号解析中所述。
在任何情况下,一个给定的信号最多只能与一个信号对象关联。信号可以多次引用对象,但每次引用必须解析为同一个对象。不同的信号对象即使具有完全相同的属性也不符合唯一性的要求。如果模型将多个信号对象与任一信号关联,就会发生编译时错误。有关详细信息,请参阅 Simulink.Signal
和 Merge 模块。
使用模块参数来初始化信号和离散状态
对于具有初始值或初始条件参数的模块,您可以使用该参数来初始化信号。例如,下面的“模块参数”对话框使用初始条件 0 来初始化 Unit Delay 模块的信号。
要访问这些模块参数,请选择以下方法之一:
有关访问模块参数(包括用于控制信号和状态初始化的参数)的方法的详细信息,请参阅Set Properties and Parameters。
使用信号对象来初始化信号和离散状态
您可以使用其存储类不是 'auto'
或 'Model default'
(当您在代码映射编辑器中将对应数据类别的默认存储类设置为默认设置 Default
时)的信号对象来初始化下列各项:
具有初始条件参数的离散状态
模型中除总线信号之外的信号以及输出常量值的模块
要指定初始值,请使用模型资源管理器或 MATLAB® 命令执行以下操作:
创建信号对象。
在模型资源管理器工具栏上,选择添加 > Simulink 信号。具有默认名称的信号对象将出现在基础工作区。将该对象重命名为
S1
。也可以在命令提示符下使用以下命令:S1 = Simulink.Signal;
信号对象的名称必须与该对象初始化的信号的名称相同。虽然不是必需,但可以考虑在“信号属性”对话框中设置信号名称必须解析为 Simulink 信号对象选项。此设置将使 MATLAB 工作区中的信号对象与您模型中出现的信号保持一致。
可以考虑使用数据对象向导创建信号对象。数据对象向导将在模型中搜索不存在信号对象的信号。然后,您可以通过一个操作为搜索结果中列出的多个信号有选择地创建信号对象。有关数据对象向导的详细信息,请参阅 使用数据对象向导为模型创建数据对象。
将信号对象存储类设置为除
Auto
或Model default
之外的值。在模型资源管理器的目录窗格中,选择该信号对象。在“对话框”窗格中,将存储类设置为ExportedGlobal
。也可以在命令提示符下使用以下命令:S1.CoderInfo.StorageClass = 'ExportedGlobal';
设置初始值。您可以指定计算结果为数值标量或数组的 MATLAB 表达式,包括工作区变量的名称。
Simulink 引擎将转换初始值,使类型、复/实性和维度与对应的模块参数值保持一致。如果您指定无效的值或表达式,当您更新模型时,将显示一条错误消息。
在模型资源管理器的“对话框”窗格中,将初始值设置为
0.5
。也可以在命令提示符下使用以下命令:S1.InitialValue = '0.5'
如果您还可以使用模块参数来设置信号或状态的初始值,则应将该参数设置为空 (
[]
) 或与信号对象的初始值相同。如果将该参数值设置为空,Simulink 将使用由该信号对象指定的值来初始化信号或状态。如果将该参数设置为其他任何值,Simulink 将比较参数值和信号对象值,如果二者不同,将显示错误。以下示例显示了指定使能子系统初始输出的信号对象。
信号
s
被初始化为 4.5。要避免出现一致性错误,使能子系统的 Outport 模块的初始值必须为[]
或 4.5。使用信号
s
的 PreLoadFcn 回调参数创建模型回调。有关 Simulink 中模型回调的详细信息,请参阅模型回调。如果您需要一个信号对象,还需要将其初始值设置应用于所有 Simulink 会话,请参阅创建持久数据对象。
某些初始值设置可能取决于初始化模式。有关详细信息,请参阅 Underspecified initialization detection。
经典初始化模式:在此模式下,表示以下信号和状态的信号对象的初始值设置将覆盖对应的模块参数初始值(如果未定义,即指定为 []
):
条件执行子系统和 Merge 模块的输出信号
模块状态
有关详细信息,请参阅Classic Initialization Mode。
简化初始化模式:在此模式下,将忽略与以下模块的输出信号关联的信号对象的初始值,而使用对应模块的初始值。
条件执行子系统的输出信号
Merge 模块
有关何时使用简化初始化模式以及如何配置模型以使用此初始化模式的详细信息,请参阅Simplified Initialization Mode。
您可以将模型的欠定初始化检测设置从经典更改为简化。有关详细信息,请参阅Convert from Classic to Simplified Initialization Mode。
使用信号对象调整初始值
Simulink 允许您使用信号对象代替参数对象(请参阅 Simulink.Parameter
)来调整可通过可调参数指定的模块输出和状态的初始值。要使用信号对象调整初始值,请创建一个与信号或状态具有相同名称的信号对象,然后将该信号对象的初始值设置为一个表达式,在该表达式中包含一个在 MATLAB 工作区中定义的变量。这样,即可在仿真过程中通过更改对应工作区变量的值来调整初始值。
例如,假设您要调整名为 M1
的 Memory 模块状态的初始值。要执行此操作,您可以创建一个名为 M1
的信号对象,然后将其存储类设置为 'ExportedGlobal'
,将其初始值设置为 K
(M1.InitialValue='K'
),其中 K
是 MATLAB 工作区中的工作区变量,并将 Memory 模块的对应初始条件参数设置为 []
以免出现一致性错误。这样,在仿真过程中,通过在 MATLAB 命令行中更改 K
的值以及更新模块图(例如,通过键入 Ctrl+D),即可随时更改 Memory 模块状态的初始值。
信号对象的初始化行为摘要
下面的模型和表显示了您可以初始化的不同类型的信号和离散状态,以及每一种类型所产生的仿真行为。
信号或离散状态 | 描述 | 行为 |
---|---|---|
S1 | 根输入端口 |
|
X1 | Unit Delay 模块 - 离散状态带有初始条件的模块 |
|
X2 | Data Store Memory 模块 |
|
S2 | 使能子系统的输出 |
|
S3 | 保持不变的信号 |
|
相关主题
- Simplified Initialization Mode
- Identity Transformation Can Change Model Behavior
- Inconsistent Output with Discrete-Time Integrator or S-Function Block
- Execution Order Affecting Merge Block Output
- Classic Initialization Mode
- Convert from Classic to Simplified Initialization Mode
- 使用初始化、重新初始化、重置和终止函数
- 设置模块参数值
- 指定总线元素的初始条件
- 信号基础知识
- 调查信号值