Simulink® поддерживает co-моделирование между компонентами. Сигналы Co-моделирования обычно представляют непрерывные физические количества, которые дискретизируются из-за co-моделирования. В Simulink co-моделирование происходит между компонентами с локальными решателями или включает инструменты моделирования. Например, co-моделированием может быть S-функция, реализованная как шлюз co-моделирования между Simulink и сторонними программами или пользовательским кодом. Это может также быть Функциональный модуль макета (FMU) в режиме co-моделирования, импортированном в Simulink.
Обмены данными между компонентами co-моделирования, такими как S-функции C MEX и блоки Co-Simulation FMU могут представить числовые погрешности от задержек сигнала. Используйте числовую компенсацию, чтобы улучшить числовое поведение для моделирования включающие компоненты, которые используют их собственный решатель.
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
Когда Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию, он отмечает соответствующие входные порты значком.
Следующая модель включает сигналы co-моделирования, которые могут иметь числовую компенсацию:
Откройте модель.
slexCoSimTripleMassSpringExample
Обновите схему. Simulink обнаруживает сигналы, которые могут иметь числовую компенсацию и отмечают соответствующие порты значком.
Настройте параметры для точности компенсации: щелкните правой кнопкой по значку и выберите Configure Cosimulation Signal Compensation и настройте параметры вычисления:
Метод экстраполяции — Из списка, выберите Linear
, Quadratic
или Cubic
. Linear
является значением по умолчанию.
Коэффициент исправления сигнала — Задает коэффициент между 0
и 1
, где 0
не означает исправления на основе предыдущих шагов, 1
является значением по умолчанию. Коэффициент сигнала основан на предыдущих шагах.
Чтобы отключить числовую компенсацию, щелкните левой кнопкой по значку. Когда отключено, значок появляется с красной наклонной чертой.
Если автоматическая компенсация не возможна, можно вручную включить числовую компенсацию с помощью свойства CoSimSignalCompensationMode
.
Свойство CoSimSignalCompensationMode
имеет эти значения:
Поведение | Установка |
---|---|
Включите автоматическую числовую компенсацию, позволив Simulink обнаружить, если порт имеет сигнал, имеющий право на числовую компенсацию. 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')
Связанный порт появляется с красной наклонной чертой.
Для примера идентификации сигналов co-моделирования для числовой компенсации смотрите модель slexCoSimTripleMassSpringExample
.
FMU | S-функция | ssGetInputPortIsContinuousQuantity
| ssGetOutputPortIsContinuousQuantity
| ssSetInputPortIsContinuousQuantity
| ssSetOutputPortIsContinuousQuantity