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

作者:小方同学的过拟合日常

物联沃分享整理
物联沃-IOTWORD物联网 » Simulink与Python联合仿真系列(四):Python实现Simulink仿真详解

发表回复