필터 지우기
필터 지우기

set_param の使い方

조회 수: 21 (최근 30일)
akihide toyota
akihide toyota 2023년 5월 30일
댓글: akihide toyota 2023년 5월 31일
get_param でオブジェクトから取り出した文字列を変更して set_param で格納したいのですがうまくいきません。
構文はこうです。for文でijを回しています。
tmp2_sname = get_param(bh_1st{ij}, 'Name');
tmp2_sname = extractBefore(tmp2_sname, "_");
set_param(bh_1st{ij}, 'Name', tmp2_sname);
tmp3_sname = get_param(bh_1st{ij}, 'Name');
最後の1行でエラーになります。最後から2行目でオブジェクトに格納できていないようです。
オブジェクトに格納できないのは何故でしょうか。

채택된 답변

Atsushi Ueno
Atsushi Ueno 2023년 5월 30일
’Name’ プロパティはオブジェクト名そのもの、すなわちモデル最上位からのパスを構成する名前です。従ってこれを変更した瞬間から、変更前のオブジェクト名ではアクセス出来なくなります。
>> get_param('test/Constant','Name') % 変更前のパスでアクセス
ans = 'Constant'
>> set_param('test/Constant','Name','temp') % ブロック名を'Constant'⇒'temp'に変更した
>> get_param('test/Constant','Name') % 変更前のパスでアクセス⇒出来ない
無効な Simulink オブジェクト名: test/Constant
原因:'Constant' という名前のブロックが見つかりません。
>> get_param('test/temp','Name') % 変更後のパスでアクセス
ans = 'temp'
オブジェクト名の変更に併せてパス名も変更してやればアクセス出来るはずです。
tmp2_sname = get_param(bh_1st{ij}, 'Name');
tmp2_sname = extractBefore(tmp2_sname, "_");
set_param(bh_1st{ij}, 'Name', tmp2_sname);
ext = regexp(bh_1st{ij},'(.+/)*','match'); % パス名から変更前のオブジェクト名を削除
bh_1st{ij} = [ext{1},tmp2_sname]; % パス名に変更後のオブジェクト名を追加
tmp3_sname = get_param(bh_1st{ij}, 'Name');
  댓글 수: 6
Atsushi Ueno
Atsushi Ueno 2023년 5월 31일
set_param(bh_1st{ij}, 'Name', tmp2_sname);
---------↑対象Object--↑パラメータ--↑入力項目
>これはオブジェクト名を変更する誤った行為だと知りました。新しい tmp2_sname をオブジェクト名を変更せずに 'Name' オブジェクトに戻すには本来どうすべきだったのでしょうか。
上記は、set_param 関数で「対象オブジェクト (bh_1st{ij})」の「パラメータ:オブジェクト名 (’Name’)」を「アンダースコアより前の文字列 (tmp2_sname)」に変更しています。変更したいパラメータは「オブジェクト名」ではない様ですが、変更したいパラメータは何だったのでしょうか?
akihide toyota
akihide toyota 2023년 5월 31일
表現が適切でなかったようで申し訳ありませんでした。
変更したいパラメータは 'Name' の中身の文字列です。
tmp2_sname = get_param(bh_1st{ij}, 'Name');
で得られる tmp2_sname は "XXXX_XXXX" といった文字列なのですが、
これを "XXXX" にして get_param(bh_1st{ij}, 'Name'); で得られるように
格納し直したいというのが行いたいプログラミングです。
宜しくお願い致します。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 プログラムによるモデル編集에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!