Осуществляйте обмен данными глобально

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

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

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

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

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

Используя глобальные данные с блоком MATLAB function

В Simulink® вы храните глобальные данные с помощью памяти хранилища данных. Вы реализуете память хранилища данных с помощью или Блоков памяти Хранилища данных или объектов Simulink.Signal. То, как вы храните глобальные данные, зависит от номера и осциллографа ваших глобальных переменных. Для получения дополнительной информации смотрите Хранилища Локальных и Глобальных данных и Выбор How to Store Global Data.

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

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

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

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

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

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

  2. Укажите объект Блок памяти или Simulink.Signal Хранилища данных, который имеет то же имя как глобальная переменная с блоком MATLAB function.

Для получения дополнительной информации смотрите, что Данные о Хранении Используют Блоки памяти Хранилища данных и Хранят Данные Используя Simulink. Объекты сигнала.

Выбор, как хранить глобальные данные

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

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

Примечание

Используя Хранилище данных Блоки памяти определяет объем данных к модели.

Хранение данных Используя блоки памяти хранилища данных
Используйте большое количество глобальных переменных в одной модели, которая не использует модель - ссылку.Объекты Simulink.Signal заданы в рабочем пространстве модели. объекты Simulink.Signal предлагают эти преимущества:
  • Вы не должны добавлять многочисленные Блоки памяти Хранилища данных в свою модель.

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

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

Примечание

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

Хранение данных Используя Simulink. Объекты сигнала

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

Эта модель демонстрирует, как блок MATLAB function использует глобальные данные, хранимые в Блоке памяти Хранилища данных 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.

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

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

    3. Scope данных установлен в Data Store Memory.

    См. также Порты и Менеджер данных.

  4. Дважды кликните Блок памяти Хранилища данных A. В диалоговом окне Block Parameters вы видите, что A Data store name совпадает с именем глобальной переменной. Блок имеет начальное значение 25.

    Когда вы добавляете Память Хранилища данных своей модели:

    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. Из образцового меню выберите View> 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 и Data Manager.

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

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

    См. также Порты и Менеджер данных.

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

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

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

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

Примечание

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

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

Нет никакой поддержки Памяти Хранилища данных:

  • Структуры MATLAB

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

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

Больше о