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

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

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

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

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

Смотрите также

|

Похожие темы

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