在Matlab功能块内部绘制Simulink中的实时信号

时间:2014-11-18 16:26:52

标签: matlab graph plot real-time simulink

我在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,但我想仅绘制图上信号的最后一个值并删除之前的值,换句话说,刷新绘图以便它将充当动画。我怎样才能做到这一点?提前致谢

2 个答案:

答案 0 :(得分:1)

除了调用绘图来动画数据之外,您还需要更复杂的功能。你应该创建一个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图中查看有关动画的其他问题。

答案 1 :(得分: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 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