非線形モデル予測制御を行おう考えているのですが、下のコードは初期化を行う行程なのですが、下コードの
”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일

3 개 추천

上記のコマンドは、こちらのFile Exchangeのサンプルモデルのコマンドをコピーしたものと推察されます。
"get_TimeStep"は、このサンプルモデルの中で用意しているローカルな関数スクリプトでして、その関数スクリプト(get_TimeStep.m)が無い環境では実行できません。
具体的には、上記サンプルモデルの「common」というフォルダの中に「get_TimeStep.m」が入っています。
参考までに、モデルやスクリプトがどのようなファイルを参照しているか、を調べるには依存関係アナライザーが便利です。良ければ使ってみてください。

댓글 수: 3

NAGATA SOICHIRO
NAGATA SOICHIRO 2021년 11월 30일
回答していただきありがとうございます。get_TimeStep.mを見つけることができました。
ただ、このファイルはmatlab fanctionのファイルだと思うのですが、このmatlab fanctionをどこに組み込むべきか分からないので、教えていただけると嬉しいです。
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개)

카테고리

도움말 센터 및 File Exchange에서 イベント関数에 대해 자세히 알아보기

제품

릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!