繁体   English   中英

如何从Simulink块获取数据到MATLAB GUI?

[英]How do I get data from a Simulink block into a MATLAB GUI?

我有一个Simulink模型,该模型将嵌入式MATLAB函数用于一个块,但是我一直无法弄清楚如何在嵌入式MATLAB块和GUI之间实时(即在模型运行时)移动数据。 我试图在模型中实现“到工作区”块,但我不知道如何正确使用它。

有谁知道如何将数据从Simulink块实时移动到GUI?

非实时解决方案:

如果要在GUI中设置参数,使用这些参数模拟模型,然后在GUI中显示模拟输出,则blinkdagger.com上有一个很好的教程。 他们描述的一种解决方案是使用SIMSET函数来定义Simulink模型与之交互的工作空间。 您应该能够取代基本工作区,以便将数据发送到正在调用Simulink模型的GUI函数的工作区,或从中发送数据。

实时解决方案

根据MikeT的建议,可以使用RuntimeObject 首先,您必须使用get_param函数从该块获取RuntimeObject:

rto = get_param(obj,'RuntimeObject');

其中obj是块路径名或块对象句柄。 您可以使用GCB函数获取最近选择的块的路径名(在这种情况下,可以将obj替换为gcb )。 然后,您可以使用以下命令获取块的输出:

blockData = rto.OutputPort(1).Data

文档中的另一项警告:

为确保“数据”字段包含正确的块输出,请在“ 配置参数”对话框的“ 优化”窗格上关闭“ 信号存储重用”选项(请参阅信号存储重用)。

您可能最终会在GUI中运行循环或计时器例程,只要仿真正在运行,它们便会不断从RuntimeObject获取输出数据。 该文档还指出:

仅当包含该块的模型正在运行或暂停时,运行时对象才存在。 如果模型已停止,则get_param返回空句柄。 停止或暂停模型时,运行时对象的所有现有句柄将变为空。

因此,您的循环或计时器例程必须先检查RuntimeObject是否存在,然后停止(如果不存在)或从中获取数据(如果存在)。 我不确定确切如何检查RuntimeObject的存在,但我相信您可以检查对象是否为空或对象的BlockHandle属性是否为空:

isempty(rto)  % Check if the RuntimeObject is empty
%OR
isempty(rto.BlockHandle)  % Check if the BlockHandle property is empty

根据您的回答,我猜您想在模拟运行时查看结果,对吗? blinkdagger.com教程可让您在仿真完成后(而不是在运行时)查看仿真结果。 您是否基本上想在您的GUI中嵌入诸如范围块之类的东西?

有几种方法可以做到这一点,最好的方法是使用EML块的runtime对象 如果使用此功能,则应该能够在EML块运行时查看其输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM