Векторы 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
для примера.