本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

Simulink 检查

Simulink 检查概述

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

另请参阅

Migrating to Simplified Initialization Mode 概述

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

使用 Migrating to Simplified Initialization Mode 中的 Model Advisor 检查,可以帮助您将模型迁移到简化初始化模式。

另请参阅

Identify unconnected lines, input ports, and output ports

检查 IDmathworks.design.UnconnectedLinesPorts

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

说明

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

注意

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

结果和建议的操作

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

功能和限制

您可以:

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

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

提示

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

另请参阅

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

Model Advisor Exclusion Overview (Simulink Check)

Check root model Inport block specifications

检查 IDmathworks.design.RootInportSpec

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

说明

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

结果和建议的操作

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

功能和限制

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

提示

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

  • Configuration Parameters > Solver > Periodic sample time constraint 设置为 “Ensure sample time independent

  • 对于导出函数模型,inherited sample time 未标记。

另请参阅

Check optimization settings

检查 IDmathworks.design.OptimizationSettings

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

说明

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

结果和建议的操作

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

在 Configuration Parameters 对话框的 Optimization 窗格上,选中以下优化复选框:

在 Configuration Parameters 对话框的 Optimization 窗格上,选中以下优化复选框:

在 Configuration Parameters 对话框中选中以下优化复选框:

在 Configuration Parameters 对话框的 Optimization 窗格上,选中以下优化复选框:

注意

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

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

为以下参数选择 “none”:

  • Solver data inconsistency

  • Array bounds exceeded

  • Diagnostics > Data Validity > Simulation range checking

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

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

  • 选择 Single output/update function。有关详细信息,请参阅Single output/update function (Simulink Coder)。

  • 选择 Ignore test point signals。有关详细信息,请参阅

  • Pass reusable subsystem outputs as 设置为 “Individual arguments”。有关详细信息,请参阅

提示

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

选中

另请参阅

Check diagnostic settings ignored during accelerated model reference simulation

检查 IDmathworks.design.ModelRefSIMConfigCompliance

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

说明

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

  • Array bounds exceeded

  • Diagnostics > Data Validity > Inf or NaN block output

  • Diagnostics > Data Validity > Division by singular matrix

  • Diagnostics > Data Validity > Wrap on overflow

此外,对于在 Accelerator 模式下引用的模型,如果您为以下 Configuration Parameters > Diagnostics > Data Validity > Data Store Memory Block 参数设置的值不是 “Disable all”,Simulink 将忽略这些参数。有关详细信息,请参阅数据存储诊断

  • Detect read before write

  • Detect write after read

  • Detect write after write

结果和建议的操作

条件建议的操作

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

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

Check for parameter tunability information ignored for referenced models

检查 IDmathworks.design.ParamTunabilityIgnored

检查是否在 Model Parameter Configuration 对话框中包含参数可调性信息。

说明

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

结果和建议的操作

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

另请参阅

在生成的代码中创建可调标定参数 (Simulink Coder).

Check for implicit signal resolution

检查 IDmathworks.design.ImplicitSignalResolution

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

说明

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

结果和建议的操作

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

另请参阅

为输出数据解析信号对象.

Check for optimal bus virtuality

检查 IDmathworks.design.OptBusVirtuality

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

另请参阅

Check for Discrete-Time Integrator blocks with initial condition uncertainty

检查 IDmathworks.design.DiscreteTimeIntegratorInitCondition

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

另请参阅

Identify disabled library links

检查 IDmathworks.design.DisabledLibLinks

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

说明

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

注意

此检查可能与Check model for block upgrade issues重叠。

结果和建议的操作

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

功能和限制

您可以:

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

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

提示

  • 使用 Model Browser 查找库链接。

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

另请参阅

Restore Disabled or Parameterized Links

Model Advisor Exclusion Overview (Simulink Check)

Check for large number of function arguments from virtual bus across model reference boundary

检查 IDmathworks.design.CheckVirtualBusAcrossModelReferenceArgs

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

说明

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

结果和建议的操作

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

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

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

另请参阅

跨模型引用边界的总线数据

Identify parameterized library links

检查 IDmathworks.design.ParameterizedLibLinks

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

提示

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

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

另请参阅

Restore Disabled or Parameterized Links

Model Advisor Exclusion Overview (Simulink Check)

Identify unresolved library links

检查 IDmathworks.design.UnresolvedLibLinks

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

另请参阅

修复未解析的库链接

Model Advisor Exclusion Overview (Simulink Check)

Identify configurable subsystem blocks for converting to variant subsystem blocks

检查 IDmathworks.design.CSStoVSSConvert

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

结果和建议的操作

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

功能和限制

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

另请参阅

转换为可变子系统

Identify Variant Model blocks and convert those to Variant Subsystem containing Model block choices

检查 IDmathworks.design.ConvertMdlrefVarToVSS

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

结果和建议的操作

条件建议的操作

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

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

另请参阅

转换为变体

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

检查 IDmathworks.design.emptyVariantObjects

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

结果和建议的操作

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

另请参阅

变体控制项简介

Check usage of function-call connections

检查 IDmathworks.design.CheckForProperFcnCallUsage

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

说明

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

结果和建议的操作

条件建议的操作
Diagnostics > Connectivity > Invalid function-call connection 设置为 “warning”。这可能会导致不确定性模型执行。Diagnostics > Connectivity > Invalid function-call connection 设置为 “error”。
Diagnostic > Connectivity > Context-dependent inputs 设置为 “Disable All” 或 “Use local settings”。这可能会导致不确定性模型执行。Diagnostics > Connectivity > Context-dependent inputs 设置为 “Enable all as errors”。

另请参阅

Function-Call Subsystem

Check Data Store Memory blocks for multitasking, strong typing, and shadowing issues

检查 IDmathworks.design.DataStoreMemoryBlkIssue

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

说明

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

结果和建议的操作

条件建议的操作
Duplicate data store names 检查设置为 “none” 或 “warning”。 考虑在 Configuration Parameters 对话框的 Diagnostics > Data Validity 窗格上,将 Duplicate data store names 检查设置为 “error”。

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

  • Date Store Memory 模块的 Block Parameters 对话框的 Signal Attributes 窗格

  • 全局数据存储名称

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

  • Date Store Memory 模块的 Block Parameters 对话框的 Signal Attributes 窗格上,选择除 “Inherit: auto” 之外的数据类型。

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

Multitask data store 检查设置为 “none” 或 “warning”。 考虑在 Configuration Parameters 对话框的 Diagnostics > Data Validity 窗格上,将 Multitask data store 检查设置为 “error”。

功能和限制

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

另请参阅

Check if read/write diagnostics are enabled for data store blocks

检查 IDmathworks.design.DiagnosticDataStoreBlk

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

说明

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

结果和建议的操作

条件建议的操作
Detect read before write 检查被禁用。考虑在 Configuration Parameter 对话框的 Diagnostics> Data Validity 窗格上启用 Detect read before write
Detect write after read 检查被禁用。考虑在 Configuration Parameter 对话框的 Diagnostics> Data Validity 窗格上启用 Detect write after read
Detect write after write 检查被禁用。考虑在 Configuration Parameter 对话框的 Diagnostics> Data Validity 窗格上启用 Detect write after write

功能和限制

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

提示

.

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

另请参阅

Check data store block sample times for modeling errors

检查 IDmathworks.design.DataStoreBlkSampleTime

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

说明

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

结果和建议的操作

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

功能和限制

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

另请参阅

Check for potential ordering issues involving data store access

检查 IDmathworks.design.OrderingDataStoreAccess

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

说明

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

结果和建议的操作

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

功能和限制

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

提示

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

另请参阅

Check structure parameter usage with bus signals

检查 IDmathworks.design.MismatchedBusParams

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

说明

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

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

部分结构体

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

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

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

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

数据类型不匹配

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

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

结果和建议的操作

条件建议的操作

模块或信号对象使用部分结构体

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

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

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

另请参阅

Check Delay, Unit Delay and Zero-Order Hold blocks for rate transition

检查 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 TransitionRate Transition 模块进行速率转移可为数据传输处理提供一种可配置的解决方案。

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

结果和建议的操作

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

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

  1. 点击 Upgrade Model,将它们替换为实际的 Rate Transition 模块。

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

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

功能和限制

您可以:

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

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

另请参阅

Check for calls to slDataTypeAndScale

检查 IDmathworks.design.CallslDataTypeAndScale

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

说明

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

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

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

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

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

结果和建议的操作

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

功能和限制

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

提示

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

  • 运行 Check for calls to slDataTypeAndScale 将调用 Simulink 函数 slRemoveDataTypeAndScale。直接调用此函数可提供更广泛的转换选项。但是,您很少需要更多转换选项。

另请参阅

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

    • help slDataTypeAndScale

    • help slRemoveDataTypeAndScale

  • Model Advisor Exclusion Overview (Simulink Check)

Check bus signals treated as vectors

检查 IDmathworks.design.BusTreatedAsVector

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

说明

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

结果和建议的操作

条件建议的操作

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

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

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

在 Configuration Parameters 对话框的 Diagnostics > Connectivity 窗格上,将 Bus signal treated as vector 设置为 “error”。

操作结果

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

提示

  • 在运行 Check consistency of initialization parameters for Outport and Merge blocks 之前,先运行此检查。

  • 有关详细信息,请参阅Identify Automatic Bus Conversions

另请参阅

Check for potentially delayed function-call subsystem return values

检查 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)

Identify block output signals with continuous sample time and non-floating point data type

检查 IDmathworks.design.OutputSignalSampleTime

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

说明

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

结果和建议的操作

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

功能和限制

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

另请参阅

什么是采样时间?.

Model Advisor Exclusion Overview (Simulink Check)

Check usage of Merge blocks

检查 IDmathworks.design.MergeBlkUsage

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

注意

将此检查与Migrating to Simplified Initialization Mode 概述中的其他检查一起运行。

说明

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

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

结果和建议的操作

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

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

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

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

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

检查未指定 Initial output 值的根 Merge 模块。

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

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

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

清除 Merge 模块的 Allow unequal port widths 参数。

注意

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

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

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

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

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

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

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

验证每个 Merge 模块的输入信号具有相同的 Sample time

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

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

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

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

注意

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

另请参阅

Check usage of Outport blocks

检查 IDmathworks.design.InitParamOutportMergeBlk

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

注意

将此检查与Migrating to Simplified Initialization Mode 概述中的其他检查一起运行。

说明

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

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

结果和建议的操作

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Outport 模块的 Output when disabled 参数设置为 “held”。此设置是必需的,因为 Outport 模块连接到一个 Merge 模块。

有关详细信息,请参阅Outport

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

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

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

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

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

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

否则,请执行以下操作:

  1. 在 Configuration Parameters 对话框的 Solver 窗格上,清除选项 Automatically handle rate transition for data transfer

  2. 再次运行此 Model Advisor 检查。

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

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

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

检查在被禁用时会重置的 Outport 模块的 Initial output 设置。

指定 Outport 模块的 Initial output 参数。

对于配置为在禁用时重置的模块,您必须为它们指定 Initial output 值。

检查通过函数调用数据依存关系信号的 Outport 模块的 Initial output 设置。

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

  1. Outport 模块的 Initial output 参数设置为 []

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

检查哪些 Outport 模块使用信号对象指定 Initial output 值。

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

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

注意

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

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

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

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

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

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

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

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

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

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

检查哪些外部 Outport 模块具有显式 Initial output

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

在经典初始化模式下,Outport 模块的 Initial outputOutput when disabled 参数必须与其源 Outport 模块的这两个参数匹配。

在简化初始化模式下,Simulink 将外部 Outport 模块的 Initial output 参数设置为 [](空矩阵),将 Output when disabled 参数设置为 “held”。

检查哪些条件执行子系统跨输出边界传播执行上下文。

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

子系统的 Propagate execution context across subsystem boundary 参数处于选中状态。执行上下文仍将跨输入边界传播;但是,在简化初始化模式下,初始化时将在输出端禁用传播。

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

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

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

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

检查使用 “Dialog” 作为 Source of initial output value 的 Outport 模块是否存在迁移冲突。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看 Check for library blocks with instances that cannot be migrated 的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块将保持其当前设置,并使用指定的 Initial output 值。

检查使用 “Input signal” 作为 Source of initial output 值的 Outport 模块是否存在迁移冲突。

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看 Check for library blocks with instances that cannot be migrated 的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块当前将 Initial output 指定为 [](空矩阵),将 Output when disabled 指定为 “held”。这意味着每个 Outport 不会执行初始化,而是隐式依赖于源模块来初始化其输入信号。

迁移后,参数 Source of initial output value 将被设置为 “Input signal” 以反映这种行为。

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

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看 Check for library blocks with instances that cannot be migrated 的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

Outport 模块将继续使用 [](空矩阵)作为 Initial output 的值,并将 Output when disabled 设置为 “held”。Simulink 将保持这些设置,因为它们的父级条件执行子系统连接到 SimEvents 模块。

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

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

具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看 Check for library blocks with instances that cannot be migrated 的结果,了解每个 Outport 模块的其他实例的不同迁移路径。

检查使用默认接地值作为 Initial output 的 Outport 模块是否存在迁移冲突。参数 Initial output 设置为 [](空矩阵),而且 Outport 的源是无效的初始条件源。因此,在简化初始化模式中,该模块使用默认的初始值作为 Initial output。具有相同库链接的其他 Outport 模块实例要么出现错误,要么正在以不同的方式迁移。
检查未显式指定 Initial output 的合并的 Outport 模块是否存在迁移冲突。查看子检查 Check for library blocks with instances that cannot be migrated 的结果,了解其他每个 Outport 模块实例的不同迁移路径。对于其余的 Outport 模块,在简化初始化模式下,Initial output 设置为 [](空矩阵),Output when disabled 设置为 “held”。

另请参阅

Check usage of Discrete-Time Integrator blocks

检查 IDmathworks.design.DiscreteBlock

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

注意

将此检查与Migrating to Simplified Initialization Mode 概述中的其他检查一起运行。

说明

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

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

结果和建议的操作

条件建议的操作

检查哪些 Discrete-Time Integrator 模块的 Initial condition setting 参数设置为 “Output”。

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

检查哪些 Discrete-Time Integrator 模块的 Initial condition setting 参数设置为 “State (most efficient)” 并且位于使用触发的采样时间的子系统中。

对该模块使用周期采样时间,或者将 Initial Condition setting 设置为 “Output”。

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

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

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

另请参阅

Check model settings for migration to simplified initialization mode

注意

不要单独运行此检查。将此检查与Migrating to Simplified Initialization Mode 概述中的其他检查一起运行。

检查 IDmathworks.design.ModelLevelMessages

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

说明

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

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

运行此 Model Advisor 一致性检查之后,如果您点击 Explore Result 按钮,将只显示与非库链接模块有关的消息。

注意

由于这些更改很难撤消,因此在迁移到简化初始化模式之前,请选择 File > Save Restore Point As 以备份您的模型。

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

结果和建议的操作

条件建议的操作

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

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

验证简化初始化模式设置

Configuration Parameters > Underspecified initialization detection 设置为 “Simplified”。

操作结果

点击 Modify Settings 将产生以下结果:

  • Model 参数被设置为 “simplified

  • 如果 Outport 模块的 Initial output 参数设置为空字符向量 [],则 “SourceOfInitialOutputValue” 参数被设置为 Input signal

  • 如果 Outport 具有空 Initial output 和可变大小信号,则 Initial output 设置为零。

另请参阅

Check S-functions in the model

检查 IDmathworks.design.SFuncAnalyzer

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

Description

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 在编译模型时遇到错误。 检查 Diagnostic Viewer 输出并重新编译模型。

Check for non-continuous signals driving derivative ports

检查 IDmathworks.design.NonContSigDerivPort

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

说明

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

结果和建议的操作

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

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

功能和限制

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

另请参阅

Runtime diagnostics for S-functions

检查 IDmathworks.design.DiagnosticSFcn

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

说明

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

结果和建议的操作

条件建议的操作
Solver data inconsistency 设置为 “none”。在 Configuration Parameters 对话框中,将 Solver data inconsistency 设置为 “warning” 或 “error”。
Array bounds exceeded 设置为 “none”。在 Configuration Parameters 对话框中,将 Array bounds exceeded 设置为 “warning” 或 “error

功能和限制

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

另请参阅

Check model for foreign characters

检查 IDmathworks.design.characterEncoding

检查与当前编码不兼容的字符

说明

检查模型文件中不能用当前编码表示的字符。这些字符可能会在仿真期间产生错误,并在保存模型时被损坏。

结果和建议的操作

条件建议的操作
发现不兼容的字符使用 slCharacterEncoding,将当前编码更改为模型文件中指定的编码。要更改当前编码,您需要关闭模型,这样将关闭 Model Advisor。

提示

Upgrade Advisor 报告中显示了您需要的编码,您也可以使用以下命令从模型中检索编码:

get_param(modelname,'SavedCharacterEncoding')

使用 slCharacterEncoding 更改编码。此设置仅应用于当前 MATLAB 会话,所以如果您重新启动 MATLAB 并希望打开同一个模型,您需要再次对当前编码进行同样的更改。

有关详细信息,请参阅:

另请参阅

Identify unit mismatches in the model

检查 IDmathworks.design.UnitMismatches

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

说明

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

结果和建议的操作

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

另请参阅

Identify automatic unit conversions in the model

检查 IDmathworks.design.AutoUnitConversions

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

说明

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

结果和建议的操作

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

另请参阅

Identify disallowed unit systems in the model

检查 IDmathworks.design.DisallowedUnitSystems

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

说明

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

结果和建议的操作

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

另请参阅

Identify undefined units in the model

检查 IDmathworks.design.UndefinedUnits

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

说明

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

结果和建议的操作

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

另请参阅

Check model for block upgrade issues

检查 IDmathworks.design.Update

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

说明

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

结果和建议的操作

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

操作结果

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

另请参阅

Check model for block upgrade issues requiring compile time information

检查 IDmathworks.design.UpdateRequireCompile

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

说明

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

结果和建议的操作

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

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

Unit Delay 模块替换为 Memory 模块。

Check Data Store Memory blocks for multitasking

操作结果

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

另请参阅

Check that the model is saved in SLX format

检查 IDmathworks.design.UseSLXFile

检查模型是否保存为 SLX 格式。

说明

检查模型是否保存为 SLX 格式。

结果和建议的操作

条件建议的操作
模型未保存为 SLX 格式考虑升级到 SLX 文件格式,以使用 Simulink 中的最新功能。

功能和限制

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

提示

Simulink Projects 可以帮助您将模型升级到 SLX 格式,并保留文件在源代码管理中的修订历史记录。请参阅Convert from MDL to SLX in a Project and Preserve Revision History

另请参阅

Check model for SB2SL blocks

检查 IDmathworks.simulink.SB2SL.Check

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

说明

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

结果和建议的操作

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

操作结果

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

另请参阅

Check Model History properties

检查 IDmathworks.design.SLXModelProperties

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

说明

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

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

结果和建议的操作

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

功能和限制

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

另请参阅

Identify Model Info blocks that can interact with external source control tools

检查 IDmathworks.design.ModelInfoKeywordSubstitution

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

说明

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

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

结果和建议的操作

条件建议的操作

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

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

另请参阅

Identify Model Info blocks that use the 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

另请参阅

Check model for legacy 3DoF or 6DoF blocks

检查 IDmathworks.design.Aeroblks.CheckDOF

列出过时的 3DoF 和 6DoF 模块。

说明

此检查搜索来自 3.13 版 (R2014a) 之前的库中的 3DoF 和 6DoF 模块。

结果和建议的操作

条件建议的操作
发现使用旧版本 3DoF 或 6DoF 模块配置的模块。点击 Replace 3DoF and 6DoF Blocks,将这些模块替换为最新版本。

操作结果

点击 Replace 3DoF and 6DoF Blocks,将这些模块替换为最新版本。

另请参阅

Check model and local libraries for legacy Aerospace Blockset blocks

检查 IDmathworks.design.Aeroblks.CheckFG

列出哪些模块被配置为使用已过时或不支持的 FlightGear 版本。

说明

此检查搜索并列出哪些模块被配置为使用已过时或不支持的 FlightGear 版本。

结果和建议的操作

条件建议的操作
发现使用旧版本 FlightGear 配置的模块。点击 Update FlightGear blocks,将模块设置更改为支持的最新版本的 FlightGear。然后,下载 MATLAB 支持的最新版本的 FlightGear。

操作结果

点击 Update FlightGear blocks,将模块设置更改为支持的最新版本的 FlightGear。

另请参阅

Check model for Aerospace Blockset navigation blocks

检查 IDmathworks.design.Aeroblks.CheckNAV

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

Description

此检查将搜索已在 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 或更高版本中,如果您以前没有求解过稳定状态条件,请立即保存模型。如果您以前求解过模型的稳定状态条件,请再次求解这些稳定状态条件,然后保存模型。

另请参阅

Check and update masked blocks in library to use promoted parameters

检查 IDmathworks.design.CheckAndUpdateOldMaskedBuiltinBlocks

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

另请参阅

Check and update mask image display commands with unnecessary imread() function calls

检查 IDmathworks.design.CheckMaskDisplayImageFormat

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

说明

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

结果和建议的操作

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

功能和限制

您可以:

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

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

另请参阅

Check and update mask to affirm icon drawing commands dependency on mask workspace

检查 IDmathworks.design.CheckMaskRunInitFlag

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

说明

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

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

结果和建议的操作

条件建议的操作

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

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

功能和限制

您可以:

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

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

另请参阅

Identify masked blocks that specify tabs in mask dialog using MaskTabNames parameter

检查 IDmathworks.design.CheckAndUpdateOldMaskTabnames

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

说明

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

结果和建议的操作

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

功能和限制

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

另请参阅

Identify questionable operations for strict single-precision design

检查 IDmathworks.design.StowawayDoubles

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

说明

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

结果和建议的操作

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

验证:

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

  • 在 Configuration Parameters 对话框中,Default for underspecified data type 设置为 “single”。

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

验证:

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

    Configuration Parameters > Standard math library 设置为 “C99 (ISO)”。

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

验证:

  • 在 Configuration Parameters 对话框中,选择 Implement logic signals as Boolean data

功能和限制

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

另请参阅

Check get_param calls for block CompiledSampleTime

检查 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 调用,Upgrade Advisor 将显示这些结果。它建议您修改从多速率模块接受模块编译采样时间的代码。

结果和建议的操作

条件建议的操作
没有 MATLAB 文件调用 get_param(block,CompiledSampleTime)None
有些 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 对象返回

另请参阅

Check model for parameter initialization and tuning issues

检查 IDmathworks.design.ParameterTuning

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

说明

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

  • 模块之间的速率不匹配

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

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

结果和建议的操作

条件建议的操作

模型存在速率转移问题。

在模型配置参数的 Solver 窗格中选择 Automatically handle rate transition for data transfer

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

在命令提示符下,运行

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

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

在命令提示符下,运行

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

操作结果

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

另请参阅

Check for virtual bus across model reference boundaries

检查 IDmathworks.design.CheckVirtualBusAcrossModelReference

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

说明

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

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

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

  • 对于根级 Outport 模块 - 启用 Output as nonvirtual bus in parent model 参数。

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

建议的操作和结果

要解决问题,请点击 Upgrade Model

注意

对顶层模型运行 Analyze model hierarchy and continue upgrade sequence 检查,然后向下对整个模型引用层次结构运行此检查。

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

  • 使用函数原型控制

  • 使用 “I/O arguments step method” 选项执行 C++ 代码生成。

    您也可以将 C++ 代码生成函数规范设置更改为 “Default step method”:

    1. Configuration Parameters > Code Generation > Interface 窗格中,点击 Configure C++ Class Interface

    2. 在该对话框中,将 Function specification 参数设置为 “Default step method”。

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

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

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

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

  • 具有 Model 模块并且这些模块引用包含已修复 Outport 模块的模型 - 点击 Upgrade Model 将更新引用以下模型的 Model 模块:这些模型通过 Analyze model hierarchy and continue upgrade sequence 检查修复了 Outport 模块。

另请参阅

Check model for custom library blocks that rely on frame status of the signal

检查 IDmathworks.design.DSPFrameUpgrade

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

说明

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

结果和建议的操作

条件建议的操作

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

按照 Upgrade Advisor 的建议进行操作。

功能和限制

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

您必须手动进行修复。

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

另请参阅

Frame-based processing (DSP System Toolbox)

Check model for S-function upgrade issues

检查 ID'mathworks.design.CheckForSFcnUpgradeIssues'

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

Description

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

结果和建议的操作

条件建议的操作

不支持定制的 S-Function。

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

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

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

S-Function 使用 32 位函数。

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

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

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

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

另请参阅

Check Rapid accelerator signal logging

检查 IDmathworks.design.CheckRapidAcceleratorSignalLogging

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

说明

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

结果和建议的操作

条件建议的操作

仿真模式不是 Rapid Accelerator。

无。您可以在 Rapid Accelerator 模式中启用信号记录。

仿真模式为 Rapid Accelerator。Upgrade Advisor 未发现启用了信号记录的信号。

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

仿真模式为 Rapid Accelerator。Upgrade Advisor 发现启用了信号记录的信号。但是,全局信号记录设置被禁用。

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

已启用全局信号记录。

无。

操作结果

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

另请参阅

Check virtual bus inputs to blocks

检查 IDmathworks.design.VirtualBusUsage

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

说明

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

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

  • Assignment

  • Delay

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

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

    • State name 指定值。

  • Permute Dimension

  • Reshape

  • Selector

  • Unit Delay

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

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

    • State name 指定值。

  • Vector Concatenate

结果和建议的操作

条件建议的操作

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

  • Assignment

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

  • Permute Dimension

  • Reshape

  • Selector

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

  • Vector Concatenate

在 Upgrade Advisor 中,点击 Modify

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

操作结果

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

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

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

建模模式问题解决方法

Data Store Memory 模块的 Data Type 设置为 “Inherit: auto

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

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

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

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

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

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

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

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

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

Inport 模块输出虚拟总线并指定 Port dimensions 的值

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

Inport 模块的 Port dimensions 信号属性设置为 “1” 或 “-1 (inherit)”。

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

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

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

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

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

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

移除 Bus to Vector 模块。

Assignment 模块具有虚拟总线输入

Upgrade Advisor 将 Assignment 模块 Y0 端口总线输入转换为向量。

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

S-Function 使用非虚拟总线

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

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

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

Stateflow 图具有参数化数据类型

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

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

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

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

Inport 模块中,将 Data type 设置为 “Bus: <object name>”。

Ground 模块被用作总线信源

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

使用 Constant value 设置为 0、Output data type 信号属性设置为 “Bus: <object name>” 的 Constant 模块。

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

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

Outport 模块中,将 Data type 设置为 Inherit: auto

另请参阅

Check for root outports with constant sample time

检查 IDmathworks.design.CheckConstRootOutportWithInterfaceUpgrade

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

说明

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

结果和建议的操作

条件建议的操作

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

考虑以下项之一:

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

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

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

另请参阅

Analyze model hierarchy and continue upgrade sequence

检查 IDcom.mathworks.Simulink.UpgradeAdvisor.UpgradeModelHierarchy

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

说明

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

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

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

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

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

结果和建议的操作

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

提示

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

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

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

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

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

另请参阅

Check Access to Data Stores

检查 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 模块的执行顺序发生变化。您需要原始执行顺序。点击 Modify 按钮。

另请参阅