Все векторы DWork представляют собой S-функциональную память, управляемую механизмом Simulink ®. Программное обеспечение Simulink поддерживает четыре типа векторов DWork:
Общие векторы DWork содержат информацию любого типа данных.
Векторы Dstate содержат дискретную информацию о состоянии. Информация, сохраненная в векторе Dstate, отображается в линеаризованной модели как состояние и доступна во время регистрации состояния.
Скретч-векторы содержат значения, которые не должны сохраняться с одного шага времени до следующего.
Векторы режимов содержат информацию о режимах, обычно хранящуюся как логические или целочисленные данные.
S-функции регистрируют тип вектора DWork с помощью ssSetDWorkUsageType макро. Этот макрос принимает один из четырех типов использования, описанных в следующей таблице.
| DWork | Тип использования | Функциональность |
|---|---|---|
| Общая информация | SS_DWORK_USED_AS_DWORK | Сохранение постоянных данных для конкретного экземпляра. Общие векторы DWork также могут использоваться для хранения дискретных данных о состоянии и режиме, однако механизм Simulink не будет обрабатывать эту информацию специально. Можно использовать общий вектор DWork для хранения информации о состоянии, если требуется избежать ведения журнала данных. |
| DState | SS_DWORK_USED_AS_DSTATE | Хранить дискретную информацию о состоянии. Использование вектора Dstate вместо ssSetNumDiscStates хранение дискретных состояний обеспечивает большую гибкость для именования и ввода данных состояний. Двигатель маркирует блоки с дискретными состояниями как специальные во время распространения времени выборки. Кроме того, механизм делает данные, сохраненные в векторе Dstate, доступными во время регистрации данных. |
| Способ | SS_DWORK_USED_AS_MODE | Для модуля Simulink укажите, что S-функция содержит режимы. Движок обрабатывает блоки с режимами специально при решении алгебраических циклов. Кроме того, механизм обновляет S-функцию с режимами только на основных временных шагах. Векторы режима DWork эффективнее, чем рабочие векторы стандартного режима (см. Элементарные рабочие векторы), поскольку они могут хранить информацию о режиме в виде булевых данных. Кроме того, хотя S-функция имеет только один рабочий вектор режима, она может иметь несколько векторов DWork, сконфигурированных для хранения режимов. |
| Царапина | SS_DWORK_USED_AS_SCRATCH | Храните память, которая не является постоянной, например, большую переменную, которую не нужно отмечать в стеке. Векторы скретча привязаны к определенному методу S-функции (например, mdlOutputs) и существуют на одном временном шаге. Скретч-память может быть разделена между S-функциональными блоками. Модуль Simulink пытается минимизировать объем памяти, используемый переменными scratch, и по возможности повторно использует память scratch. |