exponenta event banner

Пример модели доступа к удаленному массиву

В этом примере показано, как обнаруживать ошибки доступа к массиву вне границ и просматривать результаты анализа. В 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).