mcpField
A
authoring-simulink-inputs

authoring-simulink-inputs

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

关于 authoring-simulink-inputs

此技能用于为 Simulink 模型生成合成输入信号,以 `createInputDataset` 创建 Dataset,再填充各输入端口,同时保留信号元数据。它输出 MATLAB 代码和已填充的 Dataset,但不运行仿真,也不读取现有数据文件。

主要功能

  1. 01生成合成输入波形
  2. 02填充 Simulink Dataset
  3. 03保留信号元数据和类型
  4. 04支持 timeseries 与 timetable 输入
  5. 05输出 MATLAB 代码和摘要

适用场景

  1. 01创建斜坡或正弦模型输入
  2. 02准备 Signal Editor 场景
  3. 03替换填充零值的框架数据

安装

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

$npx skills add https://github.com/matlab/simulink-agentic-toolkit --skill authoring-simulink-inputs

安装后在 Claude Code 中输入/authoring-simulink-inputs确认已加载。

包含的文件

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

manifest.yaml
references/
dataset-patterns.md
signal-patterns.md

详细介绍

作者输入信号

使用 createInputDataset 创建框架,然后填充有意义的波形,同时保留所有信号元数据,为 Simulink 模型创建已填充的输入信号数据集。

适用场景

  • 用户要求为模型的输入端口生成或创建合成波形(阶跃、斜坡、正弦、啁啾、脉冲、噪声、常量)
  • 用户想要为 createInputDataset 创建的 Dataset 填充有意义的信号数据
  • 用户需要用于 Signal Editor 场景的信号
  • 用户用自然语言描述所需的输入信号行为(例如,“从 0 斜坡上升到 10”“5 Hz 正弦波”)
  • 用户想要用于输入端口的基于 timetable 的输入信号
  • 用户需要设置函数调用时序,或配置触发/使能输入端口信号
  • 用户想要将填充零值的框架替换为逼真的波形

不适用场景

  • 用户想要仿真模型、运行模型或绘制输出图——改用 simulating-simulink-models。此技能只创建输入数据;它不会运行 sim() 或生成图表。
  • 用户想要从现有文件(CSV、MAT、电子表格、.mat 工作区)加载、导入或读取数据——即使目标是模型输入端口也是如此。此技能会从头生成新的合成波形;它不会读取或转换现有的记录/测量数据。

输出

此技能会生成:

  1. MATLAB 代码——用于生成并返回 Dataset 的局部函数(可复现、可编辑,并保持工作区整洁)
  2. Dataset 变量(ds)——基本工作区中已填充的 Simulink.SimulationData.Dataset,可直接用于仿真
  3. 摘要——简要描述每个元素:名称、数据类型、波形形状和值范围

要使用 Dataset 进行仿真,请遵循 simulating-simulink-models 技能的工作流(SimulationInput → setExternalInput → sim)。

必须遵循的规则

  1. 从 createInputDataset 开始——恰好调用一次——切勿从头构建 Dataset。每个模型调用一次 createInputDataset(它会触发更新图)。对于多个数据集,应在循环中克隆返回的框架,而不是再次调用 createInputDataset
  2. 保留框架中的元数据——每个新 timeseries 都必须复制 origEl.DataInfo.Interpolation 和 origEl.DataInfo.Units。对于 timetable,复制 origEl.Properties.VariableContinuity。遗漏这些内容属于错误
  3. 原位替换元素——对于 timeseries:ds{k} = ts。对于 timetable:ds = ds.setElement(k, tt, origEl.Properties.Description)——切勿使用 addElement
  4. 遵循数据类型——使用 cast(data, 'like', origEl.Data) 来匹配任何框架类型(double、single、integer、定点类型)。对于布尔输入端口,直接使用 true(size(t))
  5. 正确设置插值方式——连续信号(正弦、斜坡、啁啾)使用线性插值;离散信号(阶跃、脉冲、布尔、整数、噪声)使用零阶保持。框架中的插值方式反映了输入端口的 Interpolate 属性——除非信号性质另有要求,否则应予以保留
  6. 将所有生成逻辑封装在函数中——基本工作区中只应留下 Dataset(以及仿真时的 simIn/simOut)。所有中间变量(t、dt、origEl、ts、signalData、k)都必须留在函数作用域内
  7. 绝不销毁用户数据——切勿调用 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. 填充每个元素(在同一个函数内)

将脚手架中的占位数据替换为有意义的信号波形,同时保留元数据。对于每个元素:

  1. 提取原始元素(origEl = ds{k})
  2. 生成波形,并通过 cast(data, 'like', origEl.Data) 转换类型 — 适用于所有类型,包括定点类型
  3. 创建新的 timeseries 或 timetable
  4. 从 origEl 复制 DataInfo.Interpolation 和 DataInfo.Units(timeseries),或复制 VariableContinuity(timetable)
  5. 就地替换: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。

插值和连续性(显式设置 — 仅在覆盖脚手架时使用)

信号特性timeseriestimetable
连续(正弦、斜坡、啁啾)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.


评论

支持 Markdown