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