Simulink与Python联合仿真系列(四):Python实现Simulink仿真详解
在simulink中拖入一个正弦函数模块,通过python设置正弦函数的幅值,停止时间等,并运行simulink仿真,将simulink仿真的结果返回到python进行绘图
1.新建一个simulink模型
拖入Sine Wave模块和To Workspace模块,保存模型,命名为‘eg_01.slx’
去除To Workspace的‘out.’,读取更方便
2. 获取模块的参数名称
要想对正弦函数的幅值进行设置,需获得该模块的幅值参数名称,在matlab的工作区输入如下代码:
图中Amplitude即为需要设置的幅度,相关代码参考simulink与python联合仿真(一):以编程方式运行仿真-CSDN博客
3. 用matlab代码实现仿真
通过set_param函数设置仿真参数,通过sim函数运行仿真,然后在工作空间读取sin变量进行绘图
clear
clc
% 加载模型
load_system("eg_01.slx")
% 设置停止时间
set_param('eg_01', 'StopTime', '20')
% 设置正弦函数的幅值
set_param('eg_01/Sine', 'Amplitude', '10')
% 运行仿真
sim("eg_01.slx");
% 绘图
t = sin.Time;
y = sin.Data;
plot(t, y)
4. 在python中实现仿真
在matlab中实现simulink仿真是通过set_param等函数来进行仿真的设置,将其在python中实现,本质是在python中调用matlab函数,可参考simulink与python联合仿真(三):python中调用matlab-CSDN博客
具体代码实现如下:
import matlab
import matlab.engine
import matplotlib.pyplot as plt
import numpy as np
eng = matlab.engine.start_matlab()
try:
eng.load_system('eg_01')
eng.set_param('eg_01', 'StopTime', '20', nargout=0)
eng.set_param('eg_01/Sine', 'Amplitude', '10', nargout=0)
eng.sim('eg_01.slx')
t = np.array(eng.eval('sin.Time'))
y = np.array(eng.eval('sin.Data'))
plt.plot(t, y)
plt.show()
eng.quit()
except:
eng.quit()
注意点:
(1)使用try……except……,避免程序出错引擎没有关闭,这可能会导致一些问题
(2)当函数的输出不为1时,一定不要忘记 nargout
作者:小方同学的过拟合日常