Доступ к данным из графика

Simulink® модель реализует глобальные переменные как data stores, либо как блоки Data Store Memory (Simulink), либо как образцы Simulink.Signal (Simulink) объекты. Можно использовать хранилища данных для обмена данными между несколькими блоками Simulink без явных входных или выходных соединений, чтобы передать данные из одного блока в другой. Stateflow® графики совместно используют глобальные данные с моделями Simulink путем чтения и записи в память хранилища данных символически.

Чтобы получить доступ к глобальным данным из графика, привязайте объект данных Stateflow к хранилищу данных Simulink. После создания привязки объект данных Stateflow становится символическим представлением памяти хранилища данных Simulink. Затем можно использовать этот символьный объект для хранения и извлечения глобальных данных.

Память локального и Глобальные данные хранилища

Диаграммы Stateflow могут взаимодействовать с локальными и глобальные данные магазинами.

  • Локальные хранилища данных видны всем блокам в одной модели. Чтобы взаимодействовать с локальным хранилищем данных, график должен находиться в модели, где вы задаете локальное хранилище данных. Можно задать локальное хранилище данных путем добавления блока Data Store Memory к модели или путем создания объекта сигнала Simulink.

  • Глобальные данные магазины имеют более широкие возможности, которая пересекает модель-ссылку контуров. Чтобы взаимодействовать с глобальными данными хранилищами, график должен находиться в модели верхней части, где вы задаете хранилище глобальных данных или в модели, которая модели-ссылки сверху. Глобальные хранилища глобальных данных реализуются как объекты сигнала Simulink.

Для получения дополнительной информации смотрите Локальные и Глобальные данные хранилища (Simulink).

Привязка данных Stateflow к хранилищам данных

  1. Чтобы задать память хранилища данных Simulink, добавьте блок Data Store Memory к модели или создайте объект сигнала Simulink. Для получения дополнительной информации смотрите Хранилища данных с блоками памяти хранилища данных (Simulink) и Хранилища данных с объектами сигнала (Simulink).

  2. Добавьте объект данных к диаграмме Stateflow, как описано в Add Stateflow Data.

  3. Установите свойство Name как имя памяти хранилища данных Simulink, к которой вы хотите привязать объект данных Stateflow.

  4. Установите свойство Scope равным Data Store Memory.

Объект данных Stateflow наследует все дополнительные свойства из памяти хранилища данных, к которой вы привязываете объект.

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

Хранение и извлечение глобальных данных

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

Например, на этом графике состояний активности считываются и записываются в блок Data Store Memory под названием myglobal.

Лучшие практики для использования хранилищ данных

Свойства хранилища данных в графиках

Когда вы связываете объект данных Stateflow с хранилищем данных, объект Stateflow наследует все его свойства из хранилища данных. Чтобы гарантировать правильное распространение свойств, при создании хранилища данных Simulink:

  • Задайте тип данных, отличный от auto.

  • Минимизируйте использование свойств автоматического режима.

Совместное использование памяти хранилища данных в нескольких моделях

Для доступа к хранилищу глобальных данных из нескольких моделей:

  • Проверьте, что ваши модели не содержат никаких Data Store Memory блоков. Можно включать Data Store Read (Simulink) и Data Store Write (Simulink) блоки.

  • В MATLAB® базовое рабочее пространство, создайте Simulink.Signal объект с этими атрибутами:

    • Установите Data type на явный тип данных. Тип данных не может быть Auto.

    • Полностью задайте Dimensions. Размерности сигнала не могут быть -1 или Inherited.

    • Полностью задайте Complexity. Сложность невозможно Auto.

    • Установите Storage class значение ExportedGlobal.

  • На каждом графике, которая разделяет данные, привязывайте объект данных Stateflow к хранилищу данных Simulink.

Запись в память хранилища данных перед чтением

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

  • Разделите действия чтения на отдельные блоки от действий записи.

  • Присвойте приоритеты блокам, чтобы ваша модель вызвала блоки записи перед чтением блоков. Для получения дополнительной информации смотрите Управление и отображение Порядка выполнения (Simulink).

Чтобы избежать ситуаций, когда несколько чтений и записей происходят непреднамеренно за один временной шаг, включите диагностику Data Store Memory блоков:

  • Detect Read Before Write

  • Detect Write After Read

  • Detect Write After Write

Если вы используете блок памяти хранилища данных как постоянную глобальную область хранения для накопления значений через временные шаги, избегайте ненужных предупреждений, отключая диагностику Data Store Memory блоков. Для получения дополнительной информации смотрите Диагностика хранилища данных (Simulink).

См. также

(Simulink) | (Simulink) | (Simulink) | (Simulink)

Похожие темы