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

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

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

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

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

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

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

В Simulink®, вы храните глобальные данные с помощью памяти хранилища данных. Вы реализуете память хранилища данных с помощью или блоков Data Store Memory или 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. Укажите блок 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 модель.

    This image shows a MATLAB Function block set to output to a Display block. The block uses global data stored in a Data Store Memory block.

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

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

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

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

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

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

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

  4. Дважды кликните блок Data Store Memory A. В диалоговом окне Block Parameters вы видите что A Data store name совпадает с именем глобальной переменной. Блок имеет начальное значение 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 модель.

    This image shows a MATLAB Function block set to output to a Display block.

    Модель использует 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 Block Editor выберите Ports & Data Manager, чтобы открыть диалоговое окно Ports и Data Manager.

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

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

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

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

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

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

Примечание

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

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

Нет никакой поддержки блока Data Store Memory:

  • Классы значения MATLAB

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

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

Больше о