set_param の使い方
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
akihide toyota
il 30 Mag 2023
Commentato: akihide toyota
il 31 Mag 2023
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行目でオブジェクトに格納できていないようです。
オブジェクトに格納できないのは何故でしょうか。
0 Commenti
Risposta accettata
Atsushi Ueno
il 30 Mag 2023
’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 Commenti
Atsushi Ueno
il 31 Mag 2023
set_param(bh_1st{ij}, 'Name', tmp2_sname);
---------↑対象Object--↑パラメータ--↑入力項目
>これはオブジェクト名を変更する誤った行為だと知りました。新しい tmp2_sname をオブジェクト名を変更せずに 'Name' オブジェクトに戻すには本来どうすべきだったのでしょうか。
上記は、set_param 関数で「対象オブジェクト (bh_1st{ij})」の「パラメータ:オブジェクト名 (’Name’)」を「アンダースコアより前の文字列 (tmp2_sname)」に変更しています。変更したいパラメータは「オブジェクト名」ではない様ですが、変更したいパラメータは何だったのでしょうか?
Più risposte (0)
Vedere anche
Categorie
Scopri di più su プログラムによるモデル編集 in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!