Если ваша модель содержит блоки с основными массивами компонентов, вы можете хотеть получить доступ к членам отдельного массива, например, поставить их цели рабочей точки или построить регистрируемые данные моделирования для определенных узлов. Вы делаете это при помощи интерфейса командной строки, чтобы индексировать в массив компонентов и создать путь к узлу регистрации данных или цели рабочей точки конкретного члена.
Следующие правила применяются:
Доступ к членам массивов при помощи 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