Simulink 检查
Simulink 检查概述
使用 Simulink® 模型顾问检查来配置您的模型,以便进行仿真。
另请参阅
Simulink Check Checks (Simulink Check)
迁移到简化初始化模式概述
R2008b 中引入了简化初始化模式以提高仿真结果的一致性。对于没有为条件执行子系统输出端口指定初始条件的模型,此模式尤为重要。有关详细信息,请参阅Simplified Initialization Mode和Classic Initialization Mode。
使用迁移到简化初始化模式中的模型顾问检查,可以帮助您将模型迁移到简化初始化模式。
另请参阅
标识未连接的信号线、输入端口和输出端口
检查 ID:mathworks.design.UnconnectedLinesPorts
检查未连接的信号线或端口。
描述
此检查将列出未连接的信号线或端口。这些信号线或端口可能无法传播数据类型、采样时间和维度等信号属性。
注意
连接接地/终端模块的端口将通过本测试。
结果和建议的操作
条件 | 建议的操作 |
---|---|
信号线、输入端口或输出端口未连接。 | 连接信号。双击未连接的项目的列表以查找故障。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check™ 许可证,可以在此检查中排除模块和图。
提示
使用 PortConnectivity
命令以获取描述模块输入或输出端口的结构体数组。
另请参阅
有关 PortConnectivity
命令的信息,请参阅通用模块属性。
Model Advisor Exclusion Overview (Simulink Check)
检查根模型 Inport 模块设定
检查 ID:mathworks.design.RootInportSpec
检查根模型 Inport 模块完全定义了维度、采样时间和数据类型。
描述
若使用未完全定义维度、采样时间或数据类型的根模型 Inport 模块,可能会产生意外的仿真结果。Simulink 软件从下游模块反向传播维度、采样时间和数据类型,除非您为它们显式指定了值。
结果和建议的操作
条件 | 建议的操作 |
---|---|
根级 Inport 模块具有未定义的属性。 | 完全定义根级 Inport 模块的属性。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
提示
以下配置可以通过此检查:
配置参数 > 求解器 > 周期性采样时间约束设置为确保采样时间独立
对于导出函数模型,继承采样时间未标记。
另请参阅
检查优化设置
检查 ID:mathworks.design.OptimizationSettings
检查可能导致代码生成和仿真非最佳的优化。
描述
此项检查会审查能够提高代码效率、缩短仿真时间的优化的状态。
结果和建议的操作
条件 | 建议的操作 |
---|---|
指定的优化处于关闭状态。 | 在“配置参数”对话框的优化窗格上,选中以下优化复选框:
在“配置参数”对话框的优化窗格上,选中以下优化复选框:
在“配置参数”对话框中选中以下优化复选框:
在“配置参数”对话框的优化窗格上,选中以下优化复选框: 注意 仅当模型中存在 Stateflow® 图时,模型顾问才会检查这些参数。
|
Application lifespan (days) 设置为无限。这可能会导致使用 64 位计数器,从而占用过多系统资源。 | 如果这不是您想要的结果,请选择一个停止时间。 |
指定的诊断(可能增加模型的仿真时间)设置为警告或错误。 | 为以下参数选择无:
|
指定的 Embedded Coder® 参数处于关闭状态。 | 如果您拥有 Embedded Coder 许可证,并且使用基于 ERT 的系统目标文件:
|
提示
如果系统包含 Model 模块,而且引用模型在加速模式下,则对模型进行仿真需要生成和编译代码。
选中
另请参阅
模型配置参数:代码生成优化 (Simulink Coder)
检查模型引用加速仿真期间忽略的诊断设置
检查 ID:mathworks.design.ModelRefSIMConfigCompliance
检查 Simulink 在加速仿真过程中为哪些引用模型更改了配置参数设置。
描述
对于在加速模式下引用的模型,如果您为以下配置参数设置的值不是无,Simulink 将忽略它们的设置。
超出数组边界
诊断 > 数据有效性 > 模块输出为 Inf 或 NaN
诊断 > 数据有效性 > 除以奇异矩阵
诊断 > 数据有效性 > 溢出时绕回
此外,对于在加速模式下引用的模型,如果您为以下配置参数 > 诊断 > 数据有效性 > Data Store Memory 模块 参数设置的值不是全部禁用,Simulink 将忽略这些参数。有关详细信息,请参阅数据存储诊断。
检测写前读
检测读后写
检测写后写
结果和建议的操作
条件 | 建议的操作 |
---|---|
您想查看标识的诊断(设置为产生警告或错误)的运行结果。 | 在普通模式下执行模型仿真,并解决诊断警告或错误。 |
检查为引用模型忽略的参数可调性信息
检查 ID:mathworks.design.ParamTunabilityIgnored
检查是否在“模型参数配置”对话框中包含参数可调性信息。
描述
Simulink 软件将忽略在“模型参数配置”对话框中指定的可调性信息。此检查可以识别包含参数可调性信息的模型,如果该模型被其他模型引用,Simulink 软件将忽略其参数可调性信息。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中包含被忽略的参数可调性信息。 | 点击链接,以转换成 MATLAB® 工作区中等效的 Simulink 参数对象。 |
另请参阅
在生成的代码中创建可调标定参数 (Simulink Coder)
检查隐式信号解析
检查 ID:mathworks.design.ImplicitSignalResolution
识别尝试将命名信号和状态解析为 Simulink.Signal
对象的模型。
描述
要求 Simulink 软件解析所有命名信号和状态是一种效率低下的行为,会降低增量代码生成和模型引用的速度。此检查用于识别您可能需要关闭隐式信号解析并强制执行解析的信号和状态。
结果和建议的操作
条件 | 建议的操作 |
---|---|
没有解析所有的信号和状态。 | 关闭隐式信号解析,并强制解析确实需要解析的每个信号和状态。 |
另请参阅
检查以实现最佳总线虚拟化
检查 ID:mathworks.design.OptBusVirtuality
识别哪些虚拟总线可以变成非虚拟总线。将这些虚拟总线变成非虚拟总线可以提高代码生成效率。
描述
此检查可以识别模块融合了哪些跨越子系统边界的虚拟总线。将这些虚拟总线变成非虚拟总线可提高代码生成效率。
结果和建议的操作
条件 | 建议的操作 |
---|---|
指定跨模型引用边界的虚拟总线的模块。 | 将突出显示的总线更改为非虚拟总线。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查哪些 Discrete-Time Integrator 模块的初始条件不确定
检查 ID:mathworks.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 许可证,可以在此检查中排除模块和图。
另请参阅
IC 模块
Constant 模块
Model Advisor Exclusion Overview (Simulink Check)
标识禁用的库链接
检查 ID:mathworks.design.DisabledLibLinks
在模型中搜索禁用的库链接。
描述
禁用的库链接可能会导致意外的仿真结果。在保存模型之前解析禁用的链接。
注意
此检查可能与检查模型是否存在模块升级问题重叠。
结果和建议的操作
条件 | 建议的操作 |
---|---|
库链接被禁用。 | 点击上下文菜单中的库链接 > 解析链接选项。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
提示
使用模型浏览器查找库链接。
要启用断开的链接,请右键点击模型中的模块以显示上下文菜单。选择库链接 > 解析链接。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查跨模型引用边界的虚拟总线产生的大量函数参量
检查 ID:mathworks.design.CheckVirtualBusAcrossModelReferenceArgs
检查跨模型引用边界的虚拟总线信号,并标记因使用跨模型引用边界的虚拟总线导致函数参量数量显著增加的情况。
描述
为提高代码生成过程的速度,您可以使用此检查来减少生成的函数参量的数量。如果检查发现模型中将有大量函数参量生成,您可以点击更新模型修改模型,以生成较少的参量。
结果和建议的操作
跨模型引用边界的虚拟总线信号会产生许多函数参量,此类方法会减慢代码生成过程。
条件 | 建议的操作 |
---|---|
列出了在当前模型配置下会生成大量参量的方法,该检查可通过修改模型减少参量数量。 | 点击更新模型。 |
点击更新模型将重置 Inport 和 Outport 模块参数,并会根据需要插入 Signal Conversion 模块,以减少模型中生成的函数参量的数量。
另请参阅
标识参数化库链接
检查 ID:mathworks.design.ParameterizedLibLinks
在模型中搜索参数化的库链接。
描述
无意中进行了参数化的库链接可能会导致模型中出现意外的参数设置。这可能会导致模型操作不正常。
结果和建议的操作
条件 | 建议的操作 |
---|---|
列出了已参数化的链接。 | 确认这些链接是否确实需要参数化。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
提示
右键点击模型中的模块以显示上下文菜单。选择
Link Options
,然后点击Go To Library Block
以查看库中的原始模块。要参数化某个库链接,请从上下文菜单中选择
Look Under Mask
,然后选择参数。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
标识未解析的库链接
检查 ID:mathworks.design.UnresolvedLibLinks
在模型中搜索未解析的库链接,未解析的库链接会导致找不到指定的库模块。
描述
检查是否存在未解析的库链接。存在未解析的库链接时,模型不会进行仿真。
结果和建议的操作
条件 | 建议的操作 |
---|---|
库链接未解析。 | 找到缺失的库模块或替代项。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
标识要转换为可变子系统模块的可配置子系统模块
检查 ID:mathworks.design.CSStoVSSConvert
搜索模型,以识别模型或子系统级别的可配置子系统模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
标识了可配置的子系统模块。 | 将这些模块转换成可变子系统模块,以避免兼容性问题。请参阅 Configurable Subsystem。 |
功能和限制
您可以对库模型运行此项检查。
另请参阅
标识 Variant Model 模块,并将其转换为包含 Model 模块选择项的 Variant Subsystem
检查 ID:mathworks.design.ConvertMdlrefVarToVSS
搜索模型以识别 Variant Model 模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
列出了在模型中可用的 Variant Model 模块。 | 将这些模块转换为 Variant Subsystem 模块。 |
另请参阅
标识变体对象条件为空的变体模块
检查 ID:mathworks.design.emptyVariantObjects
搜索模型以标识变体对象为空的变体模块或库。
结果和建议的操作
条件 | 建议的操作 |
---|---|
列出模型或库中变体对象为空的变体模块。 | 在变体对象中使用有效条件。 |
另请参阅
检查函数调用连接的使用情况
检查 ID:mathworks.design.CheckForProperFcnCallUsage
检查适用于函数调用连接性并且可能影响模型执行的模型诊断设置。
描述
检查可能导致不确定性模型执行的连接性诊断设置。
结果和建议的操作
条件 | 建议的操作 |
---|---|
配置参数 Context-dependent inputs 设置为警告。这可能会导致不确定性模型执行。 | 将配置参数 Context-dependent inputs 设置为错误。 |
另请参阅
检查 Data Store Memory 模块的多任务、强定型和重影问题
检查 ID:mathworks.design.DataStoreMemoryBlkIssue
查找与 Data Store Memory 模块有关的建模问题。
描述
检查更高作用域的数据存储的多任务数据完整性、强定型和重影。
结果和建议的操作
条件 | 建议的操作 |
---|---|
重复数据存储名称检查设置为无或警告。 | 考虑在“配置参数”对话框的诊断 > 数据有效性窗格上,将 重复的数据存储名称 检查设置为错误。 |
以下二者之一中的数据存储变量名称不是强定型名称:
| 通过执行以下操作之一,指定除 auto 之外的数据类型:
|
多任务数据存储检查设置为无或警告。 | 考虑在“配置参数”对话框的诊断 > 数据有效性窗格上,将 Multitask data store 检查设置为错误。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
检查是否为数据存储模块启用了读取/写入诊断
检查 ID:mathworks.design.DiagnosticDataStoreBlk
为模型中的数据存储模块启用读写诊断顺序检查,以检测运行时问题。
描述
检查读写诊断顺序。通过启用读写诊断,可以检测到潜在的运行时问题。
结果和建议的操作
条件 | 建议的操作 |
---|---|
检测写前读检查被禁用。 | 考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect read before write。 |
检测读后写检查被禁用。 | 考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect write after read。 |
检测写后写检查被禁用。 | 考虑在“配置参数”对话框的诊断> 数据有效性窗格上启用 Detect write after write。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
提示
.
运行时诊断可能会大大减慢仿真速度。一旦您确定 Simulink 不会在仿真期间生成警告或错误,请将诊断选项设置为全部禁用。
另请参阅
检查数据存储模块采样时间是否存在建模错误
检查 ID:mathworks.design.DataStoreBlkSampleTime
识别由于数据存储模块的采样时间产生的建模错误。
描述
检查数据存储模块的采样时间是连续的还是子步中不变。
结果和建议的操作
条件 | 建议的操作 |
---|---|
您模型中的数据存储模块具有连续采样时间或子步中不变的采样时间。 | 考虑将列出的模块变成离散模块,或者将它们替换为 Memory 或者 Goto 和 From 模块。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
检查潜在的数据存储访问顺序问题
检查 ID:mathworks.design.OrderingDataStoreAccess
查找可能导致结果不准确的读取/写入问题。
描述
在更新图期间,识别与数据存储模块的“写前读”、“读后写”、“写后写”情况有关的潜在问题。
结果和建议的操作
条件 | 建议的操作 |
---|---|
读取和写入(写前读或读后写情况)顺序错乱。 | 考虑重新构建模型,使 Data Store Read 模块在 Data Store Write 模块之前执行。 |
一个时间步中发生多次写入。 | 更改模型,使其在每个时间步中只写入一次数据,或者参考下面的“提示”部分。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
提示
此检查执行静态分析,可能无法识别每一种不正确的使用情形。具体而言,函数调用子系统、Stateflow 图、用于代码生成的 MATLAB、For Iterator Subsystem 和 For Each Subsystem 可能会导致漏检和误报。要进行更全面的检查,请考虑在“配置参数”对话框的诊断 > 数据有效性窗格上启用以下诊断:Detect read before write、Detect write after read 和 Detect write after write。
另请参阅
检查总线信号的结构体参数的使用
检查 ID:mathworks.design.MismatchedBusParams
识别使用不匹配的结构体初始化总线信号的模块和 Simulink.Signal
对象。
描述
在模型中,您可以使用 MATLAB 结构体来初始化总线信号。例如,如果您通过 Unit Delay 模块传递总线信号,可将初始条件参数设置为结构体。有关使用结构体初始化总线的基本信息,请参阅指定总线元素的初始条件。
运行此检查,通过将初始条件结构体的形状和数值数据类型与总线信号的对应特征相匹配,生成高效且可读的代码。匹配这些特征可以避免不必要的显式类型转换,并替换逐字段结构体赋值法,例如,替换为调用 memcpy
。
非完全结构体
此检查将列出使用非完全结构体初始化总线信号的模块和 Simulink.Signal
对象。在创建模型的迭代过程中,您可以使用非完全结构体以重点处理总线中的部分信号元素。对于成熟模型,请使用完全结构体以实现以下目的:
生成可读且高效的代码。
支持显式初始化未指定信号的建模风格。如果您使用非完全结构体,Simulink 将隐式初始化未指定的信号。
有关完全结构体和非完全结构体的详细信息,请参阅创建用于初始化的完全结构体和创建用于初始化的非完全结构体。
数据类型不匹配
此检查将列出初始条件结构体引入不匹配数据类型的模块和 Simulink.Signal
对象。这些结构体的字段的数值数据类型与对应的总线信号元素的数据类型不匹配。
此检查不会检测将初始条件的数据类型隐式转换为输入信号的模块,例如 Unit Delay。
当您配置初始条件结构体使其以可调全局结构体形式出现在生成的代码中时,可以通过匹配数据类型来避免不必要的显式类型转换。请参阅 Generate Tunable Initial Condition Structure for Bus (Simulink Coder)。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模块或信号对象使用非完全结构体 | 考虑使用函数 |
结构体字段的数据类型与对应的信号元素的数据类型不匹配 | 考虑将结构体定义为 |
另请参阅
检查 Delay、Unit Delay 和 Zero-Order Hold 模块的速率转换
检查 ID:mathworks.design.ReplaceZOHDelayByRTB
识别用于速率转移的 Delay、Unit Delay 或 Zero-Order Hold 模块。将这些模块替换为真正的 Rate Transition 模块。
描述
如果某个模型使用 Delay、Unit Delay 或 Zero-Order Hold 模块在输入信号与输出信号之间进行速率转移,则 Simulink 会将这些模块隐式替换为内置的 Rate Transition 模块。在编译的模块图中,替换模块的左上角会出现一个黄色符号和“RT”字样。这种替换可能会影响模型的行为,如下所示:
这些模块将丢失用于延迟信号或实现零阶保持的算法设计属性。相反,它们将获得速率转移行为。
这种建模方法只适用于特定的转移配置(Delay 和 Unit Delay blocks 模块的慢速到快速转移,Zero-Order Hold 模块的快速到慢速转移)。将模块采样时间设置为等于较慢的速率(Delay 和 Unit Delay 模块的源采样时间,Zero-Order Hold 模块的目标采样时间)。
当下游或上游模块的采样时间发生变化时,Delay、Unit Delay 和 Zero-Order Hold 模块可能不会执行速率转移。例如,如果将源采样时间和目标采样时间设置为相等,将停止速率转移。模块将采用它们的原始算法设计属性。
模块采样时间显示不完整的采样时间速率信息。模块代码以两种不同的速率运行来处理数据传输。但是,模块的采样时间和采样时间颜色显示它是一个单速率模块。使用采样时间信息的工具和 MATLAB 脚本根据这些信息决定它们的行为。
另一种方法是将 Delay、Unit Delay 或 Zero-Order Hold 模块替换为真正的 Rate Transition 模块。
这种方法可以确保模块行为产生明确的结果。Delay、Unit Delay 或 Zero-Order Hold 模块根据它们的算法设计执行操作,分别延迟和保持信号。只有 Rate Transition 模块执行实际的速率转移。
如果您要指定明确的行为或者指定要实现的内存缓冲区类型,则使用实际的 Rate Transition 模块进行速率转移可为数据传输处理提供一种可配置的解决方案。
使用此检查可以识别模型中是否有 Delay、Unit Delay 或 Zero-Order Hold 模块实例执行隐式替换来实现信号之间的速率转移。点击升级模型,将这些模块替换为实际的 Rate Transition 模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中没有使用任何 Delay、Unit Delay 或 Zero-Order Hold 模块实例进行速率转移。 | 无需执行任何操作。 |
模型中使用了 Delay、Unit Delay 或 Zero-Order Hold 模块实例进行速率转移。 | 此检查可以识别这些实例并允许您升级模型。
|
如果您不选择将 Delay、Unit Delay 和/或 Zero-Order Hold 模块替换为实际的 Rate Transition 模块,Simulink 将继续执行隐式替换,将这些模块替换为内置的速率转移模块。
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查对 slDataTypeAndScale
的调用
检查 ID:mathworks.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)
检查被视为向量的总线信号
检查 ID:mathworks.design.BusTreatedAsVector
识别 Simulink 视为向量的总线信号。
描述
不能使用被 Simulink 软件隐式转换为向量的总线信号。但您可以在总线信号和接收该信号的模块输入端口之间插入一个 Bus to Vector 转换模块,或者使用 Simulink.BlockDiagram.addBusToVector
命令。
结果和建议的操作
条件 | 建议的操作 |
---|---|
总线信号隐式转换为向量。 | 使用 |
模型未配置为识别 Simulink 视为向量的总线信号。 | 在“配置参数”对话框的诊断 > 连接性窗格上,将总线信号视为向量设置为错误。 |
操作结果
点击修改会在将总线信号隐式转换为向量的模块的输入端口上插入一个 Bus to Vector 模块。
提示
在运行检查 Outport 和 Merge 模块的初始化参数的一致性之前,先运行此检查。
有关详细信息,请参阅Identify Automatic Bus Conversions。
另请参阅
检查可能延迟的函数调用子系统返回值
检查 ID:mathworks.design.DelayedFcnCallSubsys
识别可能因为 Simulink 软件插入隐式 Signal Conversion 模块而延迟的函数调用返回值。
描述
由于信号驻留在连续内存中,Simulink 软件可自动在函数调用发起方模块输入端口之前插入一个隐式 Signal Conversion 模块。这可能会导致调用方函数调用子系统返回的信号值延迟一步。这种延迟可以通过确保信号从函数调用系统内的信号模块发出来避免。或者,如果延迟可接受,可在受影响的输入端口前面插入一个 Unit Delay 模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
列出的模块输入端口可能有隐式 Signal Conversion 模块。 | 确定返回信号值的一步延迟对于列出的信号是否可接受。
|
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Unit Delay 模块
Model Advisor Exclusion Overview (Simulink Check)
标识具有连续采样时间和非浮点数据类型的模块输出信号
检查 ID:mathworks.design.OutputSignalSampleTime
查找连续采样时间、非浮点输出信号。
描述
非浮点信号可能无法表示连续变量而不丢失信息。
结果和建议的操作
条件 | 建议的操作 |
---|---|
具有连续采样时间的信号具有非浮点数据类型。 | 在标识的信号上,将采样时间更改为离散或子步中不变 ([0 1])。 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查 Merge 模块的使用情形
检查 ID:mathworks.design.MergeBlkUsage
识别哪些 Merge 模块的参数设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。
注意
将此检查与迁移到简化初始化模式概述中的其他检查一起运行。
描述
R2008b 中引入了简化初始化模式以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization Mode和Classic Initialization Mode。
如果您使用经典初始化模式,此模型顾问检查可以识别模型中 Merge 模块的哪些设置可能产生问题。它还会推荐一些设置,以确保 Merge 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。
结果和建议的操作
条件 | 建议的操作 |
---|---|
检查 Merge 模块的运行时诊断设置。 |
|
检查使用 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 模块输入信号的合并或重新排序发生在条件执行子系统内。这种设计可能使用 Mux、Bus Creator 或 Selector 模块。 |
检查哪些 Merge 模块的多个输入端口由一个源驱动。 | 验证 Merge 模块的多个输入信号不是由同一个条件执行子系统或条件执行 Model 模块驱动。 |
检查哪些 Merge 模块使用信号对象指定初始输出值。 | 验证以下行为是可接受的。 在简化初始化模式中,不能使用信号对象指定 Merge 模块的初始输出参数。虽然您仍然可以使用信号对象初始化 Merge 模块的输出信号,但初始化结果可能被 Merge 模块的初始化结果覆盖。 注意 Simulink 会生成一条警告,提示信号对象的初始值被忽略。 |
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查 Outport 模块的使用情况
检查 ID:mathworks.design.InitParamOutportMergeBlk
识别哪些 Outport 模块和条件子系统的参数设置可能会导致意外的行为,并帮助您将模型迁移到简化初始化模式。
注意
将此检查与迁移到简化初始化模式概述中的其他检查一起运行。
描述
R2008b 中引入了简化初始化模式以提高仿真结果的一致性。对于没有为条件执行子系统输出端口指定初始条件的模型,此模式尤为重要。有关详细信息,请参阅Simplified Initialization Mode和Classic Initialization Mode。
如果您使用简化初始化模式,此模型顾问检查可以识别模型中的哪些 Outport 模块和条件子系统可能产生问题。它还会推荐一些设置,以确保 Outport 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识在迁移后可能发生的问题或行为变化。
结果和建议的操作
条件 | 建议的操作 |
---|---|
检查迭代子系统内的哪些模块需要已用时间。 | 在迭代子系统层次结构中,不要使用需要通过某种服务维护两次连续执行之间的已用时间的模块。 由于迭代子系统可在一个给定的时间步中执行多次,这样的两次执行之间的已用时间并没有明确定义。在迭代子系统内使用这些模块可能会导致意外行为。 |
检查哪些 Outport 模块具有冲突的信号缓冲区要求。 | 除了标准数据信号会通过 Outport 模块,函数调用触发器或函数调用数据依存关系信号也会通过该模块。有些标准数据信号需要一个明确的信号缓冲区以初始化对应子系统的输出信号。但是,缓冲与函数调用有关的信号将导致违反函数调用依存关系。 考虑修改模型,以通过一个单独的 Outport 模块传递与函数调用有关的信号。有关违反函数调用数据依存关系的示例,请参阅 Simulink 子系统语义。 由于以下原因之一,标准数据信号可能需要一个额外的信号副本:
|
检查哪些 Outport 模块由总线信号驱动并且其初始输出值不是标量。 | 对于由总线信号驱动的 Outport 模块,经典初始化模式不支持初始条件 (IC) 结构体,但简化初始化模式支持。因此,从经典模式向简化模式迁移模型时,应为初始输出参数指定标量。迁移完成后,要为总线信号的不同元素指定不同的初始值,请使用 IC 结构体。有关详细信息,请参阅创建初始条件结构体。 |
检查哪些 Outport 模块需要显式信号副本。 | 驱动 Outport 模块的总线信号的显式副本是初始化对应子系统的输出信号时所必需的。在 Outport 模块之前插入一个 Signal Conversion 模块,然后将 Signal Conversion 模块的输出参数设置为总线副本。 由于以下一个或多个原因,标准数据信号可能需要一个额外的信号副本:
|
检查哪些合并的 Outport 模块从已被配置为在禁用时重置的 Outport 模块继承初始输出值。 | 当 Outport 模块驱动 Merge 模块时,不要将 Outport 模块的禁用时的输出参数设置为重置。 |
检查哪些合并的 Outport 模块由嵌套的条件执行子系统驱动。 | 确定 Outport 模块的新行为是否可接受。如果不可接受,则在迁移到简化初始化模式之前修改模型,以便将新行为考虑在内。 |
检查哪些合并的 Outport 模块会在被禁用时重置。 | 将 Outport 模块的禁用时的输出参数设置为保持。此设置是必需的,因为 Outport 模块连接到一个 Merge 模块。 有关详细信息,请参阅 Outport。 |
检查哪些 Outport 模块的初始输出值未定义且初始条件源无效。 | 验证以下行为是可接受的。 如果初始输出参数未指定 ( 对于简化初始化模式,Outport 模块可以从中继承初始输出值的有效源包括:Constant、Initial Condition、Merge(具有初始输出)、Stateflow 图、函数调用模型引用或条件执行子系统模块。 |
检查哪些 Outport 模块具有自动速率转移。 | Simulink 已在 Outport 模块的输入上插入一个 Rate Transition 模块。请为每个 Outport 模块指定初始输出参数。 否则,请执行以下操作:
|
检查哪些 Outport 模块具有特殊的信号存储要求,并且未定义初始输出值。 | 验证以下行为是可接受的。 为 Outport 模块指定初始输出参数。将此值设置为 |
检查在被禁用时会重置的 Outport 模块的初始输出设置。 | 指定 Outport 模块的初始输出参数。 对于配置为在禁用时重置的模块,您必须为它们指定初始输出值。 |
检查通过函数调用数据依存关系信号的 Outport 模块的初始输出设置。 | 您不能为 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 模块当前将初始输出指定为 迁移后,参数初始输出值的源将被设置为输入信号以反映这种行为。 |
检查具有 SimEvents® 语义的 Outport 模块是否存在迁移冲突。 | 具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。 Outport 模块将继续使用 |
检查具有可变大小输入并且未指定初始输出的最里层 Outport 模块是否存在迁移冲突。 | 对于这些 Outport 模块来说,仅当模块的父级子系统重新启用时,信号大小才会改变。因此,Simulink 隐式假定初始输出参数等于 0,即使未指定此参数 ([]) 也是如此。所以,除非您指定该参数,否则当模型迁移到简化初始化模式时,模型顾问会将该参数显式设置为 0。 具有相同库链接的其他 Outport 模块实例要么无法迁移,要么正在以不同的方式迁移。查看检查哪些库模块具有无法迁移的实例的结果,了解每个 Outport 模块的其他实例的不同迁移路径。 |
检查使用默认接地值作为初始输出的 Outport 模块是否存在迁移冲突。 | 参数初始输出设置为 [] (空矩阵),而且 Outport 的源是无效的初始条件源。因此,在简化初始化模式中,该模块使用默认的初始值作为初始输出。具有相同库链接的其他 Outport 模块实例要么出现错误,要么正在以不同的方式迁移。 |
检查未显式指定初始输出的合并的 Outport 模块是否存在迁移冲突。 | 查看子检查检查哪些库模块具有无法迁移的实例的结果,了解其他每个 Outport 模块实例的不同迁移路径。对于其余的 Outport 模块,在简化初始化模式下,初始输出设置为 [] (空矩阵),禁用时的输出设置为保持。 |
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查 Discrete-Time Integrator 模块的使用情况
检查 ID:mathworks.design.DiscreteBlock
识别哪些 Discrete-Time Integrator 模块的参数设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。
注意
将此检查与迁移到简化初始化模式概述中的其他检查一起运行。
描述
R2008b 中引入了简化初始化模式以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization Mode和Classic Initialization Mode。
如果您使用简化初始化模式,此模型顾问检查可以识别模型中哪些 Discrete-Time Integrator 模块的设置可能会产生问题。它还会推荐一些设置,以确保 Discrete-Time Integrator 模块行为的一致性。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。
结果和建议的操作
条件 | 建议的操作 |
---|---|
检查哪些 Discrete-Time Integrator 模块的初始条件设置参数设置为输出。 | 确定 Discrete-Time Integrator 模块的新行为是否可接受。如果不可接受,则在迁移到简化初始化模式之前修改模型,以便将新行为考虑在内。 |
检查哪些 Discrete-Time Integrator 模块的初始条件设置参数设置为状态(最高效) 并且位于使用触发采样时间的子系统中。 | 对该模块使用周期采样时间,或者将初始条件设置设置为输出。 |
检查迭代子系统内的哪些模块需要已用时间。 | 在迭代子系统层次结构中,不要使用需要通过某种服务维护两次连续执行之间的已用时间的模块。 由于迭代子系统可在一个给定的时间步中执行多次,这样的两次执行之间的已用时间并没有明确定义。在迭代子系统内使用这些模块可能会导致意外行为。 |
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查模型设置以便迁移到简化初始化模式
注意
不要单独运行此检查。将此检查与迁移到简化初始化模式概述中的其他检查一起运行。
检查 ID:mathworks.design.ModelLevelMessages
识别哪些 Model 模块和模型配置参数的设置可能会导致意外行为,并帮助您将模型迁移到简化初始化模式。
描述
R2008b 中引入了简化初始化模式,以提高仿真结果的一致性。有关详细信息,请参阅Simplified Initialization Mode和Classic Initialization Mode。
此模型顾问检查可以识别您模型中的模型配置参数和 Model 模块存在的问题,这些问题可能会在您迁移到简化初始化模式时产生问题。子检查的结果包含两种语句:Failed 和 Warning。Failed 语句标识必须手动解决才能将模型迁移到简化初始化模式的问题。Warning 语句标识迁移之后可能发生的问题或行为变化。
运行此模型顾问一致性检查之后,如果您点击浏览结果按钮,将只显示与非库链接模块有关的消息。
注意
由于这些更改很难撤消,因此在迁移到简化初始化模式之前,请选择文件 > 将还原点另存为以备份您的模型。
有关详细信息,请参阅模型配置参数:连接诊断。
结果和建议的操作
条件 | 建议的操作 |
---|---|
验证所有 Model 模块都在使用简化初始化模式。 | 将 Model 模块引用的模型迁移到简化初始化模式,然后迁移顶层模型。 |
验证简化初始化模式设置 | 将配置参数 > 欠定初始化检测设置为简化。 |
操作结果
点击修改设置将产生以下结果:
Model 参数被设置为简化
如果 Outport 模块的初始输出参数设置为空字符向量
[]
,则 SourceOfInitialOutputValue 参数被设置为输入信号。如果 Outport 具有空初始输出和可变大小信号,则初始输出设置为零。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查模型中的 S-Function
检查 ID:mathworks.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 具有离散状态,但 mdlOutputs 和 mdlUpdate 方法已合并。 | 分别定义 mdlOutputs 和 mdlUpdate 方法,且仅在 mdlUpdate 方法中修改离散状态。 |
当具有与状态类似的数据或多个采样时间时,S-Function 设置了 SS_OPTION_CAN_BE_CALLED_CONDITIONALLY 选项。 | 当 S-Function 具有状态类似的数据或多个采样时间时,请删除这些选项。 |
计算机上没有 MEX 编译器。 | 检查计算机上是否存在 MEX 编译器,或安装该编译器。 |
S-Function 在编译模型时遇到错误。 | 检查诊断查看器输出并重新编译模型。 |
检查驱动导数端口的非连续信号
检查 ID:mathworks.design.NonContSigDerivPort
识别驱动导数端口的非连续信号。
描述
驱动导数端口的非连续信号会导致求解器在每次信号值改变时进行重置,从而降低了仿真速度。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中存在驱动导数端口的非连续信号。 |
|
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
S-Function 的运行时诊断
检查 ID:mathworks.design.DiagnosticSFcn
在模型中存在 S-Function 模块的情况下检查数组边界和求解器的一致性。
描述
验证 S-Function 模块是否符合 Simulink 应用于内置模块的 ODE 求解器一致性规则。
结果和建议的操作
条件 | 建议的操作 |
---|---|
求解器数据不一致设置为无。 | 在“配置参数”对话框中,将求解器数据不一致设置为警告或错误。 |
超出数组边界设置为无。 | 在“配置参数”对话框中,将超出数组边界设置为警告或错误 |
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
标识模型中的单位不匹配
检查 ID:mathworks.design.UnitMismatches
识别模型中端口之间以及模型参量值和定义之间的单位不匹配实例。
描述
检查以下各项之间的单位不匹配实例:
模型中的端口
模型参量值和定义
要检测和报告模型参量出现不匹配单位的警告,必须将 Model 模块的仿真模式设置为普通模式。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现单位不匹配 | 更改其中一个不匹配的单位设置,使其与另一个端口的单位设置匹配。 |
另请参阅
标识模型中的自动单位转换
检查 ID:mathworks.design.AutoUnitConversions
识别模型中的自动单位转换实例。
描述
识别模型中的自动单位转换实例。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现自动单位转换 | 检查转换后的单位是否是模型所需要的单位。 |
另请参阅
标识模型中不允许的单位制
检查 ID:mathworks.design.DisallowedUnitSystems
标识模型中不允许使用的单位制实例。
描述
标识模型中不允许使用的单位制实例。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现不允许使用的单位制 | 选择符合配置的单位制的单位,或者选择其他单位制。有关详细信息,请参阅限制单位制。 |
另请参阅
标识模型中未定义的单位
检查 ID:mathworks.design.UndefinedUnits
识别模型中使用的未在单位数据库中定义的单位设定实例。
描述
识别模型中使用的未在单位数据库中定义的单位设定实例。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现未定义的单位 | 将单位更改为 Simulink 支持的单位。 |
另请参阅
识别模型中具有多义性的单位
检查 ID:mathworks.design.AmbiguousUnits
识别模型中具有多义性的单位设定实例,例如单位数据库中的重复单位名称。
描述
识别模型中具有多义性的单位设定实例,例如单位数据库中的重复单位名称。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现具有多义性的单位 | 您可以忽略警告,或使用格式 unit_system::unit_name 指定单位和对应的单位制。 |
另请参阅
检查模型是否存在模块升级问题
检查 ID:mathworks.design.Update
检查常见的模块升级问题。
描述
检查是否因使用 Simulink 软件的新版本而导致模型中的模块出现兼容性问题。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现存在兼容性问题的模块。 | 点击修改以解决检测到的模块问题。 |
检查 2 级 API S-Function 的更新状态。 | 考虑将 1 级 S-Function 替换为 2 级。 |
操作结果
点击修改,将来自旧版 Simulink 软件的模块替换为最新版本。
另请参阅
检查模型中是否存在需要编译时信息的模块升级问题
检查 ID:mathworks.design.UpdateRequireCompile
检查常见的模块升级问题。
描述
检查是否因升级到 Simulink 软件的新版本而导致模块出现兼容性问题。当模型处于编译模式时,有些模块升级需要收集信息或数据。对于此检查,模型被设置为已编译模式,然后检查升级。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中包含 Lookup Table 或 Lookup Table (2-D) 模块,并且某些模块为查找方法指定取最邻近的输入值或向上取输入值。 | 将 Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。不要对查找方法应用取最邻近的输入值或向上取输入值;请选择其他选项。 |
模型中包含 Lookup Table 或 Lookup Table (2-D) 模块,并且某些模块在插值期间先执行乘法。 | 将 Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。但是,由于 n-D Lookup Table 模块先执行除法,这种替换可能会导致结果中存在数值差异。 |
模型中包含 Lookup Table 或 Lookup Table (2-D) 模块。其中的某些模块指定内插-外插作为查找方法,但它们的输入和输出不是相同的浮点类型。 | 将 Lookup Table 模块和 Lookup Table (2-D) 模块替换为 n-D Lookup Table 模块。然后,更改进行模块替换的外插方法或端口数据类型。 |
模型中包含 Unit Delay 模块且采样时间设置为 | 将 Unit Delay 模块替换为 Memory 模块。 |
检查 Data Store Memory 模块的多任务
操作结果
点击修改,将来自旧版 Simulink 软件的模块替换为最新版本。
另请参阅
检查 SLX 文件压缩功能是否已关闭
检查 ID:mathworks.design.CheckSLXFileCompressionLevel
检查 SLX 文件压缩功能是否已关闭以减小 Git™ 存储库大小。
描述
检查 SLX 模型的压缩功能是否已关闭。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型、库或子系统以 SLX 格式保存。文件压缩功能已打开。 | 考虑关闭文件压缩功能以有还源代码管理下的存储。 |
功能和限制
您可以对签入 Git 源代码管理中的模型、库和子系统运行此检查。
另请参阅
检查模型或库是否保存在当前版本中
检查 ID:mathworks.design.CheckSavedInCurrentVersion
检查模型、库或子系统是否保存在当前版本的 Simulink 中。
描述
检查模型文件是否保存在当前 Simulink 版本中。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型、库或子系统未保存在当前版本的 Simulink 中。 | 考虑将模型文件保存到当前版本的 Simulink 中。 |
功能和限制
您可以对模型、库和子系统运行此检查。
提示
Projects 可以帮助您将工程中的所有模型和库保存到当前 Simulink 版本。请参阅Check for Compatibility Issues and Upgrade Simulink Models Using Project Upgrade。
另请参阅
检查模型中是否存在 SB2SL 模块
检查 ID:mathworks.simulink.SB2SL.Check
检查模型中没有过时的 SB2SL 模块。
描述
检查模型是否包含过时的 SB2SL 模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中包含过时的 SB2SL 模块 | 考虑将模型升级到最新 SB2SL 模块。 |
操作结果
点击更新 SB2SL 模块,将模块替换为最新版本。
另请参阅
检查 Model History 属性
检查 ID:mathworks.design.SLXModelProperties
检查是否有已编辑的模型历史记录属性
描述
检查模型中是否有已编辑的 Model History 属性值可用于源代码管理工具关键字代换。这种关键字代换与 SLX 文件格式不兼容。
在 MDL 文件格式中,您可以配置一些模型属性,以利用源代码管理工具关键字代换功能。如果您的模型以 SLX 格式保存,源代码管理工具将无法执行关键字代换。当您首次将 MDL 文件另存为 SLX 时,模型文件中来自此类关键字代换的信息将被缓存,而不会再次更新。模型中的“模型属性历史记录”窗格和 Model Info 模块从那时起将显示过时的信息。
结果和建议的操作
条件 | 建议的操作 |
---|---|
已编辑模型历史记录属性 | 手动或自动将属性重置为默认值。点击按钮进行重置,或者要检查并手动更改这些属性,请打开“模型属性”对话框并在“历史记录”窗格中查找。 |
功能和限制
您可以对库模型运行此项检查。
另请参阅
标识哪些 Model Info 模块可与外部源代码管理工具交互
检查 ID:mathworks.design.ModelInfoKeywordSubstitution
使用此检查查找哪些 Model Info 模块可由外部源代码管理工具通过关键字代换进行更改。
描述
此检查在 Model Info 模块中搜索用美元符号括起的字符向量,这些字符串可由外部源代码管理工具覆盖。如果使用第三方源代码管理工具关键字扩展,当您提交模型文件时,文件可能会损坏。关键字代换在 SLX 模型文件格式中不可用。
要与源代码管理工具进行更灵活的交互,请使用 Simulink 工程,而不是 Model Info 模块。请参阅 About Source Control with Projects。
结果和建议的操作
条件 | 建议的操作 |
---|---|
Model Info 模块中包含类似如下的字段: | 查看报告中的字段列表,然后从 Model Info 模块中删除关键字字符向量。 |
另请参阅
检查模型中是否存在可升级的 SerDes Toolbox 模块
检查 ID:mathworks.design.serdesUpgrades
列出在 SerDes Toolbox™ 的以前版本中保存的过时模块。
描述
此检查将搜索并列出可升级的 SerDes Toolbox 模块以与当前版本兼容。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现在旧版本的 SerDes Toolbox 中保存的模块。 | 点击升级 SerDes Toolbox 模块以升级 SerDes Toolbox 模块,使其与当前版本兼容。 |
操作结果
点击升级 SerDes Toolbox 模块会升级过时的 SerDes Toolbox 模块,使其与当前版本兼容。
另请参阅
Design and Simulate SerDes Systems (SerDes Toolbox)
检查模型中是否存在旧的三自由度或六自由度模块
检查 ID:mathworks.design.Aeroblks.CheckDOF
列出过时的三自由度和六自由度模块。
描述
此检查搜索来自 3.13 版 (R2014a) 之前的库中的三自由度和六自由度模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现使用旧版本三自由度或六自由度模块配置的模块。 | 点击替换三自由度和六自由度模块,将这些模块替换为最新版本。 |
操作结果
点击替换三自由度和六自由度模块,将这些模块替换为最新版本。
另请参阅
Equations of Motion (Aerospace Blockset)
检查模型中是否存在 Aerospace Blockset 导航模块
检查 ID:mathworks.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 或更高版本中,如果您以前没有求解过稳定状态条件,请立即保存模型。如果您以前求解过模型的稳定状态条件,请再次求解这些稳定状态条件,然后保存模型。 |
另请参阅
Three-axis Accelerometer (Aerospace Blockset)
Three-axis Gyroscope (Aerospace Blockset)
Three-axis Inertial Measurement Unit (Aerospace Blockset)
检查并更新库中的封装模块以使用提升的参数
检查 ID:mathworks.design.CheckAndUpdateOldMaskedBuiltinBlocks
检查哪些库应该更新,以使用提升的参数。
描述
此检查在 R2011b 之前创建的库中搜索需要更新才能使用提升的参数的封装模块。从 R2011b 开始,如果某个模块参数未提升,它在链接模块中的值将被锁定为它在库模块中的值。此检查不包括 Subsystem、Model reference、S-Function 和 M-S-Function 类型的模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现需要更新的库 | 点击更新。更新库之后,再次运行此检查。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查和更新具有不必要的 imread()
函数调用的掩膜图像显示命令
检查 ID:mathworks.design.CheckMaskDisplayImageFormat
此检查标识将图像显示命令用于不必要的 imread()
函数调用的封装。
描述
此检查搜索对 imread()
函数进行不必要调用的封装显示命令,并将它们更新为不调用 imread()
函数的封装显示命令。从 2013a 开始,对于使用图像路径而不是 RGB 三元组矩阵指定的掩膜图像,可以进行性能优化和内存优化。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现对 imread() 函数进行不必要调用的封装显示命令。 | 点击更新。更新模块之后,再次运行此检查。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
检查并更新封装以确认图标绘制命令是否依赖于封装工作区
检查 ID:mathworks.design.CheckMaskRunInitFlag
此检查可识别封装图标绘制命令是否与封装工作区存在依存关系。
描述
此检查可识别封装图标绘制命令是否与封装工作区存在依存关系,并相应地更新 RunInitForIconRedraw
属性。如果不存在封装工作区依存关系,则将 RunInitForIconRedraw
的值设置为 off
;如果存在封装工作区依存关系,则将该值设置为 on
。
当不存在封装工作区依存关系时,将 RunInitForIconRedraw
的值设置为 off
将不会在绘制模块图标之前执行封装初始化代码,从而可以优化性能。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现依赖或独立于封装工作区的封装绘制命令。 | 点击更新。更新模块之后,再次运行此检查。 |
功能和限制
您可以:
对您的库模型运行此检查。
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
Model Advisor Exclusion Overview (Simulink Check)
标识哪些封装模块使用 MaskTabNames
参数指定了封装对话框中的选项卡
检查 ID:mathworks.design.CheckAndUpdateOldMaskTabnames
此检查识别哪些封装模块在封装对话框中使用 MaskTabNames
参数指定选项卡。
描述
此检查识别哪些封装模块使用 MaskTabNames
参数以编程方式在封装对话框中创建选项卡。自 R2013b 开始,使用对话框控件来组织封装对话框选项卡上的参数。
结果和建议的操作
条件 | 建议的操作 |
---|---|
找到以编程方式使用 MaskTabNames 参数在封装对话框中创建选项卡的封装模块。 | 点击动作部分的升级。更新模块之后,再次运行此检查。 |
功能和限制
您可以对库模型运行此项检查。
另请参阅
标识对于严格的单精度设计来说不可靠的运算
检查 ID:mathworks.design.StowawayDoubles
对于严格的单精度设计,此检查识别哪些模块引入了双精度运算和非最佳模型设置。
描述
对于严格的单精度设计,此检查识别哪些模块引入了双精度运算和非最佳模型设置。
结果和建议的操作
条件 | 建议的操作 |
---|---|
在模型中发现双精度浮点运算。 | 验证:
|
模型使用了对严格单精度设计来说不是最佳选择的库标准。 | 验证:
|
逻辑信号未以布尔值数据的形式实现。 | 验证:
|
功能和限制
如果您拥有 Simulink Check 许可证,可以在此检查中排除模块和图。
另请参阅
检查对模块 CompiledSampleTime
的 get_param
调用
检查 ID:mathworks.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
对象返回
检查 ID:mathworks.design.CheckSingleSimulationOutput
使用此检查来确定仿真结果是否作为单个 Simulink.SimulationOutput
对象返回。
描述
此检查会扫描您的模型,以验证参数 ReturnWorkspaceOutputs
是否已启用。启用此参数后,以交互方式进行仿真时将以 Simulink.SimulationOutput
形式返回仿真输出。仿真输出包括信号、状态、输出、DSM 记录、波形记录以及 To Workspace
模块记录。
启用 ReturnWorkspaceOutputs
时,它支持:
更轻松地管理仿真数据。
自动访问
SimulationMetadata
。兼容多种并行仿真和批量仿真。
结果和建议的操作
条件 | 建议的操作 |
---|---|
仿真输出不会作为单个 Simulink.SimulationOutput 对象返回 | 将所有仿真输出作为单个 |
另请参阅
检查模型的参数初始化和调整问题
检查 ID:mathworks.design.ParameterTuning
使用此检查识别初始化或调整参数时模型中发生的问题。
描述
此检查扫描您模型中的参数初始化和调整问题,例如:
模块之间的速率不匹配
条件执行子系统中存在除以零的问题
Index Vector 模块中的控制端口值无效
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型存在速率转移问题。 | 在模型配置参数的求解器窗格中选择自动处理数据传输的速率转换。 |
模型有一个具有控制端口的条件执行子系统存在除以零的问题。 | 在命令提示符下,运行 set_param(control_port,'DisallowConstTsAndPrmTs', 'on') |
模型有一个条件执行子系统中存在无效的控制端口值。 | 在命令提示符下,运行 set_param(control_port,'DisallowConstTsAndPrmTs', 'on') |
操作结果
选择升级模型,以解决模型中与参数初始化和调整有关的问题。
另请参阅
检查跨模型引用边界的虚拟总线
检查 ID:mathworks.design.CheckVirtualBusAcrossModelReference
检查跨模块引用边界的虚拟总线信号。
描述
此检查标识引用模型中的哪些根级 Inport 和 Outport 模块以及哪些 Model 模块的虚拟总线输出需要更新,以更改为非虚拟总线信号。
如果检查发现问题,请在以下情况下点击更新模型,将为虚拟总线配置的根级 Inport 和 Outport 模块更新为使用非虚拟总线:
对于根级 Inport 模块 - 启用以非虚拟总线输出参数并在 Inport 模块后插入一个 Signal Conversion 模块。Signal Conversion 模块配置为输出虚拟总线。
对于根级 Outport 模块 - 启用在父模型中以非虚拟总线输出参数。
对于 Model 模块 - 对于为了解决问题而更新其 Outport 模块的端口,在 Model 模块的对应端口后插入一个 Signal Conversion 模块。Signal Conversion 模块配置为输出虚拟总线。
建议的操作和结果
要解决问题,请点击升级模型。
注意
对顶层模型运行分析模型层次结构并继续升级序列检查,然后向下对整个模型引用层次结构运行此检查。
如果您的模型符合以下条件,请点击升级模型,将为虚拟总线配置的受到影响的根级 Inport 和 Outport 模块转换为使用非虚拟总线:
使用函数原型控制
使用 I/O 参量单步方法选项执行 C++ 代码生成。
您也可以将 C++ 代码生成函数设定设置更改为默认单步方法:
在配置参数 > 代码生成 > 接口窗格中,点击配置 C++ 类接口。
在该对话框中,将函数设定参数设置为默认单步方法。
使用具有可变维度信号的总线
对 Outport 模块信号使用关联的非自动存储类
非自动存储类的转换仅在您拥有模型所需的目标生成许可证时才会发生。例如,ERT 目标需要 Embedded Coder 许可证。
使用由非虚拟总线驱动 Outport 模块的导出函数模型
具有 Model 模块并且这些模块引用包含已修复 Outport 模块的模型 - 点击升级模型将更新引用以下模型的 Model 模块:这些模型通过分析模型层次结构并继续升级序列检查修复了 Outport 模块。
另请参阅
检查模型中是否存在以来信号的帧状态的自定义库模块
检查 ID:mathworks.design.DSPFrameUpgrade
此检查识别模型中哪些自定义库模块依赖于信号的帧状态。
描述
此检查搜索模型中哪些自定义库模块依赖于信号的帧状态。此检查分析模块、提出修复建议并给出修复的原因。您必须手动进行修复。
结果和建议的操作
条件 | 建议的操作 |
---|---|
检查发现依赖于信号帧状态的自定义库模块。 | 按照升级顾问的建议进行操作。 |
功能和限制
您只能对模型中的自定义库模块运行此检查。
您必须手动进行修复。
仅当您安装了 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 ( | 使用最新标志 ( |
S-Function 使用 32 位函数。 | 根据 MEX File Calls A 32-bit Function中的说明修改您的代码。 |
S-Function 使用的是已弃用的分离式复矩阵 API | 使用交错式复矩阵 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 生成一份报告。请使用更新更新语法。 |
另请参阅
检查快速加速信号记录
检查 ID:mathworks.design.CheckRapidAcceleratorSignalLogging
在快速加速模式下进行模型仿真时,使用此检查查找模型中记录的被全局禁用的信号。快速加速模式支持信号记录。使用此检查启用全局信号记录。
描述
此检查扫描您的模型,以查看仿真是否处于快速加速模式,以及模型中是否包含启用了信号记录的信号。如果检查发现这种情况并且信号记录已被全局禁用,将显示全局启用信号记录的选项。
结果和建议的操作
条件 | 建议的操作 |
---|---|
仿真模式不是快速加速。 | 无。您可以在快速加速模式中启用信号记录。 |
仿真模式为快速加速。升级顾问未发现启用了信号记录的信号。 | 无。模型不使用信号记录。如果您要记录信号,请为信号启用全局记录。 |
仿真模式为快速加速。升级顾问发现启用了信号记录的信号。但是,全局信号记录设置被禁用。 | 如果您要通过启用信号记录来记录信号,请启用全局信号记录。 |
已启用全局信号记录。 | 无。 |
操作结果
选择修改将在您的模型中启用全局信号记录。
另请参阅
检查模块的虚拟总线输入
检查 ID:mathworks.design.VirtualBusUsage
检查一组模块的总线输入信号。
描述
检查一组模块的总线输入信号。
从 R2015b 开始,如果为需要非总线或非虚拟总线输入信号的模块提供虚拟总线信号输入,可能会导致错误。可以指定总线对象作为输出数据类型的模块示例包括 Bus Creator 模块和根 Inport 模块。在这种情况下具有虚拟总线输入会导致错误的模块包括:
Assignment
Delay
仅当使用“模块参数”对话框执行以下操作时,Delay 模块才会导致错误:
设置的初始条件是 MATLAB 结构体或零。
为状态名称指定值。
Permute Dimension
Reshape
Selector
Unit Delay
仅当使用“模块参数”对话框执行以下操作时,Unit Delay 模块才会导致错误:
设置的初始条件是 MATLAB 结构体或零。
为状态名称指定值。
Vector Concatenate
结果和建议的操作
条件 | 建议的操作 |
---|---|
以下模块具有虚拟总线信号输入:
| 在升级顾问中,点击修改。 此检查将插入一个 Bus to Vector 模块,尝试将虚拟总线输入信号转换为向量信号。对于升级顾问能识别但无法修复的问题,请手动修改模型。有关详细信息,请参阅Identify Automatic Bus Conversions。 |
操作结果
点击修改将在模块的输入端口处插入一个 Bus to Vector 模块。
对许多模型而言,运行升级顾问将修改模型,使其不会将总线信号视为向量。但对有些模型而言,即使在运行检查后也可能会遇到兼容性问题。在这种情况下,您需要手动修改模型以解决这些问题。
使用升级顾问编译模型后,即使您没有对模型进行任何更改,Simulink 编辑器有时也会提醒您需要保存模型(模型是脏的)。为防止模型再次出现此问题,请保存模型。
建模模式 | 问题 | 解决方法 |
---|---|---|
Data Store Memory 模块的数据类型设置为 Inherit: auto | 关联的 Data Store Read 或 Data Store Write 模块读取或写入总线信号数据的 Data Store Memory 模块必须使用总线对象。 | 在 Data Store Memory 模块中,将数据类型信号属性设置为 Bus: <BusObject>。 |
Signal Conversion 模块的输出参数与输入总线类型匹配 | 输出参数设置为非虚拟总线的 Signal Conversion 模块需要虚拟总线输入。 输出参数设置为虚拟总线的 Signal Conversion 模块需要非虚拟总线输入。 | 要创建输入信号的副本,请将输出设置为信号副本。 |
Merge、Switch 或 Multiport Switch 模块具有多个总线输入 | 具有多个总线输入的 Merge、Switch 或 Multiport Switch 模块要求这些输入具有相同的名称和层次结构。 | 重新配置模型,使总线输入具有相同的名称和层次结构。 |
根 Inport 模块输出虚拟总线并指定端口维度的值 | 输出到虚拟总线的根 Inport 模块必须继承维度。 | 将 Inport 模块的端口维度信号属性设置为 1 或 -1 (继承)。 |
Mux 模块具有非虚拟总线输入 | Mux 模块不能接受非虚拟总线信号。 | 要将输出视为数组,请将 Mux 模块替换为 Vector Concatenate 模块。 如果您需要虚拟总线输出,请使用 Bus Creator 模块来组合信号。 |
Bus to Vector 模块没有虚拟总线信号输入 | 非总线信号不需要 Bus to Vector 模块。 | 移除 Bus to Vector 模块。 |
Assignment 模块具有虚拟总线输入 | 升级顾问将 Assignment 模块 | 在 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 模块中,将数据类型设置为 |
另请参阅
检查具有固定采样时间的根 Outport 模块
检查 ID:mathworks.design.CheckConstRootOutportWithInterfaceUpgrade
使用此检查识别哪些根 Outport 模块对 AUTOSAR 目标、函数原型控制或模型 C++ 类接口使用固定采样时间。
描述
使用 AUTOSAR 目标、函数原型控制或模型 C++ 类接口时,不支持具有固定采样时间的根 Outport 模块。使用此检查识别存在这种情况的根 Outport 模块,并根据建议修改模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
具有固定采样时间的根 Outport 模块与 AUTOSAR 目标、函数原型控制或模型 C++ 类接口一起使用。 | 考虑以下项之一:
|
另请参阅
分析模型层次结构并继续升级序列
检查 ID:com.mathworks.Simulink.UpgradeAdvisor.UpgradeModelHierarchy
检查子模型并指导您完成升级检查。
描述
此检查识别此模型的子模型,并指导您完成升级检查以运行非编译和编译检查。Advisor 提供了帮助您完成以下任务的工具:
如果检查发现子模型,它将按顺序为每个子模型运行升级顾问,然后继续升级序列。如果您有一个模型层次结构,您需要检查并依次更新每个子模型。
如果没有任何子模型,您仍然需要继续检查序列,直到您运行完非编译和编译检查。
您必须按以下顺序运行升级检查:首先运行不需要编译时间信息并且不触发 Update Diagram 的检查,然后运行编译检查。
点击继续升级序列以运行后面的检查。如果有子模型,将打开下一个模型。继续点击继续升级序列直到检查通过。
结果和建议的操作
条件 | 建议的操作 |
---|---|
发现子模型 | 点击继续升级序列以运行后面的检查。如果有子模型,此操作将关闭当前升级顾问会话,并针对层次结构中的下一个模型打开升级顾问。 |
无子模型,但要运行更多检查 | 如果没有任何子模型,请点击继续升级序列以在选中编译检查的状态下刷新升级顾问。编译检查触发 Update Diagram(标记为 ^ )。运行后面的检查并采取建议的操作。当您返回到此检查时,点击继续升级序列直到此检查通过。 |
提示
升级模型层次结构的最佳做法是从叶端开始检查并升级每个模型,一直到根模型为止。
当您点击继续升级序列时,升级顾问将打开层次结构内它能找到的最远的叶模型。后续步骤将指导您完成从叶模型到根模型的升级层次结构的过程。
当您打开升级顾问时,已选中的检查不需要编译时间信息,并且不会触发 Update Diagram。触发 Update Diagram 的检查在默认情况下未被选中以运行,并且标记为 ^
。当您对某个层次结构使用升级顾问时,连续点击继续升级序列可在以下分析序列中逐项进行:
升级顾问从叶到根依次打开每个模型和库,并选择非编译检查。运行检查,执行任何建议的操作,然后点击继续升级序列打开下一个模型并继续。
当您到达层次结构的根端时,升级顾问将再次按同样的顺序打开每个模型(但不打开库),并只选择需要模型编译的检查。运行检查,执行任何建议的操作,然后点击继续升级序列打开下一个模型。继续进行,直到您到达层次结构的末端并通过此检查。
另请参阅
检查对数据存储的访问
检查 ID:mathworks.design.ConflictsForDataStoreReadWriters
读取和写入数据存储时识别潜在的执行顺序敏感性。
描述
读取和写入同一数据存储的模块的执行顺序可以改变仿真结果。当位于同一个层次结构中的模块访问同一个数据存储时,执行顺序不是决定性的。
结果和建议的操作
条件 | 建议的操作 |
---|---|
Data Store Memory 模块被同一个层次结构中的多个模块访问。 | 要强制模块的执行顺序,可以考虑以下设置:
|
另请参阅
检查 Data Store Read 和 Data Store Write 模块的相对执行顺序
检查 ID:mathworks.design.TaskBasedSorting
检查 Data Store Read 和 Data Store Write 模块的传统排序和基于任务的排序之间的相对执行顺序更改。
描述
传统模型使用模块排序来确定模块执行顺序。使用基于任务的排序时,涉及 Data Store Memory 模块的相对执行顺序可能会发生变化。此检查会检测变化,并提供用原始执行顺序更新模型的选项。
结果和建议的操作
条件 | 建议的操作 |
---|---|
包含 Data Store Memory 模块的执行顺序发生变化。您需要原始执行顺序。 | 点击修改按钮。 |
另请参阅
检查对模型和库的引用中出现的大小写不匹配情况
检查 ID:mathworks.design.CaseSensitiveBlockDiagramNames
识别并修复对模型和库的不区分大小写的引用。
描述
从 R2020a 开始,Simulink 模型和库名称区分大小写。此检查检测并提供选项来修复对模型和库的不区分大小写的引用。
结果和建议的操作
条件 | 建议的操作 |
---|---|
该检查在对模型和库的引用中发现大小写不匹配的情况。 | 按照升级顾问的建议进行操作。 |
另请参阅
检查 Signal Builder 模块的模型
检查 ID:mathworks.design.Sigbldr.upgradeCheck
在模型中搜索 Signal Builder 模块。
描述
在模型中找到 Signal Builder 模块,并用等效配置的 Signal Editor 模块替换它们。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型包含一个或多个 Signal Builder 模块。 | 要用等效的 Signal Editor 模块替换所有 Signal Builder 模块,请点击相关联链接。 |
另请参阅
检查 MATLAB Function 模块的输出维度
检查 ID:mathworks.simulink.MLFBOutputDimensions
检查列出所有启用了将输出列向量解释为一维数据属性的 MATLAB Function 模块。如果启用该属性,该模块会将大小为 N×1 的输出列向量转换为信号大小等于 N 的一维信号。
结果和建议的操作
条件 | 建议的操作 |
---|---|
MATLAB Function 模块启用了属性并生成一维输出数据 | 点击进行修复按钮不会禁用 MATLAB function 模块的属性。要禁用该属性,请执行以下操作:
检查模型的仿真行为,因为禁用该属性会更改 MATLAB function 模块的大小传播。 |
MATLAB Function 模块启用了属性但不生成一维数据 | 点击进行修复按钮以禁用 MATLAB function 模块的该属性。 |
另请参阅
检查模型中是否存在使用带断开连接的威尔金森功率分配器组件的 RF Blockset Divider 模块
检查 ID:mathworks.design.rfblockset.ce.checkDisconnectedDividerBlocks
搜索模型,并列出使用在端口 3 上端口连接断开的威尔金森功率分配器组件的 RF Blockset™ Divider 模块。
描述
从 R2021a 开始,使用威尔金森功率分配器组件的 RF Blockset Divider 模块的端口位置发生变化。此检查搜索并列出在 R2021a 之前使用在端口 3 上端口连接断开的威尔金森功率分配器组件的模型 Divider 模块。然后,您可以使用 Modify 按钮重新连接。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型包含的 RF Blockset Divider 模块使用在端口 3 上端口连接断开的威尔金森功率分配器组件。 | 点击修改按钮,以重新连接在 RF Blockset Divider 模块的端口 3 上断开的连接。 |
操作结果
点击修改会重新连接在 RF Blockset Divider 模块的端口 3 上断开的端口连接。
注意
修改按钮将尝试在模型中自动重新连接在使用威尔金森功率分配器组件的 Divider 模块的端口 3 上所有断开的连接。为了确保准确度,您必须随后:
检查升级顾问的结果窗格下列出的详细信息。
第一个列表枚举因模型复杂度而需要手动重新连接的使用威尔金森功率分配器组件的 RF Blockset Divider 模块。
第二个列表枚举自动重新连接的模块。
固定和不固定的 Divider 模块分别以绿色和红色临时突出显示。点击结果窗格底部的删除所有临时模块的突出显示链接以取消突出显示。
另请参阅
标识 Environment Controller 模块并用 Variant Source 模块替换它们
检查 ID:mathworks.design.ReplaceEnvironmentControllerBlk
在模型中搜索 Environment Controller 模块。
描述
在模型中找到 Environment Controller 模块,并使用变体控制项模式参数设置为 'sim codegen switching'
的 Variant Source 模块替换它们。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型包含一个或多个 Environment Controller 模块。 | 将 Environment Controller 模块替换为变体控制项模式参数设置为 'sim codegen switching' 的 Variant Source 模块。 |
功能和限制
您可以对库模型运行此项检查。
您无法使用此检查来标识引用模型和链接模块中的 Environment Controller 模块。
另请参阅
标识 VariantActivation 设置为从 Simulink.VariantControl 继承但不使用 Simulink.VariantControl
的变体模块
检查 ID:mathworks.simulink.InheritVATFromSlVarCtrlCheck
标识模型中没有 Simulink.VariantControl
类型的变体控制项变量以继承激活时间的变体模块。
描述
标识变体激活时间设置为从 Simulink.VariantControl 继承但没有 Simulink.VariantControl
类型的变体控制项变量的变体模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
激活时间为从 Simulink.VariantControl 继承的变体模块没有 Simulink.VariantControl 类型的变体控制项变量。 | 将至少一个变体控制项变量的类型更改为 Simulink.VariantControl 。 |
功能和限制
您可以对库模型运行此项检查。
另请参阅
检查是否存在状态机级数据
检查 ID:mathworks.stateflow.MachineParentedData.check
检查模型中是否存在状态机级数据的实例。
描述
状态机级数据会阻止模型重用生成的代码和其他代码优化。状态机级数据也与许多 Simulink 及 Stateflow 功能不兼容。要使模型中的其他图和模块能够访问 Stateflow 数据,请使用数据存储内存作用域的图级数据。有关详细信息,请参阅Access Data Store Memory from a Chart (Stateflow)。
注意
从 R2023a 开始,Stateflow 图不再支持状态机级数据。请使用升级顾问将状态机级数据转换为图级数据存储内存。有关详细信息,请参阅Upgrade Models Using Upgrade Advisor和检查是否存在状态机级数据。
结果和建议的操作
条件 | 建议的操作 |
---|---|
Simulink 模型包含 Stateflow 状态机级数据。 | 通过将状态机级数据转换为将值存储在模型工作区中的图级数据来升级模型。 |
操作结果
点击升级模型会在使用状态机级数据的图中创建图级数据。
如果状态机级数据对象具有参数作用域,则新的图级数据对象具有参数作用域。该值作为
Simulink.Parameter
对象存储在模型工作区中。如果状态机级数据对象具有任何其他作用域,则新的图级数据对象具有数据存储内存作用域。该值作为
Simulink.Signal
对象存储在模型工作区中。
功能和限制
在以下情况下,自动转换会失败:
模型工作区包含与状态机级数据同名的
Simulink.Parameter
或Simulink.Signal
对象。模型包含与状态机级数据同名的图级数据、事件或消息。
状态机级数据使用 Stateflow 语义,这些语义对于
Simulink.Parameter
或Simulink.Signal
对象没有等效项。
提示
如果模型包含从一个库中链接的库图或原子子图,则在升级该库之前,必须升级使用该库的每个模型。
打开并升级使用该库的每个顶层模型。
升级顶层模型会在模型工作区中为库中每个状态机级数据创建一个
Simulink.Parameter
或Simulink.Signal
对象。保存并关闭顶层模型。
打开并升级库模型。
升级库模型会创建用于替换库中状态机级数据的图级数据。
保存并关闭库模型。
另请参阅
与 Simulink 和 MATLAB 工作区共享参数 (Stateflow)
Access Data Store Memory from a Chart (Stateflow)
使用图中数据的最佳做法 (Stateflow)
标识来自链接库的克隆
检查 ID:mathworks.cloneDetection.libraryEdittime
标识模型中来自链接库文件的克隆。
描述
克隆是具有相同模块类型和连接的建模模式。克隆件检测器 (Simulink Check) 标识整个模型中的克隆。通过标识克隆模式并用指向库模块的链接替换克隆,您可以在模型中重用组件。
此检查突出显示模型中存在的来自链接库的克隆。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型包含来自链接库的一个克隆模式。 | 将克隆替换为指向克隆检测器中库文件的链接。 |
功能
您可以运行此检查来实现以下目的:
突出显示来自链接库的精确克隆和相似克隆。有关详细信息,请参阅Exact Clones and Similar Clones (Simulink Check)。
突出显示子系统克隆和模型中来自链接库的克隆。有关详细信息,请参阅Specify Where to Detect Clones (Simulink Check)。
限制
该检查无法标识模型中的变体和 Stateflow 图中的克隆。
如果子系统包含两层以上的嵌套子系统,则该检查不会突出显示克隆。
如果替换模型中的克隆,将无法撤消更改。
操作结果
点击修复按钮打开克隆检测器。点击替换克隆,这会将克隆替换为指向链接库文件的链接。
另请参阅
Enable Component Reuse by Using Clone Detection (Simulink Check)
Replace Exact Clones with Subsystem Reference (Simulink Check)
将 Bus Selector 和 Bus Creator 模块重构为 In Bus Element 和 Out Bus Element 模块
检查 ID:mathworks.m2m_edittime.BusPortsXform
将 Bus Selector 和 Bus Creator 模块重构为 In Bus Element 和 Out Bus Element 模块。
描述
为了简化您的模型,推荐使用 In Bus Element 和 Out Bus Element 模块,而不是将 Bus Selector 模块用于输入,将 Bus Creator 模块用于输出。有关详细信息,请参阅Simplify Subsystem and Model Interfaces with Bus Element Ports。
此检查突出显示模型中的 Bus Selector 和 Bus Creator 模块,您可以将这些模块变换为 In Bus Element 和 Out Bus Element 模块。
结果和建议的操作
条件 | 建议的操作 |
---|---|
模型中包含 Bus Selector 和 Bus Creator 模块。 | 将 Bus Selector 和 Bus Creator 模块替换为 In Bus Element 和 Out Bus Element 模块。 |
功能和限制
您可以通过点击模型顾问中的修复按钮来重构模型。
变换模型后无法撤消更改。
操作结果
修复按钮通过将合适的 Bus Selector 和 Bus Creator 模块替换为 In Bus Element 和 Out Bus Element 模块来变换模型。
另请参阅
克隆检测和模型重构
使用“克隆检测和模型重构”检查来提高模型组件化、可读性,并支持重用。如果您有 Simulink Check 许可证,则可以使用编辑时检查来识别从关联的库文件的克隆,并在模型开发过程中将 Bus Selector 和 Bus Creator 模块重构为 In Bus Element 和 Out Bus Element 模块。
另请参阅
检查是否满足用于创建导出函数模型的模型设置
检查 ID:mathworks.design.CheckExpFcnMdlSpecification
检查建模风格和执行域设置是否都符合导出函数模型设计需求。
有关详细信息,请参阅Designate Model as Export-Function Model and Satisfy Export-Function Model Requirements。
描述
当您创建导出函数模型时,此检查会搜索属性检查器选项卡上的执行域设置与建模风格之间的任何不匹配。
结果和建议的操作
条件 | 建议的操作 |
---|---|
在 Property Inspector选项卡上,执行域设置为导出函数,但建模风格不满足导出函数模型设计需求。 | 检查失败。请考虑更改建模风格以满足导出函数模型设计需求。有关详细信息,请参阅Designate Model as Export-Function Model and Satisfy Export-Function Model Requirements。 但是,如果您需要保留当前建模风格,请取消选中属性检查器上的导出函数选项。 |
建模风格指示一个导出函数模型,但执行域未设置为导出函数。 | 检查失败。在 Property Inspector选项卡上,转至执行选项卡。选择设置执行域参数,并从域列表中选择导出函数。 |