BusSelectorの入力信号のフィルタ結果をMファイルからアクセスする
조회 수: 5 (최근 30일)
이전 댓글 표시
下図のように、BusSelectorに入力した信号にフィルタをかけた結果を、Mファイルで取得したいです。
階層構造ではないバスならば、get_param(’untitled/BusSelector’,'InputSignals')で取得した後に検索すれば良いと思うのですが、
階層構造が複雑になってしまうと、どう処理して良いかわかりません。
BusSelectorのフィルタ結果を返すコマンドはありますか
もしくは、階層構造となったCell文字列から、要素を検索する方法はありますか。
アドバイスお願いいたします。
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/630435/image.png)
댓글 수: 0
답변 (2개)
Atsushi Ueno
2021년 5월 26일
>BusSelectorのフィルタ結果を返すコマンドはありますか
質問文にあるget_paramの引数を’OutputSignals'にすれば、フィルタをかけた結果が得られます。
get_param('untitled/BusSelector','OutputSignals');
InputSignals:バス内信号 (行列 — {'{}'})
OutputSignals:選択した要素 (文字ベクトル — 'signal1,signal2' 形式)
댓글 수: 3
Atsushi Ueno
2021년 5월 26일
的外れな回答で申し訳ありません。
Bus Selectorのフィルタ結果ではなく、フィルタ処理自体が必要なのですね。このフィルタ処理は「Bus Selector」のみならず「信号階層ビューア」や「バス要素の値の表示」でも使える機能ですね。詳細は別回答とさせて頂きます。
Atsushi Ueno
2021년 5월 26일
やった事①:BusSelector等で用いる「フィルタ」機能をコマンドで使う方法を探す
分かった事①:当該方法が見つからない
やった事②:バスの階層を構造体として取得する
バス情報の表示 - MATLAB & Simulink - MathWorks 日本「バスの階層と仮想性のプログラムによる取得」
ph = get_param('untitled/BusSelector','PortHandles'); %バス情報を必要とする端子のハンドルを取得
sh = get_param(ph.Inport, 'SignalHierarchy'); %端子での信号の階層を取得
わかった事②:必要なのは信号名だけで、「階層構造となったCell文字列」と型が違うだけ
やった事③:「階層構造となったCell文字列」から文字列を検索する
myclstr = get_param(’untitled/BusSelector’,'InputSignals');
unpackcell('bus1', myclstr, 'd'); %「階層構造となったCell文字列」から文字列を検索する
function unpackcell(name, mycell, fword)
for i=1:size(mycell)
if iscell(mycell{i}) % セルなら同じ関数を再帰コール
unpackcell([name '.' mycell{i}{1}], mycell{i}{2}, fword);
elseif contains(mycell{i}, fword) % フィールドが検索文字列を含んでいたら表示
disp([name '.' mycell{i}]);
end
end
end
わかった事③:トップ階層のバス名を取りこぼす(文字列として与えた)。文字表示だけでフィルタ機能としてバス構造を出力していない。cellfunを適用できない。
次にやる事③:②で出力した構造体のフィールドを検索結果として出力できるようにする。また処理にはcellfunを使う
類似の質問を探したりもしましたが、トップコントリビュータは「プログラムで変数名を扱うべきではない」とコメントしており、なかなか目的にあう回答が見つかりません。しかし私は目的を理解しており、もっと良い方法があると思っているので、引き続き良い方法をさがして別回答にて回答するつもりです。
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!