2017-03-20 54 views
0

我正在使用MATLAB Engine API for Python。我在Python腳本中有一個共享引擎,然後連接到這個共享引擎的另一個Python腳本。我想問一下使用set_param命令是否可以從Simulink中更改正在運行的仿真參數。它看起來像我的以下解決方案不起作用。第二個腳本中的set_param命令正在等待,直到來自第一個腳本的sim()命令完成。提前致謝。用於Python的MATLAB引擎API:更改運行仿真的參數

1日腳本:

import matlab.engine 
eng = matlab.engine.start_matlab() 
eng.eval("matlab.engine.shareEngine('my_sim123')") 
eng.eval("load_system('scheme123')",nargout=0) 
eng.eval("sim('scheme123')") 

第二腳本:

import matlab.engine 
eng = matlab.engine.connect_matlab('my_sim123') 
eng.eval("set_param('scheme123/PID', 'P', '15')",nargout=0) 

更新:我試圖用set_param('scheme123', 'SimulationCommand','Start')代替,但出現下列錯誤:「您不能使用set_param運行模擬在一個沒有顯示的MATLAB會話中。「有沒有其他方法可以改變運行求和的參數而不顯示?

回答

1

這不是Python API的問題。 sim命令被阻塞 - 即使從MATLAB本身使用。

要通過這個來,你需要使用

set_param(gcs,'SimulationCommand','Start') 

將運行模擬完成,開始模擬。如果您需要/想提前停止它然後使用

set_param(gcs,'SimulationCommand','Stop') 
+0

我試圖用'eng.set_param(「scheme123」,「SimulationCommand」,「開始」,nargout = 0)'代替,但出現下列錯誤:「你不能使用set_param在沒有顯示的MATLAB會話中運行模擬。」有沒有其他方法可以改變運行求和的參數而不顯示? – user3618276

+0

您需要在桌面打開時啓動MATLAB引擎:'matlab.engine.start_matlab(' - desktop')'。我不相信你有任何其他選擇。您也可以使用'-minimize'和'-nosplash'來避免顯示桌面上的文字。 –