Глобальный совместный доступ к данным

Когда вам нужно использовать глобальные данные?

Вы, возможно, должны будете использовать глобальные данные с блоком MATLAB Function, если:

  • У вас есть несколько MATLAB® функции, которые используют глобальные переменные, и вы хотите вызвать эти функции из блоков MATLAB Function.

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

  • Необходимо расширить видимость данных на части модели.

Использование глобальных данных с блоком MATLAB function

В Simulink®, вы храните глобальные данные с помощью памяти хранилища данных. Память хранилища данных реализуется с помощью блоков Data Store Memory или Simulink.Signal объекты. Способ хранения глобальных данных зависит от количества и возможностей ваших глобальных переменных. Для получения дополнительной информации см. Локальные и глобальные хранилища данных и Выбор способа хранения глобальных данных.

Как глобалы MATLAB относятся к памяти хранилища данных

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

Глобальная переменная разрешается иерархически до ближайшей памяти хранилища данных с таким же именем в модели. Одна и та же глобальная переменная, возникающая в двух разных блоках MATLAB Function, может разрешиться в разную память хранилища данных в зависимости от иерархии вашей модели. Можно использовать эту возможность для масштабирования видимости данных в подсистему.

Как использовать глобалы с блоком MATLAB function

Чтобы использовать глобальные данные в вашем MATLAB Function блоке или в любом коде, который этот блок вызывает, вы должны:

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

  2. Зарегистрируйте Data Store Memory блок или Simulink.Signal объект, который имеет то же имя что и глобальная переменная с блоком MATLAB Function.

Для получения дополнительной информации смотрите Хранение данных с использованием блоков памяти хранилища данных и Хранение данных с использованием объектов Simulink .Signal.

Выбор способа хранения глобальных данных

Следующая таблица результирует, использовать ли блоки Data Store Memory или Simulink.Signal объекты.

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

Data Store Memory блоки.

Примечание

Использование Data Store Memory блоков масштабирует данные к модели.

Хранение данных с использованием блоков памяти хранилища данных
Используйте большое количество глобальных переменных в одной модели, которая не использует модель-ссылку.

Simulink.Signal объекты, заданные в рабочем пространстве модели. Simulink.Signal объекты предлагают следующие преимущества:

  • Вы не должны добавлять многочисленные блоки Data Store Memory к своей модели.

  • Можно загрузить Simulink.Signal объекты в из MAT-файла.

Хранение данных с использованием объектов Simulink .Signal
Обмен данными между несколькими моделями (включая модели-ссылки).

Simulink.Signal объекты, заданные в базовом рабочем пространстве

Примечание

Если вы используете Data Store Memory блоки, а также Simulink.Signal, обратите внимание, что использование Data Store Memory блоков масштабирует данные к модели.

Хранение данных с использованием объектов Simulink .Signal

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

Эта модель демонстрирует, как блок MATLAB Function использует глобальные данные, хранящиеся в блоке Data Store Memory A.

  1. Откройте модель dsm_demo.mdl.

  2. Дважды кликните MATLAB Function блок, чтобы открыть Редактор MATLAB Function блоков.

    Код MATLAB Function блока объявляет глобальную переменную A. Блок изменяет значение A во время каждого выполнения.

    function y = fcn
    %#codegen
    global A;
    A = A+1;
    y = A;
    

  3. Убедитесь, что глобальная переменная зарегистрирована в блоке MATLAB Function. См. Добавление данных к блоку MATLAB function.

    1. В редакторе MATLAB Function блоков выберите Edit Data, чтобы открыть диалоговое окно Ports and Data Manager.

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

    3. Для Scope данных задано значение Data Store Memory.

    См. также «Порты и диспетчер данных».

  4. Дважды кликните Data Store Memory блок A. В диалоговом окне Параметров блоков видно, что Data store name A соответствует имени глобальной переменной. Блок имеет начальное значение 25.

    Когда вы добавляете Data Store Memory к своей модели:

    1. Установите Data store name так, чтобы оно совпадало с именем глобальной переменной в вашем MATLAB Function блочном коде.

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

    3. Установите Signal type и задайте Initial value.

  5. Симулируйте модель.

    Блок MATLAB Function читает начальное значение глобальных данных, хранящихся в A и обновляет значение A каждый раз, когда он выполняется.

Хранение данных с использованием Simulink.Signal Объекты

Эта модель демонстрирует, как блок MATLAB Function использует глобальные данные, хранящиеся в Simulink.Signal A объекта.

  1. Откройте модель simulink_signal_local.

    Модель использует Simulink.Signal объект в рабочем пространстве модели.

    Примечание

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

  2. Убедитесь, что Simulink.Signal добавляется к Model Explorer.

    1. На вкладке Modeling нажмите Model Explorer.

    2. В левой панели Model Explorer выберите рабочее пространство модели для simulink_signal_local модель.

      На панели Contents отображаются данные в рабочем пространстве модели.

    3. Нажмите на Simulink.Signal A объекта.

      На правой панели убедитесь, что в Model Explorer отображаются эти атрибуты для A.

      ПризнакЗначение
      Data typedouble
      Complexityreal
      Dimensions1
      Initial value 5

    См. также Model Explorer.

  3. Дважды кликните блок MATLAB Function, чтобы открыть его редактор.

    Блок MATLAB Function изменяет значение глобальных данных A каждый раз, когда он выполняется.

    function y = fcn
    %#codegen
    global A;
    A = A+1;
    y = A;
    

  4. Убедитесь, что Simulink.Signal объект зарегистрирован в блоке MATLAB Function.

    1. В редакторе MATLAB Function блоков выберите Edit Data, чтобы открыть диалоговое окно Ports and Data Manager.

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

    3. Установите Scope данных равными Data Store Memory.

    См. также «Порты и диспетчер данных».

  5. Симулируйте модель.

    Блок MATLAB Function читает начальное значение глобальных данных, хранящихся в A и обновляет значение A каждый раз, когда он выполняется.

Использование диагностики хранилища данных для обнаружения проблем с доступом к памяти

Можно сконфигурировать модель, чтобы обеспечить диагностику во время выполнения и во время компиляции, чтобы избежать проблем с хранилищами данных. Диагностика доступна в диалоговом окне Параметры конфигурации и диалоговом окне параметров для блока Data Store Memory. Эти диагностики доступны только для блоков Data Store Memory, а не для Simulink.Signal объекты. Дополнительные сведения об использовании диагностики хранилища данных см. в разделе Диагностика хранилища данных.

Примечание

Если вы передаете массивы памяти хранилища данных в функции, оптимизации, такие как A=foo(A) может привести к тому, что программное обеспечение генерации кода отметит все содержимое массива как считанное или записанное, хотя доступ к некоторым элементам был получен.

Ограничения использования разделяемых данных в блоках MATLAB function

Нет Data Store Memory поддержки:

  • Структуры MATLAB

  • Данные переменного размера

Похожие примеры

Подробнее о