Это содержимое характерно для программного обеспечения Simscape™ Multibody™ First Generation. Функции первого поколения намечают, чтобы быть удержанными от использования и нужно избежать.
Можно использовать программное обеспечение Simscape Multibody с Simulink® Coder™, чтобы сгенерировать автономный код С из механических моделей и улучшить скорость симуляции и мобильность. Определенные функции Simulink также используют сгенерированный или внешний код. Этот раздел объясняет связанные с кодом задачи, которые можно выполнить с моделями Simscape Multibody.
Версии сгенерированного кода моделей Simscape Multibody обычно требуют фиксированного шага решатели Simulink, которые обсуждены в Улучшании Производительности. Некоторые функции Simscape Multibody ограничиваются, когда вы генерируете код из модели. Смотрите Ограничения.
Код, сгенерированный из моделей Simscape Multibody, предназначается для быстрого прототипирования и оборудования в приложениях цикла. Это не предназначается для генерации производственного кода во встроенных приложениях контроллера.
Программное обеспечение Simscape Multibody совместно использует большинство тех же функций генерации кода как программное обеспечение Simscape. В этом разделе описываются функции генерации кода, характерные для программного обеспечения Simscape Multibody. Консультируйтесь с документацией Simscape для получения общей информации о генерации кода и Физическом Моделировании.
С Simulink, Simulink Coder и программным обеспечением Simulink Real-Time™, с помощью нескольких связанных с кодом технологий, можно соединить существующий код с моделями и сгенерировать версии кода моделей.
Связанная с кодом задача | Компонент или функция |
---|---|
Соедините существующий код, написанный в C или других поддерживаемых языках к моделям Simulink | S-функции Simulink, чтобы сгенерировать настроенные блоки |
Ускорьте симуляции Simulink | Режим Accelerator Быстрый Режим Accelerator |
Сгенерируйте автономный код фиксированного шага из моделей Simulink | Программное обеспечение Simulink Coder |
Сгенерируйте автономный код переменного шага из моделей Simulink | Simulink Coder быстрая цель симуляции (RSIM) |
Преобразуйте модели Simulink, чтобы закодировать и запустить их на целевом PC | Программное обеспечение Simulink Coder и Simulink Real-Time |
Сгенерируйте блоки, представляющие Simulink модели или подсистемы | Цель S-функции* |
Сгенерируйте код для обозначенных моделей или подсистем | Режим Accelerator модели - ссылки |
* Цель S-функции поддерживается с моделями Simscape Multibody или подсистемами, но не с программным обеспечением Simscape. Преобразование подсистемы Simscape Multibody к Блоку s-function позволяет вам запускать модель с одним только Simulink.
В общем случае использование кода, сгенерированного из моделей Simscape Multibody, похоже на использование кода, сгенерированного от Simscape и нормальных моделей Simulink. Документация Simscape обсуждает различия между генерацией кода в Simulink и в Simscape.
Существенное различие между Simscape и генерацией кода Simscape Multibody - то, что несколько блоков Simscape Multibody действительно поддерживают ограниченный набор настраиваемых параметров. Консультируйтесь с разделами Используя Параметры периода выполнения в Сгенерированном коде и Большинстве Настраиваемых параметров, Не Поддержанных Simscape Multibody Software.
Когда программное обеспечение Simscape Multibody генерирует код для модели, это создает набор кода исходные и заголовочные файлы. Этот набор включает modelname
.c
и modelname
_data.c
, содержа параметры периода выполнения всей модели. Кроме того, программное обеспечение Simscape Multibody генерирует два файла, которые содержат структуры данных и прототипов функции для одних только блоков Simscape Multibody.
modelname
.c
файл содержит все параметры периода выполнения, используемые в скомпилированной симуляции. modelname
_data.c
и два специальных файла Simscape Multibody являются вспомогательными глаголами, чтобы помочь в определении местоположения и изменении данных во время выполнения.
Как с кодом, сгенерированным из любой модели Simulink без встраивания параметра, можно изменить любые параметры периода выполнения путем изменения их значений в структуре данных параметров блоков, реализованной в modelname
_data.c
. В этой структуре данных, однако, параметры блоков Simscape Multibody не сопоставлены с их исходными блоками. Скорее параметры блоков Simscape Multibody группируются в один вектор, сопоставленный с первой S-функцией Simscape Multibody для каждой машины в модели.
Структуры данных и функции найдены в специальных файлах Simscape Multibody, rt_mechanism_data.h
и rt_mechanism_data.c
, позвольте вам изменять параметры блоков Simscape Multibody в сгенерированном коде. Специальный заголовочный файл содержит структуру данных, MachineParameters_
modelname
_
uniqueid
, для каждой машины в модели, которая включает поле для каждого параметра периода выполнения блока. Изменить механические параметры периода выполнения,
Используйте функцию rt_vector_to_machine_parameters_
в специальном исходном файле кода, чтобы создать экземпляр структуры данных параметров машины от векторизованных параметров, сопоставленных с S-функцией Simscape Multibody.modelname_uniqueid
Сделайте необходимые модификации к значениям в экземпляре структуры данных.
Используйте rt_machine_parameters_to_vector_
восстановить векторизованные параметры от экземпляра структуры данных.modelname_uniqueid
Перекомпилируйте свой сгенерированный код.
Этот листинг кода является примером простой функции, которая обновляет массу первого тела в примере mech_dpen
. Аргумент p
должен быть указатель на вектор параметра, сопоставленный с S-функцией Simscape Multibody. Аргумент mass
новая масса для первого тела. Необходимо вызвать эту функцию перед инициализацией модели.
void update_mech_dpen_parameters(real_T *p, real_T mass) { MachineParameters_mech_dpen_752c07b6 ds; /* * convert parameter vector into data structure */ rt_vector_to_machine_parameters_mech_dpen_752c07b6(p, &ds); /* * change the mass of the first body in the double pendulum */ ds.Body.Mass = mass; /* * convert the data structure back to the parameter vector */ rt_machine_parameters_to_vector_mech_dpen_752c07b6(&ds, p); }