Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Simulink 检查

Simulink 检查概述

使用 Simulink® 模型顾问检查来配置您的模型,以便进行仿真。

另请参阅

迁移到简化初始化模式概述

R2008b 中引入了简化初始化模式以提高仿真结果的一致性。对于没有为条件执行子系统输出端口指定初始条件的模型,此模式尤为重要。有关详细信息,请参阅Simplified Initialization ModeClassic Initialization Mode

使用迁移到简化初始化模式中的模型顾问检查,可以帮助您将模型迁移到简化初始化模式。

另请参阅

标识未连接的信号线、输入端口和输出端口

检查 IDmathworks.design.UnconnectedLinesPorts

检查未连接的信号线或端口。

描述

此检查将列出未连接的信号线或端口。这些信号线或端口可能无法传播数据类型、采样时间和维度等信号属性。

注意

连接接地/终端模块的端口将通过本测试。

结果和建议的操作

条件建议的操作
信号线、输入端口或输出端口未连接。连接信号。双击未连接的项目的列表以查找故障。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check™ 许可证,可以在此检查中排除模块和图。

提示

使用 PortConnectivity 命令以获取描述模块输入或输出端口的结构体数组。

另请参阅

有关 PortConnectivity 命令的信息,请参阅通用模块属性

Model Advisor Exclusion Overview (Simulink Check)

检查根模型 Inport 模块设定

检查 IDmathworks.design.RootInportSpec

检查根模型 Inport 模块完全定义了维度、采样时间和数据类型。

描述

若使用未完全定义维度、采样时间或数据类型的根模型 Inport 模块,可能会产生意外的仿真结果。Simulink 软件从下游模块反向传播维度、采样时间和数据类型,除非您为它们显式指定了值。

结果和建议的操作

条件建议的操作
根级 Inport 模块具有未定义的属性。完全定义根级 Inport 模块的属性。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

以下配置可以通过此检查:

  • 配置参数 > 求解器 > 周期性采样时间约束设置为“确保采样时间独立

  • 对于导出函数模型,继承采样时间未标记。

另请参阅

检查优化设置

检查 IDmathworks.design.OptimizationSettings

检查可能导致代码生成和仿真非最佳的优化。

描述

此项检查会审查能够提高代码效率、缩短仿真时间的优化的状态。

结果和建议的操作

条件建议的操作
指定的优化处于关闭状态。

在“配置参数”对话框的优化窗格上,选中以下优化复选框:

在“配置参数”对话框的优化窗格上,选中以下优化复选框:

在“配置参数”对话框中选中以下优化复选框:

在“配置参数”对话框的优化窗格上,选中以下优化复选框:

注意

仅当模型中存在 Stateflow® 图时,模型顾问才会检查这些参数。

Application lifespan (days) 设置为无限。这可能会导致使用 64 位计数器,从而占用过多系统资源。 如果这不是您想要的结果,请选择一个停止时间。
指定的诊断(可能增加模型的仿真时间)设置为“警告”或“错误”。

为以下参数选择“”:

  • 求解器数据不一致

  • 超出数组边界

  • 诊断 > 数据有效性 > 仿真范围检查

指定的 Embedded Coder® 参数处于关闭状态。

如果您拥有 Embedded Coder 许可证,并且使用基于 ERT 的系统目标文件:

提示

如果系统包含 Model 模块,而且引用模型在加速模式下,则对模型进行仿真需要生成和编译代码。

选中

另请参阅

检查模型引用加速仿真期间忽略的诊断设置

检查 IDmathworks.design.ModelRefSIMConfigCompliance

检查 Simulink 在加速仿真过程中为哪些引用模型更改了配置参数设置。

描述

对于在加速模式下引用的模型,如果您为以下配置参数设置的值不是“”,Simulink 将忽略它们的设置。

  • 超出数组边界

  • 诊断 > 数据有效性 > 模块输出为 Inf 或 NaN

  • 诊断 > 数据有效性 > 除以奇异矩阵

  • 诊断 > 数据有效性 > 溢出时绕回

此外,对于在加速模式下引用的模型,如果您为以下配置参数 > 诊断 > 数据有效性 > Data Store Memory 模块 参数设置的值不是“全部禁用”,Simulink 将忽略这些参数。有关详细信息,请参阅数据存储诊断

  • 检测写前读

  • 检测读后写

  • 检测写后写

结果和建议的操作

条件建议的操作

您想查看标识的诊断(设置为产生警告或错误)的运行结果。

在普通模式下执行模型仿真,并解决诊断警告或错误。

检查为引用模型忽略的参数可调性信息

检查 IDmathworks.design.ParamTunabilityIgnored

检查是否在“模型参数配置”对话框中包含参数可调性信息。

描述

Simulink 软件将忽略在“模型参数配置”对话框中指定的可调性信息。此检查可以识别包含参数可调性信息的模型,如果该模型被其他模型引用,Simulink 软件将忽略其参数可调性信息。

结果和建议的操作

条件建议的操作
模型中包含被忽略的参数可调性信息。点击链接,以转换成 MATLAB® 工作区中等效的 Simulink 参数对象。

另请参阅

检查隐式信号解析

检查 IDmathworks.design.ImplicitSignalResolution

识别尝试将命名信号和状态解析为 Simulink.Signal 对象的模型。

描述

要求 Simulink 软件解析所有命名信号和状态是一种效率低下的行为,会降低增量代码生成和模型引用的速度。此检查用于识别您可能需要关闭隐式信号解析并强制执行解析的信号和状态。

结果和建议的操作

条件建议的操作
没有解析所有的信号和状态。关闭隐式信号解析,并强制解析确实需要解析的每个信号和状态。

另请参阅

为输出变量解析信号对象

检查以实现最佳总线虚拟化

检查 IDmathworks.design.OptBusVirtuality

识别哪些虚拟总线可以变成非虚拟总线。将这些虚拟总线变成非虚拟总线可以提高代码生成效率。

描述

此检查可以识别模块融合了哪些跨越子系统边界的虚拟总线。将这些虚拟总线变成非虚拟总线可提高代码生成效率。

结果和建议的操作

条件建议的操作
模块指定虚拟总线跨越子系统边界。将突出显示的总线更改为非虚拟总线。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查哪些 Discrete-Time Integrator 模块的初始条件不确定

检查 IDmathworks.design.DiscreteTimeIntegratorInitCondition

识别哪些 Discrete-Time Integrator 模块的状态端口和初始条件端口既不是由 Initial Condition 也不是由 Constant 模块馈送。

描述

如果 Discrete-Time Integrator 模块的状态端口和初始条件端口不是由 Initial Condition 或 Constant 模块馈送,这些端口可能无法正确初始化。当使用 Discrete-Time Integrator 模块对二阶或更高阶动态系统进行建模时,更有可能发生这种情况。

结果和建议的操作

条件建议的操作
Discrete-Time Integrator 模块在模型初始化阶段未初始化。添加一个 Constant 或 Initial Condition 模块,以向外部初始条件端口馈送输入。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

标识禁用的库链接

检查 IDmathworks.design.DisabledLibLinks

在模型中搜索禁用的库链接。

描述

禁用的库链接可能会导致意外的仿真结果。在保存模型之前解析禁用的链接。

注意

此检查可能与检查模型是否存在模块升级问题重叠。

结果和建议的操作

条件建议的操作
库链接被禁用。点击上下文菜单中的库链接 > 解析链接选项。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

  • 使用模型浏览器查找库链接。

  • 要启用断开的链接,请右键点击模型中的模块以显示上下文菜单。选择库链接 > 解析链接

另请参阅

Restore Disabled Links

Model Advisor Exclusion Overview (Simulink Check)

检查跨模型引用边界的虚拟总线产生的大量函数参数

检查 IDmathworks.design.CheckVirtualBusAcrossModelReferenceArgs

检查跨模型引用边界的虚拟总线信号,并标记因使用跨模型引用边界的虚拟总线导致函数参数数量显著增加的情况。

描述

为提高代码生成过程的速度,您可以使用此检查来减少生成的函数参数的数量。如果检查发现模型中将有大量函数参数生成,您可以点击更新模型修改模型,以生成较少的参数。

结果和建议的操作

跨模型引用边界的虚拟总线信号会产生许多函数参数,此类方法会减慢代码生成过程。

条件建议的操作
列出了在当前模型配置下会生成大量参数的方法,该检查可通过修改模型减少参数数量。点击更新模型

点击更新模型将重置 InportOutport 模块参数,并会根据需要插入 Signal Conversion 模块,以减少模型中生成的函数参数的数量。

另请参阅

Use Buses at Model Interfaces

标识参数化库链接

检查 IDmathworks.design.ParameterizedLibLinks

在模型中搜索参数化的库链接。

描述

无意中进行了参数化的库链接可能会导致模型中出现意外的参数设置。这可能会导致模型操作不正常。

结果和建议的操作

条件建议的操作
列出了已参数化的链接。确认这些链接是否确实需要参数化。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

  • 右键点击模型中的模块以显示上下文菜单。选择 Link Options,然后点击 Go To Library Block 以查看库中的原始模块。

  • 要参数化某个库链接,请从上下文菜单中选择 Look Under Mask,然后选择参数。

另请参阅

Restore Disabled Links

Model Advisor Exclusion Overview (Simulink Check)

标识未解析的库链接

检查 IDmathworks.design.UnresolvedLibLinks

在模型中搜索未解析的库链接,未解析的库链接会导致找不到指定的库模块。

描述

检查是否存在未解析的库链接。存在未解析的库链接时,模型不会进行仿真。

结果和建议的操作

条件建议的操作
库链接未解析。找到缺失的库模块或替代项。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

修复未解析的库链接

Model Advisor Exclusion Overview (Simulink Check)

标识要转换为可变子系统模块的可配置子系统模块

检查 IDmathworks.design.CSStoVSSConvert

搜索模型,以识别模型或子系统级别的可配置子系统模块。

结果和建议的操作

条件建议的操作
标识了可配置的子系统模块。将这些模块转换成可变子系统模块,以避免兼容性问题。请参阅 Configurable Subsystem

功能和限制

您可以对库模型运行此项检查。

另请参阅

转换为可变子系统

标识 Variant Model 模块,并将其转换为包含 Model 模块选择项的 Variant Subsystem

检查 IDmathworks.design.ConvertMdlrefVarToVSS

搜索模型以识别 Variant Model 模块。

结果和建议的操作

条件建议的操作

列出了在模型中可用的 Variant Model 模块。

将这些模块转换为 Variant Subsystem 模块。

另请参阅

转换为 Variant Subsystem 模块

标识变体对象条件为空的变体模块

检查 IDmathworks.design.emptyVariantObjects

搜索模型以标识变体对象为空的变体模块或库。

结果和建议的操作

条件建议的操作
列出模型或库中变体对象为空的变体模块。在变体对象中使用有效条件。

另请参阅

Introduction to Variant Controls

检查函数调用连接的使用情况

检查 IDmathworks.design.CheckForProperFcnCallUsage

检查适用于函数调用连接性并且可能影响模型执行的模型诊断设置。

描述

检查可能导致不确定性模型执行的连接性诊断设置。

结果和建议的操作

条件建议的操作
配置参数 Context-dependent inputs 设置为“警告”。这可能会导致不确定性模型执行。将配置参数 Context-dependent inputs 设置为“错误”。

另请参阅

Function-Call Subsystem

检查 Data Store Memory 模块的多任务、强类型化和重影问题

检查 IDmathworks.design.DataStoreMemoryBlkIssue

查找与 Data Store Memory 模块有关的建模问题。

描述

检查更高作用域的数据存储的多任务数据完整性、强类型化和重影。

结果和建议的操作

条件建议的操作
重复数据存储名称检查设置为“”或“警告”。 考虑在“配置参数”对话框的诊断 > 数据有效性窗格上,将 重复的数据存储名称 检查设置为“错误”。

以下二者之一中的数据存储变量名称不是强类型:

  • Date Store Memory 模块的模块参数对话框的信号属性窗格

  • 全局数据存储名称

通过执行以下操作之一,指定除 auto 之外的数据类型:

  • Date Store Memory 模块的模块参数对话框的信号属性窗格上,选择除 “Inherit: auto” 之外的数据类型。

  • 如果您使用全局数据存储名称,请在 Simulink.Signal 对象中指定其数据类型。

多任务数据存储检查设置为“”或“警告”。 考虑在“配置参数”对话框的诊断 > 数据有效性窗格上,将 Multitask data store 检查设置为“错误”。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查是否为数据存储模块启用了读/写诊断

检查 IDmathworks.design.DiagnosticDataStoreBlk

为模型中的数据存储模块启用读写诊断顺序检查,以检测运行时问题。

描述

检查读写诊断顺序。通过启用读写诊断,可以检测到潜在的运行时问题。

结果和建议的操作

条件建议的操作
检测写前读检查被禁用。考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect read before write
检测读后写检查被禁用。考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect write after read
检测写后写检查被禁用。考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect write after write

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

  • 运行时诊断可能会大大减慢仿真速度。一旦您确定 Simulink 不会在仿真期间生成警告或错误,请将诊断选项设置为“全部禁用”。

另请参阅

检查数据存储模块采样时间是否存在建模错误

检查 IDmathworks.design.DataStoreBlkSampleTime

识别由于数据存储模块的采样时间产生的建模错误。

描述

检查数据存储模块的采样时间是连续的还是子步中不变。

结果和建议的操作

条件建议的操作
您模型中的数据存储模块具有连续采样时间或子步中不变的采样时间。考虑将列出的模块变成离散模块,或者将它们替换为 Memory 或者 GotoFrom 模块。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查潜在的数据存储访问顺序问题

检查 IDmathworks.design.OrderingDataStoreAccess

查找可能导致结果不准确的读/写问题。

描述

更新图期间,识别与数据存储模块的“写前读”、“读后写”、“写后写”情况有关的潜在问题。

结果和建议的操作

条件建议的操作
读取和写入(写前读或读后写情况)顺序错乱。考虑重新构建模型,使 Data Store Read 模块在 Data Store Write 模块之前执行。
一个时间步中发生多次写入。更改模型,使其在每个时间步中只写入一次数据,或者参考下面的“提示”部分。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

此检查执行静态分析,可能无法识别每一种不正确的使用情形。具体而言,函数调用子系统、Stateflow 图、用于代码生成的 MATLAB、For Iterator Subsystem 和 For Each Subsystem 可能会导致漏检和误报。要进行更全面的检查,请考虑在“配置参数”对话框的诊断 > 数据有效性窗格上启用以下诊断:Detect read before writeDetect write after readDetect write after write

另请参阅

检查总线信号的结构体参数的使用

检查 IDmathworks.design.MismatchedBusParams

识别使用不匹配的结构体初始化总线信号的模块和 Simulink.Signal 对象。

描述

在模型中,您可以使用 MATLAB 结构体来初始化总线信号。例如,如果您通过 Unit Delay 模块传递总线信号,可将初始条件参数设置为结构体。有关使用结构体初始化总线的基本信息,请参阅指定总线元素的初始条件

运行此检查,通过将初始条件结构体的形状和数值数据类型与总线信号的对应特征相匹配,生成高效且可读的代码。匹配这些特征可以避免不必要的显式类型转换,并替换逐字段结构体赋值法,例如,替换为调用 memcpy

非完全结构体

此检查将列出使用非完全结构体初始化总线信号的模块和 Simulink.Signal 对象。在创建模型的迭代过程中,您可以使用非完全结构体以重点处理总线中的部分信号元素。对于成熟模型,请使用完全结构体以实现以下目的:

  • 生成可读且高效的代码。

  • 支持显式初始化未指定信号的建模风格。如果您使用非完全结构体,Simulink 将隐式初始化未指定的信号。

有关完全结构体和非完全结构体的详细信息,请参阅创建用于初始化的完全结构体创建用于初始化的非完全结构体

数据类型不匹配

此检查将列出初始条件结构体引入不匹配数据类型的模块和 Simulink.Signal 对象。这些结构体的字段的数值数据类型与对应的总线信号元素的数据类型不匹配。

此检查不会检测将初始条件的数据类型隐式转换为输入信号的模块,例如 Unit Delay

当您配置初始条件结构体使其以可调全局结构体形式出现在生成的代码中时,可以通过匹配数据类型来避免不必要的显式类型转换。请参阅 Generate Tunable Initial Condition Structure for Bus Signal (Simulink Coder)

结果和建议的操作

条件建议的操作

模块或信号对象使用非完全结构体

考虑使用函数 Simulink.Bus.createMATLABStructure 创建完整的初始条件结构体。

结构体字段的数据类型与对应的信号元素的数据类型不匹配

考虑将结构体定义为 Simulink.Parameter 对象,并创建一个 Simulink.Bus 对象作为总线信号和参数对象的数据类型。要控制数值数据类型,请使用总线对象中的 Simulink.BusElement 对象。

另请参阅

检查 Delay、Unit Delay 和 Zero-Order Hold 模块的速率转换

检查 IDmathworks.design.ReplaceZOHDelayByRTB

识别用于速率转移的 DelayUnit DelayZero-Order Hold 模块。将这些模块替换为真正的 Rate Transition 模块。

描述

如果某个模型使用 DelayUnit DelayZero-Order Hold 模块在输入信号与输出信号之间进行速率转移,则 Simulink 会将这些模块隐式替换为内置的 Rate Transition 模块。在编译的模块图中,替换模块的左上角会出现一个黄色符号和“RT”字样。这种替换可能会影响模型的行为,如下所示:

  • 这些模块将丢失用于延迟信号或实现零阶保持的算法设计属性。相反,它们将获得速率转移行为。

  • 这种建模方法只适用于特定的转移配置(DelayUnit Delay blocks 模块的慢速到快速转移,Zero-Order Hold 模块的快速到慢速转移)。将模块采样时间设置为等于较慢的速率(DelayUnit Delay 模块的源采样时间,Zero-Order Hold 模块的目标采样时间)。

  • 当下游或上游模块的采样时间发生变化时,DelayUnit DelayZero-Order Hold 模块可能不会执行速率转移。例如,如果将源采样时间和目标采样时间设置为相等,将停止速率转移。模块将采用它们的原始算法设计属性。

  • 模块采样时间显示不完整的采样时间速率信息。模块代码以两种不同的速率运行来处理数据传输。但是,模块的采样时间和采样时间颜色显示它是一个单速率模块。使用采样时间信息的工具和 MATLAB 脚本根据这些信息决定它们的行为。

另一种方法是将 DelayUnit DelayZero-Order Hold 模块替换为真正的 Rate Transition 模块。

  • 这种方法可以确保模块行为产生明确的结果。DelayUnit DelayZero-Order Hold 模块根据它们的算法设计执行操作,分别延迟和保持信号。只有 Rate Transition 模块执行实际的速率转移。

  • 如果您要指定明确的行为或者指定要实现的内存缓冲区类型,则使用实际的 Rate Transition 模块进行速率转移可为数据传输处理提供一种可配置的解决方案。

使用此检查可以识别模型中是否有 DelayUnit DelayZero-Order Hold 模块实例执行隐式替换来实现信号之间的速率转移。点击升级模型,将这些模块替换为实际的 Rate Transition 模块。

结果和建议的操作

条件建议的操作
模型中没有使用任何 DelayUnit DelayZero-Order Hold 模块实例进行速率转移。无需执行任何操作。
模型中使用了 DelayUnit DelayZero-Order Hold 模块实例进行速率转移。

此检查可以识别这些实例并允许您升级模型。

  1. 点击升级模型,将它们替换为实际的 Rate Transition 模块。

  2. 将更改保存到您的模型中。

如果您不选择将 DelayUnit Delay 和/或 Zero-Order Hold 模块替换为实际的 Rate Transition 模块,Simulink 将继续执行隐式替换,将这些模块替换为内置的速率转移模块。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查是否有对 slDataTypeAndScale 的调用

检查 IDmathworks.design.CallslDataTypeAndScale

识别对内部函数 slDataTypeAndScale 的调用。

描述

在一些早期版本的 Simulink 中,打开用更早的版本保存的模型会触发自动升级,以升级用来处理数据类型的代码。自动升级将插入对内部函数 slDataTypeAndScale 的调用。尽管 Simulink 仍然支持在某些情况下使用此函数,但不调用此函数的代码更整洁、执行速度更快。

在下列情况下,Simulink 不支持调用 slDataTypeAndScale

  • 第一个参数是 Simulink.AliasType 对象。

  • 第一个参数是 Simulink.NumericType 对象,且属性 IsAlias 设置为 true。

运行检查是否有对 slDataTypeAndScale 的调用可以识别替换操作所要求或建议的 slDataTypeAndScale 调用。大多数情况下,运行此检查并按照建议的操作执行即可删除调用。您可以忽略仍然存在的调用。运行此检查,除非您确定不存在 slDataTypeAndScale 调用。

结果和建议的操作

条件建议的操作
必须替换的情况手动或自动替换 slDataTypeAndScale 调用。列出的情况要求您必须替换 slDataTypeAndScale 调用。
建议替换的情况对于列出的情况,建议您手动或自动替换 slDataTypeAndScale 调用。
手动检查的情况检查列出的每一种情况,确定是否应手动升级。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

提示

  • 不要手动在模型中插入 slDataTypeAndScale 调用。此函数仅供内部使用。

  • 运行检查是否有对 slDataTypeAndScale 的调用将调用 Simulink 函数 slRemoveDataTypeAndScale。直接调用此函数可提供更广泛的转换选项。但是,您很少需要更多转换选项。

另请参阅

  • 有关升级数据类型和标度的详细信息,请在 MATLAB 命令行窗口中执行以下命令:

    • help slDataTypeAndScale

    • help slRemoveDataTypeAndScale

  • Model Advisor Exclusion Overview (Simulink Check)

检查被视为向量的总线信号

检查 IDmathworks.design.BusTreatedAsVector

识别 Simulink 视为向量的总线信号。

描述

不能使用被 Simulink 软件隐式转换为向量的总线信号。但您可以在总线信号和接收该信号的模块输入端口之间插入一个 Bus to Vector 转换模块,或者使用 Simulink.BlockDiagram.addBusToVector 命令。

结果和建议的操作

条件建议的操作

总线信号隐式转换为向量。

使用 Simulink.BlockDiagram.addBusToVector 或者插入一个 Bus to Vector 模块。

模型未配置为识别 Simulink 视为向量的总线信号。

在“配置参数”对话框的诊断 > 连接性窗格上,将总线信号视为向量设置为“错误”。

操作结果

点击修改会在将总线信号隐式转换为向量的模块的输入端口上插入一个 Bus to Vector 模块。

提示

另请参阅

检查可能延迟的函数调用子系统返回值

检查 IDmathworks.design.DelayedFcnCallSubsys

识别可能因为 Simulink 软件插入隐式 Signal Conversion 模块而延迟的函数调用返回值。

描述

由于信号驻留在连续内存中,Simulink 软件可自动在函数调用发起方模块输入端口之前插入一个隐式 Signal Conversion 模块。这可能会导致调用方函数调用子系统返回的信号值延迟一步。这种延迟可以通过确保信号从函数调用系统内的信号模块发出来避免。或者,如果延迟可接受,可在受影响的输入端口前面插入一个 Unit Delay 模块。

结果和建议的操作

条件建议的操作
列出的模块输入端口可能有隐式 Signal Conversion 模块。

确定返回信号值的一步延迟对于列出的信号是否可接受。

  • 如果延迟不可接受,请修改您的模型,使输入信号从调用方子系统内发出。

  • 如果延迟可接受,可在列出的每个输入端口前面插入一个 Unit Delay 模块。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

Signal Conversion 模块

Unit Delay 模块

Model Advisor Exclusion Overview (Simulink Check)

标识具有连续采样时间和非浮点数据类型的模块输出信号

检查 IDmathworks.design.OutputSignalSampleTime

查找连续采样时间、非浮点输出信号。

描述

非浮点信号可能无法表示连续变量而不丢失信息。

结果和建议的操作

条件建议的操作
具有连续采样时间的信号具有非浮点数据类型。在标识的信号上,将采样时间更改为离散或子步中不变 ([0 1])。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

什么是采样时间?

Model Advisor Exclusion Overview (Simulink Check)

检查 Merge 模块的使用情形

检查 IDmathworks.design.MergeBlkUsage

识别哪些 Merge 模块的参数设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。

注意

将此检查与迁移到简化初始化模式概述中的其他检查一起运行。

描述

R2008b 中引入了简化初始化模式以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization ModeClassic Initialization Mode

如果您使用经典初始化模式,此模型顾问检查可以识别模型中 Merge 模块的哪些设置可能产生问题。它还会推荐一些设置,以确保 Merge 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。

结果和建议的操作

条件建议的操作
检查 Merge 模块的运行时诊断设置。
  1. 在“配置参数”对话框中,将 Detect multiple driving blocks executing at the same time step 设置为“错误”。

  2. 再次运行此检查之前,验证模型仿真没有发生错误。

检查使用 PIL 仿真模式的 Model 模块。简化初始化模式不支持对模型引用进行处理器在环 (PIL) 仿真。
检查是否存在实例无法迁移的库模块。查看每个模块失败的子检查结果,以确定要执行的更正操作。
检查单输入 Merge 模块。

将用于生成输入信号的 Mux 模块以及 Merge 模块这两个模块替换为一个多输入 Merge 模块。

简化初始化模式不支持单输入 Merge 模块。

检查未指定初始输出值的根 Merge 模块。

如果您没有为根 Merge 模块初始输出参数指定显式值,则 Simulink 将使用输出数据类型的默认初始值。

Merge 模块是其输出端口未连接到另一个 Merge 模块的 Merge 模块。有关默认初始值的信息,请参阅初始化信号值

检查具有非零输入端口偏移量的 Merge 模块。

清除 Merge 模块的允许端口宽度不等参数。

注意

请考虑只对确实需要合并的信号元素使用 Merge 模块。您可以使用 Concatenate 模块将合并的元素与其他元素组合在一起。

检查哪些 Merge 模块具有未连接的输入或者输入来自非条件执行子系统。

Merge 模块的输入的数目参数设置为 Merge 模块的输入数。您必须为每个输入连接一个信号。

验证每个 Merge 模块输入都由条件执行子系统驱动。Merge 模块不能直接由 Iterator Subsystem 或非条件执行子系统模块驱动。

检查哪些 Merge 模块的输入在条件执行子系统外被合并或重新排序。

验证 Merge 模块输入信号的合并或重新排序发生在条件执行子系统内。这种设计可能使用 MuxBus CreatorSelector 模块。

检查哪些 Merge 模块的输入采样时间不一致。

验证每个 Merge 模块的输入信号具有相同的采样时间

如果采样时间不一致,可能会产生不可预测的行为。因此,简化初始化模式不允许采样时间不一致。

检查哪些 Merge 模块的多个输入端口由一个源驱动。验证 Merge 模块的多个输入信号不是由同一个条件执行子系统或条件执行 Model 模块驱动。
检查哪些 Merge 模块使用信号对象指定初始输出值。

验证以下行为是可接受的。

在简化初始化模式中,不能使用信号对象指定 Merge 模块的初始输出参数。虽然您仍然可以使用信号对象初始化 Merge 模块的输出信号,但初始化结果可能被 Merge 模块的初始化结果覆盖。

注意

Simulink 会生成一条警告,提示信号对象的初始值被忽略。

另请参阅

检查 Outport 模块的使用情况

检查 IDmathworks.design.InitParamOutportMergeBlk

识别哪些 Outport 模块和条件子系统的参数设置可能会导致意外的行为,并帮助您将模型迁移到简化初始化模式。

注意

将此检查与迁移到简化初始化模式概述中的其他检查一起运行。

描述

R2008b 中引入了简化初始化模式以提高仿真结果的一致性。对于没有为条件执行子系统输出端口指定初始条件的模型,此模式尤为重要。有关详细信息,请参阅Simplified Initialization ModeClassic Initialization Mode

如果您使用简化初始化模式,此模型顾问检查可以识别模型中的哪些 Outport 模块和条件子系统可能产生问题。它还会推荐一些设置,以确保 Outport 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识在迁移后可能发生的问题或行为变化。

结果和建议的操作

条件建议的操作
检查迭代子系统内的哪些模块需要已用时间。

在迭代子系统层次结构中,不要使用需要通过某种服务维护两次连续执行之间的已用时间的模块。

由于迭代子系统可在一个给定的时间步中执行多次,这样的两次执行之间的已用时间并没有明确定义。在迭代子系统内使用这些模块可能会导致意外行为。

检查哪些 Outport 模块具有冲突的信号缓冲区要求。

除了标准数据信号会通过 Outport 模块,函数调用触发器或函数调用数据依存关系信号也会通过该模块。有些标准数据信号需要一个明确的信号缓冲区以初始化对应子系统的输出信号。但是,缓冲与函数调用有关的信号将导致违反函数调用依存关系。

考虑修改模型,以通过一个单独的 Outport 模块传递与函数调用有关的信号。有关违反函数调用数据依存关系的示例,请参阅示例模型 sl_subsys_semantics

由于以下原因之一,标准数据信号可能需要一个额外的信号副本:

  • Outport 模块由一个输出无法被覆盖的模块驱动。GroundConstant 模块就是此类模块的示例。

  • Outport 模块与位于同一子系统中或者嵌套在当前子系统中但具有不同的初始输出值的另一个 OutportOutport 模块共享同一个信号源。

  • Outport 模块连接到 Merge 模块的输入。

  • Outport 模块有一个输入信号用显式初始值指定 Simulink.Signal 对象。

检查哪些 Outport 模块由总线信号驱动并且其初始输出值不是标量。对于由总线信号驱动的 Outport 模块,经典初始化模式不支持初始条件 (IC) 结构体,但简化初始化模式支持。因此,从经典模式向简化模式迁移模型时,应为初始输出参数指定标量。迁移完成后,要为总线信号的不同元素指定不同的初始值,请使用 IC 结构体。有关详细信息,请参阅创建初始条件结构体

检查哪些 Outport 模块需要显式信号副本。

驱动 Outport 模块的总线信号的显式副本是初始化对应子系统的输出信号时所必需的。在 Outport 模块之前插入一个 Signal Conversion 模块,然后将 Signal Conversion 模块的输出参数设置为“总线副本”。

由于以下一个或多个原因,标准数据信号可能需要一个额外的信号副本:

  • Outport 模块由输出无法被覆盖的模块驱动。GroundConstant 模块就是此类模块的示例。

  • Outport 模块与位于同一子系统中或者嵌套在当前子系统中但具有不同的初始输出值的另一个 OutportOutport 模块共享同一个信号源。

  • Outport 模块连接到 Merge 模块的输入。

  • Outport 模块有一个输入信号用显式初始值指定 Simulink.Signal 对象。

检查哪些合并的 Outport 模块从已被配置为在禁用时重置的 Outport 模块继承初始输出值。Outport 模块驱动 Merge 模块时,不要将 Outport 模块的禁用时的输出参数设置为“重置”。
检查哪些合并的 Outport 模块由嵌套的条件执行子系统驱动。

确定 Outport 模块的新行为是否可接受。如果不可接受,则在迁移到简化初始化模式之前修改模型,以便将新行为考虑在内。

检查哪些合并的 Outport 模块会在被禁用时重置。

Outport 模块的禁用时的输出参数设置为“保持”。此设置是必需的,因为 Outport 模块连接到一个 Merge 模块。

有关详细信息,请参阅 Outport

检查哪些 Outport 模块的初始输出值未定义且初始条件源无效。

验证以下行为是可接受的。

如果初始输出参数未指定 ([]),它将继承源模块的初始输出。如果至少有一个源不是 Outport 模块可从中继承初始值的有效源,该模块将使用该数据类型的默认初始值。

对于简化初始化模式,Outport 模块可以从中继承初始输出值的有效源包括:ConstantInitial ConditionMerge(具有初始输出)、Stateflow 图、函数调用模型引用或条件执行子系统模块。

检查哪些 Outport 模块具有自动速率转移。

Simulink 已在 Outport 模块的输入上插入一个 Rate Transition 模块。请为每个 Outport 模块指定初始输出参数。

否则,请执行以下操作:

  1. 在“配置参数”对话框的求解器窗格上,清除选项 Automatically handle rate transition for data transfer

  2. 再次运行此模型顾问检查。

检查哪些 Outport 模块具有特殊的信号存储要求,并且未定义初始输出值。

验证以下行为是可接受的。

Outport 模块指定初始输出参数。将此值设置为 [](空矩阵),以使用输出数据类型的默认初始值。

检查在被禁用时会重置的 Outport 模块的初始输出设置。

指定 Outport 模块的初始输出参数。

对于配置为在禁用时重置的模块,您必须为它们指定初始输出值。

检查通过函数调用数据依存关系信号的 Outport 模块的初始输出设置。

您不能为 Outport 模块指定初始输出值,因为函数调用数据依存关系信号通过该模块。要设置初始输出值:

  1. Outport 模块的初始输出参数设置为 []

  2. 在数据依存关系信号源上提供初始值,而不是在 Outport 模块上提供。

检查哪些 Outport 模块使用信号对象指定初始输出值。

验证以下行为是可接受的。

在简化初始化模式中,不能使用信号对象指定 Outport 模块的初始输出参数。虽然您仍然可以使用信号对象初始化 Outport 模块的输入或输出信号,但初始化结果可能被 Outport 模块的初始化结果覆盖。

注意

如果您使用的是条件执行子系统 Outport 模块,则 Simulink 将生成一条警告,提示您信号对象的初始值已被忽略。

检查哪些库模块的实例出现警告。

迁移到简化初始化模式之前,查看每个模块的警告性子检查结果。

检查哪些合并的 Outport 模块已断开连接或者连接到 Ground 模块。

验证以下行为是可接受的。

Outport 模块驱动 Merge 模块,但 Outport 模块的输入已断开连接或者连接到 Ground 模块。在经典初始化模式中,断开连接或者接地的输出端口不会更新合并信号,即使它们的父级条件执行子系统正在执行也是如此。但在简化初始化模式中,当它们的父级条件执行子系统正在执行时,这些输出端口将用零值更新合并信号。

检查哪些 Outport 模块在迁移时从输入信号获取初始输出值。

验证以下行为是可接受的。

未指定 Outport 模块的初始输出参数。因此,简化初始化模式将假设 Outport 模块的初始输出值是从输入信号派生的。这种假设可能会导致不同的初始化行为。

如果这种行为不可接受,请在迁移到简化初始化模式之前修改您的模型。

检查哪些外部 Outport 模块具有显式初始输出

验证以下行为是可接受的。

在经典初始化模式下,Outport 模块的初始输出禁用时的输出参数必须与其源 Outport 模块的这两个参数匹配。

在简化初始化模式下,Simulink 将外部 Outport 模块的初始输出参数设置为 [](空矩阵),将禁用时的输出参数设置为“保持”。

检查哪些模块在初始化期间从条件执行子系统读取输入。

验证以下行为是可接受的。

在经典初始化模式中,有些模块,例如 Discrete-Time Integrator 模块,在初始化期间从条件执行子系统读取输入。Simulink 将这一步骤作为一种优化方法来执行。

在简化初始化模式下不允许执行这种优化,因为完成初始化之后,条件执行子系统在第一个时间步的输出可能不同于对应的 Outport 模块中声明的初始值。尤其是当子系统在第一个时间步处于活动状态时,更容易出现这种差异。

检查使用“对话框”作为初始输出值的源的 Outport 模块是否存在迁移冲突。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块将保持其当前设置,并使用指定的初始输出值。

检查使用“输入信号”作为初始输出值的源值的 Outport 模块是否存在迁移冲突。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块当前将初始输出指定为 [](空矩阵),将禁用时的输出指定为“保持”。这意味着每个 Outport 不会执行初始化,而是隐式依赖于源模块来初始化其输入信号。

迁移后,参数初始输出值的源将被设置为“输入信号”以反映这种行为。

检查具有 SimEvents® 语义的 Outport 模块是否存在迁移冲突。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块将继续使用 [](空矩阵)作为初始输出的值,并将禁用时的输出设置为“保持”。Simulink 将保持这些设置,因为它们的父级条件执行子系统连接到 SimEvents 模块。

检查具有可变大小输入并且未指定初始输出的最里层 Outport 模块是否存在迁移冲突。

对于这些 Outport 模块来说,仅当模块的父级子系统重新启用时,信号大小才会改变。因此,Simulink 隐式假定初始输出参数等于 0,即使未指定此参数 ([]) 也是如此。所以,除非您指定该参数,否则当模型迁移到简化初始化模式时,模型顾问会将该参数显式设置为 0。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

检查使用默认接地值作为初始输出的 Outport 模块是否存在迁移冲突。参数初始输出设置为 [](空矩阵),而且 Outport 的源是无效的初始条件源。因此,在简化初始化模式中,该模块使用默认的初始值作为初始输出。具有相同库链接的其他 Outport 模块实例要么出现错误,要么正在以不同的方式迁移。
检查未显式指定初始输出的合并的 Outport 模块是否存在迁移冲突。查看子检查检查哪些库模块具有无法迁移的实例的结果,了解其他每个 Outport 模块实例的不同迁移路径。对于其余的 Outport 模块,在简化初始化模式下,初始输出设置为 [](空矩阵),禁用时的输出设置为“保持”。

另请参阅

检查 Discrete-Time Integrator 模块的使用情况

检查 IDmathworks.design.DiscreteBlock

识别哪些 Discrete-Time Integrator 模块的参数设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。

注意

将此检查与迁移到简化初始化模式概述中的其他检查一起运行。

描述

R2008b 中引入了简化初始化模式以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization ModeClassic Initialization Mode

如果您使用简化初始化模式,此模型顾问检查可以识别模型中哪些 Discrete-Time Integrator 模块的设置可能会产生问题。它还会推荐一些设置,以确保 Discrete-Time Integrator 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。

结果和建议的操作

条件建议的操作

检查哪些 Discrete-Time Integrator 模块的初始条件设置参数设置为“输出”。

确定 Discrete-Time Integrator 模块的新行为是否可接受。如果不可接受,则在迁移到简化初始化模式之前修改模型,以便将新行为考虑在内。

检查哪些 Discrete-Time Integrator 模块的初始条件设置参数设置为“状态(最高效)” 并且位于使用触发采样时间的子系统中。

对该模块使用周期采样时间,或者将初始条件设置设置为“输出”。

检查迭代子系统内的哪些模块需要已用时间。

在迭代子系统层次结构中,不要使用需要通过某种服务维护两次连续执行之间的已用时间的模块。

由于迭代子系统可在一个给定的时间步中执行多次,这样的两次执行之间的已用时间并没有明确定义。在迭代子系统内使用这些模块可能会导致意外行为。

另请参阅

检查模型设置以便迁移到简化初始化模式

注意

不要单独运行此检查。将此检查与迁移到简化初始化模式概述中的其他检查一起运行。

检查 IDmathworks.design.ModelLevelMessages

识别哪些 Model 模块和模型配置参数的设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。

描述

R2008b 中引入了简化初始化模式,以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization ModeClassic Initialization Mode

此模型顾问检查可以识别您模型中的模型配置参数和 Model 模块存在的问题,这些问题可能会在您迁移到简化初始化模式时产生问题。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。

运行此模型顾问一致性检查之后,如果您点击浏览结果按钮,将只显示与非库链接模块有关的消息。

注意

由于这些更改很难撤消,因此在迁移到简化初始化模式之前,请选择文件 > 将还原点另存为以备份您的模型。

有关详细信息,请参阅模型配置参数:连接诊断

结果和建议的操作

条件建议的操作

验证所有 Model 模块都在使用简化初始化模式。

将 Model 模块引用的模型迁移到简化初始化模式,然后迁移顶层模型。

验证简化初始化模式设置

配置参数 > 欠定初始化检测设置为“简化”。

操作结果

点击修改设置将产生以下结果:

  • Model 参数被设置为“简化

  • 如果 Outport 模块的初始输出参数设置为空字符向量 [],则 “SourceOfInitialOutputValue” 参数被设置为输入信号

  • 如果 Outport 具有空初始输出和可变大小信号,则初始输出设置为零。

另请参阅

检查模型中的 S-Function

检查 IDmathworks.design.SFuncAnalyzer

对 Simulink 模型或子系统中的 S-Function 执行质量检查。

描述

S-Function 分析器对 S-Function 执行质量检查,以确定指定模型中的改进和潜在问题。

结果和建议的操作

条件建议的操作
mdlOutputs 方法中修改了连续状态。在主时间步修改连续状态,并在 S-Function 代码中使用 ssSetSolverNeedsReset 函数。
mdlUpdate 方法中修改了连续状态。仅在主时间步修改连续状态,并在 S-Function 代码中使用 ssSetSolverNeedsReset 函数。
在子时间步的 mdlOutputs 中修改了 S-Function 离散状态。仅在由 ssIsMajorTimeStep 函数保护的主时间步修改离散状态。
在子时间步的 mdlOutputs 方法中修改了 S-Function 模式向量。仅在由 sslsMajorTimeStep 函数保护的主时间步修改模式向量。
S-Function 使用静态或全局变量来声明内部状态。显式使用 ssSetNumDiscStates 函数或通过创建数据存储对全局数据建模声明状态。
S-Function 具有连续状态,但采样时间未声明为连续状态。使用 ssSetSampleTime 函数指定连续采样时间。
S-Function 具有离散状态,但 mdlOutputsmdlUpdate 方法已合并。分别定义 mdlOutputsmdlUpdate 方法,且仅在 mdlUpdate 方法中修改离散状态。
当具有与状态类似的数据或多个采样时间时,S-Function 设置了 SS_OPTION_CAN_BE_CALLED_CONDITIONALLY 选项。当 S-Function 具有状态类似的数据或多个采样时间时,请删除这些选项。
计算机上没有 MEX 编译器。检查计算机上是否存在 MEX 编译器,或安装该编译器。
S-Function 在编译模型时遇到错误。 检查诊断查看器输出并重新编译模型。

检查驱动导数端口的非连续信号

检查 IDmathworks.design.NonContSigDerivPort

识别驱动导数端口的非连续信号。

描述

驱动导数端口的非连续信号会导致求解器在每次信号值改变时进行重置,从而降低了仿真速度。

结果和建议的操作

条件建议的操作
模型中存在驱动导数端口的非连续信号。
  • 将指定的信号改为连续信号。

  • 将接收这些信号的连续模块替换为这些模块的离散状态版本。

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

S-Function 的运行时诊断

检查 IDmathworks.design.DiagnosticSFcn

在模型中存在 S-Function 模块的情况下检查数组边界和求解器的一致性。

描述

验证 S-Function 模块是否符合 Simulink 应用于内置模块的 ODE 求解器一致性规则。

结果和建议的操作

条件建议的操作
求解器数据不一致设置为“”。在“配置参数”对话框中,将求解器数据不一致设置为“警告”或“错误”。
超出数组边界设置为“”。在“配置参数”对话框中,将超出数组边界设置为“警告”或“错误

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

标识模型中的单位不匹配

检查 IDmathworks.design.UnitMismatches

识别模型中端口之间的单位不匹配实例。

描述

检查模型中端口之间的单位不匹配实例。

结果和建议的操作

条件建议的操作
发现单位不匹配更改其中一个不匹配的单位设置,使其与另一个端口的单位设置匹配。

另请参阅

标识模型中的自动单位转换

检查 IDmathworks.design.AutoUnitConversions

识别模型中的自动单位转换实例。

描述

识别模型中的自动单位转换实例。

结果和建议的操作

条件建议的操作
发现自动单位转换检查转换后的单位是否是模型所需要的单位。

另请参阅

标识模型中不允许的单位制

检查 IDmathworks.design.DisallowedUnitSystems

标识模型中不允许使用的单位制实例。

描述

标识模型中不允许使用的单位制实例。

结果和建议的操作

条件建议的操作
发现不允许使用的单位制选择符合配置的单位制的单位,或者选择其他单位制。有关详细信息,请参阅限制单位制

另请参阅

标识模型中未定义的单位

检查 IDmathworks.design.UndefinedUnits

识别模型中使用的未在单位数据库中定义的单位设定实例。

描述

识别模型中使用的未在单位数据库中定义的单位设定实例。

结果和建议的操作

条件建议的操作
发现未定义的单位将单位更改为 Simulink 支持的单位。

另请参阅

识别模型中具有多义性的单位

检查 IDmathworks.design.AmbiguousUnits

识别模型中具有多义性的单位设定实例,例如单位数据库中的重复单位名称。

描述

识别模型中具有多义性的单位设定实例,例如单位数据库中的重复单位名称。

结果和建议的操作

条件建议的操作
发现具有多义性的单位您可以忽略警告,或使用格式 unit_system::unit_name 指定单位和对应的单位制。

另请参阅

检查模型是否存在模块升级问题

检查 IDmathworks.design.Update

检查常见的模块升级问题。

描述

检查是否因使用 Simulink 软件的新版本而导致模型中的模块出现兼容性问题。

结果和建议的操作

条件建议的操作
发现存在兼容性问题的模块。点击修改以解决检测到的模块问题。
检查 2 级 API S-Function 的更新状态。考虑将 1 级 S-Function 替换为 2 级。

操作结果

点击修改,将来自旧版 Simulink 软件的模块替换为最新版本。

另请参阅

检查模型中是否存在需要编译时信息的模块升级问题

检查 IDmathworks.design.UpdateRequireCompile

检查常见的模块升级问题。

描述

检查是否因升级到 Simulink 软件的新版本而导致模块出现兼容性问题。当模型处于编译模式时,有些模块升级需要收集信息或数据。对于此检查,模型被设置为已编译模式,然后检查升级。

结果和建议的操作

条件建议的操作
模型中包含 Lookup TableLookup Table (2-D) 模块,并且某些模块为查找方法指定取最接近的输入值向上取输入值Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。不要对查找方法应用取最接近的输入值向上取输入值;请选择其他选项。
模型中包含 Lookup TableLookup Table (2-D) 模块,并且某些模块在插值期间先执行乘法。Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。但是,由于 n-D Lookup Table 模块先执行除法,这种替换可能会导致结果中存在数值差异。
模型中包含 Lookup TableLookup Table (2-D) 模块。其中的某些模块指定内插-外插作为查找方法,但它们的输入和输出不是相同的浮点类型。Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。然后,更改进行模块替换的外插方法或端口数据类型。

模型中包含 Unit Delay 模块且采样时间设置为 -1(继承连续采样时间)。

Unit Delay 模块替换为 Memory 模块。

检查 Data Store Memory 模块的多任务

操作结果

点击修改,将来自旧版 Simulink 软件的模块替换为最新版本。

另请参阅

检查 SLX 文件压缩功能是否已关闭

检查 IDmathworks.design.CheckSLXFileCompressionLevel

检查 SLX 文件压缩功能是否已关闭以减小 Git™ 存储库大小。

描述

检查 SLX 模型的压缩功能是否已关闭。

结果和建议的操作

条件建议的操作
模型、库或子系统以 SLX 格式保存。文件压缩功能已打开。考虑关闭文件压缩功能以有还源代码管理下的存储。

功能和限制

您可以对签入 Git 源代码管理中的模型、库和子系统运行此检查。

另请参阅

检查模型或库是否保存在当前版本中

检查 IDmathworks.design.CheckSavedInCurrentVersion

检查模型、库或子系统是否保存在当前版本的 Simulink 中。

描述

检查模型文件是否保存在当前 Simulink 版本中。

结果和建议的操作

条件建议的操作
模型、库或子系统未保存在当前版本的 Simulink 中。考虑将模型文件重新保存到当前版本的 Simulink 中。

功能和限制

您可以对模型、库和子系统运行此检查。

提示

Projects 可以帮助您将工程中的所有模型和库保存到当前 Simulink 版本。请参阅Upgrade All Project Models, Libraries, and MATLAB Code Files

另请参阅

检查模型中是否存在 SB2SL 模块

检查 IDmathworks.simulink.SB2SL.Check

检查模型中没有过时的 SB2SL 模块。

描述

检查模型是否包含过时的 SB2SL 模块。

结果和建议的操作

条件建议的操作
模型中包含过时的 SB2SL 模块考虑将模型升级到最新 SB2SL 模块。

操作结果

点击更新 SB2SL 模块,将模块替换为最新版本。

另请参阅

检查 Model History 属性

检查 IDmathworks.design.SLXModelProperties

检查是否有已编辑的模型历史记录属性

描述

检查模型中是否有已编辑的 Model History 属性值可用于源代码管理工具关键字代换。这种关键字代换与 SLX 文件格式不兼容。

在 MDL 文件格式中,您可以配置一些模型属性,以利用源代码管理工具关键字代换功能。如果您的模型以 SLX 格式保存,源代码管理工具将无法执行关键字代换。当您首次将 MDL 文件另存为 SLX 时,模型文件中来自此类关键字代换的信息将被缓存,而不会再次更新。模型中的“模型属性历史记录”窗格和 Model Info 模块从那时起将显示过时的信息。

结果和建议的操作

条件建议的操作
已编辑模型历史记录属性手动或自动将属性重置为默认值。点击按钮进行重置,或者要检查并手动更改这些属性,请打开“模型属性”对话框并在“历史记录”窗格中查找。

功能和限制

您可以对库模型运行此项检查。

另请参阅

标识哪些 Model Info 模块可与外部源代码管理工具交互

检查 IDmathworks.design.ModelInfoKeywordSubstitution

使用此检查查找哪些 Model Info 模块可由外部源代码管理工具通过关键字代换进行更改。

描述

此检查在 Model Info 模块中搜索用美元符号括起的字符向量,这些字符串可由外部源代码管理工具覆盖。如果使用第三方源代码管理工具关键字扩展,当您提交模型文件时,文件可能会损坏。关键字代换在 SLX 模型文件格式中不可用。

要与源代码管理工具进行更灵活的交互,请使用 Simulink 工程,而不是 Model Info 模块。请参阅 About Source Control with Projects

结果和建议的操作

条件建议的操作

Model Info 模块中包含类似如下的字段:$keyword$

查看报告中的字段列表,然后从 Model Info 模块中删除关键字字符向量。

另请参阅

标识哪些 Model Info 模块使用 Configuration Manager

检查 IDmathworks.design.ModelInfoConfigurationManager

使用此检查查找哪些 Model Info 模块使用 Configuration Manager。

描述

使用 Configuration Manager 的 Model Info 模块允许使用外部源代码管理工具代换有风险的关键字。如果使用第三方源代码管理工具关键字扩展,当您提交模型文件时,文件可能会损坏。关键字代换在 SLX 模型文件格式中不可用。在将来的版本中,将删除 Model Info 模块的 Configuration Manager。

要与源代码管理工具进行更灵活的交互,请使用 Simulink 工程,而不是 Model Info 模块。请参阅 About Source Control with Projects

结果和建议的操作

条件建议的操作

一个 Model Info 模块正在使用 Configuration Manager。

点击 Remove the Configuration Manager

另请参阅

检查模型中是否存在可升级的 SerDes Toolbox 模块

检查 IDmathworks.design.serdesUpgrades

列出在 SerDes Toolbox™ 的以前版本中保存的过时模块。

描述

此检查将搜索并列出可升级的 SerDes Toolbox 模块以与当前版本兼容。

结果和建议的操作

条件建议的操作
发现在旧版本的 SerDes Toolbox 中保存的模块。点击升级 SerDes Toolbox 模块以升级 SerDes Toolbox 模块,使其与当前版本兼容。

操作结果

点击升级 SerDes Toolbox 模块会升级过时的 SerDes Toolbox 模块,使其与当前版本兼容。

另请参阅

检查模型中是否存在旧的三自由度或六自由度模块

检查 IDmathworks.design.Aeroblks.CheckDOF

列出过时的三自由度和六自由度模块。

描述

此检查搜索来自 3.13 版 (R2014a) 之前的库中的三自由度和六自由度模块。

结果和建议的操作

条件建议的操作
发现使用旧版本三自由度或六自由度模块配置的模块。点击替换三自由度和六自由度模块,将这些模块替换为最新版本。

操作结果

点击替换三自由度和六自由度模块,将这些模块替换为最新版本。

另请参阅

检查模型中是否存在 Aerospace Blockset 导航模块

检查 IDmathworks.design.Aeroblks.CheckNAV

搜索 3.21 (R2018a) 之前的 Three-Axis Inertial Measurement Unit、Three-Axis Gyroscope 和 Three-Axis Accelerometer 模块。

描述

此检查将搜索已在 R2018a 中更新的 Three-Axis Inertial Measurement Unit、Three-Axis Gyroscope 和 Three-Axis Accelerometer 模块。

结果和建议的操作

条件建议的操作
R2018a 之前的 Three-Axis Inertial Measurement Unit、Three-Axis Gyroscope 和 Three-Axis Accelerometer 模块。

在 R2018a 或更高版本中,如果您以前没有求解过稳定状态条件,请立即保存模型。如果您以前求解过模型的稳定状态条件,请再次求解这些稳定状态条件,然后保存模型。

另请参阅

检查并更新库中的封装模块以使用提升的参数

检查 IDmathworks.design.CheckAndUpdateOldMaskedBuiltinBlocks

检查哪些库应该更新,以使用提升的参数。

描述

此检查在 R2011b 之前创建的库中搜索需要更新才能使用提升的参数的封装模块。从 R2011b 开始,如果某个模块参数未提升,它在链接模块中的值将被锁定为它在库模块中的值。此检查不包括 Subsystem、Model reference、S-Function 和 M-S-Function 类型的模块。

结果和建议的操作

条件建议的操作
发现需要更新的库点击更新。更新库之后,再次运行此检查。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查和更新具有不必要的 imread() 函数调用的封闭图像显示命令

检查 IDmathworks.design.CheckMaskDisplayImageFormat

此检查标识将图像显示命令用于不必要的 imread() 函数调用的封装。

描述

此检查搜索对 imread() 函数进行不必要调用的封装显示命令,并将它们更新为不调用 imread() 函数的封装显示命令。从 2013a 开始,对于使用图像路径而不是 RGB 三元组矩阵指定的掩膜图像,可以进行性能优化和内存优化。

结果和建议的操作

条件建议的操作
发现对 imread() 函数进行不必要调用的封装显示命令。点击更新。更新模块之后,再次运行此检查。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查并更新封装以确认图标绘制命令是否依赖于封装工作区

检查 IDmathworks.design.CheckMaskRunInitFlag

此检查可识别封装图标绘制命令是否与封装工作区存在依存关系。

描述

此检查可识别封装图标绘制命令是否与封装工作区存在依存关系,并相应地更新 RunInitForIconRedraw 属性。如果不存在封装工作区依存关系,则将 RunInitForIconRedraw 的值设置为 off;如果存在封装工作区依存关系,则将该值设置为 on

当不存在封装工作区依存关系时,将 RunInitForIconRedraw 的值设置为 off 将不会在绘制模块图标之前执行封装初始化代码,从而可以优化性能。

结果和建议的操作

条件建议的操作

发现依赖或独立于封装工作区的封装绘制命令。

点击更新。更新模块之后,再次运行此检查。

功能和限制

您可以:

  • 对您的库模型运行此检查。

  • 如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

标识哪些封装模块使用 MaskTabNames 参数指定了封装对话框中的选项卡。

检查 IDmathworks.design.CheckAndUpdateOldMaskTabnames

此检查识别哪些封装模块在封装对话框中使用 MaskTabNames 参数指定选项卡。

描述

此检查识别哪些封装模块使用 MaskTabNames 参数以编程方式在封装对话框中创建选项卡。自 R2013b 开始,使用对话框控件来组织封装对话框选项卡上的参数。

结果和建议的操作

条件建议的操作
找到以编程方式使用 MaskTabNames 参数在封装对话框中创建选项卡的封装模块。点击动作部分的升级。更新模块之后,再次运行此检查。

功能和限制

您可以对库模型运行此项检查。

另请参阅

标识对于严格的单精度设计来说不可靠的运算

检查 IDmathworks.design.StowawayDoubles

对于严格的单精度设计,此检查识别哪些模块引入了双精度运算和非最佳模型设置。

描述

对于严格的单精度设计,此检查识别哪些模块引入了双精度运算和非最佳模型设置。

结果和建议的操作

条件建议的操作
在模型中发现双精度浮点运算。

验证:

  • 模块输入和输出数据类型设置正确。

  • 在“配置参数”对话框中,数据类型未定时默认使用的类型设置为“单个”。

模型使用了对严格单精度设计来说不是最佳选择的库标准。

验证:

  • 模型使用的所有目标特定的数学库都支持单精度实现。

    配置参数 > 语言标准设置为 “C99 (ISO)”。

逻辑信号未以布尔值数据的形式实现。

验证:

  • 在“配置参数”对话框中,选择将逻辑信号实现为布尔数据

功能和限制

如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。

另请参阅

检查模块 CompiledSampleTime 的 get_param 调用

检查 IDmathworks.design.CallsGetParamCompiledSampleTime

使用此检查识别您的工作环境中哪些 MATLAB 文件包含返回模块 CompiledSampleTime 参数的 get_param 函数调用。

描述

对于多速率模块(包括子系统),Simulink 以模块中的采样率元胞数组形式返回模块编译采样时间。返回值是由双精度值对组构成的元胞数组。对于只以双精度值对组形式接受此返回值的 MATLAB 代码来说,当使用多速率模块调用时,可能会返回错误。使用此检查可以识别您环境中的此类代码。请修改这些代码实例,以接受双精度值对组元胞数组。

例如,假定有一个变量 blkTs,它被指定了多速率模块的编译采样时间。

blkTs = get_param(block,'CompiledSampleTime');

在下面这些示例中,仅当 blkTs 是双精度值对组且模块是单速率模块时,原始代码才能正常工作:

  • 示例 1

    if isinf(blkTs(1))
        disp('found constant sample time')
    end
    

    由于 blkTs 现在是一个元胞数组,所以 Simulink 显示以下错误消息:

    Undefined function 'isinf' for input arguments of type 'cell'
    可改用以下代码,它支持 blkTs 是元胞数组或双精度值对组。

    if isequal(blkTs, [inf,0])
        disp('found constant sample time')
    end
    
  • 示例 2

    if all(blkTs == [-1,-1])
        disp('found triggered sample time')
    end
    

    对于上面的示例,由于 blkTs 现在是元胞数组,因此 Simulink 显示以下错误消息:

    Undefined function 'eq' for input arguments of type 'cell'

    可改用以下代码,它支持 blkTs 是元胞数组或双精度值对组。

    if isequal(blkTs, [-1,-1])
        disp('found triggered sample time')
    end
  • 示例 3

    if (blkTs(1) == -1)
        disp('found a triggered context')
    end

    同样,由于 blkTs 现在是元胞数组,所以 Simulink 显示以下错误消息:

    Undefined function 'eq' for input arguments of type 'cell'

    可改用以下代码:

    if ~iscell(blkTs)
        blkTs = {blkTs};
    end
    for idx = 1:length(blkTs)
        thisTs = blkTs{idx};
        if (thisTs(1) == -1)
            disp('found a triggered context')
        end
    end

    上面的代码检查触发的类型采样时间(触发或异步)。除了触发或异步外,当模块具有固定采样时间 ([inf,0]) 或具有多个异步速率时,此替代属性将检测触发的类型采样时间。

此检查在您的环境中扫描 MATLAB 文件。如果检查发现 MATLAB 代码实例包含用于输出模块编译采样时间的 get_param 调用,升级顾问将显示这些结果。它建议您修改从多速率模块接受模块编译采样时间的代码。

结果和建议的操作

条件建议的操作
没有 MATLAB 文件调用 get_param(block,CompiledSampleTime)
有些 MATLAB 文件调用 get_param(block,CompiledSampleTime)如果文件使用来自多速率模块的模块 CompiledSampleTime 参数,则修改这些文件,以接受双精度值对组元胞数组形式的参数。

另请参阅

检查是否所有仿真输出都作为单个 Simulink.SimulationOutput 对象返回

检查 IDmathworks.design.CheckSingleSimulationOutput

使用此检查来确定仿真结果是否作为单个 Simulink.SimulationOutput 对象返回。

描述

此检查会扫描您的模型,以验证参数 ReturnWorkspaceOutputs 是否已启用。启用此参数后,以交互方式进行仿真时将以 Simulink.SimulationOutput 形式返回仿真输出。仿真输出包括信号、状态、输出、DSM 记录、波形记录以及 To Workspace 模块记录。

启用 ReturnWorkspaceOutputs 时,它支持:

  • 更轻松地管理仿真数据。

  • 自动访问 SimulationMetadata

  • 兼容多种并行仿真和批量仿真。

结果和建议的操作

条件建议的操作
仿真输出不会作为单个 Simulink.SimulationOutput 对象返回

将所有仿真输出作为单个 Simulink.SimulationOutput 对象返回

另请参阅

检查模型的参数初始化和调整问题

检查 IDmathworks.design.ParameterTuning

使用此检查识别初始化或调整参数时模型中发生的问题。

描述

此检查扫描您模型中的参数初始化和调整问题,例如:

  • 模块之间的速率不匹配

  • 条件执行子系统中存在除以零的问题

  • Index Vector 模块中的控制端口值无效

结果和建议的操作

条件建议的操作

模型存在速率转移问题。

在模型配置参数的求解器窗格中选择自动处理数据传输的速率转换

模型有一个具有控制端口的条件执行子系统存在除以零的问题。

在命令提示符下,运行

set_param(control_port,'DisallowConstTsAndPrmTs', 'on')

模型有一个条件执行子系统中存在无效的控制端口值。

在命令提示符下,运行

set_param(control_port,'DisallowConstTsAndPrmTs', 'on')

操作结果

选择升级模型,以解决模型中与参数初始化和调整有关的问题。

另请参阅

检查跨模型引用边界的虚拟总线

检查 IDmathworks.design.CheckVirtualBusAcrossModelReference

检查跨模块引用边界的虚拟总线信号。

描述

此检查标识引用模型中的哪些根级 InportOutport 模块以及哪些 Model 模块的虚拟总线输出需要更新,以更改为非虚拟总线信号。

如果检查发现问题,请在以下情况下点击更新模型,将为虚拟总线配置的根级 InportOutport 模块更新为使用非虚拟总线:

  • 对于根级 Inport 模块 - 启用以非虚拟总线输出参数并在 Inport 模块后插入一个 Signal Conversion 模块。Signal Conversion 模块配置为输出虚拟总线。

  • 对于根级 Outport 模块 - 启用在父模型中以非虚拟总线输出参数。

  • 对于 Model 模块 - 对于为了解决问题而更新其 Outport 模块的端口,在 Model 模块的对应端口后插入一个 Signal Conversion 模块。Signal Conversion 模块配置为输出虚拟总线。

建议的操作和结果

要解决问题,请点击升级模型

注意

对顶层模型运行分析模型层次结构并继续升级序列检查,然后向下对整个模型引用层次结构运行此检查。

如果您的模型符合以下条件,请点击升级模型,将为虚拟总线配置的受到影响的根级 InportOutport 模块转换为使用非虚拟总线:

  • 使用函数原型控制

  • 使用 “I/O 参数单步方法”选项执行 C++ 代码生成。

    您也可以将 C++ 代码生成函数设定设置更改为“默认单步方法”:

    1. 配置参数 > 代码生成 > 接口窗格中,点击配置 C++ 类接口

    2. 在该对话框中,将函数设定参数设置为“默认单步方法”。

  • 使用具有可变维度信号的总线

  • Outport 模块信号使用关联的非自动存储类

    • 非自动存储类的转换仅在您拥有模型所需的目标生成许可证时才会发生。例如,ERT 目标需要 Embedded Coder 许可证。

  • 使用由非虚拟总线驱动 Outport 模块的导出函数模型

  • 具有 Model 模块并且这些模块引用包含已修复 Outport 模块的模型 - 点击升级模型将更新引用以下模型的 Model 模块:这些模型通过分析模型层次结构并继续升级序列检查修复了 Outport 模块。

另请参阅

检查模型中是否存在以来信号的帧状态的自定义库模块

检查 IDmathworks.design.DSPFrameUpgrade

此检查识别模型中哪些自定义库模块依赖于信号的帧状态。

描述

此检查搜索模型中哪些自定义库模块依赖于信号的帧状态。此检查分析模块、提出修复建议并给出修复的原因。您必须手动进行修复。

结果和建议的操作

条件建议的操作

检查发现依赖于信号帧状态的自定义库模块。

按照升级顾问的建议进行操作。

功能和限制

您只能对模型中的自定义库模块运行此检查。

您必须手动进行修复。

仅当您安装了 DSP System Toolbox™ 时,此检查才会出现。

另请参阅

Frame-based processing (DSP System Toolbox)

检查模型是否存在 S-Function 升级问题

检查 ID'mathworks.design.CheckForSFcnUpgradeIssues'

对您的模型使用此检查来识别您的 S-Function 的升级兼容性问题。这些问题可能包括使用 32 位 API、使用不兼容的选项进行编译或使用已弃用的分离式复矩阵 API。以下的结果和建议部分介绍了与修复相关的一些常见问题和信息。

描述

在升级 S-Function 以使用最新版本的功能时,此检查会扫描您的模型以对 S-Function 升级不兼容问题发出警告。如果此检查的结果给出警告或错误,请根据描述修复 C MEX S-Function。

结果和建议的操作

条件建议的操作

不支持定制的 S-Function。

使用可用的兼容选项重新编译您的 S-Function。有关详细信息,请参阅Custom-built MEX File Not Supported In Current Release

S-Function 未使用最新 API (mex -R2018a) 编译。

使用最新标志 (mex -R2018a) 重新编译。有关详细信息,请参阅MEX File Is Compiled With Outdated Option

S-Function 使用 32 位函数。

根据 MEX File Calls A 32-bit Function中的说明修改您的代码。

S-Function 使用的是已弃用的分离式复矩阵 API(mxGetPi、mxSetPi、mxGetImagData、mxSetImagData)。

使用交错式复矩阵 API 并使用最新标志 (mex -R2018a) 重新编译您的代码。有关详细信息,请参阅Upgrade MEX Files to Use Interleaved Complex API

S-Function 使用的是已弃用的类型不安全的数据 API (mxGetData, mxSetData)。使用类型安全的数据 API 并重新编译您的代码。有关详细信息,请参阅 MEX File Calls An Untyped Data Access Function
S-Function 是用更高版本编译的,在当前版本中不受支持。请参阅MEX File Built In MATLAB Release Not Supported In Current Release以重新编译您的文件。

另请参阅

更新 System object 语法

检查 ID'mathworks.design.CheckSystemObjectUpdate'

使用此检查来识别和更新模型中任何具有过时语法的自定义 MATLAB System object™。

描述

此检查扫描您的模型以识别过时的 System object 语法。如果检查通过,则所有语法均为最新的。如果检查失败,您可以更新语法。

结果和建议的操作

条件建议的操作

System object 语法是最新的。

无。

System object 语法需要更新。

为与 MATLAB System 模块相关联的每个唯一 System object 生成一份报告。请使用更新更新语法。

另请参阅

检查快速加速信号记录

检查 IDmathworks.design.CheckRapidAcceleratorSignalLogging

在快速加速模式下进行模型仿真时,使用此检查查找模型中记录的被全局禁用的信号。快速加速模式支持信号记录。使用此检查启用全局信号记录。

描述

此检查扫描您的模型,以查看仿真是否处于快速加速模式,以及模型中是否包含启用了信号记录的信号。如果检查发现这种情况并且信号记录已被全局禁用,将显示全局启用信号记录的选项。

结果和建议的操作

条件建议的操作

仿真模式不是快速加速。

无。您可以在快速加速模式中启用信号记录。

仿真模式为快速加速。升级顾问未发现启用了信号记录的信号。

无。模型不使用信号记录。如果您要记录信号,请为信号启用全局记录。

仿真模式为快速加速。升级顾问发现启用了信号记录的信号。但是,全局信号记录设置被禁用。

如果您要通过启用信号记录来记录信号,请启用全局信号记录。

已启用全局信号记录。

无。

操作结果

选择修改将在您的模型中启用全局信号记录。

另请参阅

检查模块的虚拟总线输入

检查 IDmathworks.design.VirtualBusUsage

检查一组模块的总线输入信号。

描述

检查一组模块的总线输入信号。

从 R2015b 开始,如果为需要非总线或非虚拟总线输入信号的模块提供虚拟总线信号输入,可能会导致错误。可以指定总线对象作为输出数据类型的模块示例包括 Bus Creator 模块和根 Inport 模块。在这种情况下具有虚拟总线输入会导致错误的模块包括:

  • Assignment

  • Delay

    仅当使用“模块参数”对话框执行以下操作时,Delay 模块才会导致错误:

    • 设置的初始条件是 MATLAB 结构体或零。

    • 状态名称指定值。

  • Permute Dimension

  • Reshape

  • Selector

  • Unit Delay

    仅当使用“模块参数”对话框执行以下操作时,Unit Delay 模块才会导致错误:

    • 设置的初始条件是 MATLAB 结构体或零。

    • 状态名称指定值。

  • Vector Concatenate

结果和建议的操作

条件建议的操作

以下模块具有虚拟总线信号输入:

  • 赋值

  • Delay(如果您从对话框中指定初始条件为 MATLAB 结构体或零,并且状态名称值不为空)

  • 置换维度

  • 重构

  • 选择器

  • Unit Delay(如果您指定初始条件为 MATLAB 结构体或零,并且状态名称值不为空)

  • 向量串联

在升级顾问中,点击修改

此检查将插入一个 Bus to Vector 模块,尝试将虚拟总线输入信号转换为向量信号。对于升级顾问能识别但无法修复的问题,请手动修改模型。有关详细信息,请参阅Identify Automatic Bus Conversions

操作结果

点击修改将在模块的输入端口处插入一个 Bus to Vector 模块。

对许多模型而言,运行升级顾问将修改模型,使其不会将总线信号视为向量。但对有些模型而言,即使在运行检查后也可能会遇到兼容性问题。在这种情况下,您需要手动修改模型以解决这些问题。

使用升级顾问编译模型后,即使您没有对模型进行任何更改,Simulink 编辑器有时也会提醒您需要保存模型(模型是脏的)。为防止模型再次出现此问题,请保存模型。

建模模式问题解决方法

Data Store Memory 模块的数据类型设置为 “Inherit: auto

关联的 Data Store ReadData Store Write 模块读取或写入总线信号数据的 Data Store Memory 模块必须使用总线对象。

Data Store Memory 模块中,将数据类型信号属性设置为 “Bus: <BusObject>”。

Signal Conversion 模块的输出参数与输入总线类型匹配

输出参数设置为“非虚拟总线”的 Signal Conversion 模块需要虚拟总线输入。

输出参数设置为“虚拟总线”的 Signal Conversion 模块需要非虚拟总线输入。

要创建输入信号的副本,请将输出设置为“信号副本”。

MergeSwitchMultiport Switch 模块具有多个总线输入

具有多个总线输入的 MergeSwitchMultiport Switch 模块要求这些输入具有相同的名称和层次结构。

重新配置模型,使总线输入具有相同的名称和层次结构。

Inport 模块输出虚拟总线并指定端口维度的值

输出到虚拟总线的根 Inport 模块必须继承维度。

Inport 模块的端口维度信号属性设置为 “1” 或 “-1 (继承)”。

Mux 模块具有非虚拟总线输入

Mux 模块不能接受非虚拟总线信号。

要将输出视为数组,请将 Mux 模块替换为 Vector Concatenate 模块。

如果您需要虚拟总线输出,请使用 Bus Creator 模块来组合信号。

Bus to Vector 模块没有虚拟总线信号输入

非总线信号不需要 Bus to Vector 模块。

移除 Bus to Vector 模块。

Assignment 模块具有虚拟总线输入

升级顾问将 Assignment 模块 Y0 端口总线输入转换为向量。

Assignment 模块前面添加一个 Bus to Vector 模块。

S-Function 使用非虚拟总线

非 2 级 C S-Function 的 S-Function 不支持非虚拟总线信号。

将 S-Function 更改为 2 级 C S-Function。

考虑使用 S-Function Builder 模块创建 2 级 C S-Function。

Stateflow 图具有参数化数据类型

在 Stateflow 图中,如果数据类型是总线对象,则不能基于一个输入或输出来参数化另一个输入或输出的数据类型。

对于参数化端口,将数据类型设置为 “Bus: <object name>”。

Stateflow 图中的子系统存在总线操作

对于 Stateflow 图中的子系统内的 Inport 模块,如果其信号是总线,则需要总线对象数据类型。

Inport 模块中,将数据类型设置为 “Bus: <object name>”。

Ground 模块被用作总线信源

Ground 模块的输出信号不能作为总线的信源。

使用常量值设置为 0、输出数据类型信号属性设置为 “Bus: <object name>” 的 Constant 模块。

Outport 模块具有单元素总线对象数据类型

如果 Outport 模块指定总线对象作为其数据类型,则其输入必须是总线。

Outport 模块中,将数据类型设置为 Inherit: auto

另请参阅

检查具有固定采样时间的根 Outport 模块

检查 IDmathworks.design.CheckConstRootOutportWithInterfaceUpgrade

使用此检查识别哪些根 Outport 模块对 AUTOSAR 目标、函数原型控制或模型 C++ 类接口使用固定采样时间。

描述

使用 AUTOSAR 目标、函数原型控制或模型 C++ 类接口时,不支持具有固定采样时间的根 Outport 模块。使用此检查识别存在这种情况的根 Outport 模块,并根据建议修改模块。

结果和建议的操作

条件建议的操作

具有固定采样时间的根 Outport 模块与 AUTOSAR 目标、函数原型控制或模型 C++ 类接口一起使用。

考虑以下项之一:

  • 将模块的采样时间设置为基础采样时间。

  • 识别固定采样时间的源,并将其采样时间设置为基础采样时间。

  • 在该模块之前放置一个使用继承的采样时间 (-1) 的 Rate Transition 模块。

另请参阅

分析模型层次结构并继续升级序列

检查 IDcom.mathworks.Simulink.UpgradeAdvisor.UpgradeModelHierarchy

检查子模型并指导您完成升级检查。

描述

此检查识别此模型的子模型,并指导您完成升级检查以运行非编译和编译检查。Advisor 提供了帮助您完成以下任务的工具:

  • 如果检查发现子模型,它将按顺序为每个子模型运行升级顾问,然后继续升级序列。如果您有一个模型层次结构,您需要检查并依次更新每个子模型。

  • 如果没有任何子模型,您仍然需要继续检查序列,直到您运行完非编译和编译检查。

您必须按以下顺序运行升级检查:首先运行不需要编译时间信息并且不触发 Update Diagram 的检查,然后运行编译检查。

点击继续升级序列以运行后面的检查。如果有子模型,将打开下一个模型。继续点击继续升级序列直到检查通过。

结果和建议的操作

条件建议的操作
发现子模型点击继续升级序列以运行后面的检查。如果有子模型,此操作将关闭当前升级顾问会话,并针对层次结构中的下一个模型打开升级顾问。
无子模型,但要运行更多检查如果没有任何子模型,请点击继续升级序列以在选中编译检查的状态下刷新升级顾问。编译检查触发 Update Diagram(标记为 ^)。运行后面的检查并采取建议的操作。当您返回到此检查时,点击继续升级序列直到此检查通过。

提示

升级模型层次结构的最佳做法是从叶端开始检查并升级每个模型,一直到根模型为止。

当您点击继续升级序列时,升级顾问将打开层次结构内它能找到的最远的叶模型。后续步骤将指导您完成从叶模型到根模型的升级层次结构的过程。

当您打开升级顾问时,已选中的检查不需要编译时间信息,并且不会触发 Update Diagram。触发 Update Diagram 的检查在默认情况下未被选中以运行,并且标记为 ^。当您对某个层次结构使用升级顾问时,连续点击继续升级序列可在以下分析序列中逐项进行:

  1. 升级顾问从叶到根依次打开每个模型和库,并选择非编译检查。运行检查,执行任何建议的操作,然后点击继续升级序列打开下一个模型并继续。

  2. 当您到达层次结构的根端时,升级顾问将再次按同样的顺序打开每个模型(但不打开库),并只选择需要模型编译的检查。运行检查,执行任何建议的操作,然后点击继续升级序列打开下一个模型。继续进行,直到您到达层次结构的末端并通过此检查。

另请参阅

检查对数据存储的访问

检查 IDmathworks.design.ConflictsForDataStoreReadWriters

读取和写入数据存储时识别潜在的执行顺序敏感性。

描述

读取和写入同一数据存储的模块的执行顺序可以改变仿真结果。当位于同一个层次结构中的模块访问同一个数据存储时,执行顺序不是决定性的。

结果和建议的操作

条件建议的操作

Data Store Memory 模块被同一个层次结构中的多个模块访问。

要强制模块的执行顺序,可以考虑以下设置:

  • 在模块之间添加数据依存关系。

  • 设置模块优先级。

  • 将模块移动到单独的 Function-Call Subsystem 模块中并进行调度。

另请参阅

检查 Data Store Read 和 Data Store Write 模块的相对执行顺序

检查 IDmathworks.design.TaskBasedSorting

检查 Data Store Read 和 Data Store Write 模块的传统排序和基于任务的排序之间的相对执行顺序更改。

描述

传统模型使用模块排序来确定模块执行顺序。使用基于任务的排序时,涉及 Data Store Memory 模块的相对执行顺序可能会发生变化。此检查会检测变化,并提供用原始执行顺序更新模型的选项。

结果和建议的操作

条件建议的操作
包含 Data Store Memory 模块的执行顺序发生变化。您需要原始执行顺序。点击修改按钮。

另请参阅

检查对模型和库的引用中出现的大小写不匹配情况

检查 IDmathworks.design.CaseSensitiveBlockDiagramNames

识别并修复对模型和库的不区分大小写的引用。

描述

从 R2020a 开始,Simulink 模型和库名称区分大小写。此检查检测并提供选项来修复对模型和库的不区分大小写的引用。

结果和建议的操作

条件建议的操作
该检查在对模型和库的引用中发现大小写不匹配的情况。按照升级顾问的建议进行操作。

另请参阅

检查 Signal Builder 模块的模型

检查 IDmathworks.design.Sigbldr.upgradeCheck

在模型中搜索 Signal Builder 模块。

描述

在模型中找到 Signal Builder 模块,并用等效配置的 Signal Editor 模块替换它们。

结果和建议的操作

条件建议的操作

模型包含一个或多个 Signal Builder 模块。

要用等效的 Signal Editor 模块替换所有 Signal Builder 模块,请点击相关联链接。

另请参阅

检查 MATLAB Function 模块的输出维度

检查 IDmathworks.simulink.MLFBOutputDimensions

检查列出所有启用了将输出列向量解释为一维数据属性的 MATLAB Function 模块。如果启用该属性,该模块会将大小为 N×1 的输出列向量转换为信号大小等于 N 的一维信号。

结果和建议的操作

条件建议的操作
MATLAB Function 模块启用了属性并生成一维输出数据

点击进行修复按钮不会禁用 MATLAB function 模块的属性。要禁用该属性,请执行以下操作:

  1. 选择 MATLAB Function 模块。

  2. 打开属性检查器。在建模选项卡的设计部分中,点击属性检查器

  3. 常规选项卡中,清除将输出列向量解释为一维数据属性。

检查模型的仿真行为,因为禁用该属性会更改 MATLAB function 模块的大小传播。

MATLAB Function 模块启用了属性但不生成一维数据点击进行修复按钮以禁用 MATLAB function 模块的该属性。

另请参阅

检查模型中是否存在使用带断开连接的 Wilkinson 功率分配器组件的 RF Blockset Divider 模块

检查 IDmathworks.design.rfblockset.ce.checkDisconnectedDividerBlocks

搜索模型,并列出使用在端口 3 上端口连接断开的 Wilkinson 功率分配器组件的 RF Blockset™ Divider 模块。

描述

从 R2021a 开始,使用 Wilkinson 功率分配器组件的 RF Blockset Divider 模块的端口位置发生变化。此检查搜索并列出在 R2021a 之前使用在端口 3 上端口连接断开的 Wilkinson 功率分配器组件的模型 Divider 模块。然后,您可以使用 Modify 按钮重新连接。

结果和建议的操作

条件建议的操作
模型包含的 RF Blockset Divider 模块使用在端口 3 上端口连接断开的 Wilkinson 功率分配器组件。点击修改按钮,以重新连接在 RF Blockset Divider 模块的端口 3 上断开的连接。

操作结果

点击修改会重新连接在 RF Blockset Divider 模块的端口 3 上断开的端口连接。

注意

修改按钮将尝试在模型中自动重新连接在使用 Wilkinson 功率分配器组件的 Divider 模块的端口 3 上所有断开的连接。为了确保准确度,您必须随后:

  • 检查升级顾问的结果窗格下列出的详细信息。

  • 第一个列表枚举因模型复杂度而需要手动重新连接的使用 Wilkinson 功率分配器组件的 RF Blockset Divider 模块。

  • 第二个列表枚举自动重新连接的模块。

  • 固定和不固定的 Divider 模块分别以绿色和红色临时突出显示。点击结果窗格底部的删除所有临时模块的突出显示链接以取消突出显示。

另请参阅

标识 Environment Controller 模块并用 Variant Source 模块替换它们

检查 IDmathworks.design.ReplaceEnvironmentControllerBlk

在模型中搜索 Environment Controller 模块。

描述

在模型中找到 Environment Controller 模块,并使用变体控制项模式参数设置为 'sim codegen switching'Variant Source 模块替换它们。

结果和建议的操作

条件建议的操作
模型包含一个或多个 Environment Controller 模块。Environment Controller 模块替换为变体控制项模式参数设置为 'sim codegen switching'Variant Source 模块。

功能和限制

  • 您可以对库模型运行此项检查。

  • 您无法使用此检查来标识引用模型和链接模块中的 Environment Controller 模块。

另请参阅

检查是否存在状态机级数据

检查 IDmathworks.stateflow.MachineParentedData.check

检查模型中是否存在状态机级数据的实例。

描述

状态机级数据会阻止模型重用生成的代码和其他代码优化。状态机级数据也与许多 Simulink 及 Stateflow 功能不兼容。要使模型中的其他图和模块能够访问 Stateflow 数据,请使用“数据存储内存”作用域的图级数据。有关详细信息,请参阅使用图中数据的最佳做法 (Stateflow)Access Data Store Memory from a Chart (Stateflow)

注意

以后的版本中将不再支持状态机级数据。

结果和建议的操作

条件建议的操作
Simulink 模型包含 Stateflow 状态机级数据。通过将状态机级数据转换为将值存储在模型工作区中的图级数据来升级模型。

操作结果

点击升级模型会在使用状态机级数据的图中创建图级数据。

  • 如果状态机级数据对象具有“参数”作用域,则新的图级数据对象具有“参数”作用域。该值作为 Simulink.Parameter 对象存储在模型工作区中。

  • 如果状态机级数据对象具有任何其他作用域,则新的图级数据对象具有“数据存储内存”作用域。该值作为 Simulink.Signal 对象存储在模型工作区中。

功能和限制

在以下情况下,自动转换会失败:

  • 模型工作区包含与状态机级数据同名的 Simulink.ParameterSimulink.Signal 对象。

  • 模型包含与状态机级数据同名的图级数据、事件或消息。

  • 状态机级数据使用 Stateflow 语义,这些语义对于 Simulink.ParameterSimulink.Signal 对象没有等效项。

另请参阅