exponenta event banner

Уменьшение нулевых пересечений

Зачем сокращать нулевые переходы?

Развертывание в реальном времени требует использования решателя с фиксированным шагом. Для моделирования рабочего стола обычно используется решатель с переменным шагом. Решатели переменных шагов выполняют меньшие шаги, когда обнаруживают событие пересечения нуля. Меньшие шаги помогают точно зафиксировать динамику, которая вызывает пересечение нуля. Решатели с фиксированным шагом не изменяют размер шагов, которые они выполняют. Если модель в значительной степени полагается на обнаружение нулевых пересечений, может потребоваться указать очень небольшой фиксированный размер шага, чтобы точно зафиксировать динамику. Небольшой размер шага может привести к перерасходу во время моделирования в реальном времени. Уменьшив число переходов через ноль, можно настроить решатель на использование большего размера шага как для развертывания с переменным шагом, так и для развертывания с фиксированным шагом с получением результатов, достаточно точных.

Получение справочных результатов и размер шага моделирования графика

Моделирование модели для создания данных, которые можно использовать для:

  • Определите, какие элементы модели следует изменить для уменьшения числа событий пересечения нулей.

  • Оцените точность измененной модели.

  1. Для открытия модели в командной строке MATLAB ® введите:

    model = 'ssc_pneumatic_rts_stiffness_redux'; 
    open_system(model)
    

  2. Моделирование модели:

    sim(model)

  3. Сохраните данные в рабочей области.

    simlogRef = simlog;
    timeRef = tout;

  4. Постройте график размера шага по времени моделирования.

    h1 = figure;
    semilogy(timeRef(1:end-1),diff(timeRef),'-x')
    title('Solver Step Size')
    xlabel('Time (s)')
    ylabel('Step Size (s)')

    Моделирование замедляется неоднократно в начале моделирования и в момент времени t = ~ 1, 4, 5, 8 и 9 секунд.

  5. Увеличьте изображение, чтобы проверить данные между временем t = 0,8 и 1,03 секунды.

    h1;
    xStart = 0;
    xEnd = 10;
    yStart = 0;
    yEnd = 10e0;
    xZoomStart1 = 0.8;
    xZoomEnd1 = 1.03;
    yZoomStart1 = 10e-20;
    yZoomEnd1 = 10e-1;
    axis([xZoomStart1 xZoomEnd1 yZoomStart1 yZoomEnd1])

    Синий x маркеры на рисунке указывают, что моделирование завершило выполнение шага. Обведенные маркеры указывают на очень маленький размер шага и представляют события пересечения нуля. Размер шага уменьшается приблизительно до 10e-15 секунд для каждого обнаружения пересечения нуля.

  6. Чтобы получить исходные результаты для скорости двигателя, откройте подсистему измерений. Выберите блок «Датчик идеального вращательного движения»,. Выбрав блок, используйте команду simscape.logging.findNode поиск и сохранение узла, содержащего данные для W, сигнал для угловой скорости двигателя.

    nRef = simscape.logging.findNode(simlogRef,gcbh)
    

    nRef = 
    
      Node with properties:
    
                id: 'Ideal_Rotational_Motion_Sensor'
           savable: 1
        exportable: 0
               phi: [1×1 simscape.logging.Node]
                 C: [1×1 simscape.logging.Node]
                 R: [1×1 simscape.logging.Node]
                 A: [1×1 simscape.logging.Node]
                 w: [1×1 simscape.logging.Node]
                 t: [1×1 simscape.logging.Node]
                 W: [1×1 simscape.logging.Node]

  7. Используйте simscape.logging.plot функция для печати справочных результатов для W.

    simscape.logging.plot(nRef.W);

Определение и изменение элементов, вызывающих пересечение нулей

Проанализируйте данные моделирования для определения элементов, ответственных за пересечение нулей. Измените модель, чтобы уменьшить число нулевых пересечений, вызываемых этими элементами.

  1. Используйте Simscape™ sscprintzcs функция для печати информации о пересечении нуля для зарегистрированных данных моделирования.

    sscprintzcs(simlogRef)
    ssc_pneumatic_rts_stiffness_redux (42 signals, 50 crossings)
      +-Directional_5_way_valve (38 signals, 46 crossings)
      | +-Variable_Area_Orifice_1 (9 signals, 13 crossings)
      | +-Variable_Area_Orifice_2 (9 signals, 10 crossings)
      | +-Variable_Area_Orifice_3 (9 signals, 14 crossings)
      | +-Variable_Area_Orifice_4 (11 signals, 9 crossings)
      +-Pipe_1 (2 signals, 0 crossings)
      | +-Constant_Chamber (2 signals, 0 crossings)
      +-Pneumatic_Motor (2 signals, 4 crossings)
    
    Результаты показывают, что 50 обнаруженных нулевых пересечений происходят в блоке направленного 5-ходового клапана (46 пересечений) и блоке пневматического двигателя (4 пересечений).

  2. Используйте sscexplore , чтобы открыть обозреватель результатов Simscape для взаимодействия с записанными данными моделирования.

    sscexplore(simlogRef)

  3. В дереве результатов щелкните Пневматический двигатель (Pneumic Motor), чтобы просмотреть результаты для двигателя.

    Большинство пересечений нулей происходит между t = 0 и t = 1 секундами, когда другие сигналы в блоке близки к нулю. Несколько оставшихся нулевых переходов происходят приблизительно через t = 5 секунд.

  4. Чтобы определить исходный код, который инициирует некоторые пересечения нулей, выберите «Направленный 5-ходовой клапан» > «Измерительная диафрагма переменной площади 2» > «Статистика нулевых пересечений» (ZeroCrossings) > «zc_1 - 8 пересечений». Щелкните на ссылке Pneumatic.Elements.VariiveOrifice, которая отображается в нижнем левом углу окна.

    Исходный код блока Пневматический двигатель откроется с курсором в следующем коде:

    % Area - limit to be greater than Area0
    AreaL = if Area<Area0, Area0 else Area end;
    

    Условный оператор, который отвечает за пересечение нулей, связан с площадью диафрагмы.

  5. Уменьшите число пересечений нуля, уменьшив максимальную площадь отверстия направленного 5-ходового клапана. Откройте диалоговое окно «Направленный 5-ходовой блок клапана» и укажите 995 для параметра Максимальная площадь отверстия (мм ^ 2).

Анализ результатов измененной модели

Сравните результаты с результатами привязки, чтобы обеспечить точность измененной модели. Убедитесь, что измененная модель имеет меньше нулевых пересечений.

  1. Смоделировать модель и распечатать данные пересечения нулей.

    sim(model)
    sscprintzcs(simlog)

    ssc_pneumatic_rts_stiffness_redux (42 signals, 30 crossings)
      +-Directional_5_way_valve (38 signals, 26 crossings)
      | +-Variable_Area_Orifice_1 (9 signals, 7 crossings)
      | +-Variable_Area_Orifice_2 (9 signals, 6 crossings)
      | +-Variable_Area_Orifice_3 (9 signals, 8 crossings)
      | +-Variable_Area_Orifice_4 (11 signals, 5 crossings)
      +-Pipe_1 (2 signals, 0 crossings)
      | +-Constant_Chamber (2 signals, 0 crossings)
      +-Pneumatic_Motor (2 signals, 4 crossings)

    Общее число нулевых переходов сократилось с 50 до 30.

  2. Сравнение результатов с помощью simscape.logging.plot функция для построения графика результатов привязки и результатов из измененной модели на один график:

    simscape.logging.plot...
        ({simlogRef.Measurements.Ideal_Rotational_Motion_Sensor.W...
        simlog.Measurements.Ideal_Rotational_Motion_Sensor.W}, ...
        'names', {'Reference','Modified'})

    Результаты выглядят одинаково.

  3. Управление масштабированием для более пристального взгляда на точку перегиба при t = ~ 5 секунд.

    xStart = 0;
    xEnd = 10;
    yStart = -400;
    yEnd = 400;
    xZoomStart1 = 4.75;
    xZoomEnd1 = 5.15;
    yZoomStart1 = -20;
    yZoomEnd1 = 30;
    axis([xZoomStart1 xZoomEnd1 yZoomStart1 yZoomEnd1])

    На этом уровне масштабирования можно увидеть небольшое различие в результатах для измененной модели. Однако моделирование является достаточно точным, чтобы результаты соответствовали ожиданиям, основанным на эмпирических и теоретических данных.

    Чтобы еще больше повысить скорость моделирования перед выполнением процесса моделирования в реальном времени с помощью этой модели, попробуйте:

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

    • Уменьшение любой численной жесткости, которая отвечает за малые шаги

См. также

| | |

Связанные примеры

Подробнее