exponenta event banner

Основы хранилища данных

Хранилище данных - это хранилище, в которое можно записывать данные и из которого можно считывать данные без необходимости подключения входного или выходного сигнала непосредственно к хранилищу данных. Хранилища данных доступны на разных уровнях модели, поэтому подсистемы и ссылочные модели могут использовать хранилища данных для совместного использования данных без использования портов ввода-вывода.

Когда использовать хранилище данных

Хранилища данных могут быть полезны, когда множественные сигналы на разных уровнях модели нуждаются в одинаковых глобальных значениях, и соединение всех сигналов явно загромождает модель неприемлемо или занимает слишком много времени, чтобы это было возможно. Хранилища данных аналогичны глобальным переменным в программах и имеют аналогичные преимущества и недостатки, например, затрудняют проверку.

Для совместного использования данных экземплярами многократно используемого алгоритма (например, подсистемой в пользовательской библиотеке или повторно используемой ссылочной модели) можно использовать хранилище данных. Дополнительные сведения о совместном использовании данных для повторно используемой ссылочной модели см. в разделе Совместное использование данных среди экземпляров ссылочной модели.

Хранилища данных и проверка программного обеспечения

Хранилища данных могут оказывать значительное влияние на проверку программного обеспечения, особенно в области связи и управления данными. Модели и подсистемы, использующие только входные и выходные порты для передачи данных, обеспечивают чистые, четко определенные и легко проверяемые интерфейсы в сгенерированном коде.

Хранилища данных, как и любой тип глобальных данных, затрудняют проверку. Если процесс разработки включает проверку программного обеспечения, рассмотрите возможность планирования влияния хранилищ данных на ранних этапах процесса разработки.

Для получения дополнительной информации см. RTCA DO-331, «Model-Based Development and Verification Supplement to DO-178C and DO-278A,» Раздел MB.6.3.3.b.

Перейти к блокам и из них в качестве альтернативы маршрутизации сигналов

В некоторых случаях для получения результатов, аналогичных тем, которые предоставляются хранилищами данных, можно использовать более простой метод - блоки Goto и блоки From. Основной недостаток каналов передачи данных состоит в том, что они, как правило, недоступны для доступа через границы невиртуальных подсистем, в то время как к соответствующим образом сконфигурированному хранилищу данных можно получить доступ в любом месте. Дополнительные сведения о ссылках Перейти к/из см. на страницах ссылок Перейти к и Из блока.

Локальные и глобальные хранилища данных

Можно определить два типа хранилищ данных:

  • Локальное хранилище данных доступно в любом месте иерархии модели, которое находится на уровне или ниже уровня, на котором определяется хранилище данных, за исключением ссылочных моделей. Локальное хранилище данных можно определить графически в модели или путем создания сигнального объекта рабочего пространства модели (Simulink.Signal).

  • Глобальное хранилище данных доступно из всей иерархии моделей, в том числе из ссылочных моделей. Определите глобальное хранилище данных только в базовой рабочей области MATLAB ® с помощью сигнального объекта. Единственным типом хранилища данных, к которому может обращаться ссылочная модель, является глобальное хранилище данных .

В общем случае найдите хранилище данных на самом низком уровне в модели, которое обеспечивает доступ к хранилищу данных для всех частей модели, которым необходим этот доступ. Некоторые примеры локальных и глобальных хранилищ данных отображаются в примерах хранилищ данных.

Сведения об использовании ссылочных моделей см. в разделе Привязки модели (Model References).

Диагностика хранилища данных

Сведения о диагностике хранилища данных

Simulink ® предоставляет различные средства диагностики времени выполнения и компиляции, которые можно использовать, чтобы избежать проблем с хранилищами данных. Диагностика доступна в диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) и в диалоговом окне Параметры блока памяти хранилища данных (Data Store Memory). Simulink Model Advisor обеспечивает поддержку, перечисляя случаи, когда ошибки хранилища данных более вероятны, поскольку диагностика отключена.

Обнаружение ошибок заказа на доступ

Диагностику времени выполнения хранилища данных можно использовать для обнаружения непреднамеренных последовательностей операций чтения и записи хранилища данных, которые происходят во время моделирования. Эту диагностику можно применить ко всем хранилищам данных или разрешить каждому блоку памяти хранилища данных устанавливать собственное значение. Диагностика:

Эти средства диагностики отображаются на панели блоков «Параметры конфигурации модели» > «Диагностика» > «Валидность данных» > «Память хранилища данных», где каждое из них может иметь одно из следующих значений:

  • Disable all - отключает эту диагностику для всех хранилищ данных, доступных для модели.

  • Enable all as warnings - отображает диагностику как предупреждение в окне команд MATLAB.

  • Enable all as errors - останавливает моделирование и отображает диагностику в диалоговом окне ошибки.

  • Use local settings - Разрешить каждому блоку памяти хранилища данных устанавливать собственное значение для этой диагностики (по умолчанию).

Эта же диагностика также отображается в каждом диалоговом окне Параметры блока памяти хранилища данных (Data Store Memory) на вкладке Диагностика (Diagnostics). Для каждой диагностики можно установить значение none, warning, или error. Значение, указанное отдельным блоком, вступает в силу только в том случае, если соответствующим параметром конфигурации является Use local settings. Дополнительные сведения см. в разделе Параметры конфигурации модели: диагностика достоверности данных и документация по памяти хранилища данных.

Самый консервативный метод - установить диагностику всех хранилищ данных на Enable all as errors в окне Параметры конфигурации модели > Диагностика > Валидность данных > Блок памяти хранилища данных. Однако этот параметр не является лучшим во всех случаях, поскольку он может пометить предполагаемое поведение как ошибочное. Например, на следующем рисунке показана модель, которая использует приоритеты блоков для принудительного выполнения блока чтения хранилища данных перед блоком записи хранилища данных:

Ошибка при моделировании из-за хранилища данных A считывается из блока чтения хранилища данных, прежде чем блок записи хранилища данных обновит хранилище. Если предполагается связанная задержка, можно подавить ошибку, задав глобальный параметр Detect read before write to Use local settings, затем установка для этого параметра значения none на панели Диагностика (Diagnostics) диалогового окна Блок памяти хранилища данных (Data Store Memory). При использовании этого метода задайте для параметра значение error во всех остальных блоках памяти хранилища данных, кроме тех, которые должны быть намеренно исключены из диагностики.

Диагностика хранилища данных и ссылочные модели в режиме ускорителя.  Для моделей, на которые имеются ссылки в режиме ускорителя, Simulink игнорирует следующие параметры конфигурации > Диагностика > Валидность данных > Параметры блока памяти хранилища данных, если для них задано значение, отличное от Disable all.

  • Обнаружить чтение перед записью (ReadBeforeWriteMsg)

  • Обнаружить запись после чтения (WriteAfterReadMsg)

  • Обнаружение записи после записи (WriteAfterWriteMsg)

Помощник по модели можно использовать для определения моделей, на которые имеются ссылки в режиме ускорителя, для которых Simulink игнорирует перечисленные выше параметры конфигурации.

  1. В редакторе Simulink на вкладке Моделирование (Modeling) щелкните Помощник по модели (Model Advisor).

  2. Выбрать по задаче.

  3. Запустите диагностические настройки проверки, игнорируемые во время ускоренной проверки моделирования привязки модели.

Диагностика хранилища данных и функциональный блок MATLAB.  Диагностика может быть более консервативной для памяти хранилища данных, используемой функциональными блоками MATLAB. Например, при передаче массивов памяти хранилища данных функциям MATLAB такие оптимизации, как A = foo(A) может привести к тому, что MATLAB пометит все содержимое массива как прочитанное или записанное, даже если доступ был получен только к некоторым элементам.

Обнаружение ошибок многозадачного доступа

Целостность данных может быть скомпрометирована, если хранилище данных считывается из одной задачи и записывается в другую задачу. Например, предположим, что:

  1. Задача записывается в хранилище данных.

  2. Вторая задача прерывает первую задачу.

  3. Вторая задача считывает данные из этого хранилища данных.

Если первая задача лишь частично обновила хранилище данных, когда вторая задача прервалась, результирующие данные в хранилище данных противоречивы. Например, если значение является вектором, некоторые его элементы могли быть записаны в текущем временном шаге, в то время как остальные были записаны в предыдущем шаге. Если значение является многословным, оно может быть оставлено в несогласованном состоянии, которое даже не является частично правильным.

Если вы не уверены в том, что вытеснение задачи не может привести к проблемам целостности данных, установите для параметров конфигурации модели > Диагностика > Валидность данных > Блок памяти хранилища данных > Многозадачное хранилище данных значение warning (значение по умолчанию) или error. Эта диагностика помечает любой случай хранилища данных, которое считывается из и записывается в различные задачи. На следующем рисунке показана проблема, обнаруженная при установке для многозадачного хранилища данных значения error:

С момента сохранения данных A записывается в быструю задачу и считывается из в медленную задачу, сообщается об ошибке с предлагаемым исправлением. Эта диагностика применима даже в том случае, если хранилище данных для чтения или записи находится внутри условной подсистемы. Simulink правильно идентифицирует задачу, в которой выполняется блок, и использует эту задачу для оценки диагностики.

На следующем рисунке показано одно решение проблемы, показанной выше: поместить блок перехода скорости после считывания хранилища данных, которое ранее обращалось к хранилищу данных с более низкой скоростью.

При таком изменении запись в хранилище данных может продолжаться с более высокой скоростью. Это может быть важно, если это хранилище данных должно считываться с такой скоростью в другом месте модели.

Диагностика многозадачного хранилища данных также применяется для операций чтения и записи в хранилище данных в ссылочных моделях. Если две разные дочерние модели выполняют операции чтения и записи в хранилище данных в различных задачах, ошибка будет обнаружена при компиляции Simulink их общей родительской модели.

Обнаружение повторяющихся ошибок имен

Ошибки хранилища данных могут возникать из-за дублирования использования имени хранилища данных в модели. Например, затенение хранилища данных происходит, когда две или более памяти хранилища данных в разных вложенных областях имеют одно и то же имя хранилища данных. В этой ситуации память хранения данных, на которую ссылается блок чтения или записи хранилища данных на низком уровне, может не быть предполагаемой памятью.

Чтобы предотвратить ошибки, вызванные повторяющимися именами хранилищ данных, установите для параметров конфигурации модели > Диагностика > Валидность данных > Блок памяти хранилища данных > Повторяющиеся имена хранилищ данных значение warning или error. По умолчанию значение диагностики равно none, подавление обнаружения повторяющихся имен. На следующем рисунке показана проблема, обнаруженная при установке для параметра Дублировать имена хранилищ данных значения error:

Хранилище данных, считанное на нижнем уровне иерархии подсистем, ссылается на хранилище данных с именем Aи два блока памяти хранилища данных в одной модели имеют это имя, поэтому выдается сообщение об ошибке. Эта диагностика не позволяет предположить, что считанное хранилище данных ссылается на блок памяти хранилища данных на верхнем уровне модели. Считывание фактически относится к блоку памяти хранилища данных на промежуточном уровне, который по объему ближе к блоку чтения хранилища данных.

Диагностика хранилища данных в Model Advisor

Model Advisor предоставляет несколько средств диагностики, которые можно использовать с хранилищами данных. См. следующие разделы для получения информации о диагностике Model Advisor для хранилищ данных:

Проверка блоков памяти хранилища данных на наличие проблем многозадачности, строгой типизации и затенения

Проверка времени блока хранилища данных на наличие ошибок моделирования

Проверьте, включена ли диагностика чтения/записи для блоков хранения данных

Укажите начальное значение для хранилища данных

Как правило, для задания начального значения для хранилища данных можно использовать те же методы, что и для других блоков. См. раздел Инициализация сигналов и дискретных состояний.

В большинстве блоков можно воспользоваться преимуществами скалярного расширения, чтобы минимизировать усилия по заданию начального значения для нескалярного сигнала. При указании скалярного начального значения каждый элемент сигнала использует этот скаляр.

Однако при установке для параметра «Размеры» значения -1 в блоке памяти хранилища данных (по умолчанию) нельзя использовать скалярное расширение. Вместо этого необходимо указать начальное значение, которое будет иметь те же размеры, что и сохраненный сигнал. Чтобы воспользоваться преимуществом скалярного расширения начального значения, задайте для параметра «Размеры» определенное значение, например [1 2] или [1 myDim] (для символьных размеров).

См. также

| | |

Связанные темы