目录
Simulink® 允许指定信号和离散状态的初始值,即信号和离散状态在仿真的 Start time 时的值。可以使用信号对象为模型中的任何信号或离散状态指定初始值。此外,对于有些模块,例如,Output、Data Store Memory或Memory,可以使用信号对象和/或模块参数指定模块状态或输出的初始值。在这种情况下,Simulink 会执行检查,以确保通过信号对象和参数指定的值保持一致。
如果指定信号对象来初始化信号或离散状态,或者指定变量作为模块参数的值,Simulink 会将指定的名称解析为相应的对象或变量,如符号解析中所述。
在任何情况下,一个给定的信号最多只能与一个信号对象关联。信号可以多次引用对象,但每次引用必须解析为同一个对象。不同的信号对象即使具有完全相同的属性也不符合唯一性的要求。如果模型将多个信号对象与任一信号关联,就会发生编译时错误。
使用模块参数来初始化信号和离散状态
对于具有初始值或初始条件参数的模块,可以使用该参数来初始化信号。例如,下面的 Block Parameters 对话框使用初始条件0来初始化 Unit Delay 模块的信号。
要访问这些模块参数,请选择以下方法之一:
-
使用 Model Data Editor(在 Modeling 选项卡上,点击 Model Data Editor)。使用此方法可以使用可搜索、可排序的表来配置多个信号和状态。要初始化模块状态或数据存储,可以使用相应的选项卡(States 或 Data Stores)。要初始化信号、状态或数据存储,可以使用 Parameters 选项卡,找到与相关模块参数对应的行。
-
使用 Property Inspector(在 Modeling 选项卡上,在 Design 下,点击 Property Inspector)。使用此方法可一次配置一个信号或状态。选择保持目标状态或生成目标信号的模块,并找到相关模块参数。
-
使用模块参数对话框。使用此方法可一次配置一个信号或状态,或者并排比较几个信号或状态的配置。
使用信号对象来初始化信号和离散状态
可以使用其存储类不是 'auto' 或 'Model default'(当在 Code Mapping Editor 中将对应数据类别的默认存储类设置为默认设置 Default 时)的信号对象来初始化下列各项:
-
具有初始条件参数的离散状态
-
模型中除总线信号之外的信号以及输出常量值的模块
要指定初始值,请使用 Model Explorer 或 MATLAB® 命令执行以下操作:
创建信号对象
在 Model Explorer 工具栏上,选择 Add > Simulink Signal。具有默认名称的信号对象将出现在基础工作区。将该对象重命名为 S1
。也可以在命令提示符下使用以下命令:
S1 = Simulink.Signal;
信号对象的名称必须与该对象初始化的信号的名称相同。虽然不是必需,但可以考虑在 Signal Properties 对话框中设置 Signal name must resolve to Simulink signal object 选项。此设置将使 MATLAB 工作区中的信号对象与模型中出现的信号保持一致。
可以考虑使用 Data Object Wizard 创建信号对象。Data Object Wizard 将在模型中搜索不存在信号对象的信号。然后,可以通过一个操作为搜索结果中列出的多个信号有选择地创建信号对象。
将信号对象存储类设置为除 Auto
或 Model default
之外的值。
在 Model Explorer 的 Contents 窗格中,选择该信号对象。在 Dialog 窗格中,将 Storage class 设置为 ExportedGlobal。也可以在命令提示符下使用以下命令:
S1.CoderInfo.StorageClass = 'ExportedGlobal';
设置初始值。可以指定计算结果为数值标量或数组的 MATLAB 表达式,包括工作区变量的名称
Simulink 引擎将转换初始值,使类型、复/实性和维度与对应的模块参数值保持一致。如果指定无效的值或表达式,当更新模型时,将显示一条错误消息。在Model Explorer 的Dialog窗格中,将Initial value 设置为0.5。也可以在命令提示符下使用以下命令:
S1.InitialValue = '0.5'
如果还可以使用模块参数来设置信号或状态的初始值,则应将该参数设置为空 ([]) 或与信号对象的初始值相同。如果将该参数值设置为空,Simulink 将使用由该信号对象指定的值来初始化信号或状态。如果将该参数设置为其他任何值,Simulink 将比较参数值和信号对象值,如果二者不同,将显示错误。以下示例显示了指定使能子系统初始输出的信号对象。
信号s被初始化为 4.5。要避免出现一致性错误,使能子系统的 Outport 模块的初始值必须为 [] 或 4.5。如果您需要一个信号对象,还需要将其初始值设置应用于所有 Simulink 会话,可以参考创建持久数据对象。某些初始值设置可能取决于初始化模式。
Classic initialization mode:在此模式下,表示以下信号和状态的信号对象的初始值设置将覆盖对应的模块参数初始值(如果未定义,即指定为 []
):
-
条件执行子系统和 Merge 模块的输出信号
-
模块状态
Simplified initialization mode:在此模式下,将忽略与以下模块的输出信号关联的信号对象的初始值,而使用对应模块的初始值。
-
条件执行子系统的输出信号
-
Merge 模块
使用信号对象调整初始值
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 | 保持不变的信号 |
|