首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在仿真过程中将simulink数据导出到工作空间?

如何在仿真过程中将simulink数据导出到工作空间?
EN

Stack Overflow用户
提问于 2013-06-09 02:40:27
回答 3查看 35.4K关注 0票数 9

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

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

然而,我只能在模拟的一开始就得到价值。

我还尝试使用scope并更改了一些属性:将保存数据检查为Workspace,将限制数据取消为Last。

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

在此之后,我可以使用ScopeData.signals.values获得值。

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

有人知道如何做到这一点吗?

我发现此页可能很有帮助,但我仍然不知道如何在模拟过程中不断地导出数据。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-09 04:28:42

使用get_param读取当前时间的数据。还可以将数据发送回带有增益或其他块的set_param的Simulink。

示例 of get_param

首先加载并启动仿真:

代码语言:javascript
代码运行次数:0
运行
复制
load_system('myModel')
set_param('myModel','SimulationCommand','Start');

要读取simulink模型中任何一行的数据,请执行以下操作:

  1. 获取一个simulink块对象(让我们尝试一个带有名称时钟的时钟): 块= 'myModel/Clock';rto =get_param(块,'RuntimeObject');
  2. 然后获取该块的第一个(或任意)输出端口(或输入)上的数据。 时间= rto.OutputPort(1).Data;

你可以在计时器回调中完成读数。

此外,这可能会有所帮助:Simulink的命令行功能

票数 12
EN

Stack Overflow用户

发布于 2013-06-09 03:42:53

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-09-30 07:35:26

在仿真期间的任何时候,您都可以强制Simulink将仿真输出数据写入工作区:

代码语言:javascript
代码运行次数:0
运行
复制
set_param(bdroot,'SimulationCommand','WriteDataLogs');

在我针对Win64的Matlab2010a中,我发现这个命令非常不稳定。特别是当仿真停止时,我必须避免它(即第一次检查get_param(bdroot,'SimulationStatus') ),否则Matlab会显示一个错误,并要求重新启动。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17005899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档