getStateIndex

Получите индекс элемента состояния спецификации рабочей точки

Описание

States свойство спецификации рабочей точки является массивом, который содержит технические требования обрезки для каждого состояния модели. Когда определение отображения функционирует для индивидуально настраиваемой обрезки Simulink® модели, можно использовать getStateIndex получить индекс спецификации состояния на основе соответствующего блока path или имени состояния.

При обрезке моделей Simulink с помощью основанного на оптимизации поиска некоторые приложения требуют дополнительной гибкости в определении параметров поиска оптимизации. Для таких систем можно задать пользовательские ограничения и пользовательскую целевую функцию. Для сложных моделей можно задать отображение, которое выбирает подмножество состояний модели, входных параметров и выходных параметров, чтобы передать пользовательскому ограничению и целевым функциям. Для получения дополнительной информации смотрите, Вычисляют Рабочие точки Используя Пользовательские Ограничения и Целевые функции.

пример

index = getStateIndex(op,name) возвращает индекс спецификации состояния, которая соответствует name в States свойство спецификации рабочей точки op.

пример

index = getStateIndex(op,name,element) возвращает индекс заданного element в рамках спецификации состояния для блока с несколькими состояниями.

Примеры

свернуть все

Открытая модель Simulink.

mdl = 'scdindex1';
open_system(mdl)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

opspec содержит массив технических требований состояния для модели.

opspec.States
ans = 

    <strong>x</strong>    <strong>Known</strong>    <strong>SteadyState</strong>    <strong>Min</strong>     <strong>Max</strong>    <strong>dxMin</strong>    <strong>dxMax</strong>
    <strong>_</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>____</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>_____</strong>

(1.) scdindex1/system1
    0    false       true        -Inf    Inf    -Inf      Inf 
    0    false       true        -Inf    Inf    -Inf      Inf 
    0    false       true        -Inf    Inf    -Inf      Inf 
(2.) scdindex1/system2
    0    false       true        -Inf    Inf    -Inf      Inf 

Получите индекс спецификации состояния, которая соответствует блоку system2.

index2 = getStateIndex(opspec,'scdindex1/system2')
index2 =

     2     1

index2(1) индекс объекта спецификации состояния для system2 в opspec.States. Поскольку этот блок имеет одно состояние, index2 имеет одну строку и index2(2) 1.

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

index1 = getStateIndex(opspec,'scdindex1/system1')
index1 =

     1     1
     1     2
     1     3

Каждая строка index1 содержит индекс одного состояния в блоке system2. Для каждой строки первый столбец содержит индекс спецификации состояния в opspec.States. Второй столбец содержит индекс каждого элемента состояния в рамках спецификации.

Открытая модель Simulink.

mdl = 'scdindex1';
open_system(mdl)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

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

index1 = getStateIndex(opspec,'scdindex1/system1',2)
index1 =

     1     2

Можно также получить индексы подмножества состояний блока путем определения индекса элемента как вектора. Например, получите индексы для первых и третьих состояний в спецификации для блока system1.

index2 = getStateIndex(opspec,'scdindex1/system1',[1 3])
index2 =

     1     1
     1     3

Открытая модель Simulink.

mdl = 'scdindex2';
open_system(mdl)

Блок system1 является системой в пространстве состояний с тремя именованными состояниями: position, velocity, и acceleration.

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

States свойство объекта спецификации рабочей точки содержит одну запись для каждого именованного состояния в system1.

opspec.States
ans = 

    <strong>x</strong>    <strong>Known</strong>    <strong>SteadyState</strong>    <strong>Min</strong>     <strong>Max</strong>    <strong>dxMin</strong>    <strong>dxMax</strong>
    <strong>_</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>____</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>_____</strong>

(1.) position
    0    false       true        -Inf    Inf    -Inf      Inf 
(2.) velocity
    0    false       true        -Inf    Inf    -Inf      Inf 
(3.) acceleration
    0    false       true        -Inf    Inf    -Inf      Inf 

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

index1 = getStateIndex(opspec,'velocity')
index1 =

     2     1

Первый столбец index1 содержит индекс соответствующей спецификации состояния в opspec.States свойство. Вторым столбцом является 1 для именованного состояния.

Открытая модель.

mdl = 'scdTanks_simscape';
open_system(mdl)

Создайте спецификацию рабочей точки для модели.

opspec = operspec(mdl);

States свойство объекта спецификации рабочей точки содержит одну спецификацию состояния для каждого состояния Simscape в модели.

Чтобы получить индекс спецификации, которая соответствует состоянию Simscape, задайте имя состояния. Например, получите индекс состояния давления Tank3.

idx = getStateIndex(opspec,'scdTanks_simscape.Tank3.pressure')
idx =

    18     1

Первый столбец idx содержит индекс соответствующей спецификации состояния в opspec.States. Вторым столбцом является 1 для состояния Simscape.

Просмотрите спецификацию в opspec.States для этого состояния.

opspec.States(idx(1))
ans = 

    <strong>x</strong>    <strong>Known</strong>    <strong>SteadyState</strong>    <strong>Min</strong>     <strong>Max</strong>    <strong>dxMin</strong>    <strong>dxMax</strong>
    <strong>_</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>____</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>_____</strong>

(1.) scdTanks_simscape.Tank3.pressure
    0    false       true        -Inf    Inf    -Inf      Inf 

Входные параметры

свернуть все

Спецификация рабочей точки или рабочая точка для модели Simulink в виде OperatingSpec, OperatingPoint, или OperatingReport объект.

Блок path или имя состояния, которое соответствует спецификации состояния в States свойство opВ виде вектора символов или строки, которая содержит одно из следующего:

  • Блок path блока в модели Simulink, которая содержит состояния без имени.

  • Имя именованного состояния в блоке Simulink или Simscape™.

Чтобы видеть все состояния, которые имеют технические требования состояния, просмотрите States свойство op.

op.States

Индекс элемента состояния в виде положительного целого числа, меньше чем или равного количеству элементов состояния в блоке или состоянии, задан name, или вектор из таких целых чисел. По умолчанию, если вы не задаете element, getStateIndex возвращает индексы всех элементов в выбранной спецификации состояния. Для примера смотрите, Получают индекс Указанного Элемента состояния Спецификации Рабочей точки.

Выходные аргументы

свернуть все

Индекс состояния, возвращенный как вектор-строка с 2 элементами, когда element целое число или массив с 2 столбцами когда element вектор. Каждая строка index содержит индекс для одного состояния модели.

Первый столбец index содержит индекс соответствующей спецификации состояния в States свойство op. Второй столбец содержит индекс элемента в рамках спецификации состояния.

Используя index, можно задать фрагмент состояния пользовательского отображения для индивидуально настраиваемой обрезки моделей Simulink. Для получения дополнительной информации смотрите CustomMappingFcn свойство operspec.

Введенный в R2017a