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

27 次查看(过去 30 天)
NAGATA SOICHIRO
NAGATA SOICHIRO 2021-11-30
非線形モデル予測制御を行おう考えているのですが、下のコードは初期化を行う行程なのですが、下コードの
”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'); %ここの部分

采纳的回答

Toshinobu Shintai
Toshinobu Shintai 2021-11-30
上記のコマンドは、こちらのFile Exchangeのサンプルモデルのコマンドをコピーしたものと推察されます。
"get_TimeStep"は、このサンプルモデルの中で用意しているローカルな関数スクリプトでして、その関数スクリプト(get_TimeStep.m)が無い環境では実行できません。
具体的には、上記サンプルモデルの「common」というフォルダの中に「get_TimeStep.m」が入っています。
参考までに、モデルやスクリプトがどのようなファイルを参照しているか、を調べるには依存関係アナライザーが便利です。良ければ使ってみてください。
  3 个评论
Toshinobu Shintai
Toshinobu Shintai 2021-11-30
「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 2021-12-1
丁寧に回答していただきありがとうございました。解決できました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 自動車分野への適用 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!