Если ваша модель содержит блоки с базовыми массивами компонентов, можно хотеть получить доступ к отдельным представителям массива, например, задать их целевые значения рабочей точки или построить график записанных данных моделирования для определенных узлов. Вы делаете это с помощью интерфейса командной строки, чтобы индексировать в массив компонентов и создать путь к узлу логгирования данных или целевому объекту рабочей точки конкретного представителя.
Применяются следующие правила:
Доступ к представителям массива с помощью MATLAB® индексирования матриц. Для получения дополнительной информации см. Раздел Индексация массивов.
Доступ к скалярным элементам путем регулярной индексации пути (разграниченной точкой или разделенной косой чертой).
Индекс пути не может пересекать нескалярный элемент.
Индексация пути не может быть объединена с индексированием матриц.
Последние два правила означают, что вам может потребоваться создать путь в несколько шагов путем определения промежуточных переменных, как показано в этих примерах.
Если ваша модель содержит блоки с базовыми массивами компонентов, можно использовать Simscape™ Results Explorer или Simulation Data Inspector, чтобы просмотреть записанные данные моделирования для отдельных представителей массива. Для получения дополнительной информации смотрите Журнал данных для массивов компонентов.
Можно также использовать интерфейс командной строки для индекса в массив компонентов, например, для построения графика записанных в журнал данных моделирования для конкретного представителя массива.
Предположим, у вас есть модель, CompArrayExample
, который содержит подсистему, BatteryPack
, а внутри него блок, названный ResistorArray
, с базовым массивом resistor
компоненты. Вы хотите построить график тока через второй резистор в массиве.
На рисунке Simscape Results Explorer показывает записанную в журнал древовидную структуру данных моделирования (на левой панели) и график текущей, 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)
Для модели, обсуждаемой в предыдущем примере, Plotting Logged Simulation Data for Component Array Members, получите и установите целевые значения рабочих точек для отдельных представителей массива.
Создайте 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