查看: 3571|回复: 9|关注: 0

[已解决] 请问Simulink.SimulationOutput怎么提取数据?

[复制链接]

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
系统模型:GALQR.slx
命令行输入:
  1.     Simout= sim ('GALQR','AbsTol','1e-5',...
  2.             'StopTime', '60', ...
  3.             'SaveState','on','StateSaveName','xoutNew',...
  4.             'SaveOutput','on','OutputSaveName','youtNew',...
  5.             'SignalLogging','on');
复制代码
然后得到以下结果:
  1. Simulink.SimulationOutput:

  2.          in: [1x1 timeseries]
  3.           t: [1x1 timeseries]
  4.        tout: [1000x1 double]
  5.           u: [1x1 timeseries]
  6.     xoutNew: [1x1 Simulink.SimulationData.Dataset]
  7.     youtNew: [1x1 Simulink.SimulationData.Dataset]
复制代码
我可以采用这种方法提取仿真时间:Simt = Simout.get('tout')
但是提取输出时:Simoutstate = Simout.get('youtNew');  得到的数据类型为 1*1dataset,实际上输出为随时间变化的四个状态量,请问大神如何提取?
我有在网上搜索相关的信息,内容很少,参考之后依然不得其解,请大神帮忙!

谢谢

论坛优秀回答者

7

主题

1486

帖子

348

最佳答案
  • 关注者: 62
发表于 2017-12-20 11:24:28 | 显示全部楼层
更好的使用方法是 Simout.youtNew ,提取dataset的信息也是一样,类似于 Simout.youtNew.time 看dataset中哪一个对应时间了。
多看帮助文档
说明你的matlab版本

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2017-12-20 11:26:13 | 显示全部楼层
本帖最后由 shekite 于 2017-12-20 11:28 编辑
深蓝孩童 发表于 2017-12-20 11:24
更好的使用方法是 Simout.youtNew ,提取dataset的信息也是一样,类似于 Simout.youtNew.time 看dataset中 ...

我用了,但是不正确,所以才用get(),但是进一步不知道怎么提取youtNew中的数据
  1. Simout.youtNew
复制代码
No appropriate method, property, or field 'youtNew' for class 'Simulink.SimulationOutput'.

论坛优秀回答者

7

主题

1486

帖子

348

最佳答案
  • 关注者: 62
发表于 2017-12-20 11:32:23 | 显示全部楼层
本帖最后由 深蓝孩童 于 2017-12-20 11:33 编辑
shekite 发表于 2017-12-20 11:26
我用了,但是不正确,所以才用get(),但是进一步不知道怎么提取youtNew中的数据No appropriate method, pr ...

神奇。请问你的模型可以给出来么?或者给出你的那个数据 Simout 也行,保存为.mat
多看帮助文档
说明你的matlab版本

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2017-12-20 11:33:12 | 显示全部楼层
深蓝孩童 发表于 2017-12-20 11:32
神奇。请问你的模型可以给出来么?

可以,我需要稍微整理一下,请稍等谢谢

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2017-12-20 11:39:33 | 显示全部楼层
深蓝孩童 发表于 2017-12-20 11:32
神奇。请问你的模型可以给出来么?或者给出你的那个数据 Simout 也行,保存为.mat ...

已上传,谢谢您!

matlab.rar

29.04 KB, 下载次数: 2

程序

论坛优秀回答者

7

主题

1486

帖子

348

最佳答案
  • 关注者: 62
发表于 2017-12-20 11:55:35 | 显示全部楼层 |此回复为最佳答案
shekite 发表于 2017-12-20 11:39
已上传,谢谢您!

如下图所示,得到的结果与你的结果应该是一样的。只不过这是在R2017b运行的结果,可能会多一些特性。

像我运行这样,你看Simoutstate = Simout.get('youtNew') 运行的结果是不是可以用{}索引。



1.PNG 2.PNG
多看帮助文档
说明你的matlab版本

论坛优秀回答者

7

主题

1486

帖子

348

最佳答案
  • 关注者: 62
发表于 2017-12-20 11:59:49 | 显示全部楼层
深蓝孩童 发表于 2017-12-20 11:55
如下图所示,得到的结果与你的结果应该是一样的。只不过这是在R2017b运行的结果,可能会多一些特性。

像 ...

用点代替get得到属性值是17a引入的。17a之前不能用。
多看帮助文档
说明你的matlab版本

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2017-12-20 12:03:06 | 显示全部楼层
深蓝孩童 发表于 2017-12-20 11:55
如下图所示,得到的结果与你的结果应该是一样的。只不过这是在R2017b运行的结果,可能会多一些特性。

像 ...

不能使用dot notation后接变量名,使用{}也还是同上面一样的错误,,得到Simout之后,系统提示我:

Use get to access a variable by name.
Use getSimulationMetadata to access metadata about the simulation.

我使用的是2015b版本

新手

16 麦片

财富积分


050


7

主题

35

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 2017-12-20 12:17:31 | 显示全部楼层
本帖最后由 shekite 于 2017-12-20 12:22 编辑
深蓝孩童 发表于 2017-12-20 11:55
如下图所示,得到的结果与你的结果应该是一样的。只不过这是在R2017b运行的结果,可能会多一些特性。

像 ...

我又问了同学,已解决。谢谢您!

现附上提取代码,有需要的同学可以借鉴。
t_state与直接仿真simulink模型 to workspace的state是一样的, 包括时间和数据两部分。
  1. youtnew = Simout.get('youtNew');
  2.     temp = getElement(youtnew,1);   
  3.     t_state = temp.Values
  4.     time = t_state.time;
  5.     state = t_state.data;
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表