В этом примере показано, как использовать один класс хранения в иерархии модели для создания кода, который является неструктурированным для данных одного экземпляра и структурированным для данных нескольких экземпляров. Если иерархия модели содержит данные одного экземпляра и нескольких экземпляров, используйте гибкий класс хранения, чтобы указать параметры для двух контекстов вместо создания двух отдельных классов хранения.
В этом примере используется модель верхнего уровня с одним экземпляром ex_mdlreftop_dd, которая ссылается на многоэкземплярную модель ex_mdlrefbot_dd три раза. Обе модели совместно используют словарь данных ex_mdlref_dd.sldd. При определении класса хранения в словаре общих данных класс можно применить к элементам данных в обеих моделях.
Открыть пример модели ex_mdlreftop_dd.
addpath(fullfile(docroot,'toolbox','ecoder','examples')) ex_mdlreftop_dd
Откройте общий словарь данных. На вкладке «Моделирование» выберите «Дизайн» > «Словарь данных».
Откройте общий словарь встроенного кодера. На панели «Иерархия моделей» обозревателя моделей разверните вкладку ex_mdlref_dd и нажмите Embedded Coder Dictionary. На правой панели щелкните Открыть словарь встроенного кодера.
Чтобы создать класс хранения, нажмите кнопку Добавить.
Для нового класса хранения на панели «Инспектор свойств» задайте следующие значения свойств:
Имя для MyStorageClass.
Выберите «Использовать различные параметры свойств для данных одного экземпляра и нескольких экземпляров».
Хранение в одном экземпляре > Тип склада для Unstructured.
Многоэкземплярное хранилище > Тип хранилища для Structured.

При подаче заявки MyStorageClass для элемента данных в словаре встроенного кодера реализуются настройки одного экземпляра или настройки нескольких экземпляров в зависимости от типа данных и контекста модели в иерархии ссылок на модель. Просмотрите реализации для различных настроек в предварительном просмотре псевдокода.
Примените класс хранения к внутренним элементам данных, указав его в качестве словаря по умолчанию. В словаре встроенного кодера щелкните Настроить параметры по умолчанию. Для строки сигналов, состояний и внутренних данных установите класс хранения в значение MyStorageClass. Нажмите кнопку ОК.
Поскольку ex_mdlreftop_dd и ex_mdlrefbot_dd поделиться словарем ex_mdlref_dd.sldd, обе модели используют MyStorageClass в качестве класса хранения по умолчанию для внутренних данных.
Откройте приложение Embedded Coder для модели ex_mdlreftop_dd.
Создайте код для модели.
Просмотрите созданный код для ссылочной модели. Чтобы открыть ссылочную модель в редакторе, дважды щелкните блок «Модель», «CounterA». Код ссылочной модели отображается в представлении «Код». В ex_mdlrefbot_dd.hкод ссылочной модели определяет структуру класса хранения, в которой хранятся внутренние данные ссылочной модели.
/* Storage class 'MyStorageClass', for model 'ex_mdlrefbot_dd' */
typedef struct {
real_T PreviousOutput_DSTATE; /* '<Root>/Previous Output' */
} ex_mdlrefbot_dd_MyStorageClass;
/* Real-time Model Data Structure */
struct ex_mdlrefbot_dd_tag_RTM {
const char_T **errorStatus;
ex_mdlrefbot_dd_MyStorageClass *MyStorageClass_ex_mdlrefbot_dd;
};Поскольку ссылочная модель является многоэкземплярной, определение реализует параметры многоэкземплярных данных MyStorageClass. Код ссылочной модели хранит внутренние данные в структуре. ex_mdlrefbot_dd_MyStorageClass.
Вернитесь к модели верхнего уровня и просмотрите созданный код. В ex_mdlreftop_dd.c, код модели верхнего уровня определяет свои внутренние данные для каждого блока модели путем создания экземпляра класса хранения ссылочной модели; ex_mdlrefbot_dd_MyStorageClass.
/* Storage class 'MyStorageClass' */ ex_mdlrefbot_dd_MdlrefDW ex_mdlreftop_dd_CounterA_InstanceData; ex_mdlrefbot_dd_MdlrefDW ex_mdlreftop_dd_CounterB_InstanceData; ex_mdlrefbot_dd_MdlrefDW ex_mdlreftop_dd_CounterC_InstanceData; /* Storage class 'MyStorageClass' */ ex_mdlrefbot_dd_MyStorageClass MyStorageClass_CounterA; /* Storage class 'MyStorageClass' */ ex_mdlrefbot_dd_MyStorageClass MyStorageClass_CounterB; /* Storage class 'MyStorageClass' */ ex_mdlrefbot_dd_MyStorageClass MyStorageClass_CounterC;
Поскольку модель верхнего уровня - одноэкземплярная, эти определения реализуют одноэкземплярные параметры данных MyStorageClass. Верхняя модель также упаковывает собственные внутренние данные как автономные переменные с помощью параметров данных одного экземпляра. Код модели верхнего уровня не содержит определения структуры для внутренних данных.