在 Simulink Scope 中绘制双精度数据

Plotting double data in Simulink Scope

我想使用 Simulink Scope 绘制一些数据, 这是我简化的 Simulink 模型: enter image description here

MATLAB 函数块中有我的代码:

1. function pCO2_a = Oxy(Qg)
2.
3. coder.extrinsic('testWQ');
4.
5. pCO2_a = zeros(41,1);
6. pCO2_a = testWQ();
7. end

我想调用的是另一个颂歌函数:

1. function y = testWQ
2. 
3. Qg = 3;
4. tspan = [0 5];
5. y0 = 0;
6. [t, Y] = ode45(@f,tspan,y0);
7. y = Y(:,1);
8.
9.    function dydt = f(t,y)
10.       dydt = Qg*t;
11.    end
12.
13. end

然后我 运行 我的 Simulink 模型,在 Scope 中当然会随着时间显示许多水平线而不是一条线。我知道原因是因为 pCO2_a = testWQ() 会得到双重数据,但是有什么方法我仍然可以在 Scope 中使用这些数据得到正确的图表?

快速浏览告诉我,似乎可以使用 simulink 块而不是 matlab 函数为此创建模型。您展示的这个模型是更大模型的一部分吗?如果在 Simulink 中不按照您的方式执行此操作毫无意义,那么您可以只使用 Matlab。

如果是,则 Simulink 将绘制多条线,因为您输出的是矢量。任何作为向量的 Scope 输入都被视为在时间 t 具有特定值的不同变量,可以这么说。你似乎在做的是模拟中的模拟。范围当然不知道这一点。

据我所知,无法按照您想要的方式将该变量的整个时间序列绘制为范围中的一行。

例如,您可以只输出向量的最后一个值,然后随着时间的推移您会得到一条平滑的线,但是,缺少您在迷你模拟中获得的中间点。

编辑: 我刚刚遇到这个:array plot block。但是,这只能绘制当前输入,因此该图会更新每个模拟步骤。它允许您在时间步 t.

绘制来自 testWQ 的中间模拟结果