如何在 Simulink Scope 中以编程方式“打印到图形”

Posted

技术标签:

【中文标题】如何在 Simulink Scope 中以编程方式“打印到图形”【英文标题】:How to programmatically 'Print to figure' in a Simulink Scope 【发布时间】:2016-06-13 13:42:15 【问题描述】:

在 Simulink Scope 中,可以选择 Print to Figure。这将打开一个与原始范围具有相同内容的图形。有没有办法以编程方式执行此操作?

另请参阅this help page、this help page 和 this page。

【问题讨论】:

【参考方案1】:

取决于您想要/需要获得的花哨程度。

如果您真的想使用与 UI 回调完全相同的代码,那么您需要研究如何使用以下目录/包中的回调函数:

MATLABROOT\toolbox\shared\spculib+matlabshared+scopes\@UnifiedScope

特别是,printToFigureCallback.m 是回调调用的代码。 (您可以在代码中放置断点,并使用调试器单步执行代码以查看其工作原理。)

看起来像下面这样的东西应该可以工作,但事实并非如此,因此您需要进行一些试错调查才能使其正常工作。

% Get the name of the Scope of interest
scopeName = get_param(gcb,'Name');
% Find the Scope (which is really just a figure window)
hs = findall(0,'Name',scopeName);
% Print to a figure.
printToFigureCallback(h.UserData)

另外,一个更简单但可能不太令人满意的解决方案是执行以下操作:

% Get the name of the Scope of interest
scopeName = get_param(gcb,'Name');
% Find the Scope (which is really just a figure window)
hs = findall(0,'Name',scopeName);
% Create a new target figure
hf = figure('Position',get(hs,'Position'));
% Get the handle to the panel containing the plots
hp = findobj(hs.UserData.Parent,'Tag','VisualizationPanel');
% Copy the panel to the new figure
copyobj(hp,hf)

然后,根据您的要求,您可能需要使用一些单位来确保调整图形大小是正确的。

【讨论】:

对于我的应用程序,以编程方式打印图形似乎有点过头了。感谢您提供这些有趣的信息,我可能会在其他情况下使用它。 第一个确实给出了一个错误(“未定义函数 'printToFigureCallback' 用于类型为'double'的输入参数。”),但第二个正是我想要的。

以上是关于如何在 Simulink Scope 中以编程方式“打印到图形”的主要内容,如果未能解决你的问题,请参考以下文章

Matlab/Simulink仿真中如何将Scope转化为Figure?

simulink修改scope的结果图

如何把MATLAB中的数据读入到SIMULINK中

matlab simulink中的示波器Scope如何实现多输入(不用Mux)?如下如所示

如何利用MATLAB/SIMULINK搭建简单的仿真模型

如何在 GNU Make 中以编程方式定义目标?