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

Если компонент совместного моделирования использует локальный решатель, то этот локальный решатель также должен учитываться при определении размера шага связи блока. Размер шага локального решателя не предоставляется Simulink, и знание реализации необходимо для правильной настройки размера шага связи. Поведение совместного моделирования в случае потенциальной несовместимости также зависит от этой внутренней реализации решателя.
Сигналы совместного моделирования обычно представляют собой непрерывные физические величины, которые дискретизируются из-за совместного моделирования. Обмен данными между компонентами совместного моделирования, такими как S-функции C MEX и блоки FMU совместного моделирования, может вводить численные неточности из задержек сигнала. Используйте числовую компенсацию для улучшения числового поведения при моделировании компонентов, использующих собственный решатель. Model Advisor включает проверку, которая обнаруживает компоненты совместного моделирования и рекомендует числовую компенсацию.
Simulink автоматически выполняет численную компенсацию сигналов совместного моделирования между компонентами совместного моделирования. Simulink выполняет численную компенсацию на входе блока назначения. Сигнал автоматически квалифицируется для числовой компенсации, если его порт источника и порт назначения удовлетворяют следующим условиям:
Порт источника сигнала должен удовлетворять следующим требованиям:
S-функция
Тип данных выходного порта - двойной
Время выборки выходного порта является периодическим и дискретным
Сложность выходного порта реальна
ssSetOutputPortIsContinuousQuantity() имеет значение true для порта
FMU
Тип данных выходного порта - двойной
FMU находится в режиме совместного моделирования
Время блочной выборки является периодическим и дискретным
Порт вывода сопоставляется переменной с variability='continuous' в modelDescription.xml
Порт назначения для сигнала должен удовлетворять следующим требованиям:
S-функция
Тип данных входного порта - двойной
Время выборки входного порта является периодическим и дискретным
Сложность входного порта реальна
ssSetInputPortIsContinuousQuantity() имеет значение true для этого порта
ssSetInputPortDirectFeedThrough() имеет значение false для этого порта
FMU
Тип данных входного порта - двойной
FMU находится в режиме совместного моделирования
Время блочной выборки является периодическим и дискретным
Порт ввода сопоставляется переменной с variability='continuous' в modelDescription.xml
Пример идентификации сигналов совместного моделирования для числовой компенсации см. в slexCoSimTripleMassSpringExample модель.
Когда Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию, он помечает соответствующие входные порты
значком.
Следующая модель включает в себя сигналы совместного моделирования, которые могут иметь числовую компенсацию:

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

Настройте параметры для точности компенсации: Щелкните правой кнопкой мыши значок и выберите Настроить компенсацию сигнала косимуляции (Configure Cosimulation Signal Compensation) и настройте параметры расчета:
Метод экстраполяции - этот метод вычисляет значение компенсированного сигнала для текущего временного шага моделирования с использованием экстраполяции значений сигнала моделирования, сгенерированных из предыдущих временных шагов. Для выбора предлагаются три вида экстраполяций.
Linear является значением по умолчанию, оно использует значения сигнала, сгенерированные из предыдущих двух временных шагов, для линейной оценки значения сигнала для использования в текущем временном шаге моделирования.
Quadratic использует значения сигнала предыдущих трех временных шагов для подгонки данных к квадратичному многочлену.
Cubic использует значения сигнала предыдущих четырех временных шагов для подгонки данных к кубическому многочлену.

В начале моделирования при недостаточном количестве прошлых значений сигнала автоматически используется метод экстраполяции более низкого порядка. Способы экстраполяции более высокого порядка используют большее количество прошлых значений сигнала для прогнозирования текущего значения сигнала и могут улучшить точность прогнозирования. Однако методы экстраполяции высокого порядка также могут быть численно нестабильными [1]. Наилучший метод экстраполяции зависит от характера сигнала .
Коэффициент коррекции сигнала - этот способ дополнительно корректирует экстраполированное значение сигнала на основе прошлых результатов моделирования и прошлых оцененных значений сигнала. Для выбора предлагается поправочный коэффициент между 0 и 1, где 0 означает отсутствие регулировки экстраполированного значения сигнала. Значение по умолчанию для поправочного коэффициента: 1. Для данного экстраполированного сигнала на данном временном шаге, чем больше коэффициент коррекции сигнала, тем больше регулировка выполняется для данного экстраполированного сигнала.
Если числовая компенсация не выгодна, отключите ее
, щелкнув значок левой кнопкой мыши. Если этот параметр отключен, значок отображается с красной косой чертой.
Если автоматическая компенсация невозможна, можно вручную включить числовую компенсацию с помощью CoSimSignalCompensationMode собственность.
CoSimSignalCompensationMode свойство имеет следующие значения:
| Символ | Настройка | Поведение |
|---|---|---|
|
|
| Включите автоматическую числовую компенсацию, позволяющую Simulink определять, имеет ли порт сигнал, приемлемый для числовой компенсации. |
|
|
| Отключить автоматическую числовую компенсацию. Значок отображается с красной косой чертой. |
|
|
| Принудительно считайте порт совместимым с числовой компенсацией, даже если сигнал не подлежит числовой компенсации. Этот параметр позволяет добавлять компенсацию, не объявляя ее непрерывной. |
|
|
| Деактивизация принудительного использования порта в качестве совместимого с числовой компенсацией. |
Например, чтобы отключить числовую компенсацию для первого входного порта из предыдущей модели:
Выберите блок, для которого требуется выбрать порт для числовой компенсации. Например, получить все дескрипторы портов для выбранного блока, 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: []Для отключения числовой компенсации для первого порта:
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.
FMU | S-функция | ssGetInputPortIsContinuousQuantity | ssGetOutputPortIsContinuousQuantity | ssSetInputPortIsContinuousQuantity | ssSetOutputPortIsContinuousQuantity