Векторы DWork являются блоками памяти, которую S-функция просит, чтобы механизм Simulink® выделил каждому экземпляру S-функции в модели. Если несколько экземпляров вашей S-функции могут произойти в модели, ваша S-функция должна использовать векторы DWork вместо глобальной памяти или статического ЗУ, чтобы сохранить специфичные для экземпляра значения переменных S-функции. В противном случае ваша S-функция рискует данными о перезаписи экземпляра, необходимыми другому экземпляру, заставляя симуляцию привести к сбою или привести к неправильным результатам. Способность отслеживать несколько экземпляров S-функции называется повторной входимостью.
Можно создать S-функцию, которая повторно используема при помощи векторов DWork, которыми механизм управляет для каждого конкретного экземпляра S-функции.
Векторы DWork имеют несколько преимуществ:
Обеспечьте специфичное для экземпляра устройство хранения данных для основных переменных
Поддержка, с плавающей точкой, целочисленная, указатель и общие типы данных
Устраните статические и глобальные переменные
Взаимодействуйте непосредственно с механизмом Simulink, чтобы выполнить выделение памяти, инициализацию и освобождение
Упростите встраивание S-функции во время генерации кода
Обеспечьте больше управления тем, как данные появляются в сгенерированном коде
Векторы DWork являются наиболее обобщенным и универсальным типом вектора работы и особого внимания следующих разделов на их использовании. Продукт Simulink обеспечивает дополнительные элементарные типы векторов работы, которые поддерживают с плавающей точкой, целочисленный, указатель и данные о режиме. Можно найти, что обсуждение их работает векторы в Элементарных Векторах работы.
Векторы DWork обеспечивают наибольшую гибкость для установки типов данных, имен, и т.д., данных в симуляции и во время генерации кода. Следующий список описывает все свойства, которые можно установить на векторе DWork:
Тип данных
Размер
Числовой тип, или действительный или комплексный
Имя
Тип использования (см. Типы Векторов DWork),
Идентификатор Simulink Coder™
Класс памяти Simulink Coder
Simulink Coder C вводит спецификатор
Смотрите, Как Использовать Векторы DWork для получения инструкций относительно того, как установить эти свойства. Три свойства Simulink Coder принадлежат только генерации кода и не имеют никакого эффекта во время симуляции.
Главным преимуществом векторов DWork является их связь с механизмом Simulink. В течение симуляции механизм уменьшает S-функцию всех задач управления памятью, связанных с векторами DWork.
Чтобы видеть, как эта связь полезна, рассмотрите S-функцию, которая использует глобальную переменную, чтобы хранить данные. Если больше чем одна копия S-функции существует в модели, каждый экземпляр S-функции должен тщательно выделить, управлять и освободить каждую часть памяти, которую это использует.
В S-функции, которая использует векторы DWork, механизм, не S-функция, управляет памятью для вектора DWork. В начале симуляции механизм выделяет память, требуемую для каждого экземпляра S-функции на основе размера и типа данных векторного содержимого DWork. В конце симуляции механизм автоматически освобождает память.
Вы не имеете никакого контроля над тем, как механизм выделяет память для векторов DWork во время симуляции. При использовании программного обеспечения Simulink Coder можно использовать классы памяти, чтобы настроить выделение памяти во время генерации кода. Смотрите страницу с описанием ssSetDWorkRTWStorageClass
для получения дополнительной информации об использовании классов памяти.
Механизм также выполняет специальные задачи на основе типа вектора DWork, используемого в S-функции. Например, это включает векторы DWork, которые хранят информацию дискретного состояния в векторе состояния всей модели, и делает их доступными во время журналирования состояния.
Векторы DWork позволяют вам настраивать, как данные появляются в сгенерированном коде. Когда код сгенерирован, генератор кода Simulink Coder включает вектор DWork в структуру данных для модели. Вектор DWork управляет именем поля, используемым в структуре. Векторы DWork также управляют классом памяти и спецификатором типа C, используемым в сгенерированном коде. Смотрите sfun_rtwdwork.c
для примера.