关于 authoring-simulink-inputs
此技能用于为 Simulink 模型生成合成输入信号,以 `createInputDataset` 创建 Dataset,再填充各输入端口,同时保留信号元数据。它输出 MATLAB 代码和已填充的 Dataset,但不运行仿真,也不读取现有数据文件。
主要功能
- 01生成合成输入波形
- 02填充 Simulink Dataset
- 03保留信号元数据和类型
- 04支持 timeseries 与 timetable 输入
- 05输出 MATLAB 代码和摘要
适用场景
- 01创建斜坡或正弦模型输入
- 02准备 Signal Editor 场景
- 03替换填充零值的框架数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ matlab/ simulink-agentic-toolkit --skill authoring-simulink-inputs安装后在 Claude Code 中输入/authoring-simulink-inputs确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/dataset-patterns.mdsignal-patterns.md详细介绍
作者输入信号
使用 createInputDataset 创建框架,然后填充有意义的波形,同时保留所有信号元数据,为 Simulink 模型创建已填充的输入信号数据集。
适用场景
- 用户要求为模型的输入端口生成或创建合成波形(阶跃、斜坡、正弦、啁啾、脉冲、噪声、常量)
- 用户想要为
createInputDataset创建的 Dataset 填充有意义的信号数据 - 用户需要用于 Signal Editor 场景的信号
- 用户用自然语言描述所需的输入信号行为(例如,“从 0 斜坡上升到 10”“5 Hz 正弦波”)
- 用户想要用于输入端口的基于 timetable 的输入信号
- 用户需要设置函数调用时序,或配置触发/使能输入端口信号
- 用户想要将填充零值的框架替换为逼真的波形
不适用场景
- 用户想要仿真模型、运行模型或绘制输出图——改用
simulating-simulink-models。此技能只创建输入数据;它不会运行sim()或生成图表。 - 用户想要从现有文件(CSV、MAT、电子表格、.mat 工作区)加载、导入或读取数据——即使目标是模型输入端口也是如此。此技能会从头生成新的合成波形;它不会读取或转换现有的记录/测量数据。
输出
此技能会生成:
- MATLAB 代码——用于生成并返回 Dataset 的局部函数(可复现、可编辑,并保持工作区整洁)
- Dataset 变量(
ds)——基本工作区中已填充的Simulink.SimulationData.Dataset,可直接用于仿真 - 摘要——简要描述每个元素:名称、数据类型、波形形状和值范围
要使用 Dataset 进行仿真,请遵循 simulating-simulink-models 技能的工作流(SimulationInput → setExternalInput → sim)。
必须遵循的规则
- 从
createInputDataset开始——恰好调用一次——切勿从头构建 Dataset。每个模型调用一次createInputDataset(它会触发更新图)。对于多个数据集,应在循环中克隆返回的框架,而不是再次调用createInputDataset - 保留框架中的元数据——每个新 timeseries 都必须复制
origEl.DataInfo.Interpolation和origEl.DataInfo.Units。对于 timetable,复制origEl.Properties.VariableContinuity。遗漏这些内容属于错误 - 原位替换元素——对于 timeseries:
ds{k} = ts。对于 timetable:ds = ds.setElement(k, tt, origEl.Properties.Description)——切勿使用addElement - 遵循数据类型——使用
cast(data, 'like', origEl.Data)来匹配任何框架类型(double、single、integer、定点类型)。对于布尔输入端口,直接使用true(size(t)) - 正确设置插值方式——连续信号(正弦、斜坡、啁啾)使用线性插值;离散信号(阶跃、脉冲、布尔、整数、噪声)使用零阶保持。框架中的插值方式反映了输入端口的
Interpolate属性——除非信号性质另有要求,否则应予以保留 - 将所有生成逻辑封装在函数中——基本工作区中只应留下 Dataset(以及仿真时的
simIn/simOut)。所有中间变量(t、dt、origEl、ts、signalData、k)都必须留在函数作用域内 - 绝不销毁用户数据——切勿调用
clear、clearvars、clear all或bdclose all。用户可能已打开现有变量、模型或图窗。只向工作区添加内容,不要移除任何内容
工作流
确定起点。 不要总是从第 1 步开始。先评估用户已有的内容:
| 用户当前状态 | 从哪一步开始 |
|---|---|
| 没有现成的 Dataset 或脚本 — 从头开始 | 第 1 步 |
| 有 Dataset 变量,但它是空的或脚手架(全为零或占位数据) | 第 2 步 |
| 有包含部分信号的 Dataset,但需要修复(形状、数据类型或插值错误) | 第 2 步 — 检查出错的元素,并就地修复 |
| 有可运行的脚本,但想添加更多场景或信号 | 第 2 步或“创建多个 Dataset” |
| 有完整的 Dataset,但仿真失败 | 先诊断错误 — 通常是元数据不匹配(插值、数据类型、单位),可在第 2 步修复 |
脚手架是 createInputDataset 返回的 Dataset。它为每个输入端口包含一个元素,并预先填入正确的元数据(数据类型、插值方法、单位、信号维度),但只有占位时间样本(通常为 2 行零值)。工作流会在保留元数据的同时,将这些占位数据替换为有意义的波形。
1. 创建脚手架(在函数内)
所有生成代码都放在局部函数中。调用方调用该函数并接收填充后的 Dataset:
ds = buildInputs('modelName');
function ds = buildInputs(mdl)
ds = createInputDataset(mdl);
% — or timetable format —
% ds = createInputDataset(mdl, 'DatasetSignalFormat', 'timetable');
stopTime = str2double(get_param(mdl, 'StopTime'));
dt = 0.01;
t = (0:dt:stopTime)';
% ... populate elements (Step 2) ...
end
如果 createInputDataset 失败(模型无法编译),请使用 model_read 检查模型的输入端口块,并向用户询问无法从模型结构中确定的类型或维度信息。
2. 填充每个元素(在同一个函数内)
将脚手架中的占位数据替换为有意义的信号波形,同时保留元数据。对于每个元素:
- 提取原始元素(
origEl = ds{k}) - 生成波形,并通过
cast(data, 'like', origEl.Data)转换类型 — 适用于所有类型,包括定点类型 - 创建新的 timeseries 或 timetable
- 从
origEl复制DataInfo.Interpolation和DataInfo.Units(timeseries),或复制VariableContinuity(timetable) - 就地替换:
ds{k} = ts(timeseries),或ds = ds.setElement(k, tt, origEl.Properties.Description)(timetable)
完整代码模式请参阅 references/signal-patterns.md 中的“Dataset Assembly”部分。
创建多个 Dataset
调用一次 createInputDataset,然后在函数内的循环中克隆脚手架。完整模式请参阅 references/dataset-patterns.md 中的“Creating Multiple Datasets”部分。
总线信号输入端口
如果模型包含总线信号输入端口,请参阅 references/dataset-patterns.md 中的“Bus Signal Inports”部分。
函数调用输入端口
如果模型包含函数调用输入端口,请参阅 references/dataset-patterns.md 中的“Function-Call Inports”部分。
信号类型
波形生成代码(正弦、阶跃、斜坡、啁啾、脉冲、噪声、常量、枚举)请参阅 references/signal-patterns.md。
插值和连续性(显式设置 — 仅在覆盖脚手架时使用)
| 信号特性 | timeseries | timetable |
|---|---|---|
| 连续(正弦、斜坡、啁啾) | tsdata.interpolation('linear') | "continuous" |
| 离散(阶跃、脉冲、布尔) | tsdata.interpolation('zoh') | "step" |
注意事项
| 错误 | 错误原因 | 正确做法 |
|---|---|---|
使用 ones(size(t)) 启用布尔信号 | 会创建 double 类型数据;仿真因类型不匹配而失败 | 使用 true(size(t)) |
| 忽略总线脚手架中的结构体字段 | 缺少总线元素或其类型不正确会导致仿真错误 | 填充结构体中的每个字段,并保留每个字段的元数据 |
| 将脚手架数据行数当作信号宽度 | 脚手架 [2 1] 数据表示 2 个标量时间采样点,而非一个 2 元素向量 | 使用 size(origEl.Data, 2) 获取信号宽度——行是占位时间采样点 |
| 枚举数据报错“turn off interpolation” | Simulink 要求接收枚举数据的输入端口块设置 Interpolate='off'——即使 timeseries 已设置为 zoh 也一样 | 这是模型修复,而非数据修复。仿真前使用 simIn.setBlockParameter(portPath, 'Interpolate', 'off') |
版权所有 2026 The MathWorks, Inc.