Main Content

符号解析

符号

在创建 Simulink® 模型时,可以使用符号为模型中许多类型的实体提供值和定义。可以使用符号定义的模型实体包括模块参数、配置集参数、数据类型、信号、信号属性和总线架构。

提供值或定义的符号必须是合法的 MATLAB® 标识符。此类标识符以字母字符开头,后跟字母数字或下划线字符,最长不超过函数 namelengthmax 给定的长度。您可以使用函数 isvarname 确定符号是否是合法 MATLAB 标识符。

符号可对应于以下项,在 Simulink 模型中提供值或定义:

  • 存在于可访问工作区中的项

  • 具有与符号相匹配的名称的项

  • 提供所需信息的项

符号解析过程

查找与符号对应的项目的过程称为符号解析解析符号。匹配的项可以直接提供所需信息,或者它本身可能就是一个符号。符号必须解析为其他提供该信息的项。

当 Simulink 软件编译模型时,它将尝试解析模型中的每个符号,在回调中运行或作为封装初始化的一部分运行的 MATLAB 代码中的符号除外。根据特定情形,符号解析为的项目可能是变量、对象或函数。

Simulink 通过按层级顺序在可访问工作区中搜索 MATLAB 变量或其名称与符号相同的 Simulink 对象,来尝试解析符号。

每个符号的搜索路径均相同。搜索从使用符号的模块开始,或作为符号指定的信号源的模块开始,然后继续向上搜索。除非仿真是通过 sim 命令进行的,否则搜索顺序是:

  1. 任何封装工作区,从模块向上搜索(请参阅封装基础知识)。

  2. 包含模块的模型的模型工作区(请参阅模型工作区)。

  3. MATLAB 基础工作区(请参阅 创建和编辑变量);如果模型链接到数据字典,则为字典(请参阅什么是数据字典?)。如果对数据字典选择了允许字典访问基础工作区属性,则搜索将字典和基础工作区视为单个命名空间。

注意

如果模型引用一个存储在基础工作区中的配置集,搜索将从基础工作区中开始。与附加到模型的配置集不同,基础工作区中的配置集没有对模型工作区的访问权限。

输入初始状态参数不从数据字典加载数据。当模型使用数据字典并且您禁用模型对基础工作区的访问时,输入初始状态参数仍可以访问基础工作区中的数据。

如果 Simulink 在此搜索过程中找到匹配项,则搜索将在该时间点成功终止,并且符号将解析为匹配项。其结果类似于项目的值按字面显示,而不是显示为解析为该项目的符号。在较低级别定义的对象会隐藏在较高级别定义的任何对象。

如果搜索路径中不存在匹配项,Simulink 会尝试作为函数计算该符号。如果该函数已定义并返回适当的值,该符号将解析为函数返回的任何值。否则,符号将保持未解析状态,并出现错误。只要分层搜索终止,而没有找到匹配的工作区变量,最后一步就是作为函数进行计算。

如果包含符号的模型是引用模型,并且搜索到达模型工作区,但未在那里找到匹配项,则搜索将直接跳转到基础工作区或数据字典,而尝试在任何父级模型的工作区中解析符号。因此,给定的符号将解析为同一项目,而不管包含该符号的模型是否是引用模型。有关模型引用的信息,请参阅模型引用

用符号表示数值

您可以通过提供字面值、符号或包含符号和字面值的表达式,来指定需要数值的任何模块参数。每个符号都将单独解析,就像不存在任何其他符号一样。因此,表达式中的不同符号可以解析为不同工作区上的项目以及不同类型的项目。

如果出现单个符号并成功解析,其值将提供参数的值。如果出现表达式,并且所有符号都成功解析,该表达式的值将提供参数的值。如果有任何符号无法解析,或解析为不适当类型的值,将会发生错误。

例如,假设 Gain 模块的增益参数指定为 cos(a*(b+2))。符号 cos 将解析为 MATLAB 余弦函数,ab 必须解析为数值,这些数值可以从相同或不同工作区中的相同或不同类型的项目中获得。如果符号解析为数值,则余弦函数返回的值将成为增益参数的值。

用符号表示其他值

大多数符号和使用符号的表达式都用于提供数值,但用于提供数值的相同方法也可用于提供适用于其上下文的任何类型的值。

符号的另一个常见用法是为提供某种类型的定义的对象命名。例如,信号名称可以解析为定义信号属性的信号对象 (Simulink.Signal),Bus Creator 模块的数据类型参数可以指定用于定义总线属性的总线对象 (Simulink.Bus)。您可以将符号用于多种目的,包括:

  • 定义数据类型

  • 指定输入数据源

  • 指定记录数据的目标

对于分层符号解析,符号的所有以上用途的解析过程都是相同的,无论是单独使用还是在表达式中使用。如果可能,每个符号都将独立于任何其他符号进行解析,并且结果将在符号出现的位置可用。符号之间的唯一区别在于符号所解析为的具体项以及该项的用途。唯一的要求是,每个符号都必须解析为可以合法地出现在符号位置的某个项目。

限制信号解析

默认情况下,分层符号解析将遍历整个搜索路径。您可以通过使用任何子系统的允许层次解析选项截断搜索路径。此选项控制如果搜索到达该子系统,但没有解析为工作区变量,将会发生什么情况。允许层次解析的值为:

  • All

    继续向上搜索工作区层次结构,尝试解析符号。这是默认值。

  • None

    不继续向上搜索层次结构。

  • ExplicitOnly

    仅当该符号指定模块参数值、数据存储内存(不存在模块)或明确需要解析的信号或状态时,才继续向上搜索层次结构。不继续搜索隐式解析。有关详细信息,请参阅 显式和隐式符号解析

如果搜索在工作区中找不到匹配项,并且因为值为 ExplicitOnlyNone 而终止,则 Simulink 会将符号作为函数计算。搜索操作是成功还是失败取决于计算结果,如前面所述。

显式和隐式符号解析

模型和某些类型的模型实体具有可能会影响符号解析的关联参数。例如,假设一个模型包含名为 Amplitude 的信号,并且可访问工作区中存在名为 Amplitude 的 Simulink.Signal 对象。如果选中 Amplitude 信号的信号名称必须解析为 Simulink 信号对象选项,信号解析为对象。有关详细信息,请参阅信号属性

如果不选中此选项,信号可能会也可能不会解析为对象,具体取决于配置参数 > 诊断 > 数据有效性 > 信号解析值。此参数可以禁止解析为对象,即使对象确实存在也是如此,或者它可以指定只根据名称匹配情况进行解析。有关详细信息,请参阅模型配置参数:数据有效性诊断>信号解析

因为信号名称必须解析为 Simulink 信号对象等选项需要而进行的解析称为显式符号解析。只根据名称匹配情况进行的,而无需显式指定的解析称为隐式符号解析

提示

隐式符号解析对于快速原型构建可能很有用。但是在进行原型构建时,请考虑使用显式符号解析,因为隐式解析会降低性能,使模型验证变得复杂,并且可能会产生不确定的影响。

另请参阅

相关主题