exponenta event banner

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

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

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

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

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

  • Требуется ограничить видимость данных частями модели.

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

В Simulink ® глобальные данные хранятся с использованием памяти хранилища данных. Память хранилища данных реализуется с использованием блоков памяти хранилища данных илиSimulink.Signal объекты. Способ хранения глобальных данных зависит от количества и объема глобальных переменных. Дополнительные сведения см. в разделах Локальные и глобальные хранилища данных и Выбор способа хранения глобальных данных.

Как MATLAB Globals соотносится с памятью хранилища данных

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

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

Использование Globals с функциональным блоком MATLAB

Для использования глобальных данных в функциональном блоке MATLAB или в любом коде, вызываемом этим блоком, необходимо:

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

  2. Регистрация блока памяти хранилища данных или Simulink.Signal объект, имя которого совпадает с именем глобальной переменной с блоком MATLAB Function.

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

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

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

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

Блоки памяти хранилища данных.

Примечание

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

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

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

  • В модель не нужно добавлять многочисленные блоки памяти хранилища данных.

  • Вы можете загрузить Simulink.Signal из MAT-файла.

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

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

Примечание

Если используются блоки памяти хранилища данных, а также Simulink.Signal, обратите внимание, что с помощью блоков памяти хранилища данных данные помещаются в модель.

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

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

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

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

  2. Дважды щелкните по функциональному блоку MATLAB, чтобы открыть редактор функциональных блоков MATLAB.

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

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

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

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

    2. В окне «Ports and Data Manager» выберите данные A на левой панели. Эти данные используют то же имя, что и глобальная переменная.

    3. Для области данных установлено значение Data Store Memory.

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

  4. Дважды щелкните блок памяти хранилища данных A. В диалоговом окне «Параметры блока» отображается имя хранилища данных. A соответствует имени глобальной переменной. Блок имеет начальное значение 25.

    При добавлении памяти хранилища данных в модель:

    1. Установите имя хранилища данных в соответствии с именем глобальной переменной в коде функционального блока MATLAB.

    2. Задайте для параметра Тип данных явный тип данных. Тип данных не может быть auto.

    3. Задайте тип сигнала и укажите начальное значение.

  5. Моделирование модели.

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

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

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

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

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

    Примечание

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

  2. Убедитесь, что Simulink.Signal добавляется в Обозреватель моделей.

    1. На вкладке Моделирование (Modeling) щелкните Обозреватель моделей (Model Explorer).

    2. На левой панели Проводника моделей выберите рабочее пространство модели для simulink_signal_local модель.

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

    3. Щелкните значок Simulink.Signal объект A.

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

      ПризнакСтоимость
      Тип данныхdouble
      Сложностьreal
      Размеры1
      Начальное значение 5

    См. также Обозреватель моделей.

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

    Функциональный блок MATLAB изменяет значение глобальных данных. A каждый раз при выполнении.

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

  4. Убедитесь, что Simulink.Signal регистрируется в функциональном блоке MATLAB.

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

    2. В окне «Ports and Data Manager» выберите данные A на левой панели. Эти данные используют то же имя, что и глобальная переменная.

    3. Задайте для области данных значение Data Store Memory.

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

  5. Моделирование модели.

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

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

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

Примечание

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

Ограничения использования общих данных в функциональных блоках MATLAB

Отсутствует поддержка памяти хранилища данных для:

  • Структуры MATLAB

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

Связанные примеры

Подробнее