从信号生成器模块迁移到 Signal Editor 模块
不推荐使用 Signal Builder 模块和 signalbuilder
函数。考虑用 Signal Editor 模块替换 Signal Builder 模块。有关详细信息,请参阅用 Signal Editor 模块替换信号生成器模块。
要以编程方式访问 Signal Editor 模块,请使用 get_param
和 set_param
函数。有关详细信息,请参阅替换 signalbuilder 的程序化使用。
用 Signal Editor 模块替换信号生成器模块
Signal Editor 提供与 Signal Builder 模块类似的功能,但具有更大的灵活性。Signal Editor 模块的优点包括:
信号数据存储在模型外部的 MAT 文件中
信号编辑和创建
支持 Simulink® 信号属性,例如维度和复杂性
支持标准 Simulink 数据类型,包括总线和定点
输出独特的信号级数据类型
多种输出速率
支持 Simulink 单位
过零检测 和每个信号独有的数据插值
要将信号数据和属性从 Signal Builder 模块移植到 Signal Editor 模块,请使用 signalBuilderToSignalEditor
函数。对于当前模型,此函数将现有 Signal Builder 模块的信号数据和属性存储到 MAT 文件中,将 Signal Editor 模块添加到当前模型,并修改 Signal Editor 模块以引用新的 MAT 文件。
或者,要用 Signal Editor 模块替换 Signal Builder 模块,请使用检查 Signal Builder 模块的模型升级顾问检查。
有关示例,请参阅Replace Signal Builder Block with Signal Editor Block。
注意事项
当您从 Signal Builder 模块转换为 Signal Editor 模块时,请考虑以下事项:
Signal Builder 和 Signal Editor 模块的内部存储格式和数据预处理有所不同。当使用变步长求解器时,两个模块中会出现不同的仿真时间步长和不匹配的输出。为了最小化两个模块的输出之间的差异,您可以:
减小变步长求解器的最大步长的值。
在 Signal Editor 模块的输入信号中插入更多数据点以更好地表示其形状。
使用定步长求解器或将两个模块的采样时间设置为相同的离散采样时间(大于 0)。有关离散采样时间的更多信息,请参阅离散采样时间。
Signal Builder 模块仅支持双精度。要在转换后更改数据类型或其他信号属性,点击 Signal Editor 模块中的
按钮以访问信号编辑器用户界面。
场景名称必须符合有效的 MATLAB® 变量名称。
替换 signalbuilder
的程序化使用
不推荐使用 Signal Builder 模块和 signalbuilder
函数。将 Signal Builder 模块替换为 Signal Editor 模块后,您可以使用 get_param
和 set_param
函数以编程方式与该模块进行交互。这些表列出了 signalbuilder
函数及其与 get_param
、set_param
和支持代码的等效功能。
用场景代替群组使用
操作 | 模块 | 编程等同项 |
---|---|---|
获取场景(组)名称。 | Signal Builder | [~,~,~,groupNames] = signalbuilder(hBlk); |
Signal Editor | groupNames = get_param(hBlk,”options@ActiveScenario”); | |
获取场景(组)的数量。 | Signal Builder | [~,~,~,groupNames] = signalbuilder(hBlk); numGroups = length(groupNames); |
Signal Editor | numGroups = str2double(get_param(hBlk,"NumberofScenarios")); | |
获取活跃场景(组)。 | Signal Builder | [idx, name] = signalbuilder(hBlk,'activegroup'); |
Signal Editor | name = get_param(hBlk,"ActiveScenario") groupNames = get_param(hBlk,”options@ActiveScenario”); idx = find(strcmp(groupNames,name)); | |
通过索引设置活动场景(组)。 | Signal Builder | signalbuilder(hBlk,'activegroup',2); |
Signal Editor | set_param(hBlk,"ActiveScenario",2) | |
通过名称设置活动场景(组)。 | Signal Builder | 不适用 |
Signal Editor | set_param(hBlk,"ActiveScenario",'Hard_braking') |
在 Signal Editor 和 Signal Builder 中访问信号
操作 | 模块 | 编程等同项 |
---|---|---|
获取信号名称。 | Signal Builder | [~,~,signalNames,~] = signalbuilder(hBlk); |
Signal Editor | signalNames = get_param(hBlk,”options@ActiveSignal”); | |
获取活动场景(组)中的信号数量。 | Signal Builder | [~,~,signalNames,~] = signalbuilder(hBlk); numSignals = length(signalNames); |
Signal Editor | numSignals = get_param(hBlk,"NumberofSignals"); | |
获取活动信号。 | Signal Builder | 不适用 |
Signal Editor | name = get_param(hBlk,"ActiveSignal") | |
通过索引设置活动信号。 | Signal Builder | 不适用 |
Signal Editor | set_param(hBlk,"ActiveSignal",2) | |
按名称设置活动信号。 | Signal Builder | 不适用 |
Signal Editor | set_param(hBlk,"ActiveSignal",'Throttle') |
在模型中创建 Signal Editor
操作 | 模块 | 编程等同项 |
---|---|---|
将模块添加到模型。 | Signal Builder | % Given array for time and data hBlk = signalbuilder([gcs,'/Signal Builder'],'create',... time,data); |
Signal Editor | % Given Simulink.SimulationData.Dataset, ds fileName = 'scenarioMatFile.mat'; save(fileName,'ds'); hBlk = add_block('simulink/Sources/Signal Editor', ... [gcs,'/Signal Editor'],'MakeNameUnique','on', ... 'FileName',fileName); |
Signal Editor 模块中的访问时间和数据
由于 Signal Editor 模块将其数据存储在模型外部的 MAT 文件中,因此在获取和设置时间和数据方面,编程等效项不如 Signal Builder 模块中的直接。在这些情况下,您必须使用如下代码获取 Signal Builder 格式的时间和数据:
% Get MAT-file name, number of groups, and group names. fileName = get_param(hBlk,"FileName"); numGroups = str2double(get_param(hBlk,"NumberofScenarios")); groupNames = get_param(hBlk,"options@ActiveScenario"); % Load groups from MAT-file. load(fileName); time = {}; data = {}; % Get time and data from groups. for id = 1:numGroups ds = eval(groupNames{id}); timeThisScenario = {}; dataThisScenario = {}; for elementId = 1:ds.numElements % Timeseries in Simulink.SimulationData.Dataset, ds timeThisScenario{end+1} = ds{elementId}.Time'; dataThisScenario{end+1} = ds{elementId}.Data'; end % Put time and data into Signal Builder format. time(1:length(timeThisScenario),id) = timeThisScenario; data(1:length(dataThisScenario),id) = dataThisScenario; end
操作 | 模块 | 编程等同项 |
---|---|---|
以 Signal Builder 格式获取时间和数据。 | Signal Builder | [time, data] = signalbuilder(hBlk); |
Signal Editor | 使用代码Signal Editor 模块中的访问时间和数据获取时间和数据,然后将所需信号转换为 Signal Builder 时间和数据格式。 | |
获取数据的最后一个时间。 | Signal Builder | time = signalbuilder(hBlk); endTime = time{1,1}(end); |
Signal Editor | 使用Signal Editor 模块中的访问时间和数据中的代码获取 Signal Builder 格式的时间和数据,然后找出所有时间值中的最大时间值。 | |
获取特定信号的时间和数据。 | Signal Builder | [time,data] = signalbuilder(hBlk,'get',signalNames{sigId},groupNames) |
Signal Editor | 使用Signal Editor 模块中的访问时间和数据中的代码获取时间和数据,然后将所需信号转换为 Signal Builder 时间和数据格式。 | |
将所有信号和组的时间和数据设置为空(删除)。两者都返回错误。 | Signal Builder | signalbuilder(hBlk,'set',1:1:numSignals,1:1:numGroups,[]); |
Signal Editor | fileName = get_param(hBlk,’FileName’); ds = Simulink.SimulationData.Dataset; save(fileName, 'ds'); | |
将特定信号和组的时间和数据设置为清空(删除)。 | Signal Builder | signalbuilder(hBlk,'set',[1,2],1,[],[]) |
Signal Editor | 使用Signal Editor 模块中的访问时间和数据中的代码获取时间和数据,然后使用更新的时间和数据设置所需的信号,并以附加模式保存 MAT 文件。 |
附加场景和组
操作 | 模块 | 编程等同项 |
---|---|---|
添加场景(组)。 | Signal Builder 追加 | time = {timeNew1 timeNew1; timeNew2 timeNew2}; data = {dataNew1 dataNew1; dataNew2 dataNew2}; [~,~,signalNames,~] = signalbuilder(hBlk); signalbuilder(hBlk, 'append', time, data, signalNames, groupNames); |
Signal Builder 追加组 | time = {timeNew1 timeNew1; timeNew2 timeNew2}; data = {dataNew1 dataNew1; dataNew2 dataNew2};[~,~,signalNames,~] = signalbuilder(hBlk); signalbuilder(hBlk, 'appendgroup', time, data, signalNames, groupName); | |
Signal Editor | % Convert time and data formats to signals. newSignal(1) = timeseries(dataNew1', timeNew1'); newSignal(2) = timeseries(dataNew2', timeNew2'); % Get MAT-file name. fileName = get_param(hBlk,"FileName"); % Load groups from MAT-file. load(fileName); % Add new scenarios (groups). numGroups = length(groupNames); numSignals = str2double(get_param(hBlk,"NumberofSignals")); signalNames = get_param(hBlk,"options@ActiveSignal"); for id = 1:numGroups % create new dataset ds(id) = Simulink.SimulationData.Dataset; for idSig = 1:numSignals element = Simulink.SimulationData.Signal; element.Name = signalNames{idSig}; element.Values = newSignal(idSig); ds(id) = addElement(ds(id),element); end assignin('caller', groupNames{id}, ds(id)); % Save MAT-file using append mode. save(fileName, groupNames{id}, '-append'); end |
追加信号
操作 | 模块 | 编程等同项 |
---|---|---|
向所有场景(组)添加信号。 | Signal Builder | time = {timeNew1 timeNew1; timeNew2 timeNew2}; data = {dataNew1 dataNew1; dataNew2 dataNew2}; signalNames = {'signalNew1', 'signalNew2'}; signalbuilder(hBlk, 'appendsignal', time, data, signalNames); |
Signal Editor | % Convert time and data formats to signals. newSignal(1) = timeseries(dataNew1', timeNew1'); newSignal(2) = timeseries(dataNew2', timeNew2'); % Get MAT-file name. fileName = get_param(hBlk,"FileName"); % Load groups from MAT-file. load(fileName); % Use unique signal names. signalNames = {'signalNew1', 'signalNew2'}; % Append signals to scenarios (groups). numGroups = length(groupNames); numSignals = length(signalNames); for id = 1:numGroups % Get dataset. ds = eval(groupNames{id}); for idSig = 1:numSignals element = Simulink.SimulationData.Signal; element.Name = signalNames{idSig}; element.Values = newSignal(idSig); ds = addElement(ds,element); end assignin('caller', groupNames{id}, ds); % Save MAT-file using append mode. save(fileName, groupNames{id}, '-append'); end |
打印
操作 | 模块 | 编程等同项 |
---|---|---|
打印到 Handle Graphics® 图窗。 | Signal Builder | hFig = signalbuilder(hBlk,'print',config,'figure'); |
Signal Editor | 使用Signal Editor 模块中的访问时间和数据中的代码从数据集中获取信号,然后绘制所需的数据。 |