Хранилище данных является репозиторием, к которому можно записать данные, и от которого можно считать данные, не имея необходимость соединять сигнал ввода или вывода непосредственно с хранилищем данных. Хранилища данных доступны через образцовые уровни, таким образом, подсистемы и модели, на которые ссылаются, могут использовать хранилища данных, чтобы осуществлять обмен данными, не используя порты I/O.
Хранилища данных могут быть полезными, когда нескольким сигналам на разных уровнях модели нужны те же глобальные значения, и соединяющий все сигналы явным образом создал бы помехи модели неприемлемо или занял бы слишком много времени быть выполнимым. Хранилища данных походят на глобальные переменные в программах и имеют подобные преимущества и недостатки, такие как создание более трудной верификации.
Чтобы осуществлять обмен данными между экземплярами допускающего повторное использование алгоритма (например, подсистема в пользовательской библиотеке или допускающей повторное использование модели, на которую ссылаются), можно использовать хранилище данных. Для получения дополнительной информации о совместном использовании данных для допускающей повторное использование модели, на которую ссылаются, смотрите, Осуществляют обмен данными Среди Образцовых Экземпляров, на которые Ссылаются.
Хранилища данных могут иметь значительные эффекты на верификацию программного обеспечения, особенно в области связи данных и управления. Модели и подсистемы, которые используют только импорт и выходные порты, чтобы передать результат данных в чистых, хорошо заданных, и интерфейсах легко поддающихся проверке в сгенерированном коде.
Хранилища данных, как любой тип глобальных данных, делают верификацию более трудной. Если ваш процесс разработки включает верификацию программного обеспечения, рассмотрите планирование эффекта хранилищ данных рано в процессе проектирования.
Для получения дополнительной информации смотрите RTCA DO 331, “Основанное на модели Дополнение Разработки и Верификации к DO - 178C и DO - 278A”, Раздел MB.6.3.3.b.
В некоторых случаях можно смочь использовать более простой метод, блоки Goto и От блоков, чтобы получить результаты, подобные обеспеченным хранилищами данных. Основной недостаток данных, которые соединяет Goto/From, - то, что они обычно не доступны через невиртуальные контуры подсистемы, в то время как к соответственно сконфигурированному хранилищу данных можно получить доступ где угодно. Смотрите страницы с описанием блока Goto и From для получения дополнительной информации о ссылках Goto/From.
Можно задать два типа хранилищ данных:
Локальное хранилище данных доступно отовсюду в иерархии модели, которая является в или ниже уровня, на котором вы задаете хранилище данных, кроме из моделей, на которые ссылаются. Можно задать локальное хранилище данных графически в модели или путем создания объекта сигнала рабочего пространства модели (Simulink.Signal
).
Хранилище глобальных данных доступно от в иерархии модели, включая из моделей, на которые ссылаются. Задайте глобальные данные хранилища только в базовом рабочем пространстве MATLAB®, использовав объект сигнала. Единственный тип хранилища данных, к которому, может получить доступ модель, на которую ссылаются, является хранилищем глобальных данных.
В целом найдите хранилище данных на самом низком уровне в модели, которая предоставляет доступ к хранилищу данных всеми частями модели та потребность тот доступ. Некоторые примеры хранилищ локальных и глобальных данных появляются в Примерах Хранилища данных.
Для получения информации об использовании моделей, на которые ссылаются смотрите Модели - ссылки.
Simulink® обеспечивает различную диагностику и времени компиляции во время выполнения, которую можно использовать, чтобы помочь избежать проблем с хранилищами данных. Диагностика доступна в диалоговом окне Model Configuration Parameters и диалоговом окне параметров Блока памяти Хранилища данных. Model Advisor Simulink оказывает поддержку путем листинга случаев, где ошибки хранилища данных более вероятны, потому что диагностика отключена.
Можно использовать диагностику во время выполнения хранилища данных, чтобы обнаружить непреднамеренные последовательности чтений хранилища данных и записей, которые происходят во время симуляции. Можно применить эту диагностику ко всем хранилищам данных или позволить каждому Блоку памяти Хранилища данных устанавливать свое собственное значение. Диагностика:
Обнаружьте чтение перед записью: Обнаружьте, когда хранилище данных будет считано до записанного.
Обнаружьте запись, после того, как считано: Обнаружьте, когда хранилище данных будет записано.
Обнаружьте запись после записи: Обнаружьте, когда хранилище данных будет записано.
Эта диагностика появляется в Образцовых Параметрах конфигурации> Диагностика> Валидность Данных> панель Блока памяти Хранилища данных, где у каждого может быть одно из следующих значений:
Disable all
— Отключает эту диагностику для всех хранилищ данных, к которым получает доступ модель.
Enable all as warnings
— Отображает диагностику как предупреждение в Окне Команды MATLAB.
Enable all as errors
— Останавливает симуляцию и отображает диагностику в ошибочном диалоговом окне.
Use local settings
— Позвольте каждому Блоку памяти Хранилища данных устанавливать свое собственное значение для этой диагностики (значение по умолчанию).
Та же диагностика также появляется в каждой вкладке диалогового окна Diagnostics параметров Блока памяти Хранилища данных. Можно установить каждую диагностику на none
, warning
или error
. Значение, заданное отдельным блоком, вступает в силу, только если соответствующим параметром конфигурации является Use local settings
. Смотрите Образцовые Параметры конфигурации: Диагностика Валидности Данных и документация Памяти Хранилища данных для получения дополнительной информации.
Самый консервативный метод должен установить всю диагностику хранилища данных на 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, обновляет хранилище. Если связанная задержка предназначается, можно подавить ошибку путем установки глобального параметра, Обнаруживают чтение перед записью к Use local settings
, то, устанавливая тот параметр на none
в панели Diagnostics диалогового окна Блока памяти Хранилища данных. Если вы используете этот метод, устанавливаете параметр на error
во всех других Блоках памяти Хранилища данных кроме тех, которые должны быть намеренно исключены из диагностики.
Диагностика Хранилища данных и Модели, Ссылаемые в Режиме 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 выберите Analysis> Model Advisor.
Выберите By Task.
Осуществите проверку Check diagnostic settings ignored during accelerated model reference simulation.
Диагностика Хранилища данных и блок MATLAB function. Диагностика может быть более консервативной для памяти хранилища данных, используемой блоками MATLAB function. Например, если вы передаете массивы памяти хранилища данных функциям MATLAB, оптимизация, такая как A=foo(A)
может привести к MATLAB, отмечающему целое содержимое массива, как считано или записано, даже при том, что только к некоторым элементам получили доступ.
Целостность данных может поставиться под угрозу, если хранилище данных считано из в одной задаче и записано в в другой задаче. Например, предположите что:
Задача пишет в хранилище данных.
Вторая задача прерывает первую задачу.
Вторая задача читает из того хранилища данных.
Если первая задача только частично обновила хранилище данных, когда вторая прерванная задача, получившиеся данные в хранилище данных противоречивы. Например, если значение является вектором, некоторые его элементы, возможно, были написаны в шаге текущего времени, в то время как остальные были написаны в предыдущем шаге. Если значение является многословным, это можно оставить в противоречивом состоянии, которое даже не частично правильно.
Если вы не уверены, что вытеснение задачи не может вызвать проблемы целостности данных, установите диагностику времени компиляции Образцовые Параметры конфигурации> Диагностика> Валидность Данных> Блок памяти Хранилища данных> Многозадачное хранилище данных к warning
(значение по умолчанию) или error
. Эта диагностика отмечает любой случай хранилища данных, которое считано из и записано в в различных задачах. Следующая фигура иллюстрирует проблему, обнаруженную хранилищем данных установки Multitask к error
:
Начиная с хранилища данных A
записан в в быстрой задаче и считан из в медленной задаче, об ошибке сообщают с предложенным средством. Эта диагностика применима даже в случае, что чтение хранилища данных или запись в условной подсистеме. Simulink правильно идентифицирует задачу, которую блок выполняет в и использует ту задачу в целях оценки диагностики.
Следующие данные показывают одно решение проблемы, показанной выше: поместите блок перехода уровня после чтения хранилища данных, которое ранее получило доступ к хранилищу данных на более медленном уровне.
С этим изменением запись хранилища данных может продолжить происходить на более быстром уровне. Это может быть важно, если то хранилище данных должно быть считано на том более быстром уровне в другом месте в модели.
Многозадачная диагностика Хранилища данных также применяется к чтениям хранилища данных и написала в моделях, на которые ссылаются. Если две различных дочерних модели выполнят чтения хранилища данных и записи в отличающихся задачах, ошибка будет обнаружена, когда Simulink скомпилирует их общую родительскую модель.
Ошибки хранилища данных могут произойти должные копировать использование имени хранилища данных в модели. Например, затенение хранилища данных происходит, когда две или больше памяти хранилища данных в различных вложенных осциллографах имеет то же имя хранилища данных. В этой ситуации память хранилища данных, на которую ссылается чтение хранилища данных или блок записи на низком уровне, не может быть намеченным хранилищем.
Чтобы предотвратить ошибки, вызванные дублирующимися именами хранилищ данных, установите диагностику времени компиляции Образцовые Параметры конфигурации> Диагностика> Валидность Данных> Блок памяти Хранилища данных> Дублирующиеся имена хранилищ данных к warning
или error
. По умолчанию значением диагностики является none
, подавляя обнаружение двойного названия. Следующие данные показывают проблему, обнаруженную именами хранилищ данных установки Duplicate к error
:
Чтение хранилища данных на нижнем уровне иерархии подсистемы относится к хранилищу данных под названием A
, и два Блока памяти Хранилища данных в той же модели имеют то имя, таким образом, об ошибке сообщают. Эта диагностика принимает меры против предположения, что чтение хранилища данных относится к Блоку памяти Хранилища данных в верхнем уровне модели. Чтение на самом деле относится к Блоку памяти Хранилища данных на промежуточном уровне, который ближе в осциллографе к блоку Data Store Read.
Model Advisor обеспечивает несколько диагностики, которую можно использовать с хранилищами данных. Смотрите эти разделы для получения информации о диагностике Model Advisor для хранилищ данных:
Проверяйте, что хранилище данных блокирует шаги расчета для моделирования ошибок
Проверяйте, включена ли диагностика чтения-записи для блоков хранилища данных
В целом, чтобы задать начальное значение для хранилища данных, можно использовать те же методы, которые вы используете для других блоков. Смотрите Инициализируют Сигналы и Дискретные состояния.
С большинством блоков можно использовать в своих интересах скалярное расширение, чтобы минимизировать усилие по определению начального значения для нескалярного сигнала. Когда вы задаете скалярное начальное значение, каждый элемент в использовании сигнала тот скаляр.
Однако, когда вы устанавливаете параметр Dimensions на -1
в Блоке памяти Хранилища данных (значение по умолчанию), вы не можете использовать скалярное расширение. Вместо этого необходимо задать начальное значение, которое имеет те же размерности как сохраненный сигнал. Чтобы использовать в своих интересах скалярное расширение начального значения, установите параметр Dimensions на определенное значение, такое как [1 2]
или [1 myDim]
(для символьных размерностей).
Память хранилища данных | Чтение хранилища данных | Запись хранилища данных | Simulink.Signal