我想用Simulink Scope绘制一些数据,这是我的简化Simulink模型:在此处输入图像描述
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
我想调用的是另一个ode函数:
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将绘制许多线,因为您输出了一个矢量。可以说,作为向量的范围的任何输入都被视为在时间t具有特定值的不同变量。您所做的似乎是模拟中的模拟。当然,范围并不知道这一点。
据我所知,没有办法以你想要的方式将该变量的整个时间序列绘制为范围中的一行
例如,您可以只输出矢量的最后一个值,然后随着时间的推移,您将获得一条平滑的线,但是,缺少在迷你模拟中获得的中间点。
编辑:我刚刚遇到这个:数组绘图块。但是,这只能绘制当前输入,因此绘制会更新每个模拟步骤。它允许您在时间步长t
绘制testWQ
的中间模拟结果。