mcpField
S
simulink-single-precision-conversion

simulink-single-precision-conversion

github.com/matlab开发1.3k40 次安装1 周前更新
代码仓库

关于 simulink-single-precision-conversion

此技能使用 Fixed-Point Designer 将已加载 Simulink 模型或子系统中的双精度数据类型转换为单精度,并检查兼容性、验证残留双精度运算及汇报结果;不会保存模型。

主要功能

  1. 01将符合条件的类型转为单精度
  2. 02转换前检查兼容性
  3. 03验证残留双精度运算
  4. 04汇报转换与内存结果
  5. 05保留未保存的模型基线

适用场景

  1. 01将 Simulink 模型转换为单精度
  2. 02降低嵌入式硬件的内存用量
  3. 03执行批量转换或 CI 检查
  4. 04查看兼容性与转换结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/simulink-agentic-toolkit --skill simulink-single-precision-conversion

安装后在 Claude Code 中输入/simulink-single-precision-conversion确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

manifest.yaml
references/
edge-cases.md
reporting-format.md

详细介绍

Simulink 模型的单精度转换(Fixed-Point Designer)

工具箱:Fixed-Point Designer 函数:DataTypeWorkflow.Single.convertToSingle

将用户指定的双精度数据类型转换为单精度,范围包括模块设置、Stateflow 图表设置、信号对象和总线对象。布尔类型、内置整数类型(int8、uint8、int16 等)和定点类型保持不变。

适用场景

  • 将 Simulink 模型(.slx)或子系统从双精度转换为单精度
  • 为原生支持单精度的嵌入式硬件减少内存占用
  • 批量/CI 转换、检查转换兼容性,或验证是否仍有遗漏的双精度类型
  • 用通俗易懂的语言向用户概述单精度转换兼容性报告和转换结果

不适用场景

  • 独立 MATLAB .m 代码——改用 coder.config('single') 配置的 convertToSingle 函数
  • 定点数据类型优化——改用 DataTypeWorkflow.Converter
  • 逼近函数或使用 LUT 缩减 Lookup Table 模块——改用 simulink-optimize-lookup-tables

公共 API

ConversionReport = DataTypeWorkflow.Single.convertToSingle(systemToConvert)
  • systemToConvert(char)——已加载模型或子系统的完整模块路径(例如,'myModel' 或 'myModel/Controller')。
  • ConversionReport(struct)——兼容性检查、已转换项和验证状态(见下方字段表)。

示例:openExample("fixedpoint/ConvertSystemToSinglePrecisionExample")

规则
  1. 使用 open_system(modelName) 打开模型,不要使用 load_system——用户必须能在转换前后看到图表。
  2. 绝不要自行调用 save_system——保存会破坏双精度基线,妨碍有意义的重新运行。让模型保持未保存状态。即使用户要求你“让更改生效”“持久保存”或“端到端完成所有操作”,也同样适用——这并不代表用户同意自动保存。遇到这种情况,应明确说明你不会自行保存模型,解释保存会覆盖双精度基线,并请用户确认或自行运行 save_system。只有用户明确确认要保存(而不仅仅是笼统地要求“全部完成”)后,才能持久保存更改。
  3. 兼容性检查在 convertToSingle 内部运行;从 report.CheckInfo 读取检查结果(这不是单独的调用)。
  4. 转换前必须获得用户的明确同意。如果模型路径、子系统或范围不明确,请先询问,不要猜测。用户只说“我的模型”而未指明模型时,询问具体是哪一个;绝不要擅自选用工作目录中碰巧找到的 .slx(示例或测试文件不是用户指定的模型)。只有在用户指明模型后,才能运行转换。
  5. 转换后务必检查 report.VerifyInfo.StowawayDblBlks——仍有遗漏的双精度模块意味着转换尚未完成。应从源头修复(将数据类型锁定为双精度的模块重新设为其他类型,将 Stateflow 数据设为单精度,或扩大 SUD 范围),然后重新运行 convertToSingle。不要建议在问题信号上手动插入 single(...) 类型转换或 Data Type Conversion 模块——这只会隐藏双精度类型,而不是消除它。
  6. 将报告赋给局部变量(report = ...;)——不要污染基础工作区,也不要回显原始结构体。

报告结构

该工具按检查 → 转换 → 验证的流程运行,并在报告中填充三个子结构体。

report.CheckInfo
字段描述
ready逻辑值 — 如果系统可以转换,则为 true;只有此值为 true 时,才读取 ConvertInfo/VerifyInfo。
err错误信息(成功时为空)
IncompatibleBlksDataTypeWorkflow.Single.Result 单元格数组 — 不支持单精度的模块(参见下方的模块名称说明)
UnsupportedBlksDataTypeWorkflow.Single.Result 单元格数组 — 转换工具不支持的模块(含 ErrorMsgs)
DTLockedDblBlks数据类型锁定为双精度的模块(不会阻止转换)
StowawayDblBlks检查期间发现的会生成双精度运算的模块
TLSSettings目标语言标准已更新为 C99 的模型
DTOSettings数据类型覆盖已重置的系统
SolverSettings变步长求解器已更改为定步长的模型
configSettings已更新的配置参数(例如 GenerateComments、ParameterPrecisionLossMsg)
memoryUse.BeforeValue每参数内存表格;转换前的 RuntimeMemory 列(字节)

如何从诊断列表中提取模块名称。 IncompatibleBlks、UnsupportedBlks、StowawayDblBlks 和 DTLockedDblBlks 是 DataTypeWorkflow.Single.Result 对象的单元格数组,而不是模块路径字符串。通过每个元素的 ID 调用 getDisplayName(),获取可读的模块路径。请勿对这些元素调用 get_param、getfullname 或 string():这会报错 "The first input to get_param must be of type 'double', 'char' or 'cell'.":

for k = 1:numel(report.CheckInfo.IncompatibleBlks)
    r = report.CheckInfo.IncompatibleBlks{k};
    fprintf('  %s\n', r.ID.getDisplayName());   % e.g. 'myModel/Integrator'
    if ~isempty(r.ErrorMsgs)
        fprintf('    %s\n', strjoin(string(r.ErrorMsgs), '; '));
    end
end
report.ConvertInfo

记录转换器实际执行的操作。

字段描述
ready逻辑值 — 如果转换步骤顺利运行,则为 true
err错误信息;成功时为空([])
resultsfxptds.BlockResult 单元格数组 — 从 double 更改为 single 的模块/信号
report.VerifyInfo
字段描述
StowawayDblBlks转换后仍会生成双精度运算的模块
memoryUse.AfterValue每参数内存表格;转换后的 RuntimeMemory 列(字节)

检查阶段会验证目标语言标准、数据类型覆盖、不兼容模块、残留双精度运算、数据类型锁定的双精度以及求解器设置,并自动更新其中若干项。**该工具会自动处理 TLS→C99、清理 DTO 和更改求解器;你无需手动设置这些内容。**有关完整的自动更新行为、错误标识符和边缘情况,请参见 references/edge-cases.md:

  • 模型未加载/路径无效(Simulink:Commands:InvSimulinkObjectName);更新图失败(DataTypeWorkflow:Single:UpdateDiagramFailed)
  • 不兼容模块(连续模块、MATLAB System 模块)以及不受支持的 MATLAB Function Block(全局变量、MCOS 类、Simulink 函数调用)
  • 自动更新(TLS、DTO、求解器、配置)、模型引用范围处理、幂等性以及关闭模型时的清理

生成转换报告

convertToSingle 返回后,请用通俗语言向用户概述结果,不要直接输出原始结构体。请将实际使用的 API 调用原样放在顶部,以便追溯。

有关必需的输出部分、空报告的回退处理、报告规范,以及后续的 Embedded Coder 就绪情况检查,请参见 references/reporting-format.md。


前提条件与限制

  • 需要 MATLAB、Simulink 和 Fixed-Point Designer;模型必须已加载。
  • 转换引擎是单例 — 一次只能有一个转换会话处于活动状态。
  • 逻辑复杂的 MATLAB Function Block 和模型引用可能需要单独审查 — 请参见 references/edge-cases.md。

版权所有 2026 The MathWorks, Inc.


评论

支持 Markdown