首页 文章

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

提问于
浏览
2

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

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

2 回答

  • 1

    Non-real-time solution:

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

    Real-time solution

    根据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
    
  • 0

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

    那里's a few ways to do this, the best is probably using the EML block' s runtime object . 如果使用它,您应该能够在运行时查看EML块的输出 .

相关问题