schoolМатематика
verifiedРешено AI
Решение: Ошибка 'Error in port widths or dimensions' в Simulink (Mux и Fcn)
help_outlineУсловие задачи
Большой блок как соединить Реши задачу: А где выход порта 1 Реши задачу: Значения констант записать и считывать с воркспейс как сделать

lightbulbКраткий ответ
Ошибка 'Error in port widths or dimensions' в Simulink возникает из-за несоответствия размерности входного сигнала блока Fcn. Убедитесь, что Fcn использует u(1), u(2) и т.д. для работы с векторным входом от Mux.
Подробное решение
Эта ошибка "Error in port widths or dimensions" означает, что блок **Fcn** ожидает на вход один сигнал, а получает от блока **Mux** вектор из трех сигналов. Это происходит потому, что по умолчанию блок **Fcn** может быть не настроен на работу с вектором, или в его настройках есть несоответствие.
Вот как это исправить, чтобы все заработало:
1. Проверьте настройки блоков Fcn
Дважды щелкните на каждый блок **Fcn** (Fcn, Fcn1, Fcn2) и убедитесь, что в поле "Expression" (Выражение) вы используете \( u(1) \), \( u(2) \) и так далее.
Например, для верхнего блока: \( (-u(1) \cdot u(2)) / V + K3 \cdot u(3) \).
Использование буквы \( u \) с индексом в скобках автоматически говорит Simulink, что на вход приходит вектор (массив) из нескольких элементов.
2. Проверьте блок Mux
Ошибка указывает на **Mux1**. Убедитесь, что количество входов в блоке Mux (Number of inputs) строго соответствует количеству переменных, которые вы используете в формуле блока Fcn.
Если в формуле есть \( u(1), u(2), u(3) \), то у Mux должно быть ровно 3 входа.
Если вы добавили \( A_0 \) как четвертый сигнал (как мы обсуждали ранее для нижнего блока), то у нижнего Mux должно быть 4 входа, а в формуле должно появиться \( u(4) \).
3. Почему возникает ошибка "Input port 1 of Fcn is a one dimensional vector with 1 elements"
Это самая важная часть. Simulink иногда "думает", что блок Fcn должен принимать только одно число.
Чтобы это вылечить:
Зайдите в настройки блока **Fcn**.
Убедитесь, что там нет галочек или параметров, ограничивающих размерность (обычно в стандартном блоке Fcn их нет, он понимает векторы сам, если написаны индексы \( u(i) \)).
Проверьте, не перепутали ли вы блок **Fcn** с блоком **MATLAB Function**. Если вы используете **MATLAB Function** (квадратный блок), там нужно внутри кода прописывать размерности. Но на ваших фото обычные блоки **Fcn** (скругленные), они должны работать с \( u(1), u(2) \).
4. Порядок действий для исправления:
1. Откройте нижний блок **Fcn2**.
2. Проверьте формулу. Она должна быть:
\[ (u(1) \cdot (u(4) - u(2))) / V + K2 \cdot u(3) - K1 \cdot u(2) \]
3. Посмотрите на **Mux**, который стоит перед ним. Нажмите на него дважды и установите "Number of inputs" равным 4.
4. Убедитесь, что в этот Mux воткнуты 4 линии: от \( v \), от \( A \), от \( B \) и от \( A_0 \) (из большого блока).
Если ошибка сохраняется для верхнего блока **Fcn** (где 3 входа):
1. Проверьте, что в Mux перед ним стоит "Number of inputs" = 3.
2. Проверьте формулу: \( (-u(1) \cdot u(2)) / V + K3 \cdot u(3) \).
Как только индексы в формуле \( u(1), u(2)... \) совпадут с количеством входов в Mux, ошибка исчезнет.