Вы можете должны быть использовать глобальные данные с блоком MATLAB Function если:
У вас есть несколько функций MATLAB®, которые используют глобальные переменные, и вы хотите вызвать эти функции от блоков MATLAB Function.
У вас есть существующая модель, которая использует большую сумму глобальных данных, и вы добавляете блок MATLAB Function в эту модель, и вы не хотите создавать помехи своей модели дополнительными вводами и выводами.
Вы хотите определить объем видимости данных к частям модели.
В Simulink® вы храните глобальные данные с помощью памяти хранилища данных. Вы реализуете память хранилища данных с помощью или блоков Data Store Memory или Simulink.Signal
объекты. То, как вы храните глобальные данные, зависит от номера и осциллографа ваших глобальных переменных. Для получения дополнительной информации смотрите Хранилища Локальных и Глобальных данных и Выбор How to Store Global Data.
В функциях MATLAB в Simulink глобальные объявления не сопоставлены с глобальной рабочей областью MATLAB. Вместо этого вы указываете глобальные данные с блоком MATLAB Function, чтобы сопоставить данные с памятью хранилища данных. Это различие позволяет глобальным данным в функциях MATLAB взаимодействовать с решателем Simulink и обеспечивать диагностику, если они неправильно используются.
Глобальная переменная решает иерархически к самой близкой памяти хранилища данных с тем же именем в модели. Та же глобальная переменная, происходящая в двух различных блоках MATLAB Function, может решить к различной памяти хранилища данных в зависимости от иерархии вашей модели. Можно использовать эту способность определить объем видимости данных к подсистеме.
Чтобы использовать глобальные данные в вашем блоке MATLAB Function, или в любом коде, который вызывает этот блок, вы должны:
Объявите глобальную переменную в своем блоке MATLAB Function, или в любом коде, который вызван блоком MATLAB Function.
Укажите блок Data Store Memory или Simulink.Signal
объект, который имеет то же имя как глобальная переменная с блоком MATLAB Function.
Для получения дополнительной информации смотрите, что Данные о Хранении Используют Блоки памяти Хранилища данных и Хранят Данные Используя Объекты Simulink.Signal.
Следующая таблица подводит итог, использовать ли блоки Data Store Memory или Simulink.Signal
объекты.
Если вы хотите: | Использование: | Для получения дополнительной информации: |
---|---|---|
Используйте небольшое количество глобальных переменных в одной модели, которая не использует модель - ссылку. | Блоки Data Store Memory. Примечание Используя Data Store Memory блоки определяет объем данных к модели. | Хранение данных Используя блоки памяти хранилища данных |
Используйте большое количество глобальных переменных в одной модели, которая не использует модель - ссылку. | Simulink.Signal объекты заданы в рабочем пространстве модели. Simulink.Signal объекты предлагают эти преимущества:
| Хранение данных Используя объекты Simulink.Signal |
Осуществляйте обмен данными между многоуровневыми моделями (включая модели, на которые ссылаются). | Simulink.Signal объекты заданы в базовом рабочем пространствеПримечание Если вы используете блоки Data Store Memory, а также | Хранение данных Используя объекты Simulink.Signal |
Эта модель демонстрирует, как блок MATLAB Function использует глобальные данные, хранимые в блоке Data Store Memory A
.
Откройте dsm_demo.mdl модель.
Дважды кликните блок MATLAB Function, чтобы открыть Редактор Блока MATLAB Function.
Блочный код MATLAB Function объявляет глобальную переменную A
. Блок изменяет значение A
во время каждого выполнения.
function y = fcn %#codegen global A; A = A+1; y = A;
Убедитесь, что глобальная переменная указана с блоком MATLAB Function. Смотрите Добавляющие Данные к блоку MATLAB function.
В Редакторе Блока MATLAB Function выберите Edit Data, чтобы открыть диалоговое окно Ports и Data Manager.
В Портах и Менеджере данных, выберите данные A на левой панели. Эти данные используют то же имя в качестве глобальной переменной.
Scope данных установлен в Data Store Memory
.
См. также Порты и Менеджер данных.
Дважды кликните блок Data Store Memory A
. В диалоговом окне Block Parameters вы видите что
A
Data store name совпадает с именем глобальной переменной. Блок имеет начальное значение
25
.
Когда вы добавляете Data Store Memory в свою модель:
Установите Data store name совпадать с именем глобальной переменной в вашем блочном коде MATLAB Function.
Установите Data type на явный тип данных. Типом данных не может быть auto
.
Установите Signal type и задайте Initial value.
Симулируйте модель.
Блок MATLAB Function читает начальное значение глобальных данных, хранимых в A
и обновляет значение A
каждый раз это выполняется.
Simulink.Signal
ОбъектыЭта модель демонстрирует, как блок MATLAB Function использует глобальные данные, хранимые в Simulink.Signal
объект A
.
Откройте simulink_signal_local модель.
Модель использует Simulink.Signal
объект в рабочем пространстве модели.
Примечание
Чтобы использовать глобальные данные с многоуровневыми моделями, создайте Simulink.Signal
объект в базовом рабочем пространстве.
Убедитесь что Simulink.Signal
объект добавляется к Model Explorer.
Во вкладке Modeling нажмите Model Explorer.
На левой панели Model Explorer выберите рабочее пространство модели для simulink_signal_local
модель.
Панель Contents отображает данные в рабочем пространстве модели.
Нажмите Simulink.Signal
объект A
.
На правой панели убедитесь, что Model Explorer отображает эти атрибуты для A
.
Атрибут | Значение |
---|---|
Data type | double |
Complexity | real |
Dimensions | 1
|
Initial value | 5
|
См. также Model Explorer.
Дважды кликните блок MATLAB Function, чтобы открыть его редактор.
Блок MATLAB Function изменяет значение глобальных данных A
каждый раз это выполняется.
function y = fcn %#codegen global A; A = A+1; y = A;
Убедитесь Simulink.Signal
объект указан с блоком MATLAB Function.
В Редакторе Блока MATLAB Function выберите Edit Data, чтобы открыть диалоговое окно Ports и Data Manager.
В Портах и Менеджере данных, выберите данные A на левой панели. Эти данные используют то же имя в качестве глобальной переменной.
Установите Scope данных к Data Store Memory
.
См. также Порты и Менеджер данных.
Симулируйте модель.
Блок MATLAB Function читает начальное значение глобальных данных, хранимых в A
и обновляет значение A
каждый раз это выполняется.
Можно сконфигурировать модель, чтобы обеспечить диагностику и времени компиляции во время выполнения для предотвращения проблем с хранилищами данных. Диагностика доступна в диалоговом окне Configuration Parameters и диалоговом окне параметров для блока Data Store Memory. Эта диагностика доступна для блоков Data Store Memory только, не для Simulink.Signal
объекты. Для получения дополнительной информации об использовании диагностики хранилища данных смотрите Диагностику Хранилища данных.
Примечание
Если вы передаете матрицы элементов памяти хранилища данных функциям, оптимизация, такая как A=foo(A)
может привести к программному обеспечению генерации кода, отмечающему целое содержимое массива, как считано или записано даже при том, что только к некоторым элементам получили доступ.
Нет никакой поддержки Data Store Memory:
Структуры MATLAB
Данные переменного размера