Генерация кода

Предупреждение

Это содержимое характерно для программного обеспечения Simscape™ Multibody™ First Generation. Функции первого поколения намечают, чтобы быть удержанными от использования и нужно избежать.

О генерации кода из моделей Simscape Multibody

Можно использовать программное обеспечение 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 или других поддерживаемых языках к моделям SimulinkS-функции Simulink, чтобы сгенерировать настроенные блоки
Ускорьте симуляции SimulinkРежим Accelerator
Быстрый Режим Accelerator
Сгенерируйте автономный код фиксированного шага из моделей SimulinkПрограммное обеспечение Simulink Coder
Сгенерируйте автономный код переменного шага из моделей SimulinkSimulink Coder быстрая цель симуляции (RSIM)
Преобразуйте модели Simulink, чтобы закодировать и запустить их на целевом PCПрограммное обеспечение Simulink Coder и Simulink Real-Time
Сгенерируйте блоки, представляющие Simulink модели или подсистемыЦель S-функции*
Сгенерируйте код для обозначенных моделей или подсистемРежим Accelerator модели - ссылки

* Цель S-функции поддерживается с моделями Simscape Multibody или подсистемами, но не с программным обеспечением Simscape. Преобразование подсистемы Simscape Multibody к Блоку s-function позволяет вам запускать модель с одним только Simulink.

Как генерация кода Simscape Multibody отличается от Simulink

В целом использование кода, сгенерированного из моделей Simscape Multibody, подобно использованию кода, сгенерированного от Simscape и нормальных моделей Simulink. Документация Simscape обсуждает различия между генерацией кода в Simulink и в Simscape.

Ограниченный набор настраиваемых параметров Simscape Multibody

Существенное различие между Simscape и генерацией кода Simscape Multibody - то, что несколько блоков Simscape Multibody действительно поддерживают ограниченный набор настраиваемых параметров. Консультируйтесь с разделами Используя Параметры периода выполнения в Сгенерированном коде и Большинстве Настраиваемых параметров, Не Поддержанных Simscape Multibody Software.

Используя параметры периода выполнения в сгенерированном коде

Когда программное обеспечение Simscape Multibody генерирует код для модели, это создает набор кода исходные и заголовочные файлы. Этот набор включает modelname .c и modelname _data.c, содержа параметры периода выполнения всей модели. Кроме того, программное обеспечение Simscape Multibody генерирует два файла, которые содержат структуры данных и прототипов функции для одних только блоков Simscape Multibody.

Файл .c modelname содержит все параметры периода выполнения, используемые в скомпилированной симуляции. 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, для каждой машины в модели, которая включает поле для каждого параметра периода выполнения блока. Изменить механические параметры периода выполнения,

  1. Используйте функциональный rt_vector_to_machine_parameters_modelname_uniqueid в специальном исходном файле кода, чтобы создать экземпляр структуры данных параметров машины от векторизованных параметров, сопоставленных с S-функцией Simscape Multibody.

  2. Сделайте необходимые модификации к значениям в экземпляре структуры данных.

  3. Используйте rt_machine_parameters_to_vector_modelname_uniqueid, чтобы восстановить векторизованные параметры от экземпляра структуры данных.

  4. Перекомпилируйте свой сгенерированный код.

Пример: изменение параметров блоков

Этот листинг кода является примером простой функции, которая обновляет массу первого тела в примере 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);
}