SuperAPI AI 工具集

simulink-check-rapid-accelerator-compatibility

编程与开发

查看项目

更新于 10-16 22:14

技能介绍

用途

该技能用于对 Simulink 模型进行静态分析,检查其是否与 Rapid Accelerator(raccel)模式兼容。它以一次性扫描的方式找出所有 raccel 不兼容项,而不需要反复进行构建失败再修复的循环。

适用场景:用户希望以 Rapid Accelerator 模式仿真模型;buildRapidAcceleratorTarget 因错误失败;用户询问模型为何无法在 raccel 下运行。

不适用场景:模型仅计划使用 Normal 或 Accelerator 模式(应改用 simulating-simulink-models);用户调试运行时错误(模型构建正常但崩溃)——但如果模型在 raccel 中崩溃,仍可运行此检查,因为根本原因可能是静态不兼容;纯编译器/工具链问题(非模型内容);针对 GRT/ERT 目标的通用代码生成(非 raccel 专用);Model Advisor 检查(独立工作流);SIL/PIL/HIL 或 Simulink Real-Time 部署。

主要能力

静态检测所有不兼容项:通过解析模型结构、模块参数、数据类型和配置,无需调用 buildRapidAcceleratorTarget,一次性发现所有问题。

识别的不兼容模块类型包括:MATLABFcn(BLOCKER,Simulink Coder 不支持)、M-S-Function(需调查 TLC)、S-Function(需调查 MEX/源代码/TLC)、FromWorkspace(需调查 Interpolate 与 OutDataTypeStr)、ToFile(需调查文件名与模型名)、FromSpreadsheet、DataStoreMemory(需检查 >64 位定点数据类型)、TransportDelay(检查是否位于 ForEach 子系统内)、ModelReference(检查是否位于 ForEach 并行执行内)。

不标记为不兼容的模块:MATLABFunction(基于 Stateflow,支持代码生成)、MATLABSystem、独立 ModelReference、SubSystem、Scope/Display(查看器模块)、RateTransition、Dashboard 模块(UI 类,代码生成时忽略)。

配置参数检查:SaveFormat='Dataset' 且 SaveState='on'(WARNING,Dataset 状态记录不受支持);SaveOperatingPoint='on' 配合 DataStoreMemory/FromSpreadsheet 模块(WARNING);LoadInitialState='on'(WARNING);LoadExternalInput='on'(需检查输入格式);ArrayLayout='Row-major' 配合 S-Function(WARNING)。

SaveFormat 与 SaveState 交叉校验:由于 model_query_params 可能返回缓存的 SaveState 值,当 SaveFormat='Dataset' 时,必须用 get_param('ModelName', 'SaveState') 直接验证,若为 'on' 则标记为 WARNING(DatasetRapidAccelNoSupported),这是最常被遗漏的不兼容项。

FromWorkspace 规则:当 Interpolate='on' 且 OutDataTypeStr 包含 int64 或 uint64 时标记为 BLOCKER。ToFile 规则:当文件名(不含扩展名)与模型名匹配时标记为 BLOCKER,会导致 rapidAccelBuildFailed。

深度分析(raccel_deep_analysis):调用 MATLAB 运行时 API,检查 S-Function 的 TLC/源文件存在性、模型编译以解析数据类型(半精度、可变大小、>64 位定点)、Stateflow 信号记录、ForEach 结构模式、Bus 元素无界动态数组、S-Function 总线 I/O 结构填充、TransportDelay 位于 ForEach 内、ToFile 配合 SaveOperatingPoint、ModelReference 位于 ForEach 内,以及 Profile 和 RTWInlineParameters 参数。输出以 BLOCKER: 或 WARNING: 前缀行打印到 stdout。

验证构建(raccel_verify_build):构建 rapid accelerator 目标并报告成功或详细失败信息,需要 Simulink Coder。返回结构体包含 status、identifier、message、causes 字段。

使用方式

所有脚本函数位于技能的 scripts/ 目录。通过 evaluate_matlab_code 调用,project_path 设为技能的 scripts/ 文件夹,以便 MATLAB 找到这些函数。切勿使用 addpath。

诊断工作流分为两个阶段。第一阶段(步骤 1–3a)生成兼容性报告,响应必须在此结束。第二阶段(步骤 3b–3c)逐一应用修复,每次都需要单独的用户确认,不得在同一响应中合并两个阶段。

步骤 1:静态检查(主要使用 MCP 工具)。并行收集模型信息:1a 通过 model_read 读取模块拓扑,例如 model_read(model: "ModelName", scope: "root", depth: "inf"),从输出中标记特定 BlockType。1b 通过 model_query_params 查询配置参数。1c 对标记的模块查询模块级参数。

步骤 2:深度分析(需要 evaluate_matlab_code)。对步骤 1 中发现的模块运行相关检查,调用 raccel_deep_analysis('ModelName')。

步骤 3:报告与迭代修复。3a 按优先级顺序呈现包含所有发现的兼容性报告,若无 BLOCKER 则模型兼容,跳过至步骤 4。响应在此结束,不保存备份、不提出修复、不调用 model_edit 或修改模型。结尾需说明将在更改前保存备份,并询问是否逐一修复。3b 在用户确认后备份原始模型,使用 copyfile(get_param('ModelName','FileName'), 'ModelName_raccel_backup.slx'),而非 save_system 的第二个参数(会重命名内存中的模型)。3c 逐一修复问题,每次修复必须获得用户单独确认,修复后重新运行静态分析验证。

步骤 4:验证构建(需要用户许可)。所有静态问题解决后,询问是否运行 buildRapidAcceleratorTarget 确认构建,通过 raccel_verify_build('ModelName') 执行。构建成功后询问是否保留或删除备份。

适用场景

适合需要在 Rapid Accelerator 模式下仿真 Simulink 模型,并希望提前发现和修复不兼容问题的用户。静态分析(步骤 1-3)使用模型编译,仅需 Simulink;验证构建步骤(步骤 4)调用 buildRapidAcceleratorTarget,需要 Simulink Coder。

限制

静态分析优于基于构建的检测:一次性报告所有问题(buildRapidAcceleratorTarget 仅报告第一个致命错误后停止)、速度更快(静态分析几秒,每次构建 10-60+ 秒)、不产生代码生成产物(无 slprj 文件夹)。当静态分析报告无问题但构建仍失败,或遇到目录未覆盖的复杂 S-Function 交互时,回退到构建方式。

护栏要求:绝不自动修复,兼容性报告与首次 model_edit 调用绝不可出现在同一响应中,即使用户说“修复一切”也不例外。首次修复前始终保存备份并附还原说明。绝不删除用户逻辑,只更改配置或用功能等价物替换不兼容模块。应用更改前始终解释原因。重构时保留信号名和记录。一次修复一个问题,应用、验证后再继续。替换模块类型时使用 replace_block 而非 delete+add 以保留连接。构建前检查工作目录,不得位于 matlabroot 内。

参考资料:references/incompatibility-catalog.md 列出全部 13 类不兼容项及其诊断错误 ID、严重性分类和修复指引;references/fix-recipes.md 提供修复流程和经过验证的替代模块。

版权 2026 The MathWorks, Inc.