Co-моделирование числовая компенсация

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-моделирования, которые могут иметь числовую компенсацию:

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

    slexCoSimTripleMassSpringExample

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

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

    • Метод экстраполяции — Из списка, выберите Linear, Quadratic или Cubic. Linear является значением по умолчанию.

    • Коэффициент исправления сигнала — Задает коэффициент между 0 и 1, где 0 не означает исправления на основе предыдущих шагов, 1 является значением по умолчанию. Коэффициент сигнала основан на предыдущих шагах.

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

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

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

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

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

  • Сигнальная линия соединяет два порта, которые являются и двойными, действительными, и непрерывными.

  • Сигнал имеет дискретную частоту дискретизации

  • Место назначения сигнала является непрямым сквозным соединением.

'auto'

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

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

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

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

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

| | | | |

Похожие темы

Была ли эта тема полезной?