Matlab 如何从脚本调用simulink模型(.slx)
我是Simulink模型和控制系统的超级初学者。 我有无人机动力学系统的.slx Simulink模型。 它接收两个输入(滚转指令、俯仰指令)并输出速度x、速度y、位置x和位置y 从这里,我似乎可以通过调用Matlab 如何从脚本调用simulink模型(.slx),matlab,simulink,Matlab,Simulink,我是Simulink模型和控制系统的超级初学者。 我有无人机动力学系统的.slx Simulink模型。 它接收两个输入(滚转指令、俯仰指令)并输出速度x、速度y、位置x和位置y 从这里,我似乎可以通过调用 open_system('myModel.slx', 'loadable'); 但是我如何输入并获得输出值呢? 有没有一种方法可以在gui中实现这一点 编辑: 以下是我的模型的完整布局: 当我这么做的时候 roll_CMD=10; pitch_CMD=20; 我收到一条警告说: Inp
open_system('myModel.slx', 'loadable');
但是我如何输入并获得输出值呢?
有没有一种方法可以在gui中实现这一点
编辑:
以下是我的模型的完整布局:
当我这么做的时候
roll_CMD=10;
pitch_CMD=20;
我收到一条警告说:
Input port 1 of 'SimpleDroneDynamics/...' is not connected.
Number of left-hand side argument doesn't match block diagram...
关于您问题的前两点,我使用Matlab2017a: 在simulink中:
- 对于输入,可以使用常量块,双击输入块时可以指定一个值,该值可以是工作空间变量
clc;
clear all;
roll = 10;
pitch = 20;
sim('/path_to_simulinkmodel.slx')
time = simout(:,1);
velocity_X = simout(:,2);
velocity_Y = simout(:,3);
position_X = simout(:,4);
position_Y = simout(:,5);
关于你问题的第三点
可以在框图编辑器中定义模拟的持续时间。您可以放置在调用脚本中定义的变量。实现与时间相关的输入变量有多种方法:
- 我个人不推荐的一个选项是使用for循环并使用不同的roll和pitch值调用simulink模型
- 第二种更有效的方法是将恒定块更改为其他源块,如斜坡信号或正弦信号
- 对于输入,可以使用常量块,双击输入块时可以指定一个值,该值可以是工作空间变量
clc;
clear all;
roll = 10;
pitch = 20;
sim('/path_to_simulinkmodel.slx')
time = simout(:,1);
velocity_X = simout(:,2);
velocity_Y = simout(:,3);
position_X = simout(:,4);
position_Y = simout(:,5);
关于你问题的第三点
可以在框图编辑器中定义模拟的持续时间。您可以放置在调用脚本中定义的变量。实现与时间相关的输入变量有多种方法:
- 我个人不推荐的一个选项是使用for循环并使用不同的roll和pitch值调用simulink模型
- 第二种更有效的方法是将恒定块更改为其他源块,如斜坡信号或正弦信号
sim
功能运行模拟:
sim('name_of_model')
如果模型不在活动的MATLAB文件夹中(可以在主菜单下的MATLAB窗口中看到活动文件夹),则模型的名称必须包含路径
sim
函数有不同的属性,请在“帮助”中阅读这些属性,这可能对您有用。顺便说一下:您可以使用sim
更改模型的一些参数。您甚至可以在模型中找到任何块并更改其属性。阅读更多关于。有趣的是,上一个解决方案使您能够在模拟过程中更改参数tout
变量。它是一个时间步数组。但如果您添加(如在我的图片中),您也会在workspaceyout
中获得另一个变量yout
是一个数据集。它包含您的所有输出值。例如,对于2个出口:
yout
yout =
Simulink.SimulationData.Dataset
Package: Simulink.SimulationData
Characteristics:
Name: 'yout'
Total Elements: 2
Elements:
1 : ''
2 : ''
获取任何输出的值:
yout.get(1).Values
它是一种timeseries数据类型,因此:
yout.get(1).Values.Time
-给你时间
yout.get(2.Values.Data)
每次为您提供此输出端口的值[t,x,y] = sim('model_name')
它返回双数组t
-时间数组,y
-所有输出值的矩阵(它已经加倍,并且只包含没有时间的值,但对于每个模拟时间!)