Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

使用初始化、重置和终止函数

某些模块会保留在仿真过程中使用的状态信息。例如,Unit Delay 模块使用模块的当前状态来计算下一个仿真时间步的输出信号值。

Subsystem 模块具有默认的初始化和终止例程。您可以使用 Initialize FunctionTerminate Function 模块将自定义例程添加到默认例程以更改或读取模块状态。这些函数模块包含:

  • 在收到初始化或终止函数调用事件时执行组合例程的 Event Listener 模块。

  • State Writer 模块(用于初始化模块状态)和 State Reader 模块(用于读取状态)。

使用状态创建模型组件

您可以使用 Simulink® 模块定义模型算法。在此示例中,单个 Discrete-Time Integrator 模块定义输入信号的积分算法。

  1. 打开新 Simulink 模型。使用名称 Model01 保存此模型。

  2. 添加一个 Discrete-Time Integrator 模块。验证默认参数值如下:Gain value1.0Initial condition0Initial condition setting 为 “State (most efficient)”、Sample time-1

  3. Constant 模块连接到 Discrete-Time Integrator 模块的输入以对输入信号建模。将 Scope 模块连接到输出信号。

  4. 打开 Configuration Parameters 对话框。对 Solver 的仿真参数进行如下设置:Type 为 “Fixed-step”,Solver 为 “auto”,Fixed-step size1

  5. 打开 Scope 模块,然后运行仿真。输出信号在每个时间步按 1 递增。

初始化模块状态

一些模型算法包含可以初始化的状态。例如,使用读取传感器值的算法,可以执行计算来设置初始传感器状态。

在仿真开始时,使用 State Writer 模块初始化模块的状态。要控制何时发生初始化,请使用包含 State Writer 模块的 Initialize Function 模块。

  1. 添加一个 Initialize Function 模块。

    默认情况下,Initialize Function 模块包含 Event Listener 模块,其 Event type 参数设置为 “Initialize”。该模块还包含 State Writer 模块和 Constant 模块作为初始状态值来源的占位符。

  2. 对初始条件建模。在此示例中,将 Constant 模块的 Constant value 参数设置为 4

  3. 连接状态写入方和状态所有者。打开 State Writer 对话框。展开 State Owner Selector Tree,选择 “Discrete-Time Integrator”,然后点击 Apply

    State Writer 模块显示状态所有者模块的名称。状态所有者模块显示一个标记,指示指向 State Writer 模块的链接。如果点击该标记上方的标签,将打开一个列表,其中包含导航到 State Writer 模块的链接。

  4. 运行仿真以确认您的模型能够正确地进行仿真。

    Initialize Function 模块在仿真开始时执行。输出信号以 4为初始值,然后按 1 递增,直到仿真结束。

重置模块状态

在仿真过程中,可以使用 State Writer 模块重置模块的状态。要控制何时发生重置,请使用重新配置为 Reset Function 模块的 Initialize Function 模块。

  1. 添加一个 Initialize Function 模块。

  2. 打开新 Initialize Function 模块。

  3. 配置该模块以进行重置。打开 Event Listener 模块的 Block Parameter 对话框。从 Event type 下拉列表中选择 “Reset”。在 Event name 框中输入事件名称。例如,输入 reset。关闭对话框。

  4. 对重置条件建模。在此示例中,将 Constant 模块的 Constant value 参数设置为 2

  5. 连接状态写入方和状态所有者。打开 State Writer 对话框。展开 State Owner Selector Tree,选择 “Discrete-Time Integrator”,然后点击 Apply

  6. 导航到 Model01 的顶层。将模块从 Initialize Function1 重命名为 Reset Function

    更新模型后,Reset Function 模块的事件名称将显示在模块上。

    如果您在标记的上方点击,将打开一个列表,其中包含导航到 State Writer 模块的链接,该模块位于 Initialize Function 模块和 Reset Function 模块中。

  7. 运行仿真以确认您的模型能够正确地进行仿真。

    Reset Function 模块在仿真期间不执行。它需要函数调用事件信号。

    要为 Reset Function 模块创建函数调用事件信号,请参阅Create Test Harness to Generate Function Calls

读取并保存模块状态

在仿真结束时,您可以读取模块的状态,并保存该状态。

  1. 添加一个 Terminate Function 模块。

    默认情况下,Terminate Function 模块包含一个 Event Listener 模块,其参数 Event type 设置为 “Terminate”。该模块还包含 State Reader 模块和 Terminator 模块作为保存状态值的占位符。

  2. 将状态读取方连接到状态所有者。打开 State Reader 对话框。从 State Owner Selector Tree 中,选择 “Discrete-Time Integrator”,然后点击 Apply

  3. 运行仿真以确认您的模型能够正确地进行仿真。Terminate Function 模块在仿真结束时执行。

  4. 删除您为测试而添加的模块。将 Constant 模块替换为 Inport 模块,将 Scope 模块替换为 Outport 模块。

为测试准备模型组件

进行以下更改,以避免将组件模型置于导出函数模型中进行仿真测试时出现仿真错误。

  1. 打开 Discrete-Time Integrator 模块的 Block Parameters 对话框。将 Integrator method 设置为 “Accumulation:Forward Euler”。

  2. 打开 Model Configuration Parameters 对话框。确认求解器 Type 设置为 “Fixed-step”,并且 Solver 设置为 “auto”。将 Fixed-step size1 更改为 auto

    此更改可避免在一个函数调用子系统中有多个采样时间时导致仿真错误。

创建导出函数模型

若要将模型组件放入测试框架以测试初始化、重置和终止函数,需要模型遵循导出函数规则。请参阅导出函数模型概述Create Test Harness to Generate Function Calls

要创建导出函数模型,请使用 Model 模块将模型组件放置在 Function-Call Subsystem 模块中。将模型的输入和输出端口连接到子系统输入和输出端口。

  1. 创建一个 Simulink 模型。使用名称 Model02 保存此模型。

  2. 打开 Configuration Parameters 对话框。将 Solver 的仿真参数 Type 设置为 “Fixed-step”。确认 Solver 设置为 “auto”,Fixed-step size 设置为 auto

  3. 添加一个 Function-Call Subsystem 模块。通过双击该模块打开子系统。

  4. 向子系统添加一个 Model 模块,并将 Model name 设置为 Model01。添加 InportOutport 模块。

  5. 导航到模型的顶层。

  6. 添加一个 Inport 模块。此模块是执行子系统的控制信号。将模块名称更改为 Run,并将其连接到 function() 端口。

    打开 Inport 模块对话框,并在 Signal Attributes 选项卡上选中 Output function call 复选框。

  7. 添加另一个 Inport 模块并将其重命名为 Signal In。将它连接到子系统的 In1 端口。此模块是积分算法的信号。

    添加一个 Outport 模块,将其重命名为 Signal Out,然后将其连接到子系统的 Out1 端口。此模块是积分信号。

  8. 打开 Configuration Parameters 对话框。在 Model Referencing 窗格中,将 Total number of instances allowed per top model 设置为 “one”。

  9. Ctrl-D 更新您的模型并确认没有错误。

下一步是创建测试框架。请参阅Create Test Harness to Generate Function Calls

另请参阅

模块

相关主题