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

Simulink® поддерживает совместное моделирование между компонентами с помощью локальных решателей или включает внешние инструменты симуляции. Для примера ко-симуляция может включать S-функцию, реализованную как шлюз ко-симуляции между Simulink и сторонними программами или пользовательским кодом. Компонентом ко-симуляции может быть Functional Mockup Unit (FMU) в режиме ко-симуляции, импортированном в Simulink.

Тайминг выполнения

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

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

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

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

Численная компенсация Необходимых условий

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

  • Порт источника сигнала должен удовлетворять следующим требованиям:

    • S-функция

      • Тип данных выходного порта двойной точности

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

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

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

    • FMU

      • Тип данных выходного порта двойной точности

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

      • Блочная выборка является периодической и дискретной

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

  • Порт назначения для сигнала должен удовлетворять следующим требованиям:

    • S-функция

      • Тип данных Input port двойной точности

      • Input port шага расчета является периодическим и дискретным

      • Сложность Input port действительна

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

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

    • FMU

      • Тип данных Input port двойной точности

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

      • Блочная выборка является периодической и дискретной

      • Input port преобразуется в переменную с variability='continuous' в modelDescription.xml

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

Управление числовой компенсацией Опций помощи диалогового окна

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

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

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

    slexCoSimTripleMassSpringExample

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

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

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

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

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

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

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

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

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

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

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

The 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>}' )

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

Параметр компенсацииИмя параметраЗначение параметров
ExtrapolationMethodМетод экстраполяции'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 die Interpolation zwischen aquidistanten Ordinaten», Zeitschrift für Mathematik und Physik. Том 46, 1901, с. 224-243.

См. также

| | | | |

Похожие темы