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-функция
Тип данных Input port является двойным
Шаг расчета Input port является периодическим и дискретным
Сложность Input port действительна
ssSetInputPortIsContinuousQuantity()
установлен в true
для этого порта
ssSetInputPortDirectFeedThrough()
установлен в false
для этого порта
FMU
Тип данных Input port является двойным
FMU находится в режиме co-симуляции
Блокируйтесь шаг расчета является периодическим и дискретным
Input port сопоставляет с переменной с variability='continuous'
в modelDescription.xml
Для примера идентификации сигналов co-симуляции для числовой компенсации смотрите slexCoSimTripleMassSpringExample
модель.
Когда Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию, он отмечает соответствующие входные порты значком.
Следующая модель включает сигналы co-симуляции, которые могут иметь числовую компенсацию:
Откройте модель.
slexCoSimTripleMassSpringExample
Обновите схему. Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию и отмечают соответствующие порты значком.
Настройте параметры для точности компенсации: щелкните правой кнопкой по значку и выберите Configure Cosimulation Signal Compensation и настройте параметры вычисления:
ExtrapolationMethod Этот метод вычисляет компенсированное значение сигналов для шага текущего времени симуляции с помощью экстраполяции значений сигналов симуляции, сгенерированных от предыдущих временных шагов. Три типа экстраполяций предлагаются для выбора.
Linear
значение по умолчанию, оно использует значения сигналов, сгенерированные от предыдущих двух временных шагов, чтобы линейно оценить значение сигналов для использования на шаге текущего времени симуляции.
Quadratic
значения сигналов использования предыдущих трех временных шагов, чтобы соответствовать данным к квадратичному полиному.
Cubic
значения сигналов использования предыдущих четырех временных шагов, чтобы соответствовать данным к кубическому полиному.
В начале симуляции, когда существует недостаточное количество прошлых значений сигналов, метод экстраполяции более низкоуровневый используется автоматически. Методы экстраполяции высшего порядка используют больше прошлых значений сигналов, чтобы предсказать текущее значение сигналов и могут улучшить точность предсказания. Однако высокого уровня методы экстраполяции могут также быть численно неустойчивы [1]. Лучший метод экстраполяции зависит от природы сигнала.
Signal correction coefficient — Этот метод далее настраивает экстраполируемое значение сигналов на основе прошлых результатов симуляции и прошлые предполагаемые значения сигналов. Коэффициент коррекции предлагается для выбора между 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>}' )
Найдите названия параметра компенсации и возможные значения в этой таблице:
Параметр компенсации | 'ParameterName' | Значение параметров |
---|---|---|
ExtrapolationMethod | 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 умирает Интерполяция zwischen aquidistanten Ordinaten", Zeitschrift für Mathematik und Physik. Издание 46, 1901, стр 224–243.
FMU | S-Function | ssGetInputPortIsContinuousQuantity
| ssGetOutputPortIsContinuousQuantity
| ssSetInputPortIsContinuousQuantity
| ssSetOutputPortIsContinuousQuantity