Simulink 环境基础知识(十五)--初始化信号和离散状态

目录

使用模块参数来初始化信号和离散状态

使用信号对象来初始化信号和离散状态

使用信号对象调整初始值

信号对象的初始化行为摘要


        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根输入端口
  • 初始化为 S1.InitialValue。

  • 如果使用 Configuration Parameters 对话框的 Data Import/Export 窗格指定根输入的值,初始值将被覆盖并且可能在每个时间步都不同。否则,该值将保持不变。

X1Unit Delay 模块 - 离散状态带有初始条件的模块
  • 初始化为 X1.InitialValue。

  • Simulink 检查 X1.InitialValue 与为模块指定的初始条件是否匹配,如果不匹配,将显示错误。

  • 第一次写入时,输出等于 X1.InitialValue,状态等于 S1。

  • 在第一次写入之后的每个时间步,输出等于状态,状态更新为等于 S1。

  • 如果模块位于使能子系统内,当子系统的Enable 模块参数 States when enabling设置为 “reset” 时,可以使用初始值作为重置值。

X2Data Store Memory 模块
  • 数据类型工作 (DWork) 向量被初始化为 X2.InitialValue。

  • Simulink检查 X2.InitialValue 与为模块指定的初始条件是否匹配,如果不匹配,将显示错误。

  • Data Store Write模块覆盖该值。

S2使能子系统的输出
  • 初始化为 S2.InitialValue 或 Outport 模块的值。如果为同一个信号指定了多个初始值,所有初始值必须相同。

  • 启用子系统时发生第一次写入。由馈送子系统输出的模块设置该值。

  • 如果子系统的 Enable 模块参数 States when enabling 或 Outport 模块参数 Output when disabled 设置为 “reset” ,初始值还用作重置值。

S3保持不变的信号
  • 初始化为 S3.InitialValue。

  • 模块在每个时间步重置输出值。

  • 只影响代码生成。对于仿真,设置S3的初始值没有影响,因为这些值在模型仿真开始时将被覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值