我是靠谱客的博主 碧蓝长颈鹿,最近开发中收集的这篇文章主要介绍Simulink 环境基础知识(十六)--符号解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

符号

符号解析过程

用符号表示数值

用符号表示其他值

限制信号解析

显式和隐式符号解析


符号

        在创建 Simulink® 模型时,可以使用符号为模型中许多类型的实体提供值和定义。可以使用符号定义的模型实体包括模块参数、配置集参数、数据类型、信号、信号属性和总线架构。提供值或定义的符号必须是合法的 MATLAB® 标识符。此类标识符以字母字符开头,后跟字母数字或下划线字符,最长不超过函数namelengthmax给定的长度。可以使用函数isvarname确定符号是否是合法 MATLAB 标识符。

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

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

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

  • 提供所需信息的项

符号解析过程

        查找与符号对应的项目的过程称为符号解析或解析符号。匹配的项可以直接提供所需信息,或者它本身可能就是一个符号。符号必须解析为其他提供该信息的项。当Simulink软件编译模型时,它将尝试解析模型中的每个符号,在回调中运行或作为封装初始化的一部分运行的 MATLAB 代码中的符号除外。根据特定情形,符号解析为的项目可能是变量、对象或函数。

        Simulink 通过按层级顺序在可访问工作区中搜索 MATLAB 变量或其名称与符号相同的 Simulink 对象,来尝试解析符号。每个符号的搜索路径均相同。搜索从使用符号的模块开始,或作为符号指定的信号源的模块开始,然后继续向上搜索。除非仿真是通过sim命令进行的,否则搜索顺序是:

  1. 任何封装工作区,从模块向上搜索。

  2. 包含模块的模型的模型工作区。

  3. MATLAB 基础工作区;如果模型链接到数据字典,则为字典。如果对数据字典选择了 Enable dictionary access to base workspace 属性,则搜索将字典和基础工作区视为单个命名空间。

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

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

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

用符号表示数值

        可以通过提供字面值、符号或包含符号和字面值的表达式,来指定需要数值的任何模块参数。每个符号都将单独解析,就像不存在任何其他符号一样。因此,表达式中的不同符号可以解析为不同工作区上的项目以及不同类型的项目。如果出现单个符号并成功解析,其值将提供参数的值。如果出现表达式,并且所有符号都成功解析,该表达式的值将提供参数的值。如果有任何符号无法解析,或解析为不适当类型的值,将会发生错误。

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

用符号表示其他值

        大多数符号和使用符号的表达式都用于提供数值,但用于提供数值的相同方法也可用于提供适用于其上下文的任何类型的值。符号的另一个常见用法是为提供某种类型的定义的对象命名。例如,信号名称可以解析为定义信号属性的信号对象 (Simulink.Signal),Bus Creator模块的 Data type 参数可以指定用于定义总线属性的总线对象 (Simulink.Bus)。可以将符号用于多种目的,包括:

  • 定义数据类型

  • 指定输入数据源

  • 指定记录数据的目标

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

限制信号解析

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

  • All

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

  • None

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

  • ExplicitOnly

        仅当该符号指定模块参数值、数据存储内存(不存在模块)或明确需要解析的信号或状态时,才继续向上搜索层次结构。不继续搜索隐式解析。如果搜索在工作区中找不到匹配项,并且因为值为 ExplicitOnly 或 None 而终止,则 Simulink 会将符号作为函数计算。搜索操作是成功还是失败取决于计算结果,如前面所述。

显式和隐式符号解析

        模型和某些类型的模型实体具有可能会影响符号解析的关联参数。例如,假设一个模型包含名为Amplitude的信号,并且可访问工作区中存在名为 Amplitude 的Simulink.Signal对象。如果选中Amplitude信号的Signal name must resolve to Simulink signal object 选项,信号将解析为对象。

        如果不选中此选项,信号可能会也可能不会解析为对象,具体取决于 Configuration Parameters > Data Validity > Signal resolution 值。此参数可以禁止解析为对象,即使对象确实存在也是如此,或者它可以指定只根据名称匹配情况进行解析。

        因为 Signal name must resolve to Simulink signal object 等选项需要而进行的解析称为显式符号解析。只根据名称匹配情况进行的,而无需显式指定的解析称为隐式符号解析。

提示:

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

最后

以上就是碧蓝长颈鹿为你收集整理的Simulink 环境基础知识(十六)--符号解析的全部内容,希望文章能够帮你解决Simulink 环境基础知识(十六)--符号解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部