Simulink: синхронизация и синхронизация - PullRequest
3 голосов
/ 28 января 2011

Для того, чтобы смоделировать некоторые процессы, у меня проблема с получением предопределенного рабочего порядка для моих самомоделируемых блоков.

Как я могу быть уверен, что, например, блок А должен быть закончен до того, как блок В и С начнут работать?

Проблема в том, что некоторые блоки должны работать после некоторых других, а некоторые - нет. Я должен признать, что у меня нет большого опыта работы с Simulink для выполнения зависящих от времени вещей (хотя базовые знания Simulink доступны).

Например, этот сценарий должен быть реализован:

A -> B, C -> D, E, F

Главное, что все блоки A-F не ​​имеют логической корреляции друг с другом, все они делают несколько вещей. Моя цель - заставить В и С начать работать после того, как А закончил. И D / E / F после B и C закончили. В этом случае слово «параллель» было неправильным, это не должно быть вычислено действительно параллельно. Просто убедившись, что это соответствует заранее определенному устойчивому порядку.

Изменить: Моя новая идея состоит в том, чтобы использовать буфер als рабочей области matlab, чтобы мой блок A мог отправить свои результаты в рабочую область (с помощью блока "to workspace"). Но теперь я должен убедиться, что блоки B и C могут считывать результаты (с «Из рабочего пространства») A ПОСЛЕ того, как A перенесла свою информацию в рабочее пространство ... как это сделать?

Edit2: Вот скриншот, который должен прояснить некоторые мысли: http://img825.imageshack.us/img825/2830/screenshotbs.jpg Как указано в документации «Порядок сортировки», настройка, кажется, в порядке (включая синхронизацию подсистем). Но, к сожалению, проблема все еще существует. Переменная «simin» загружается из рабочей области до того, как она была записана :( Как видите, на дисплее отображается «1», чего не должно быть. В самом первом запуске симуляции я получаю исключение, что переменная "Симин" не существует.

Было бы неплохо, если бы вы могли помочь мне с моей проблемой.

Привет, poeschlorn

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

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

Подсказка для проверки порядка выполнения - добавить «встроенный блок Matlab»."с командой disp, отображающей название блока.

1 голос
/ 28 января 2011

Итак, в вашем примере, если у вас есть блок A, подключенный с помощью одного и того же провода к B и C, когда блок A будет завершен, блоки B и C будут работать параллельно.

EDIT: Я использую те же блоки, что и вы, но у меня это работает. Я думаю, что вы слишком усложняете вещи. То, как вы устанавливаете приоритеты блоков, ничем не отличается от того, как Simulink запускает блоки без них. Ниже вы можете увидеть мои настройки и вывод на обоих двоичных дисплеях.

enter image description here

Ошибка, которую вы видите при первом запуске, связана с тем, что Simulink не создает переменную до выполнения первого временного шага. Когда Simulink создает симуляцию, он видит, что переменная, используемая в качестве входных данных из рабочей области, не создается.

0 голосов
/ 29 января 2011

Не совсем понятно, о чем вы спрашиваете.Когда вы говорите, что блок А должен быть закончен, вы имеете в виду функцию вывода?В Simulink работает симуляция так, что блоки запускаются последовательно, поэтому блоки B и C никогда не будут работать, пока блок A не завершит свою функцию вывода.

Я не знаю ни одного очевидного способа запуска блоков B иC параллельно в настоящее время в Simulink.

...