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