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 Editor は Signal 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_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 | N/A |
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 | 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 ブロックでの時間とデータへのアクセスのコードを使用してデータセットから信号を取得してから、目的のデータをプロットします。 |