Вы, возможно, должны будете использовать глобальные данные с блоком MATLAB Function, если:
У вас есть несколько MATLAB® функции, которые используют глобальные переменные, и вы хотите вызвать эти функции из блоков MATLAB Function.
У вас есть существующая модель, которая использует большое количество глобальных данных, и вы добавляете блок MATLAB Function к этой модели, и вы хотите избежать загромождения вашей модели дополнительными входами и выходами.
Необходимо расширить видимость данных на части модели.
В Simulink®, вы храните глобальные данные с помощью памяти хранилища данных. Память хранилища данных реализуется с помощью блоков Data Store Memory или Simulink.Signal
объекты. Способ хранения глобальных данных зависит от количества и возможностей ваших глобальных переменных. Для получения дополнительной информации см. Локальные и глобальные хранилища данных и Выбор способа хранения глобальных данных.
В функциях 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 |
Обмен данными между несколькими моделями (включая модели-ссылки). |
Примечание Если вы используете 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 and Data Manager.
В Диспетчере портов и данных выберите данные, A в левой панели. Эти данные используют то же имя что и глобальная переменная.
Для Scope данных задано значение Data Store Memory
.
См. также «Порты и диспетчер данных».
Дважды кликните Data Store Memory блок A
. В диалоговом окне Параметров блоков видно, что Data store name
A соответствует имени глобальной переменной. Блок имеет начальное значение
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 and Data Manager.
В Диспетчере портов и данных выберите данные, A в левой панели. Эти данные используют то же имя что и глобальная переменная.
Установите Scope данных равными Data Store Memory
.
См. также «Порты и диспетчер данных».
Симулируйте модель.
Блок MATLAB Function читает начальное значение глобальных данных, хранящихся в A
и обновляет значение A
каждый раз, когда он выполняется.
Можно сконфигурировать модель, чтобы обеспечить диагностику во время выполнения и во время компиляции, чтобы избежать проблем с хранилищами данных. Диагностика доступна в диалоговом окне Параметры конфигурации и диалоговом окне параметров для блока Data Store Memory. Эти диагностики доступны только для блоков Data Store Memory, а не для Simulink.Signal
объекты. Дополнительные сведения об использовании диагностики хранилища данных см. в разделе Диагностика хранилища данных.
Примечание
Если вы передаете массивы памяти хранилища данных в функции, оптимизации, такие как A=foo(A)
может привести к тому, что программное обеспечение генерации кода отметит все содержимое массива как считанное или записанное, хотя доступ к некоторым элементам был получен.
Нет Data Store Memory поддержки:
Структуры MATLAB
Данные переменного размера