关于 simulink-single-precision-conversion
此技能使用 Fixed-Point Designer 将已加载 Simulink 模型或子系统中的双精度数据类型转换为单精度,并检查兼容性、验证残留双精度运算及汇报结果;不会保存模型。
主要功能
- 01将符合条件的类型转为单精度
- 02转换前检查兼容性
- 03验证残留双精度运算
- 04汇报转换与内存结果
- 05保留未保存的模型基线
适用场景
- 01将 Simulink 模型转换为单精度
- 02降低嵌入式硬件的内存用量
- 03执行批量转换或 CI 检查
- 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.yamlreferences/edge-cases.mdreporting-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")
规则
- 使用
open_system(modelName)打开模型,不要使用load_system——用户必须能在转换前后看到图表。 - 绝不要自行调用
save_system——保存会破坏双精度基线,妨碍有意义的重新运行。让模型保持未保存状态。即使用户要求你“让更改生效”“持久保存”或“端到端完成所有操作”,也同样适用——这并不代表用户同意自动保存。遇到这种情况,应明确说明你不会自行保存模型,解释保存会覆盖双精度基线,并请用户确认或自行运行save_system。只有用户明确确认要保存(而不仅仅是笼统地要求“全部完成”)后,才能持久保存更改。 - 兼容性检查在
convertToSingle内部运行;从report.CheckInfo读取检查结果(这不是单独的调用)。 - 转换前必须获得用户的明确同意。如果模型路径、子系统或范围不明确,请先询问,不要猜测。用户只说“我的模型”而未指明模型时,询问具体是哪一个;绝不要擅自选用工作目录中碰巧找到的
.slx(示例或测试文件不是用户指定的模型)。只有在用户指明模型后,才能运行转换。 - 转换后务必检查
report.VerifyInfo.StowawayDblBlks——仍有遗漏的双精度模块意味着转换尚未完成。应从源头修复(将数据类型锁定为双精度的模块重新设为其他类型,将 Stateflow 数据设为单精度,或扩大 SUD 范围),然后重新运行convertToSingle。不要建议在问题信号上手动插入single(...)类型转换或 Data Type Conversion 模块——这只会隐藏双精度类型,而不是消除它。 - 将报告赋给局部变量(
report = ...;)——不要污染基础工作区,也不要回显原始结构体。
报告结构
该工具按检查 → 转换 → 验证的流程运行,并在报告中填充三个子结构体。
report.CheckInfo
| 字段 | 描述 |
|---|---|
ready | 逻辑值 — 如果系统可以转换,则为 true;只有此值为 true 时,才读取 ConvertInfo/VerifyInfo。 |
err | 错误信息(成功时为空) |
IncompatibleBlks | DataTypeWorkflow.Single.Result 单元格数组 — 不支持单精度的模块(参见下方的模块名称说明) |
UnsupportedBlks | DataTypeWorkflow.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 | 错误信息;成功时为空([]) |
results | fxptds.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.