如何在模拟过程中将simulink数据导出到工作空间?

时间:2013-06-09 02:40:27

标签: matlab simulink

我想在模拟期间从simulink 检索数据,并使用串行网络功能将这些数据发送到另一个程序。因为我需要使用另一个程序来做一些技巧并将命令发送回simulink,所以我必须在运行期间从simulink获取数据,以便另一个程序可以做出正确的命令。

我尝试使用To Workspace块导出数据。

enter image description here

但是,我只能在模拟的最初阶段获得价值。

我还尝试使用范围并更改了一些属性:选中将数据保存到工作区并取消选中限制数据到最后。

enter image description here

enter image description here

首先,我开始模拟,我发现ScopeData没有出现在Workspace中。只有当我停止模拟时,ScopeData才会出现在工作区中。

enter image description here

之后,我可以使用ScopeData.signals.values来获取值。

但我想要的是:当我开始模拟时,ScopeData会出现在工作区中,以便我可以将这些数据发送到其他程序。

有谁知道如何实现这个目标?

我发现this page可能会有所帮助,但我仍然不知道在模拟过程中如何连续导出数据。

3 个答案:

答案 0 :(得分:10)

使用get_param从当前时间读取数据。同时使用set_param增益或其他块将数据发送回Simulink。

get_param

的示例

首先加载启动模拟:

load_system('myModel')
set_param('myModel','SimulationCommand','Start');

要读取simulink模型任何一行的数据:

  1. 获取一个simulink块对象(让我们尝试一个名为 Clock 的时钟):

    block = 'myModel/Clock';
    rto = get_param(block, 'RuntimeObject');
    
  2. 然后获取该块的第一个(或任何)输出端口(或输入)的数据。

    time = rto.OutputPort(1).Data;
    
  3. 你可以在计时器回调中进行阅读。

    这也许会有所帮助:Command Line Functionality for Simulink

答案 1 :(得分:3)

在模拟过程中,Simulink将记录的数据存储在内部缓冲区中,并仅在模拟暂停或停止时将数据写入工作区。 听起来好像你真的需要写一个S函数(它将在一个时间步长的基础上得到信号值)并以这种方式与Proteus通信。

当然Simulink是一个非实时模拟器,所以如果你在谈论做任何类似于实时控制的事情,那么你很可能完全采取错误的方法。

答案 2 :(得分:2)

在模拟过程中的任何时候,您都可以强制Simulink将模拟输出数据写入工作区:

set_param(bdroot,'SimulationCommand','WriteDataLogs');

我发现这个命令在我的Winlab的Matlab 2010a中非常不稳定。特别是当模拟停止时(即首先检查),我必须避免它 get_param(bdroot,'SimulationStatus')),否则Matlab显示错误并要求重新启动。