Если модель содержит блоки с нижележащими массивами компонентов, может потребоваться доступ к отдельным элементам массива, например, для установки целевых рабочих точек или для построения графика данных моделирования для определенных узлов. Для этого используется интерфейс командной строки для индексирования в массив компонентов и построения пути к узлу регистрации данных или цели рабочей точки конкретного элемента.
Применяются следующие правила:
Доступ к членам массива с помощью методов индексирования матриц MATLAB ®. Дополнительные сведения см. в разделе Индексирование массивов .
Доступ к скалярным элементам по регулярному пути (разделенный точкой или косой чертой).
Индекс пути не может пересекать нескалярный элемент.
Индексирование пути не может быть объединено с индексированием матрицы.
Последние два правила означают, что может потребоваться создать путь за несколько шагов путем определения промежуточных переменных, как показано в этих примерах.
Если Ваша модель содержит блоки с основными множествами компонентов, Вы можете использовать или Инспектора Данных Исследователя или Моделирования Результатов Simscape™, чтобы рассмотреть зарегистрированные данные о моделировании для отдельных участников множества. Дополнительные сведения см. в разделе Ведение журнала данных для массивов компонентов.
Можно также использовать интерфейс командной строки для индексирования в массив компонентов, например, для печати данных моделирования в журнале для конкретного элемента массива.
Предположим, у вас есть модель, CompArrayExample, которая содержит подсистему, BatteryPack, и внутри него блок, названный ResistorArray, с базовым массивом resistor компоненты. Требуется построить график тока через второй резистор в массиве.
На рисунке обозреватель результатов Simscape показывает древовидную структуру данных моделирования в журнале (на левой панели) и график текущего, iчерез второй резистор (в правой панели).

Для программного доступа к тому же узлу необходимо создать путь к узлу с помощью индексирования. Поскольку индекс пути не может пересекать массив, сначала создайте путь к массиву резисторов с помощью точечного индексирования:
r = simlog.BatteryPack.ResistorArray.resistor
r =
1×5 Node array with properties:
id
savable
exportableЗатем используйте индексирование матрицы для доступа ко второму компоненту массива:
r2 = r(2)
r2 =
Node with properties:
id: 'resistor'
savable: 1
exportable: 0
p: [1×1 simscape.logging.Node]
i: [1×1 simscape.logging.Node]
v: [1×1 simscape.logging.Node]
n: [1×1 simscape.logging.Node]Наконец, снова используйте точечное индексирование для доступа к узлу для текущего, i, через второй резистор:
i = r2.i
i =
Node with properties:
id: 'i'
savable: 1
exportable: 0
series: [1×1 simscape.logging.Series]
Постройте график узла:
plot(i)

Для модели, описанной в предыдущем примере «Печать данных моделирования с протоколированием для элементов массива компонентов», получение и установка целевых рабочих точек для отдельных элементов массива.
Создание OperatingPoint объект с именем op из зарегистрированных данных моделирования через 5 секунд после начала моделирования:
op = simscape.op.create(simlog, 5)
op = OperatingPoint with children: OperatingPoints: ChildId Size ______________________ ____ 'AC Voltage Source' 1x1 'BatteryPack' 1x1 'Current Sensor' 1x1 'Electrical Reference' 1x1 -----------------------------
Чтобы задать новую цель рабочей точки для напряжения, v, в положительном узле p второго резистора в матрице выполните процедуру, аналогичную описанной в предыдущем примере, используя временные объекты для построения пути через дерево данных.
Сначала извлеките данные рабочих точек для массива резисторов:
r = get(op, 'BatteryPack/ResistorArray/resistor')r =
1×5 OperatingPoint array with properties:
Identifier
ChildIds
Children
AttributesЗатем получите цель для напряжения. Используйте индексирование матрицы, чтобы получить доступ ко второму компоненту массива, а затем регулярную конструкцию пути с разделителями-косыми чертами от этого компонента к целевому объекту:
t = get(r(2), 'p/v')t =
Target with properties:
Description: 'Voltage'
Value: 2.8228e-12
Unit: 'V'
Priority: 'None'
Attributes: [2×1 containers.Map]Задайте новое значение для целевого объекта:
t = t.Value = 2e-12
t =
Target with properties:
Description: 'Voltage'
Value: 2.0000e-12
Unit: 'V'
Priority: 'None'
Attributes: [2×1 containers.Map]Наконец, сторнируйте процесс, чтобы задать новую цель в объекте рабочей точки для всей модели:
r(2) = set(r(2), 'p/v', t); op = set(op, 'BatteryPack/ResistorArray/resistor', r);
Инициализируйте модель из новой рабочей точки. Обратите внимание, что результаты моделирования изменились по сравнению с предыдущим примером.

simscape.op.OperatingPoint | simscape.op.Target