メインコンテンツ

Signal Builder ブロックから Signal Editor ブロックへの移行

Signal Builder ブロックと signalbuilder 関数は推奨されません。Signal Builder ブロックを Signal Editor ブロックに置き換えることを検討してください。詳細については、Signal Builder ブロックを Signal Editor ブロックで置き換えるを参照してください。

Signal Editor ブロックにプログラムによってアクセスするには、get_param 関数および set_param 関数を使用します。詳細については、signalbuilder のプログラムでの使用の置き換えを参照してください。

Signal Builder ブロックを Signal Editor ブロックで置き換える

Signal EditorSignal Builder ブロックと同様の機能を備えていますが、柔軟性が向上しています。Signal Editor ブロックには次のような利点があります。

  • モデル外部の MAT ファイルの信号データ ストレージ

  • 信号の編集と作成

  • 次元や実数/複素数などの Simulink® 信号属性のサポート

  • バスや固定小数点などの標準の Simulink データ型のサポート

  • 出力に対する一意の信号レベルのデータ型

  • 出力に対する複数のレート

  • Simulink 単位のサポート

  • 各信号に固有のゼロクロッシング検出とデータ内挿

信号データとプロパティを Signal Builder ブロックから Signal Editor ブロックに移植するには、signalBuilderToSignalEditor 関数を使用します。現在のモデルについて、この関数は、既存の Signal Builder ブロックの信号データとプロパティを MAT ファイルに保存し、Signal Editor ブロックを現在のモデルに追加して、新しい MAT ファイルを参照するように Signal Editor ブロックを変更します。

あるいは、Signal Builder ブロックを Signal Editor ブロックに置き換えるには、[モデルで Signal Builder ブロックをチェック] アップグレード アドバイザー チェックを使用します。

例については、Signal Builder ブロックを Signal Editor ブロックで置き換えるを参照してください。

考慮事項

Signal Builder ブロックから Signal Editor ブロックに変換する場合、以下を考慮します。

  • データの内部ストレージ形式と前処理は Signal Builder ブロックと Signal Editor ブロックで異なります。可変ステップ ソルバーを使用する場合、2 つのブロックでシミュレーション タイム ステップに違いが生じ、出力が一致しなくなります。両方のブロックの出力の差を最小限に抑えるには、次のようにします。

    • 可変ステップ ソルバーの [最大ステップ サイズ] の値を減らします。

    • Signal Editor ブロックの入力信号にさらにデータ点を挿入して、その形状をより適切に表現します。

    • 固定ステップ ソルバーを使用するか、両方のブロックのサンプル時間を同じ離散サンプル時間 (0 より大きい) に設定します。離散サンプル時間の詳細については、離散サンプル時間を参照してください。

  • Signal Builder ブロックは double のみをサポートします。変換後にデータ型またはその他の信号プロパティを変更するには、Signal Editor ブロックの ボタンをクリックして信号エディター ユーザー インターフェイスにアクセスします。

  • シナリオ名は有効な MATLAB® 変数名に準拠する必要があります。

signalbuilder のプログラムでの使用の置き換え

Signal Builder ブロックと signalbuilder 関数は推奨されません。Signal Builder ブロックを Signal Editor ブロックに置き換えた後、get_param 関数および set_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

N/A

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

N/A

Signal Editor

name = get_param(hBlk,"ActiveSignal")

アクティブな信号をインデックスで設定する。

Signal Builder

N/A

Signal Editor

set_param(hBlk,"ActiveSignal",2)

アクティブな信号を名前で設定する。

Signal Builder

N/A

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 append

time = {timeNew1 timeNew1; timeNew2 timeNew2};
data = {dataNew1 dataNew1; dataNew2 dataNew2};
[~,~,signalNames,~] = signalbuilder(hBlk);
signalbuilder(hBlk, 'append', time, data, signalNames, groupNames);

Signal Builder append group

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® Figure に出力する。

Signal Builder

hFig = signalbuilder(hBlk,'print',config,'figure');

Signal Editor

Signal Editor ブロックでの時間とデータへのアクセスのコードを使用してデータセットから信号を取得してから、目的のデータをプロットします。

参考

関数

ブロック

ツール