exponenta event banner

Основы вектора DWork

Что такое вектор DWork?

Векторы DWork - это блоки памяти, которые S-функция просит механизм Simulink ® выделить каждому экземпляру S-функции в модели. Если в модели может возникнуть несколько экземпляров S-функции, то для хранения специфичных для экземпляра значений переменных S-функции необходимо использовать векторы DWork вместо глобальной или статической памяти. В противном случае S-функция рискует перезаписать данные одного экземпляра, необходимые другому экземпляру, что приводит к сбою моделирования или получению неверных результатов. Возможность отслеживать несколько экземпляров S-функции называется повторным вхождением.

Можно создать S-функцию, которая повторно вводится с помощью векторов DWork, управляемых механизмом для каждого конкретного экземпляра S-функции.

Векторы DWork имеют несколько преимуществ:

  • Предоставление специфичного для экземпляра хранилища для блочных переменных

  • Поддержка плавающей точки, целого числа, указателя и общих типов данных

  • Устранение статических и глобальных переменных

  • Взаимодействие непосредственно с модулем Simulink для выделения памяти, инициализации и отмены выделения

  • Упрощение встраивания S-функции во время генерации кода

  • Предоставление дополнительных возможностей управления отображением данных в созданном коде

Примечание

Векторы DWork являются наиболее обобщенным и универсальным типом рабочего вектора, и следующие разделы посвящены их использованию. Продукт Simulink предоставляет дополнительные элементарные типы рабочих векторов, которые поддерживают данные с плавающей запятой, целочисленные, указатели и режимы. Эти векторы работы можно найти в разделе Элементарные векторы работы.

Векторы DWork обеспечивают наибольшую гибкость при настройке типов данных, имен и т.д. данных при моделировании и во время генерации кода. В следующем списке описаны все свойства, которые можно задать для вектора DWork:

  • Тип данных

  • Размер

  • Числовой тип, вещественный или комплексный

  • Имя

  • Тип использования (см. Типы векторов DWork)

  • Идентификатор Coder™ Simulink

  • Класс хранения Simulink Coder

  • Квалификатор типа Simulink Coder C

Инструкции по установке этих свойств см. в разделе Использование векторов DWork. Три свойства Simulink Coder относятся только к генерации кода и не оказывают влияния во время моделирования.

Векторы DWork и Simulink Engine

Ключевым преимуществом векторов DWork является их подключение к движку Simulink. В ходе моделирования движок освобождает S-функцию всех задач управления памятью, связанных с векторами DWork.

Чтобы увидеть, как это соединение полезно, рассмотрим S-функцию, использующую глобальную переменную для хранения данных. Если в модели существует более одной копии S-функции, каждый экземпляр S-функции должен тщательно распределять, манипулировать и освобождать каждый используемый фрагмент памяти.

В S-функции, которая использует векторы DWork, подсистема, а не S-функция, управляет памятью для вектора DWork. В начале моделирования подсистема выделяет память, необходимую для каждого экземпляра S-функции, на основе размера и типа данных содержимого вектора DWork. В конце моделирования модуль автоматически освобождает память.

Примечание

При моделировании модуль не может управлять распределением памяти для векторов DWork. При использовании программного обеспечения Simulink Coder можно использовать классы хранения для настройки выделения памяти во время создания кода. См. раздел ssSetDWorkRTWStorageClass для получения дополнительной информации об использовании классов хранения.

Движок также выполняет специальные задачи на основе типа вектора DWork, используемого в S-функции. Например, он включает векторы DWork, которые сохраняют дискретную информацию о состоянии в векторе состояния всей модели и делают их доступными во время регистрации состояния.

Векторы DWork и продукт Simulink Coder

Векторы DWork позволяют настраивать отображение данных в сгенерированном коде. При создании кода генератор кода Simulink Coder включает вектор DWork в структуру данных модели. Вектор DWork управляет именем поля, используемым в структуре. Векторы DWork также управляют классом хранения и квалификатором типа C. Посмотрите sfun_rtwdwork.c например.