Выполнение Co-симуляции и числовая компенсация

Simulink® поддерживает co-симуляцию между компонентами с локальными решателями или включает внешние инструменты симуляции. Например, co-симуляция может включить S-функцию, реализованную как шлюз co-симуляции между Simulink и сторонними программами или пользовательским кодом. Компонент co-симуляции может быть Функциональным модулем макета (FMU) в режиме co-симуляции, импортированном в Simulink.

Синхронизация выполнения

В симуляции Simulink размер шага решателя должен быть целочисленным делителем каждого периодического, дискретного шага расчета блока. Другими словами, если компонент co-симуляции задает свой собственный шаг расчета, Simulink должен связаться с компонентом на тех временных шагах. Co-симуляция может включить компоненты, временные шаги которых определяются внутренне и не известны Simulink. Единственной информацией, доступной Simulink, является шаг расчета блока, или через коммуникационный параметр размера шага блока FMU или через определение шага расчета в S-реализации-функции. Шаг расчета блока определяет временные шаги, которые Simulink должен передать с компонентом co-симуляции. Если размер шага решателя не является автоматическим, коммуникационный размер шага должен быть целочисленным кратным размер шага решателя.

Если компонент co-симуляции внутренне использует локальный решатель, то этот локальный решатель должен также быть учтен при определении коммуникационного размера шага блока. Размер шага локального решателя не представлен Simulink, и знание реализации необходимо, чтобы установить коммуникационный размер шага правильно. Поведение co-симуляции в случае потенциальной несовместимости также зависит от этой внутренней реализации решателя.

Числовая компенсация

Сигналы Co-симуляции обычно представляют непрерывные физические количества, которые дискретизируются из-за co-симуляции. Обмены данными между компонентами co-симуляции, такими как S-функции C MEX и блоки Co-Simulation FMU могут ввести числовые погрешности от задержек сигнала. Используйте числовую компенсацию, чтобы улучшить числовое поведение для симуляции включающие компоненты, которые используют их собственный решатель. Model Advisor включает проверку, которая обнаруживает компоненты co-симуляции и советует числовой компенсации.

Числовые предпосылки компенсации

Simulink автоматически выполняет числовую компенсацию за сигналы co-симуляции между компонентами co-симуляции. Simulink выполняет числовую компенсацию во входе целевого блока. Сигнал автоматически пригоден для числовой компенсации, если ее исходный порт и целевой порт удовлетворяют эти условия:

  • Исходный порт для сигнала должен удовлетворить эти требования:

    • S-функция

      • Тип данных выходного порта является двойным

      • Шаг расчета выходного порта является периодическим и дискретным

      • Сложность выходного порта действительна

      • ssSetOutputPortIsContinuousQuantity() установлен в true для порта

    • FMU

      • Тип данных выходного порта является двойным

      • FMU находится в режиме co-симуляции

      • Блокируйтесь шаг расчета является периодическим и дискретным

      • Выходной порт сопоставляет с переменной с variability='continuous' в modelDescription.xml

  • Целевой порт для сигнала должен удовлетворить эти требования:

    • S-функция

      • Тип данных входного порта является двойным

      • Шаг расчета входного порта является периодическим и дискретным

      • Сложность входного порта действительна

      • ssSetInputPortIsContinuousQuantity() установлен в true для этого порта

      • ssSetInputPortDirectFeedThrough() установлен в false для этого порта

    • FMU

      • Тип данных входного порта является двойным

      • FMU находится в режиме co-симуляции

      • Блокируйтесь шаг расчета является периодическим и дискретным

      • Входной порт сопоставляет с переменной с variability='continuous' в modelDescription.xml

Для примера идентификации сигналов co-симуляции для числовой компенсации см. модель slexCoSimTripleMassSpringExample.

Управляйте числовыми опциями компенсации Используя диалоговое окно

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

Следующая модель включает сигналы co-симуляции, которые могут иметь числовую компенсацию:

  1. Откройте модель.

    slexCoSimTripleMassSpringExample

  2. Обновите схему. Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию и отмечают соответствующие порты значком.

  3. Настройте параметры для точности компенсации: щелкните правой кнопкой по значку и выберите Configure Cosimulation Signal Compensation и настройте параметры вычисления:

    • ExtrapolationMethod Этот метод вычисляет компенсированное значение сигналов для шага текущего времени симуляции с помощью экстраполяции значений сигналов симуляции, сгенерированных от предыдущих временных шагов. Три типа экстраполяций предлагаются для выбора.

      • Linear является значением по умолчанию, он использует значения сигналов, сгенерированные от предыдущих двух временных шагов, чтобы линейно оценить значение сигналов для использования на шаге текущего времени симуляции.

      • Quadratic использует значения сигналов предыдущих трех временных шагов, чтобы соответствовать данным к квадратичному полиному.

      • Cubic использует значения сигналов предыдущих четырех временных шагов, чтобы соответствовать данным к кубическому полиному.

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

    • Signal correction coefficient — Этот метод далее настраивает экстраполируемое значение сигналов на основе прошлых результатов симуляции и прошлые предполагаемые значения сигналов. Коэффициент исправления предлагается для выбора между 0 и 1, где 0 не означает корректировки быть сделанной к экстраполируемому значению сигналов. Настройкой по умолчанию для коэффициента исправления является 1. Поскольку данный экстраполируемый сигнал в установленный срок продвигается, чем больше коэффициент исправления сигнала, тем больше корректировки внесено в данный экстраполируемый сигнал.

    Если числовая компенсация не выгодна, отключите ее путем щелчка левой кнопкой по значку. Когда отключено, значок появляется с красной наклонной чертой.

Управляйте числовыми опциями компенсации из командной строки

Если автоматическая компенсация не возможна, можно вручную включить числовую компенсацию с помощью свойства CoSimSignalCompensationMode.

Свойство CoSimSignalCompensationMode имеет эти значения:

ЗначокУстановкаПоведение

'Auto'

Включите автоматическую числовую компенсацию, позволив Simulink обнаружить, если порт имеет сигнал, имеющий право на числовую компенсацию.

'Auto_Off'

Отключите автоматическую числовую компенсацию. Значок появляется с красной наклонной чертой.

'Always'

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

'Always_Off'

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

Например, чтобы отключить числовую компенсацию за первый входной порт из предыдущей модели:

  1. Выберите блок, для которого вы хотите выбрать порт для числовой компенсации. Например, получите все указатели порта для в настоящее время выбранного блока, gcb.

    p = get_param(gcb, 'PortHandles')

    Эта функция возвращает все порты для в настоящее время выбранного блока. Например,

    p = 
    
      struct with fields:
    
          Inport: [22.0001 20.0001]
         Outport: [23.0001 25.0001]
          Enable: []
         Trigger: []
           State: []
           LConn: []
           RConn: []
        Ifaction: []
           Reset: []
  2. Отключить числовую компенсацию за первый порт:

    set_param(p.Inport(1), 'CoSimSignalCompensationMode', 'Auto_Off')
    

    Связанный порт появляется с красной наклонной чертой.

Можно также установить параметры компенсации сигнала из командной строки. Первый шаг, снова, должен получить указатели порта:

p = get_param(block, 'PortHandles')

Установите параметры компенсации с помощью параметра CoSimSignalCompensationConfig в этом формате:

set_param(p.Inport,'CoSimSignalCompensationConfig','{<CompensationParam>:<ParamValue>}' )

Найдите названия параметра компенсации и возможные значения в этой таблице:

Параметр компенсации'ParameterName' Значение параметров
ExtrapolationMethodExtrapolationMethod 'LinearExtrapolation', 'QuadraticExtrapolation' или 'CubicExtrapolation'
CompensationCoefficientКоэффициент компенсацииСкаляр между 0 и 1

Например, установите метод экстраполяции для порта:

set_param( p.Inport, 'CoSimSignalCompensationConfig', '{"ExtrapolationMethod":"LinearExtrapolation"}' ))

Установите и метод экстраполяции и коэффициент компенсации:

set_param(p.Inport,'CoSimSignalCompensationConfig', '{"ExtrapolationMethod":"QuadraticExtrapolation", "CompensationCoefficient":"0.7"}' ))

Ссылки

[1] Рунге, Карл. "Uber empirische Funktionen und умирает Интерполяция zwischen aquidistanten Ordinaten", Zeitschrift für Mathematik und Physik. Издание 46, 1901, стр 224–243.

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

| | | | |

Похожие темы