Simulink中的实时绘图,包含来自工作空间和模拟的数据

时间:2014-09-17 15:41:25

标签: matlab plot real-time simulink

我有一架飞机模拟器,我试图在一块情节中绘制它的预定轨迹和实际飞行路径。

最初我使用的是来自Simulink的XY Graph块,但它不允许在后台显示第二个信号。所以我考虑使用一个解释的MATLAB功能块并在那里绘制两个东西。

我有一个初始化M文件,我在其中定义向量x_t和y_t,轨迹的坐标,并打开图形。我创建了这两个全局变量,Simulink中的函数与模拟中的x_e和y_e一起接收它们。

现在的问题是它变得非常慢,我实际上无法正常控制飞机。有关如何实现目标的任何建议?感谢您的帮助。

下面我已经将我用的代码用于此目的,以便您可以看到整个图片。顺便说一句,'我'是一个变量,用于将数据存储到向量中,并在另一个函数中递增。

*** Initialization.m ***

% The definition of x_1:x_5 and y_1:y_5 has been omitted.

x_t=[x_1 x_2 x_3 x_4 x_5];
y_t=[y_1 y_2 y_3 y_4 y_5];

figure(1);

---------------------------- 

*** Flightpath.m ***

function Flightpath(u)

%% Variables
%%
global i x_t y_t x_e y_e;

x_e(i)=u(1); y_e(i)=u(2);

%% Real-Time Graphic
%%
t=plot(x_t,y_t,20000,10000,'ro',x_e,y_e);
axis([-5000 25000 -5000 50000]); set(t,'MarkerFaceColor','r');

1 个答案:

答案 0 :(得分:1)

您应该更改多项内容,

  1. 在每个时间步长增加x_e和y_e的大小。这总是很糟糕,而且会大大减慢速度。 (我知道你可能不会提前知道最终的尺寸,但这并不能否定在每一步中增长都很糟糕的事实。)

  2. 当较低级别的功能足够时,您正在使用plot,这是一个高级例行程序。

  3. 您正在绘制每个时间步的x_t和y_t,只需要绘制一次。

  4. 您应该在时间0为x_e和y_e绘制(可能只包含2个点的虚拟数据)并关闭线条可见性,并存储线条句柄。然后在每个时间步骤,您应该获取该行的XData和YData,并将其替换为包含当前时间点的新数据的新X​​Data和YData。

  5. 通过编写仅使用解释功能块的M代码S函数,您可以更好地控制发生的事情。