如何将Simulink块中的数据导入MATLAB GUI?

时间:2009-08-07 14:45:11

标签: user-interface matlab simulink

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

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

2 个答案:

答案 0 :(得分:1)

非实时解决方案:

如果您想在GUI中设置参数,使用这些参数模拟模型,然后在GUI中显示模拟输出,那么blinkdagger.com上有一个很好的教程。他们描述的一种解决方案是使用SIMSET函数来定义Simulink模型与之交互的工作空间。您应该能够supersede the base workspace,以便将数据发送到调用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返回空   处理。当你停止或暂停时   model,所有现有句柄   运行时对象变空。

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

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

答案 1 :(得分:0)

从你的回答中,我猜你想在模拟运行时看到结果,这是正确的吗? blinkdagger.com教程允许您在模拟完成后查看模拟结果,但不能在模拟运行时查看模拟结果。你基本上想要在你的GUI中嵌入类似于范围块的东西吗?

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