2017-03-20 56 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'来避免显示桌面上的文字。 –