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

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

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

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

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

См. также

|

Похожие темы

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