exponenta event banner

Индексация в массивы компонентов

Если модель содержит блоки с нижележащими массивами компонентов, может потребоваться доступ к отдельным элементам массива, например, для установки целевых рабочих точек или для построения графика данных моделирования для определенных узлов. Для этого используется интерфейс командной строки для индексирования в массив компонентов и построения пути к узлу регистрации данных или цели рабочей точки конкретного элемента.

Применяются следующие правила:

  • Доступ к членам массива с помощью методов индексирования матриц 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);

Инициализируйте модель из новой рабочей точки. Обратите внимание, что результаты моделирования изменились по сравнению с предыдущим примером.

См. также

|

Связанные темы

Внешние веб-сайты