Модель Simulink® реализует глобальные переменные как data stores, или как Data Store Memory (Simulink) блоки или как экземпляры Simulink.Signal
(Simulink) объекты. Можно использовать хранилища данных, чтобы осуществлять обмен данными между несколькими блоками Simulink без явных связей ввода или вывода, чтобы передать данные от одного блока до другого. Графики Stateflow® совместно используют глобальные данные с моделями Simulink путем чтения из и записи в память хранилища данных символически.
К глобальным данным доступа из графика свяжите объект данных Stateflow с хранилищем данных Simulink. После того, как вы создадите привязку, объект данных Stateflow становится символьным представлением памяти хранилища данных Simulink. Можно затем использовать этот символьный объект сохранить и получить глобальные данные.
Диаграммы Stateflow могут взаимодействовать через интерфейс с хранилищами локальных и глобальных данных.
Локальные хранилища данных отображаются со всеми блоками в одной модели. Чтобы взаимодействовать с локальным хранилищем данных, график должен находиться в модели, где вы задаете локальное хранилище данных. Можно задать локальное хранилище данных путем добавления блока Data Store Memory в модель или путем создания объекта Сигнала Simulink.
Хранилища глобальных данных имеют более широкий осциллограф, который пересекает контуры модели - ссылки. Чтобы взаимодействовать с хранилищами глобальных данных, график должен находиться в топ-модели, где вы задаете хранилище глобальных данных или в модели что ссылки топ-модели. Вы реализуете хранилища глобальных данных, когда Сигнал Simulink возражает.
Для получения дополнительной информации смотрите Хранилища Локальных и Глобальных данных (Simulink).
Чтобы задать память хранилища данных Simulink, добавьте блок Data Store Memory в свою модель или создайте объект Сигнала Simulink. Для получения дополнительной информации смотрите Хранилища данных с Блоками памяти Хранилища данных (Simulink) и Хранилища данных с Объектами Сигнала (Simulink).
Добавьте, что объект данных к диаграмме Stateflow, как описано в Добавляют Данные Stateflow.
Установите свойство Name как имя памяти хранилища данных Simulink, с которой вы хотите связать объект данных Stateflow.
Установите свойство Scope на Data Store Memory
.
Объект данных Stateflow наследовал все дополнительные свойства от памяти хранилища данных, до которой вы связываете объект.
Несколько хранилищ локальных и глобальных данных с тем же именем могут существовать в той же иерархии модели. В этой ситуации объект данных Stateflow связывает с хранилищем данных, которое является самым близким предком.
После привязки объекта данных Stateflow к хранилищу данных Simulink можно сохранить и получить глобальные данные в действиях перехода и состоянии. Объект данных действует как глобальная переменная, на которую вы ссылаетесь ее символьным именем. Когда вы храните числовые значения в этой переменной, вы пишете в память хранилища данных Simulink. Когда вы получаете числовые значения из этой переменной, вы читаете из памяти хранилища данных.
Например, в этом графике, состояния активности, считанные из и запись к Блоку памяти Хранилища данных под названием 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).
Data Store Memory (Simulink) | Data Store Read (Simulink) | Data Store Write (Simulink) | Simulink.Signal
(Simulink)