我有一个 Simulink 模型,该模型使用嵌入式 MATLAB 函数作为模块,但我无法弄清楚如何在嵌入式 MATLAB 模块和 GUI 之间实时(即模型运行时)移动数据。我尝试在模型中实现“到工作区”块,但我不知道如何正确使用它。
有谁知道如何将数据从 Simulink 块实时移动到 GUI 中?
非实时解决方案:
如果您想在 GUI 中设置参数,使用这些参数模拟模型,然后在 GUI 中显示模拟输出,有一个很好的教程眨眼达格.com。他们描述的一种解决方案是使用SIMSET函数来定义 Simulink 模型与哪个工作区交互。你应该能够取代基础工作区这样数据就会被发送到调用 Simulink 模型的 GUI 函数的工作区或从该工作区发送出去。
实时解决方案
正如建议的MikeT,你可以使用运行时对象。你首先必须使用获取参数从块中获取 RuntimeObject 的函数:
rto = get_param(obj,'RuntimeObject');
Where obj
是块路径名或块对象句柄。您可以使用以下命令获取最近选择的块的路径名GCB函数(在这种情况下你可以替换obj
with gcb
)。然后,您可以使用以下命令获取块的输出:
blockData = rto.OutputPort(1).Data
文档中的另一项警告:
确保数据字段包含
正确的块输出,关闭信号存储复用选项(参见
信号存储复用)上优化窗格中的配置参数对话框。
您最终可能会在 GUI 中运行一个循环或计时器例程,只要模拟正在运行,它就会不断从 RuntimeObject 获取输出数据。该文档还指出:
运行时对象仅存在于
包含该块的模型是
运行或暂停。如果模型是
停了下来,get_param
返回一个空的
处理。当您停止或暂停一个
型号,所有现有手柄
运行时对象变空。
因此,您的循环或计时器例程必须首先检查 RuntimeObject 是否存在,然后停止(如果不存在)或从中获取数据(如果存在)。我不确定exactly如何检查 RuntimeObject 是否存在,但我相信您要么检查该对象是否为空,要么检查块句柄对象的属性为空:
isempty(rto) % Check if the RuntimeObject is empty
%OR
isempty(rto.BlockHandle) % Check if the BlockHandle property is empty
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)