set_param の使い方
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
akihide toyota
el 30 de Mayo de 2023
Comentada: akihide toyota
el 31 de Mayo de 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 comentarios
Respuesta aceptada
Atsushi Ueno
el 30 de Mayo de 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 comentarios
Atsushi Ueno
el 31 de Mayo de 2023
set_param(bh_1st{ij}, 'Name', tmp2_sname);
---------↑対象Object--↑パラメータ--↑入力項目
>これはオブジェクト名を変更する誤った行為だと知りました。新しい tmp2_sname をオブジェクト名を変更せずに 'Name' オブジェクトに戻すには本来どうすべきだったのでしょうか。
上記は、set_param 関数で「対象オブジェクト (bh_1st{ij})」の「パラメータ:オブジェクト名 (’Name’)」を「アンダースコアより前の文字列 (tmp2_sname)」に変更しています。変更したいパラメータは「オブジェクト名」ではない様ですが、変更したいパラメータは何だったのでしょうか?
Más respuestas (0)
Ver también
Categorías
Más información sobre プログラムによるモデル編集 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!