関数が認識されないことに関して

21 vues (au cours des 30 derniers jours)
NAGATA SOICHIRO
NAGATA SOICHIRO le 30 Nov 2021
Commenté : NAGATA SOICHIRO le 1 Déc 2021
非線形モデル予測制御を行おう考えているのですが、下のコードは初期化を行う行程なのですが、下コードの
”Ts = get_TimeStep('sim_data_vehicle_nl.sldd'); ”の部分で”関数または変数'get_TimeStep'が認識されません”と表示されてしまいます。
エラーを解決する方法を教えていただきたいです。
clc; Simulink.sdi.clear; Simulink.sdi.clearPreferences; Simulink.sdi.close;
system_model_name = 'Vehicle_system_Nonlinear_MPC';
controller_model_name = 'Parking_NMPC_MultiStage_Controller';
load_system(system_model_name);
set_param([system_model_name, '/MPC_Controller'], ...
'ModelName', controller_model_name);
Ts = get_TimeStep('sim_data_vehicle_nl.sldd'); %ここの部分

Réponse acceptée

Toshinobu Shintai
Toshinobu Shintai le 30 Nov 2021
上記のコマンドは、こちらのFile Exchangeのサンプルモデルのコマンドをコピーしたものと推察されます。
"get_TimeStep"は、このサンプルモデルの中で用意しているローカルな関数スクリプトでして、その関数スクリプト(get_TimeStep.m)が無い環境では実行できません。
具体的には、上記サンプルモデルの「common」というフォルダの中に「get_TimeStep.m」が入っています。
参考までに、モデルやスクリプトがどのようなファイルを参照しているか、を調べるには依存関係アナライザーが便利です。良ければ使ってみてください。
  3 commentaires
Toshinobu Shintai
Toshinobu Shintai le 30 Nov 2021
「get_TimeStep.m」は、MPCの機能やSimulinkモデルに組み込む必要はありません。このコマンドはSimulinkデータディクショナリファイル(.slddファイル)からサンプリングタイムステップの値を取り出すことをしているだけです。
なぜこのようなことをしているかと言うと、Simulinkモデルでは.slddファイルでパラメータを管理したいのですが、MATLABのライブスクリプト側からは.slddファイル内の変数値を直接読めないため、その値を取り出すためのコマンドを自作しました。
「get_TimeStep.m」以外にも、「set_slddVal.m」なども同じような意図で作成したスクリプトです。
要するに、サンプリングタイムステップは「sim_data_vehicle_nl.sldd」内のTimeStepの変数で一元管理を行い、サンプリングタイムステップを変更する際にはSimulinkモデル側とライブスクリプト側で2重に設定しなくてもいいようにしているわけです。
NAGATA SOICHIRO
NAGATA SOICHIRO le 1 Déc 2021
丁寧に回答していただきありがとうございました。解決できました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 起動と終了 dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!