【问题标题】:Initial value of a signal Simulink信号 Simulink 的初始值
【发布时间】:2012-10-20 12:57:00
【问题描述】:

我正在 Simulink 中开发一个游艇速度预测程序 (VPP)(显然,我是该论坛的新用户,因此无法上传图片)。

解决问题需要我知道表观风速和角度(分别为 VA 和 beta),以便获得帆产生的力,从而获得净力、加速度和最终的船速。但是,VA 取决于船速 (VS)。我尝试通过将加速度转换为速度的积分器块输入后者的初始值,但我在“视风”m函数中不断收到以下错误:“索引表达式超出范围。尝试访问元素 3。有效范围是 1-1。”。请注意,如果我重新排列模型并为函数提供一个恒定值,例如,它将起作用(尽管最终的船速在物理上不会是正确的)。 m-function 的列表如下所示。

简化框图:

[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

编辑:现在我可以上传一个模型的附加流程图。

【问题讨论】:

  • 这些公式看起来很简单,以至于嵌入式 matlab 功能块是多余的。使用 simulink 数学运算块来实现 beta 和 VA 的公式似乎更合适。
  • 我已经这样做了,而且效果很好。但是我仍然想知道我做错了什么,以后不要再重复了:)
  • 在您的 MATLAB 函数中,变量 VS 来自哪里(在方程 beta=atan(sin(inputs(1)*pi/180)/(cos(inputs(1)*pi/180)+VS/inputs(2)))/pi*180; 中使用)?
  • 我认为现在您的代表已超过 10,您可能可以发布您的模型的图像。
  • 不过,我仍然不清楚 VS 是如何在您的代码中实际设置的。您使用 gamma、VT 和 VS 创建总线,然后将其作为 input 输入到您的 MATLAB 函数中。所以输入应该是一个 3 元素数组(就像旁注一样,您可以使用 Mux 而不是 Bus Creator 块来获得相同的结果)。为了访问信号 VS,您需要执行VS=input(3); 之类的操作。因为您不这样做,所以我不清楚代码中的变量 VS(不是模型中的信号 VS)实际上是如何分配的(如果有的话)。

标签: matlab real-time simulink


【解决方案1】:

这可能会有所帮助:

为什么在闭环中使用 Embedded MATLAB 模块时信号维度没有正确传播 http://www.mathworks.com/support/solutions/en/data/1-9TQFRN/?product=SL&solution=1-9TQFRN

祝你好运。

总经理

【讨论】:

  • 只提供链接是没有用的。他面临着问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多