Анализ обнаружения ошибок проектирования Simulink ® Design Verifier™ обнаруживает в модели ошибки, не связанные с доступом к массиву. При моделировании, когда модель пытается получить доступ к элементу массива с использованием недопустимого индекса, возникает ошибка доступа к массиву вне границ.
Чтобы обнаружить ошибки доступа к границам массива в модели, выполните следующие действия.
На вкладке Design Verifier в разделе Mode выберите Design Error Detection.
Щелкните Параметры обнаружения ошибок.
В диалоговом окне «Параметры конфигурации» на панели «Обнаружение ошибок конструкции» выберите «Доступ за пределами связанного массива».
Нажмите кнопку ОК.
Щелкните Обнаружить ошибки конструкции (Detect Design Errors).
Откроется окно журнала Simulink Design Verifier, показывающее ход выполнения анализа.
По завершении анализа:
Программа выделяет модель с результатами анализа.
Диалоговое окно Simulink Design Verifier Results открывает и показывает аналитическое резюме.
Примечание
Если модель содержит ошибку доступа к массиву вне границ, после первого появления доступа к массиву Simulink Design Verifier предполагает, что индекс массива находится в пределах оставшегося анализа. Следовательно, цели обнаружения ошибок конструкции, которые анализируются после этого предположения, могут быть указаны как допустимые, даже если ошибки конструкции возникают в модели.
В этом примере показано, как обнаруживать ошибки доступа к массиву вне границ и просматривать результаты анализа. В sldvdemo_array_bounds пример модели, функциональный блок CompaseIndex MATLAB использует значения входного сигнала для определения диапазона индексов с минимальным minIdx и максимум maxIdx. Блоки ArrayOp_Matlab, ArrayOp_MAL и ArrayOp_SF используют набор целочисленных индексов между minIdx и maxIdx для доступа к элементам массива и выполнения операций массива.
Шаг 1: Открытие модели
В командной строке введите:
open_system('sldvdemo_array_bounds');

Шаг 2: Выполнение анализа обнаружения ошибок проекта
Опции анализа в модели предварительно настроены для обнаружения ошибок доступа к массиву вне границ. Для просмотра этих параметров в редакторе Simulink дважды нажмите кнопку «Параметры вида».
Чтобы выполнить анализ обнаружения ошибок конструкции, в редакторе Simulink дважды нажмите кнопку «Выполнить». Откроется окно Сводка результатов Simulink ® Design Verifier™, в котором отображается ход выполнения анализа. По завершении анализа примерная модель подсвечивается результатами анализа.

Шаг 3: Анализ результатов анализа
Чтобы рассмотреть аналитические результаты в диаграмме, дважды щелкните по блоку Диаграммы ArrayOp_SF, который подсвечен красным.

Simulink Design Verifier обнаруживает, что индекс из связанных ошибок возникает в массиве u в штате Дифф.
Шаг 4: Создание кабелей и моделирование тестовых примеров
Щелкните первую ссылку Просмотр тестового случая. Программа Simulink Design Verifier создает и открывает модель кабельных трасс, содержащую тестовые примеры, демонстрирующие ошибки доступа к массиву вне границ. В диалоговом окне Построитель сигналов (Signal Builder) щелкните Начало моделирования (Start simulation), чтобы смоделировать модель электрического жгута с тестовым вариантом 2.
Моделирование останавливается перед переходом в состояние Diff. Откроется отладчик Stateflow ®. Отображается следующая ошибка:
Attempted to access index 4 of u with smaller dimension sizes. The valid index range is 0 to 3. This error will stop the simulation. State 'Diff' in Chart 'sldvdemo_array_bounds_harness/Test Unit (copied from sldvdemo_array_bounds)/ArrayOp_SF': y = u[maxIdx] - u[minIdx];
Не закрывайте отладчик Stateflow ® в этой точке останова. В sldvdemo_array_bounds_harness наведите курсор на состояние Diff, чтобы увидеть значения данных в этой точке останова моделирования.

Используя значения входного сигнала тестового варианта 2, функциональный блок CompureIndex MATLAB определяет диапазон индексов массива как 1:4. Индексация на основе одна согласовывается с синтаксисом MATLAB, таким образом, эти индексы действительны для Функционального блока ArrayOp_Matlab MATLAB и диаграммы ArrayOp_MAL Stateflow®.
Диаграмма ArrayOp_SF Stateflow ® использует C в качестве языка действий, который не поддерживает индексирование на основе одного объекта. Таким образом, 1:4 не является допустимым диапазоном индекса для доступа к массиву в диаграмме. Допустимый диапазон индекса для доступа к массиву на диаграмме равен 0:3, как указано в сообщении об ошибке. Когда maxIdx или minIdx вычисляется как 4, в блоке ArrayOp_SF Chart возникает ошибка доступа к массиву вне границ. Дополнительные сведения о поддержке индексирования на основе нуля см. в разделе Различия между MATLAB и C как синтаксисом языка действий (Stateflow).
Inf Значения индексаОбнаружение ошибок конструкции не поддерживает индексирование по Inf. Если модель пытается получить доступ к массиву, используя значение индекса, которое вычисляется как Inf, обнаружение ошибок конструкции не сообщает об ошибке доступа к массиву вне границ, но при моделировании возникает ошибка доступа к массиву вне границ.
Обнаружение ошибок конструкции доступа к массиву вне границ не поддерживает блоки вектора индекса со скалярными входами данных. Если модель включает блок Index Vector, который задает скалярный ввод данных вместо векторного ввода данных, а управляющий ввод вызывает доступ к массиву вне границ, обнаружение ошибок конструкции не сообщает об ошибке, но при моделировании возникает ошибка.