主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

从信号生成器模块迁移到 Signal Editor 模块

不推荐使用 Signal Builder 模块和 signalbuilder 函数。考虑用 Signal Editor 模块替换 Signal Builder 模块。有关详细信息,请参阅用 Signal Editor 模块替换信号生成器模块

要以编程方式访问 Signal Editor 模块,请使用 get_paramset_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 BuilderSignal Editor 模块的内部存储格式和数据预处理有所不同。当使用变步长求解器时,两个模块中会出现不同的仿真时间步长和不匹配的输出。为了最小化两个模块的输出之间的差异,您可以:

    • 减小变步长求解器的最大步长的值。

    • Signal Editor 模块的输入信号中插入更多数据点以更好地表示其形状。

    • 使用定步长求解器或将两个模块的采样时间设置为相同的离散采样时间(大于 0)。有关离散采样时间的更多信息,请参阅离散采样时间

  • Signal Builder 模块仅支持双精度。要在转换后更改数据类型或其他信号属性,点击 Signal Editor 模块中的 按钮以访问信号编辑器用户界面。

  • 场景名称必须符合有效的 MATLAB® 变量名称

替换 signalbuilder 的程序化使用

不推荐使用 Signal Builder 模块和 signalbuilder 函数。将 Signal Builder 模块替换为 Signal Editor 模块后,您可以使用 get_paramset_param 函数以编程方式与该模块进行交互。这些表列出了 signalbuilder 函数及其与 get_paramset_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 EditorSignal 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 模块中的访问时间和数据中的代码从数据集中获取信号,然后绘制所需的数据。

另请参阅

函数

模块

工具