Simulink: выполнение математических операций с сигналами многоуровневой шины

Я ищу метод суммирования сигналов многоуровневой шины
на самом низком уровне их иерархии
без потери структуры сигнала шины.

MWE

Например, в приведенном ниже MWE
сигнал шины автоматически суммируется на самом низком уровне,
однако сигнал шины теряется после прохождения через блок Add.

Вместо этого создается векторный сигнал.

МВЕ

Я бы предпочел метод, который дает:

red + blue = purple

или более конкретно:

red.[a b c].[1 2] + blue.[a b c].[1 2] --> purple.[a b c].[1 2]

куда

purple.b.3 = red.b.3 + blue.b.3

и так далее.


person kando    schedule 07.03.2016    source источник


Ответы (1)


Насколько мне известно, единственная возможность выполнять математические операции с сигналами шины — использовать блок MATLAB Function. Помните о потенциально плохой производительности!

Чтобы использовать блок MATLAB Function, сначала сгенерируйте соответствующий объект шины и убедитесь, что два создателя шины, объединяющие a / b / c, назначены для вывода этого объекта шины. При этом вы получите сообщение об ошибке, потому что 1 и 2 не являются допустимыми именами полей, я изменил их на x1 и x2.

На следующем шаге создайте функциональный блок MATLAB. Установите два входа и один вывод в ваш предыдущий определенный объект шины. Вставьте следующий код:

function y = fcn(u, v)
%#codegen

y.a=innerplus(u.a,v.a);
y.b=innerplus(u.b,v.b);
y.c=innerplus(u.c,v.c);
end

function y=innerplus(u,v)
y.x1=u.x1+v.x1;
y.x2=u.x2+v.x1;
end

введите здесь описание изображения

person Daniel    schedule 07.03.2016
comment
Это полезное начало. Я не понимал, что структуры шины могут быть интерпретированы в среде Matlab как элементы структурного типа. Ваш пример относится к определенному размеру; Я спрошу, как добавить структуры в отдельный вопрос и предоставлю ссылку ниже. - person kando; 07.03.2016
comment
@kando: это описано в документации (mathworks.com/help/simulink/ug/). Если что-то неясно, не стесняйтесь задавать вопрос, но я думаю, что это должно объяснить это. - person Daniel; 07.03.2016