Python を用いて実行中の Simulink の値を取得することができません。

2 Ansichten (letzte 30 Tage)
Kaito Okada
Kaito Okada am 18 Nov. 2020
Python と MATLAB, Simulink を連携させてドローンを制御するプログラムを構築しているのですが、Simulink 側で計算した結果を Python の方で取得する際にエラーが出てしまいます。
現在は上の図に示してあるように計算結果を「To File」を用いて mat ファイルとして保存しています。
function [Vwa_x, Vwa_y] = Get_Param_XY()
load Data_XY.mat Res ;
Vwa_x = Res.Data(end,1) ;
Vwa_y = Res.Data(end,2) ;
end
保存したデータを上のプログラムを Python 側から以下のように実行してデータを取得する方法をとっています。
(「Data_Z.mat」についても同様の方法です)
V_wa_xy = eng.Get_Param_XY( nargout = 2 )
1度目の処理では問題なく実行でき、Python でデータを取得できるのですが、2度目の処理では
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\ProgramData\Python\Python37\lib\site-packages\matlab\engine\matlabengine.py", line 71, in __call__
_stderr, feval=True).result()
File "C:\ProgramData\Python\Python37\lib\site-packages\matlab\engine\futureresult.py", line 67, in result
return self.__future.result(timeout)
File "C:\ProgramData\Python\Python37\lib\site-packages\matlab\engine\fevalfuture.py", line 82, in result
self._result = pythonengine.getFEvalResult(self._future,self._nargout, None, out=self._out, err=self._err)
matlab.engine.MatlabExecutionError:
File C:\省略\Get_Param_XY.m, line 2, in Get_Param_XY
ファイル C:\省略\Data_XY.mat を読み取れません。
となってしまいます。
どのようにすれば、この問題を解決することができますか。
また、他の方法があれば教えて下さると幸いです。

Antworten (1)

交感神経優位なあかべぇ
1度目の処理では問題なく実行でき、2度目の処理では失敗する原因ですが、おそらくこれは、2度目の処理だから失敗しているわけではなく、Simulink実行中に、Get_Param_XYの関数を実行し、Data_XY.matファイルをロードしようとしていることが原因だと思います。
SimulinkのTo Fileブロックが、Data_XY.matファイルの書き込み、読み込み権限を占有してしまっているので、外部からData_XY.matファイルのロードができなくなってしまっている状態です。
回避策の例として、To Fileブロックを使用するのではなく、下記図のようにMATLAB Functionを使用して、入力されたデータをベースワークスペースに書き込みをします。
そして、Pythonで下記のスクリプトを実行することで、ベースワークスペースに保存されている変数Resの値をPythonに取得させることができます。
V_wa_xy = eng.workspace['Res']

Kategorien

Mehr zu MATLAB の Python ライブラリ finden Sie in Help Center und File Exchange

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!