Как векторы как входы работают в интерпретируемом функциональном блоке matlab в Simulink? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть эта функция, написанная в 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 голосов
/ 11 декабря 2018

Вы правы - блок мультиплексирования не выполняет то, что вы думаете.

Вход в блок Interpreted MATLAB представляет собой вектор из 9 элементов, причем u(1) и u(2) являются первыми двумяэлементы этого вектора.Следовательно, в функции in1 и in2 есть оба скаляра, и вы не можете получить доступ более чем к первому / единственному их элементу.Попытка получить доступ к 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);
...