向量作为输入如何在Simulink中的解释Matlab功能块中工作?

时间:2018-12-10 23:55:45

标签: matlab simulink s-function

我在matlab中编写了此函数:

function out = summa(in1,in2)
out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3)

我已经在simulink中实现了它,如下所示:

Simulink diagram

在我写的matlab功能块中

summ(u(1),u(2))

我收到以下错误:

Simulink Error

如果我从控制台输入矢量,该函数将正常工作,如下所示:

summa([1 2 3 4 5 6],[1 2 3])

我得到27作为输出

我在做什么错?我感到多路复用器无法正常运行,或者该块的参数不正确。

1 个答案:

答案 0 :(得分:3)

您是正确的-多路复用器模块没有按照您的想法进行操作。

Interpreted MATLAB块的输入是一个9个元素的向量,其中u(1)u(2)是该向量的前两个元素。因此,在函数in1in2中都是标量,您只能访问它们的第一个/唯一元素。尝试访问in1(2)等会引发您看到的错误。

您应该在其中包含以下代码的MATLAB Function块中使用

function y = fcn(in1,in2)

coder.extrinsic('summa'); % This allows you to call the  external function
y = 0;  % This tells Simulink that the output will be a double
y = summa(in1,in2);

您将看到该块具有2个输入,应将常量块的输出分别输入到它们中。

甚至更好,如果可能的话,根本不要使用外部功能。将所有代码放入MATLAB Function块中的函数中,

function out = fcn(in1,in2)

out = in1(1)+ in1(2)+ in1(3)+ in1(4)+ in1(5)+ in1(6)+ in2(1)+ in2(2)+ in2(3);