Хранилище данных является репозиторием, в который можно записать данные, и из которого можно считать данные, не подключая вход или выходной сигнал непосредственно к хранилищу данных. Хранилища данных доступны на уровнях модели, поэтому подсистемы и модели-ссылки могут использовать хранилища данных для обмена данными без использования портов ввода-вывода.
Хранилища данных могут быть полезны, когда нескольким сигналам на разных уровнях модели нужны одинаковые глобальные значения, и соединение всех сигналов явно загромождает модель неприемлемо или занимает слишком много времени, чтобы быть допустимым. Хранилища данных аналогичны глобальным переменным в программах и имеют аналогичные преимущества и недостатки, такие как усложнение верификации.
Чтобы поделиться данными между образцами переиспользуемого алгоритма (для примера, подсистемы в пользовательской библиотеке или повторно используемой модели), можно использовать хранилище данных. Дополнительные сведения об обмене данными для переиспользуемой ссылочной модели см. в разделе Обмен данными между ссылочными Образцами модели.
Хранилища данных могут оказывать значительные эффекты на верификацию программного обеспечения, особенно в области связывания и контроля данных. Модели и подсистемы, которые используют только входные и выходные порты для прохождения данных, приводят к чистым, хорошо заданным и легко проверяемым интерфейсам в сгенерированном коде.
Хранилища данных, как и любой тип глобальных данных, затрудняют верификацию. Если процесс разработки включает верификацию программного обеспечения, рассмотрите планирование эффекта хранилищ данных в начале процесса проекта.
Для получения дополнительной информации смотрите DO-331 RTCA, «Основанное на модели Дополнение по разработке и верификации к DO-178C и DO-278A,» Раздел MB.6.3.3.b.
В некоторых случаях вы можете использовать более простой метод, Goto блоки и блоки From, чтобы получить результаты, аналогичные тем, которые предоставляются хранилищами данных. Основной недостаток каналов Goto/From данных заключается в том, что они обычно недоступны через контуры невиртуальных подсистем, в то время как соответствующим образом сконфигурированное хранилище данных может быть доступно где угодно. Смотрите Goto и From страниц с описанием блоков для получения дополнительной информации о ссылках Goto/From.
Можно задать два типа хранилищ данных:
Локальное хранилище данных доступно из любого места иерархии модели, которое находится на или ниже уровня, на котором вы определяете хранилище данных, за исключением моделей-ссылок. Можно задать локальное хранилище данных графически в модели или путем создания объекта сигнала рабочего пространства модели (Simulink.Signal
).
Глобальные данные доступны со всей иерархии модели, включая модели-ссылки. Определите хранилище глобальных данных только в MATLAB® базовое рабочее пространство, с использованием сигнального объекта. Единственным типом хранилища данных, к которому может получить доступ ссылочная модель, является хранилище глобальных данных.
В целом, найдите хранилище данных на самом низком уровне в модели, который позволяет доступ к хранилищу данных всеми частями модели, которые нуждаются в этом доступе. Некоторые примеры локальных и глобальных хранилищ данных представлены в примерах хранилища данных.
Для получения информации об использовании ссылочных моделей см. Модели-ссылки.
Simulink® предоставляет различные диагностики во время выполнения и во время компиляции, которые можно использовать, чтобы избежать проблем с хранилищами данных. Диагностика доступна в диалоговом окне Model Параметры Конфигурации и в диалоговом окне параметров блока памяти хранилища данных. Simulink Model Advisor обеспечивает поддержку путем перечисления случаев, когда ошибки хранилища данных более вероятны, потому что диагностика отключена.
Можно использовать диагностику во время выполнения хранилища данных, чтобы обнаружить непреднамеренные последовательности чтения и записи хранилища данных, которые происходят во время симуляции. Можно применить эту диагностику ко всем хранилищам данных или разрешить каждому блоку Data Store Memory задать свое значение. Диагностика:
Эти диагностики появляются на блоке Model Configuration Parameters > Diagnostics > Data Validity > Data Store Memory, где каждое может иметь одно из следующих значений:
Disable all
- Отключает эту диагностику для всех хранилищ данных, к которым обращается модель.
Enable all as warnings
- Отображает диагностику как предупреждение в Командном окне MATLAB.
Enable all as errors
- Останавливает симуляцию и отображает диагностику в диалоговом окне ошибки.
Use local settings
- Разрешить каждому блоку памяти хранилища данных устанавливать свои собственные значения для этой диагностики (по умолчанию).
Эта же диагностика также появляется в каждом диалоговом окне параметров Data Store Памяти block Diagnostics вкладки. Можно задать для каждой диагностики значение none
, warning
, или error
. Значение, заданное отдельным блоком, вступает в эффект только в том случае, если соответствующий параметр конфигурации Use local settings
. Для получения дополнительной информации смотрите Model Configuration Parameters: Data Validity Diagnostics и документацию по Data Store Memory.
Самый консервативный метод - установить диагностику всего хранилища данных на Enable all as errors
в Model Configuration Parameters > Diagnostics > Data Validity > Data Store Memory block. Однако эта настройка не является лучшей во всех случаях, потому что она может пометить предполагаемое поведение как ошибочное. Например, следующий рисунок показывает модель, которая использует приоритеты блоков, чтобы заставить Data Store Read блок выполнить перед блоком Data Store Write:
Ошибка во время симуляции, поскольку хранилище данных A
считывается из блока Data Store Read перед обновлением хранилища блоком Data Store Write. Если требуется связанная задержка, можно подавить ошибку, задав глобальный параметр Detect read перед записью в Use local settings
, затем установите этот параметр равным none
на панели Diagnostics диалогового окна Data Store Memory блока. Если вы используете этот метод, установите параметр равным error
во всех других Data Store Memory блоках помимо тех, которые должны быть намеренно исключены из диагностики.
Диагностика хранилища данных и модели, на которые ссылаются в режиме Accelerator. Для моделей, на которые ссылаются в режиме Accelerator, Simulink игнорирует следующие Configuration Parameters > Diagnostics > Data Validity > Data Store Memory block параметры, если вы задаете им значение, отличное от Disable all
.
Detect read before write (ReadBeforeWriteMsg
)
Detect write after read (WriteAfterReadMsg
)
Detect write after write (WriteAfterWriteMsg
)
Можно использовать Model Advisor, чтобы идентифицировать модели, на которые ссылаются в режиме Accelerator, для которых Simulink игнорирует перечисленные выше параметры конфигурации.
В редакторе Simulink, на вкладке Modeling, нажмите Model Advisor.
Выберите By Task.
Запустите проверку Check diagnostic settings ignored during accelerated model reference simulation.
Диагностика хранилища данных и блок MATLAB function. Диагностика может быть более консервативной для памяти хранилища данных, используемой блоками MATLAB Function. Для примера, если вы передаете массивы памяти хранилища данных в функции MATLAB, такие оптимизации, как A = foo(A)
может привести к тому, что MATLAB отметит все содержимое массива как прочитанное или записанное, хотя доступ к некоторым элементам был осуществлен.
Целостность данных может быть нарушена, если хранилище данных считывается из одной задачи и записывается в другую задачу. Например, предположим, что:
Задача - запись в хранилище данных.
Вторая задача прерывает первую задачу.
Вторая задача считывается из этого хранилища данных.
Если первая задача только частично обновляла хранилище данных, когда вторая задача прерывалась, получившиеся данные в хранилище данных являются противоречивыми. Например, если значение является вектором, некоторые из его элементов могли быть записаны в текущем временном шаге, в то время как остальные были записаны в предыдущем шаге. Если значение является многословием, оно может быть оставлено в несогласованном состоянии, которое даже частично не верно.
Если вы не уверены, что упреждение задачи не может вызвать проблем с целостностью данных, установите диагностику во время компиляции Model Параметры Конфигурации > Diagnostics > Валидность > Data Store Memory block > Multitask data store равной warning
(по умолчанию) или error
. Эта диагностика помечает любой случай хранилища данных, которое считывается и записывается в различные задачи. Следующий рисунок иллюстрирует проблему, обнаруженную установкой в хранилище данных Multitask значения error
:
Поскольку хранилище данных A
записывается в в быстрой задаче и считывается в медленной задаче, сообщается об ошибке с предлагаемым средством. Эта диагностика применима даже в том случае, если чтение или запись хранилища данных находится внутри условной подсистемы. Simulink правильно определяет задачу, которую блок выполняет внутри, и использует эту задачу с целью оценки диагностики.
Следующий рисунок показывает одно решение проблемы, показанной выше: поместите блок перехода скорости после чтения хранилища данных, который ранее обращался к хранилищу данных с более низкой скоростью.
С этим изменением запись в хранилище данных может продолжаться с большей скоростью. Это может быть важно, если это хранилище данных должно считываться с такой более высокой скоростью в другом месте модели.
Многозадачная диагностика хранилища данных также применяется к чтению и записи данных в ссылочных моделях. Если две различные дочерние модели выполняют чтение и запись хранилища данных в различных задачах, ошибка будет обнаружена, когда Simulink скомпилирует их общую родительскую модель.
Ошибки хранилища данных могут возникнуть из-за дублирования использования имени хранилища данных в модели. Например, затенение хранилища данных происходит, когда две или более памяти хранилища данных в разных вложенных возможностях имеют одно и то же имя хранилища данных. В этой ситуации память хранилища данных, на которую ссылается блок чтения или записи хранилища данных на низком уровне, может не быть предполагаемым хранилищем.
Чтобы предотвратить ошибки, вызванные повторяющимися именами хранилища данных, установите диагностику во время компиляции Параметры конфигурации модели > Диагностика > Валидность данных > Блок памяти хранилища данных > Повторяющиеся имена хранилища данных равными warning
или error
. По умолчанию значение диагностики none
, подавление обнаружения повторяющихся имен. Следующий рисунок показывает проблему, обнаруженную путем установки параметра Duplicate данных store имен на error
:
Хранилище данных, считанное на нижнем уровне иерархии подсистемы, относится к хранилищу данных с именем A
, и два блока памяти хранилища данных в одной модели имеют это имя, поэтому сообщается об ошибке. Эта диагностика защищает от принятия, что считанное хранилище данных ссылается на блок Data Store Memory в верхнем уровне модели. Чтение на самом деле относится к блоку Data Store Memory на промежуточном уровне, который ближе по возможностям к блоку Data Store Read.
Model Advisor обеспечивает несколько диагностик, которые можно использовать с хранилищами данных. Смотрите эти разделы для получения информации о диагностике Model Advisor для хранилищ данных:
Проверяйте шаги расчета блока хранилища данных на ошибки моделирования
Проверьте, включена ли диагностика чтения/записи для блоков хранилища данных
В целом, чтобы задать начальное значение для хранилища данных, можно использовать те же методы, которые вы используете для других блоков. См. «Инициализация сигналов и дискретных состояний».
С большинством блоков можно воспользоваться скалярным расширением, чтобы минимизировать усилия по указанию начального значения для нескалярного сигнала. Когда вы задаете скалярное начальное значение, каждый элемент сигнала использует этот скаляр.
Однако, когда вы устанавливаете параметр Dimensions равным -1
в блоке Data Store Memory (по умолчанию) вы не можете использовать скалярное расширение. Вместо этого необходимо задать начальное значение, которое имеет те же размерности, что и сохраненный сигнал. Чтобы воспользоваться скалярным расширением начального значения, установите параметр Dimensions на определенное значение, такое как [1 2]
или [1 myDim]
(для символьных размерностей).
Data Store Memory | Data Store Read | Data Store Write | Simulink.Signal