[英]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.