set_param の使い方

7 次查看(过去 30 天)
akihide toyota
akihide toyota 2023-5-30
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!