Перестройка Simulink Rapid Accelerator для переменных входных данных

Я только что обнаружил серьезную ошибку, потому что слишком доверял Simulink, чтобы заботиться обо всех зависимостях при использовании Rapid Accelerator.

В основном у меня есть сотни итераций, работающих с одной и той же моделью, но с разными входными данными (поступающими из рабочей области MATLAB через «Из рабочей области»).

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

Теперь я могу форсировать перестроение для каждой итерации, но смысл оптимизированной модели не в этом...

Как я могу сказать Simulink просто скомпилировать один файл, содержащий ввод + компоновщик (который строит каждую итерацию), а не строить всю модель?

Даже если это не сработает: как в первую очередь принудительно выполнить перестройку?

Ни один

 Simulink.BlockDiagram.buildRapidAcceleratorTarget('my_model');

дополнительная настройка «Перестроить все (включая библиотеки)» в настройках Simulation Target, похоже, принуждает к перестроению....


person divB    schedule 30.04.2016    source источник


Ответы (1)


Это не ошибка, это хорошо задокументированный факт.

Когда модель, содержащая блок «Из рабочей области», компилируется в цель Rapid Accelerator, автономный исполняемый файл будет содержать все соответствующие переменные в рабочей области с размерами и значениями, равными тем, которые они имели во время компиляции. .

Это достаточно веская причина, чтобы избегать блоков типа «Из рабочей области» по умолчанию, за исключением быстрых и грязных симуляций в обычном режиме.

Это очевидно, если подумать — подумайте, что произойдет, если ваша модель использует переменную в рабочей области.

myVar = [1 2 3];

во время его первого запуска, но при следующем запуске вы устанавливаете

myVar = [1 2 3 4 5 6 7 8 9 10];

Гибкость такого рода тривиальна в среде MATLAB/Simulink, но реализовать ее на таком языке, как C или C++, намного сложнее. Хотя создание такой гибкости в цели быстрого ускорения возможно возможно, я бы не рекомендовал это делать.

Гораздо лучшим подходом является использование импорта для вашей модели или, что еще лучше, параметров модели. Они подробно описаны, например, в в этом сообщении блога, а также в различных другие места.

person Rody Oldenhuis    schedule 03.05.2016
comment
На самом деле, вы действительно уверены в этом? Потому что тем временем я попробовал некоторые вещи и обнаружил, что если я изменяю данные рабочей области для блока From Workspace, я все равно получаю правильный результат! Я определенно использую Rapid Accelerator. Ваш аргумент в отношении From Workspace недействителен: в этом случае любая достаточно хорошая цепочка компиляции автоматически создаст все зависимые файлы (обычно меньшее подмножество), что в точности соответствует поведению любого make и поведению, которое я, естественно, ожидаю от Simulink. Но судя по моим тестам, это кажется правдой? - person divB; 05.05.2016
comment
Еще одно замечание: Может быть, это поведение изменилось (я использую R2015a)? - person divB; 05.05.2016
comment
Чего ждать? То есть вы меняете данные рабочей области и без перестроения получаете другой результат? Тогда... В чем твоя проблема? Все, что я знаю, это то, что он не работает на R2010a (то, что я все еще использую, к сожалению), по указанной мной причине. Вот и весь смысл параметров модели и настраиваемости... Ну, может, и поменяли, я очень на это надеюсь. - person Rody Oldenhuis; 05.05.2016
comment
да. У меня есть что-то вроде for simin=1:100;sim test;end. Вся вариативность для меня исходит от From Workspace. Не уверен, что именно происходит в фоновом режиме, но нет сообщения типа ### Building the rapid accelerator target for model, за исключением первой итерации. Если бы это не учитывалось, все прогоны должны давать одинаковый результат, верно? Но они этого не делают... Могу ли я подготовить простой пример для перекрестной проверки? - person divB; 05.05.2016
comment
Что тогда пошло не так изначально? Что произошло, что заставило вас опубликовать этот вопрос, и что вы изменили? - person Rody Oldenhuis; 05.05.2016
comment
Я создал пример со всеми выводами/скриншотами на dropbox.com/s/ 9psjlhs6k564nzg/test_rapid.zip?dl=0 . Файл mdl экспортирован для R2010a, может там можно проверить? Первоначальный вопрос был связан с тем, что я получил результаты, которые не мог объяснить (возможно несвязанные), и я хотел убедиться, что могу исключить искажение некоторых данных из-за этой сборки, потому что я видел фактические данные в исходные файлы и стало неудобно. - person divB; 05.05.2016