Simulink 信号的初始值

3
我正在Simulink中编写一款游艇速度预测程序(VPP)(由于我是该论坛的新用户,因此无法上传图片)。解决这个问题需要我知道表观风速和角度(VA和beta),以便获得帆船产生的力,并进而得到净力、加速度和最终速度。然而,VA取决于船速(VS)。我试图通过积分器模块将后者的初始值输入进去,但我一直在“表观风”m函数内收到以下错误:“索引表达式超出范围。尝试访问元素3。有效范围是1-1。”请注意,如果我重新排列模型并向函数提供一个恒定的数值,则它将起作用(虽然所得到的船速不是物理上正确的)。下面是m函数列表。
简化的模块图:
[VT,gamma] -> 表观风 -> 空气动力学和水动力学 -> 力/质量 -> 加速度 -> 1/s -> VS
function [VA, beta] = fcn(inputs)
% 1 - gamma  % true wind heading [deg]
% 2 - VT  % true wind speed [kts]
% 3 - VS

%#codegen

% apparent wind angle [deg]
beta=atan(sin(inputs(1)*pi/180)/(cos(inputs(1)*pi/180)+inputs(3)/inputs(2)))/pi*180;    

% apparent wind speed [kts]
VA=sin(inputs(1)*pi/180)/sin(beta*pi/180)*inputs(2);    

end

编辑:现在我可以上传流程图,请查看附加的模型流程图。

enter image description here


1
在你的MATLAB函数中,变量VS是从哪里来的(在方程式beta=atan(sin(inputs(1)*pi/180)/(cos(inputs(1)*pi/180)+VS/inputs(2)))/pi*180;中使用)? - grungetta
1
虽然如此,我仍然不清楚在你的代码中VS是如何被设置的。你使用gamma、VT和VS创建了一个总线,然后将其作为input输入到你的MATLAB函数中。所以输入应该是一个由3个元素组成的数组(顺便提一下,你可以使用Mux而不是Bus Creator块来实现相同的结果)。为了访问信号VS,你需要做类似于VS=input(3);这样的操作。因为你没有这样做,我不清楚在你的代码中变量VS(而不是模型中的信号VS)是否真的被赋值了。 - grungetta
此外,您实际上不需要使用IC(Initial Condition)块为Integrator设置初始条件。IC块用于设置通过其的信号的初始条件。因此,在这种情况下,在第一个时间步骤中,从IC_VS输出的值为10。在随后的每个时间步骤中,此信号仅与地连接。因此,本质上您正在设置初始条件输入到Integrator的初始条件。只需具有值为10的常量块连接到Integrator的初始条件输入即可。 - grungetta
你能否更明确地说明问题是否已经解决或者你仍在苦苦挣扎? - Dennis Jaheruddin
你尝试在积分器块中直接设置初始条件了吗? - Gregor99
显示剩余5条评论
1个回答

0

2
他遇到了编程问题。 - Somnath Kharat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接