exponenta event banner

Подробный рабочий процесс для управления данными со ссылкой на модель

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

Основные сведения об этом разделе см. в разделе Введение в управление данными со ссылкой на модель.

Примерные требования

В этом примере Simulink ® и Simulink ® Coder™ создавать код в папке создания кода, созданной в текущей папке. Если вы не хотите (или не можете) создавать файлы в этом каталоге, необходимо изменить рабочий каталог. Для создания ссылочных двоичных файлов модели, развертываемых в автономных приложениях, требуется Simulink Coder.

Если планируется изменить примеры моделей:

1. Сохраните пример в исходном состоянии путем копирования следующих файлов из каталога установки MATLAB ® без изменения их имен в другой каталог:

toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt.slx
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt_wsdata.m
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt.slx
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt_types.m
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt_wsdata.m

2. Измените текущий каталог на каталог, в который были скопированы файлы.

3. Продолжите с примера.

Открытие модели примера

open_system('sldemo_mdlref_datamngt')

Содержимое примера

В этом примере используется модель верхнего уровня (sldemo_mdlref_datamngt), который содержит три блока модели: Counter1, Counter2 и Counter3. Эти блоки ссылаются на одну и ту же модель (sldemo_mdlref_counter_datamngt).

Ссылочная модель реализует алгоритм ограниченного счетчика, который:

  • Сбрасывает счетчик при изменении первого входного сигнала триггера

  • Увеличивает значение счетчика на заданную величину при изменении второго ввода

  • Насыщает счетчик между указанными верхним и нижним пределами

Ссылочная модель выводит сигнал шины, который содержит:

  • Count: значение счетчика в виде 8-разрядного целого числа

  • OverflowState - перечисляемое значение, указывающее, находится ли счетчик на верхнем пределе, нижнем пределе или в диапазоне

Эта модель настроена для отображения ряда функций Simulink, работающих вместе:

  • Настраиваемые структуры параметров: сбор переменных в структуру MATLAB, параметризующую модель. В этом примере аргументы модели ссылочной модели определяются как структуры параметров.

  • Аргументы модели: передача различных значений параметров каждому экземпляру ссылки на модель.

  • Объекты шины: определение «формы» структур для сигналов и параметров, используемых в справочном интерфейсе модели. Определите имя типа для параметров структуры и сигналов в сгенерированном коде.

  • Simulink.Bus.createMATLABStruct: Статический метод создания структуры MATLAB, соответствующей форме объекта шины.

  • Инициализация шины: использует структуру параметров для инициализации сигналов и состояний шины.

  • Маскированный блок модели: создание пользовательского интерфейса для блока вхождения модели.

  • Инициированная ссылка на модель: Явный контроль над планированием компонентов.

В этом примере также используются другие функции, полезные для управления данными в Simulink:

  • Simulink.saveVars: сериализация переменных рабочей области в скрипт MATLAB. Поддержка инкрементного изменения, разностного хранения данных и управления версиями.

  • Simulink.findVars: Узнайте, как переменные рабочего пространства используются моделью.

Пример структуры

Последовательность этапов в примере следующая:

1. Подготовить ссылочную модель (sldemo_mdlref_counter_datamngt) использовать структуры для сигналов и параметров во внешнем интерфейсе.

2. Подготовить верхнюю модель (sldemo_mdlref_datamngt) для вызова ссылочной модели.

3. Моделирование модели верхнего уровня и анализ результатов.

4. Создание кода для создания автономного исполняемого файла для модели верхнего уровня.

Ссылочная модель: Настройка параметров

Ссылочная модель имеет два аргумента модели (CounterParams, CounterIC), которые параметризуют блоки в модели. Аргументы модели предоставляют различные значения параметров для каждого экземпляра ссылочной модели. В этой модели аргументы определяются как структуры параметров для уменьшения числа аргументов, передаваемых ссылочной модели.

Процесс определения аргументов модели выглядит следующим образом:

1. Откройте ссылочную модель (sldemo_mdlref_counter_datamngt).

2. Определите структуры MATLAB для параметризации ссылочной модели.

CounterParams.Increment  = int8(1);
CounterParams.LowerLimit = int8(-10);
CounterParams.UpperLimit = int8(10);
CounterICs.Count         = int8(0);
CounterICs.OverflowState = SlDemoRangeCheck.InRange;

ПРИМЕЧАНИЕ: В этом примере для счетчика используется 8-разрядное целое число, поэтому в числовых полях также используются 8-разрядные целые числа.

3. Используйте структуры MATLAB в качестве аргументов модели.

Аргументы модели определяются как переменные в рабочем пространстве модели ссылочной модели. Рабочую область модели можно инициализировать из нескольких различных источников данных. В этом примере используется сценарий MATLAB (sldemo_mdlref_counter_datamngt_wsdata) для создания структур параметров для аргументов модели. Использование сценария MATLAB упрощает создание и изменение структуры параметров вне модели. Это также облегчает инкрементные изменения, контроль версий и разностные данные.

Задайте источник данных в диалоговом окне рабочего пространства модели.

Можно также задать источник данных в командной строке MATLAB:

hWS = get_param('sldemo_mdlref_counter_datamngt', 'ModelWorkspace');
hWS.DataSource = 'MATLAB File';
hWS.FileName = 'sldemo_mdlref_counter_datamngt_wsdata.m';
hWS.reload;

Обозреватель моделей можно использовать для просмотра и правки содержимого рабочего пространства модели.

Установите флажок Аргумент (Argument), чтобы настроить переменные в качестве аргументов модели.

Можно также задать список аргументов модели в командной строке MATLAB:

set_param('sldemo_mdlref_counter_datamngt', ...
          'ParameterArgumentNames', 'CounterParams,CounterICs');

4. Узнайте, как ссылочная модель использует аргументы модели.

В ряде блоков ссылочной модели используются аргументы модели:

  • Блок константы определяет величину приращения (CounterParams.Increment).

  • В различных блоках подсистемы «Range Check» используются значения нижнего и верхнего пределов (CounterParams.LowerLimit и CounterParams.UpperLimit).

  • В различных блоках используется начальное условие счетчика (CounterICs.Count).

  • Корневой блок Outport использует начальную структуру условий (CounterIC) для инициализации вывода системы перед выполнением.

Для обнаружения блоков, использующих аргумент модели, можно использовать Simulink.findVars.

paramInfo = Simulink.findVars('sldemo_mdlref_counter_datamngt', ...
                              'Name', 'CounterParams');
icInfo    = Simulink.findVars('sldemo_mdlref_counter_datamngt', ...
                              'SearchMethod', 'cached', ...
                              'Name',         'CounterICs');
paramBlks = paramInfo.UsedByBlocks
icBlks    = icInfo.UsedByBlocks
paramBlks =

  3x1 cell array

    {'sldemo_mdlref_counter_datamngt/Increment'                  }
    {'sldemo_mdlref_counter_datamngt/Range Check/Detect Overflow'}
    {'sldemo_mdlref_counter_datamngt/Range Check/Saturate Count' }


icBlks =

  3x1 cell array

    {'sldemo_mdlref_counter_datamngt/Initial Count' }
    {'sldemo_mdlref_counter_datamngt/Previous Count'}
    {'sldemo_mdlref_counter_datamngt/outputs'       }

ПРИМЕЧАНИЕ: После компиляции модели можно использовать Simulink.findVars для получения информации об использовании «кэшированных» переменных.

Ссылочная модель: Определение формы выходного сигнала шины

Ссылочная модель дает два результата и упаковывает их в сигнал шины:

  • Count: значение счетчика в виде 8-разрядного целого числа

  • OverflowState - перечисляемое значение, указывающее, находится ли счетчик на верхнем пределе, нижнем пределе или в диапазоне

Чтобы определить тип шины для корневого вывода ссылочной модели:

1. Используйте редактор шины для определения объекта шины (OutputType).

Можно также создать объект шины в командной строке MATLAB:

OutputType = Simulink.Bus;
OutputType.Elements = Simulink.BusElement;
OutputType.Elements(1).Name = 'Count';
OutputType.Elements(1).DataType = 'int8';
OutputType.Elements(2) = Simulink.BusElement;
OutputType.Elements(2).Name = 'OverflowState';
OutputType.Elements(2).DataType = 'Enum: SlDemoRangeCheck';

2. Настройте корневой аутпорт ссылочной модели для вывода невиртуального сигнала шины на основе этого объекта шины (OutputType).

Можно также задать параметры блока в командной строке MATLAB:

set_param('sldemo_mdlref_counter_datamngt/outputs', ...
          'UseBusObject',      'on', ...
          'BusObject',         'OutputType', ...
          'BusOutputAsStruct', 'on');

3. Создайте сценарий MATLAB для воссоздания этого объекта шины.

В этом примере используется сценарий MATLAB (sldemo_mdlref_counter_datamngt_types) для воссоздания объектов шины, используемых ссылочной моделью.

Этот сценарий MATLAB можно создать вручную или использовать Simulink.saveVars:

Simulink.saveVars('sldemo_mdlref_counter_datamngt_types.m', 'OutputType');

4. Настройте ссылочную модель для создания глобальных данных, которые она использует.

Обычно модель воссоздает все глобальные данные и типы, которые она использует. В этом примере PreLoadFcn ссылочной модели используется для выполнения сценария MATLAB, который создает объекты шины для ссылочной модели. В ссылочной модели не используются другие глобальные переменные.

Для установки PreLoadFcn откройте диалоговое окно Свойства модели (Model Properties) на вкладке Моделирование (Modeling), щелкнув стрелку кнопки Параметры модели (Model Settings), а затем в разделе Верхняя модель (Top Model) выберите Свойства модели (Model Properties). На вкладке Обратные вызовы диалогового окна Свойства модели (Model Properties) в поле Функция предварительной загрузки модели (Model pre-load function) вызовите sldemo_mdlref_counter_datamngt_types и нажмите кнопку «Применить».

Также можно задать обратный вызов из командной строки MATLAB.

set_param('sldemo_mdlref_counter_datamngt', ...
          'PreLoadFcn', 'sldemo_mdlref_counter_datamngt_types');

5. Узнайте, как тип шины используется в иерархии модели.

Этот тип шины является частью интерфейса для ссылочной модели и упоминается блоками как в верхней, так и в ссылочной модели. Используйте find_mdlrefs и Simulink.findVars, чтобы узнать обо всех местах, где этот объект шины используется в иерархии ссылок модели.

models = find_mdlrefs('sldemo_mdlref_datamngt');
open_system(models);
varInfo = Simulink.findVars(models, 'Name', 'OutputType');
blks = vars.UsedByBlocks
models =

  2x1 cell array

    {'sldemo_mdlref_counter_datamngt'}
    {'sldemo_mdlref_datamngt'        }


blks =

  7x1 cell array

    {'sldemo_mdlref_counter_datamngt/Initial Count'          }
    {'sldemo_mdlref_counter_datamngt/Previous Count'         }
    {'sldemo_mdlref_counter_datamngt/Range Check/Bus Creator'}
    {'sldemo_mdlref_counter_datamngt/outputs'                }
    {'sldemo_mdlref_datamngt/Counter1'                       }
    {'sldemo_mdlref_datamngt/Counter2'                       }
    {'sldemo_mdlref_datamngt/Counter3'                       }

Ссылочная модель: Установка начального значения для вывода шины

В общем, начальные значения сигналов и состояний шины могут быть определены как «0», и в этом случае все элементы шины будут инициализированы как ноль (или соответствующее значение земли). Однако в некоторых случаях желательно задавать ненулевые начальные значения для сигналов и состояний шины. В этом примере начальное состояние счетчика настраивается, поэтому начальное значение выходного сигнала должно быть установлено последовательно.

Чтобы указать начальное значение вывода ссылочной модели:

1. Создайте структуру параметров, совместимую с сигналом шины, который требуется инициализировать. Одним из аргументов модели (CounterIC) является структура параметров, которая соответствует форме выходного сигнала. Эта структура была определена следующим образом:

CounterICs.Count         = int8(0);
CounterICs.OverflowState = SlDemoRangeCheck.InRange;

Можно также использовать статический метод Simulink.Bus.createMATLABStruct для создания структуры с использованием значения основания OutputType.

CounterICs = Simulink.Bus.createMATLABStruct('OutputType');

2. Откройте диалоговое окно для корневого исходящего порта и введите имя структуры (CounterIC) в поле Initial output.

Можно также задать параметры блока в командной строке MATLAB:

set_param('sldemo_mdlref_counter_datamngt/outputs', ...
         'InitialOutput', 'CounterICs');

ПРИМЕЧАНИЕ: Как правило, при инициализации сигнала или состояния шины структура параметров не должна точно соответствовать типу шины, но ее поля должны быть подмножеством элементов в объекте шины, а атрибуты этих полей должны соответствовать элементам в объекте шины.

Ссылочная модель: Маскирование ссылочной модели

Часто для настройки пользовательского интерфейса полезно маскировать ссылочную модель. Для модели можно создать маску, а затем создать ссылку на нее из блока модели. Чтобы замаскировать модель, щелкните Создать маску модели (Create Model Mask) в разделе рабочего пространства модели Обозревателя моделей (Model Explorer) для модели.

При ссылке на маскированную модель из блока модели автоматически создается маска для блока модели. Дополнительные сведения см. в разделе Создание и ссылка на маскированную модель.

Верхняя модель: Параметризация блоков модели

Ссылочная модель настроена на принятие структуры для ее аргумента модели. В этом примере каждый экземпляр ссылочной модели вызывается с различными значениями параметров.

1. Откройте верхнюю модель (sldemo_mdlref_datamngt).

2. Создайте структуры параметров с той же «формой», что и аргументы модели, определенные в ссылочной модели.

Param1.Increment  = int8(1);
Param1.LowerLimit = int8(-20);
Param1.UpperLimit = int8(20);
Param2 = Param1;
Param2.Increment  = int8(2);
IC1.Count         = int8(0);
IC1.OverflowState = SlDemoRangeCheck.InRange;
IC2 = IC1;
IC2.Count = int8(-10);

3. Задайте параметры маски для маскированных блоков модели, чтобы использовать эти параметры.

Например, параметры первого блока модели ('sldemo_mdlref_datamngt/Counter1') устанавливаются как:

  • Param1 параметров счетчика

  • IC1 для начальных условий

Можно также задать параметры блока в командной строке MATLAB:

set_param('sldemo_mdlref_datamngt/Counter1', ...
          'CounterParams', 'Param1', ...
          'CounterICs',    'IC1');

3. Создайте сценарий MATLAB для повторного создания этих переменных рабочей области.

В этом примере используется сценарий MATLAB (sldemo_mdlref_datamngt_wsdata) для воссоздания этих переменных рабочей области.

Этот сценарий MATLAB можно создать вручную или использовать Simulink.saveVars:

Simulink.saveVars('sldemo_mdlref_datamngt_wsdata.m', 'Param*');

4. Настройте модель верхнего уровня для создания всех глобальных переменных.

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

В этом примере PreLoadFcn верхней модели используется для выполнения сценариев MATLAB, которые создают данные рабочей области для верхней модели и типы для ссылочной модели. В ссылочной модели не используются глобальные данные.

set_param('sldemo_mdlref_datamngt', ...
         'PreLoadFcn', ['sldemo_mdlref_datamngt_wsdata; ', ...
                        'sldemo_mdlref_counter_datamngt_types']);

Главная модель: планирование вызовов ссылочной модели

Как упоминалось ранее, ссылочная модель реализует алгоритм ограниченного счетчика с двумя входами триггера. Алгоритм обнаруживает «растущие края» на входах триггера и реагирует следующим образом:

  • Сбрасывает счетчик при изменении первого входного сигнала триггера.

  • Увеличивает значение счетчика на заданную величину при изменении второго ввода.

В этом примере управляются все три экземпляра алгоритма счетчика с одинаковыми входами триггера, генерируемыми подсистемой Стимула. Период и время выборки входов триггера определяются значениями, введенными для параметров маски подсистемы Стимула:

  • Сброс счетчика каждые 4 секунды.

  • Счетчик приращения 5 раз в секунду (период = 0,2 секунды).

  • Время выборки составляет 0,1 секунды.

ПРИМЕЧАНИЕ: Периоды сброса и приращения должны быть не менее чем в 2 раза больше времени выборки.

Моделирование верхней модели

1. Сохраните или закройте ссылочную модель.

Необходимо сохранить ссылочную модель, прежде чем ее можно будет использовать в верхней модели. Можно также закрыть ссылочную модель и использовать исходную версию модели, приведенную в этом примере.

2. Смоделировать верхнюю модель, выбрав Моделирование (Simulation) > Выполнить (Run).

sim('sldemo_mdlref_datamngt')

ПРИМЕЧАНИЕ. При моделировании модели верхнего уровня автоматически создается цель моделирования для ссылочной модели.

3. Просмотрите результаты моделирования, отображаемые блоками области.

Создание кода для модели верхнего уровня (требуется кодер Simulink)

Чтобы создать код и создать автономный исполняемый файл для модели верхнего уровня, откройте модель верхнего уровня и нажмите клавиши Ctrl + B.

В качестве альтернативы можно использовать rtwbuild в командной строке MATLAB.

rtwbuild('sldemo_mdlref_datamngt')

ПРИМЕЧАНИе.При создании кода для модели верхнего уровня Simulink Coder автоматически создает код для ссылочной модели. Используйте Embedded Coder™ для создания встроенного кода для производственного развертывания.

Управление именем типа для аргумента модели

По умолчанию Simulink Coder создает автоматическое имя для типа структур параметров. Это имя уникально и детерминировано, но его нелегко распознать. Этим именем типа можно управлять с помощью объектов Simulink.Parameter для определения структур параметров и объектов Simulink.Bus для определения типа.

1. Определите тип шины для аргумента модели с помощью редактора шин или путем ввода следующих команд в командной строке MATLAB:

CounterParamType = Simulink.Bus;
CounterParamType.Elements = Simulink.BusElement;
CounterParamType.Elements(1).Name     = 'Increment';
CounterParamType.Elements(1).DataType = 'int8';
CounterParamType.Elements(2) = Simulink.BusElement;
CounterParamType.Elements(2).Name     = 'LowerLimit';
CounterParamType.Elements(2).DataType = 'int8';
CounterParamType.Elements(3) = Simulink.BusElement;
CounterParamType.Elements(3).Name     = 'UpperLimit';
CounterParamType.Elements(3).DataType = 'int8';

2. Измените существующий сценарий MATLAB, чтобы воссоздать этот объект шины.

Этот тип шины должен быть определен в базовом рабочем пространстве вместе с типом шины для вывода ссылочной модели. Можно вручную изменить сценарий MATLAB, определяющий типы для ссылочной модели, или использовать Simulink.saveVars для добавления этой переменной к существующему сценарию MATLAB.

Simulink.saveVars('sldemo_mdlref_counter_datamngt_types.m', 'CounterParamType', '-append');

3. Создайте Simulink.Parameters для определения аргументов модели.

Чтобы связать типы шин с аргументами модели, необходимо использовать объекты Simulink.Parameter вместо структур MATLAB в рабочем пространстве модели ссылочной модели.

CounterParams = Simulink.Parameter;
CounterParams.Value.Increment  = 1;
CounterParams.Value.LowerLimit = -10;
CounterParams.Value.UpperLimit = 10;
CounterParams.DataType = 'Bus: CounterParamType';
CounterICs = Simulink.Parameter;
CounterICs.Value.Count         = 0;
CounterICs.Value.OverflowState = SlDemoRangeCheck.InRange;
CounterICs.DataType = 'Bus: OutputType';

ПРИМЕЧАНИе.При установке типа данных объекта параметра в качестве шины можно использовать значения двойной точности для числовых полей структуры параметров. Simulink преобразует эти значения двойной точности в соответствующий числовой тип данных во время компиляции модели.

Для обновления существующего сценария MATLAB можно вручную изменить сценарий MATLAB, определяющий аргумент модели, или использовать Simulink.saveVars.

Simulink.saveVars('sldemo_mdlref_counter_datamngt_wsdata.m', '-update');

ПРИМЕЧАНИе.При использовании параметра -update нет необходимости указывать записываемые переменные, поскольку Simulink.saveVars записывает только значения переменных, уже определенных в сценарии MATLAB.

5. Перезагрузите содержимое рабочей области модели.

Изменен источник данных, используемый рабочей областью ссылочной модели. Если эта модель открыта, необходимо перезагрузить содержимое рабочей области модели.

Перезагрузку можно выполнить в диалоговом окне рабочего пространства модели или в командной строке MATLAB.

hWS = get_param('sldemo_mdlref_counter_datamngt', 'ModelWorkspace');
hWS.reload;

Управление представлением параметров в верхней модели

Аналогичный подход можно использовать для преобразования структур параметров в верхней модели для использования объектов Simulink.Parameter. Эта конфигурация обеспечивает управление именем типа и позволяет управлять отображением этих параметров в сгенерированном коде.

1. Создание объектов Simulink.Parameter с классом хранения Class Global для определения структур параметров для модели верхнего уровня в качестве экспортируемых настраиваемых переменных в создаваемом коде.

Param1 = Simulink.Parameter;
Param1.Value.Increment  = 1;
Param1.Value.LowerLimit = -10;
Param1.Value.UpperLimit = 10;
Param1.DataType = 'Bus: CounterParamType';
Param1.CoderInfo.StorageClass = 'ExportedGlobal';
Param2 = Param1.copy;
Param2.Value.Increment = 2;
IC1 = Simulink.Parameter;
IC1.Value.Count = 0;
IC1.Value.OverflowState = SlDemoRangeCheck.InRange;
IC1.DataType = 'Bus: OutputType';
IC1.CoderInfo.StorageClass = 'ExportedGlobal';
IC2 = IC1.copy;
IC2.Value.Count = -10;

2. Измените существующий сценарий MATLAB, чтобы воссоздать эти переменные рабочей области.

Для обновления существующего сценария MATLAB можно вручную изменить сценарий MATLAB, определяющий параметры для модели верхнего уровня, или использовать Simulink.saveVars.

Simulink.saveVars('sldemo_mdlref_datamngt_wsdata.m', '-update');

ПРИМЕЧАНИе.При использовании параметра -update нет необходимости указывать записываемые переменные, поскольку Simulink.saveVars записывает только значения переменных, уже определенных в сценарии MATLAB.

Регенерация кода для модели верхнего уровня (требуется кодер Simulink)

Чтобы создать код и создать автономный исполняемый файл для модели верхнего уровня, откройте модель верхнего уровня и нажмите клавиши Ctrl + B.

В качестве альтернативы можно использовать rtwbuild в командной строке MATLAB.

rtwbuild('sldemo_mdlref_datamngt')