【问题标题】:Plotting inside Matlab Function Block for real time signals in Simulink在 Simulink 中为实时信号在 Matlab 功能块内绘图
【发布时间】:2014-11-18 16:26:51
【问题描述】:

我在Simulink 上运行了一个模拟,并且在模拟过程中输出信号发生了变化。我想在每一步都绘制它们。我能做的是使用to Workspace 块将它们转移到Matlab,但是我只能在模拟完成后进行绘图。我想在模拟的每一刻绘制值。

我尝试了什么:

提前创建一个图形:figure(1),并在其上绘制一个静态图形。然后我用

Matlab 内部的函数 Simulink

function fcn(x,y)
coder.extrinsic('plot')
plot(x,y,'s','Markersize',8,'MarkerFaceColor','g','erasemode','background')

其中 x 和 y 是我输入到 matlab 功能块的信号。然而,这会导致在每个时间步中绘制 x 和 y,但我只想绘制图中信号的最后一个值并删除之前的值,换句话说,刷新绘图以便它充当动画.我怎样才能做到这一点?提前致谢

【问题讨论】:

  • 你能解释一下为什么你不只是使用范围吗?

标签: matlab graph plot real-time simulink


【解决方案1】:

我认为您的代码应该可以工作,只需稍作修改:

如果我是你,我会做以下事情:

在模型回调中,在InitFcn 回调中定义您的图形:

fig_h = figure;
ax_h = axes;
set(ax_h,'Xlim',[0 12],'YLim',[0 12]) % or whatever axes limits you want

然后在您的 MATLAB Function 块中:

function fcn(x,y)
%#codegen
coder.extrinsic('plot')
plot(x,y,'s','Markersize',8,'MarkerFaceColor','g','erasemode','background')
set(gca,'XLim',[0 12],'Ylim',[0 12]) % or whatever axes limits you want

【讨论】:

  • 首先我认为 Navan 的解决方案更合适,实际上效果很好。问题是我无法弄清楚如何使用这种方法在同一个图上绘制两个不同的信号。但是使用您的解决方案,我可以使用 Matlab 功能块,就像我想在同一个网格上绘制多个信号一样,这是理想的。但我也无法从网格中删除以前的点,擦除模式没有按我预期的那样工作。以前的点不会被删除。你有想法吗?谢谢
【解决方案2】:

除了调用 plot 来为您的数据设置动画外,您还需要更精细的函数。您应该创建一个 plot_fcn 并使该函数成为外部函数。假设标量输入范围为 0 到 100 的 plot_fcn 示例实现是

function plot_fcn(x,y)

persistent f h
if isempty(f)
    f = figure;
    h = plot(x,y,'s','Markersize',8,'MarkerFaceColor','g','erasemode','background');
    axis([0 100 0 100]);
    axis manual
end
figure(f);
set(h, 'XData', x);
set(h, 'YData', y);

然后你可以调用这个函数

function fcn(x,y)
coder.extrinsic('plot_fcn')
plot_fcn(x,y);

还可以查看有关 MATLAB 绘图中动画的其他问题。

【讨论】:

  • 感谢您的回复。实际上我不知道使用变量类型 persistent,这是我的解决方案。我还删除了图(f)行,因为它会在每个迭代步骤中切换回该图,这使得无法到达主 simulink 窗口以停止模拟或检查某些值。关于 plot_fcn(x,y) 的一个小问题:我想在同一个图上绘制两个不同的数据。假设我有 (X1 Y1) 和 (X2 Y2) 对,我想用不同的颜色绘制它们,但是这个数字不允许我这样做。你有推荐吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多