Развертывание в реальном времени требует использования решателя с фиксированным шагом. Для моделирования рабочего стола обычно используется решатель с переменным шагом. Решатели переменных шагов выполняют меньшие шаги, когда обнаруживают событие пересечения нуля. Меньшие шаги помогают точно зафиксировать динамику, которая вызывает пересечение нуля. Решатели с фиксированным шагом не изменяют размер шагов, которые они выполняют. Если модель в значительной степени полагается на обнаружение нулевых пересечений, может потребоваться указать очень небольшой фиксированный размер шага, чтобы точно зафиксировать динамику. Небольшой размер шага может привести к перерасходу во время моделирования в реальном времени. Уменьшив число переходов через ноль, можно настроить решатель на использование большего размера шага как для развертывания с переменным шагом, так и для развертывания с фиксированным шагом с получением результатов, достаточно точных.
Моделирование модели для создания данных, которые можно использовать для:
Определите, какие элементы модели следует изменить для уменьшения числа событий пересечения нулей.
Оцените точность измененной модели.
Для открытия модели в командной строке MATLAB ® введите:
model = 'ssc_pneumatic_rts_stiffness_redux';
open_system(model)

Моделирование модели:
sim(model)
Сохраните данные в рабочей области.
simlogRef = simlog; timeRef = tout;
Постройте график размера шага по времени моделирования.
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 секунд.
Увеличьте изображение, чтобы проверить данные между временем 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 секунд для каждого обнаружения пересечения нуля.
Чтобы получить исходные результаты для скорости двигателя, откройте подсистему измерений. Выберите блок «Датчик идеального вращательного движения»,.
Выбрав блок, используйте команду 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]Используйте simscape.logging.plot функция для печати справочных результатов для W.
simscape.logging.plot(nRef.W);

Проанализируйте данные моделирования для определения элементов, ответственных за пересечение нулей. Измените модель, чтобы уменьшить число нулевых пересечений, вызываемых этими элементами.
Используйте 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)
Используйте sscexplore , чтобы открыть обозреватель результатов Simscape для взаимодействия с записанными данными моделирования.
sscexplore(simlogRef)
В дереве результатов щелкните Пневматический двигатель (Pneumic Motor), чтобы просмотреть результаты для двигателя.

Большинство пересечений нулей происходит между t = 0 и t = 1 секундами, когда другие сигналы в блоке близки к нулю. Несколько оставшихся нулевых переходов происходят приблизительно через t = 5 секунд.
Чтобы определить исходный код, который инициирует некоторые пересечения нулей, выберите «Направленный 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-ходовой блок клапана» и укажите 995 для параметра Максимальная площадь отверстия (мм ^ 2).
Сравните результаты с результатами привязки, чтобы обеспечить точность измененной модели. Убедитесь, что измененная модель имеет меньше нулевых пересечений.
Смоделировать модель и распечатать данные пересечения нулей.
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.
Сравнение результатов с помощью simscape.logging.plot функция для построения графика результатов привязки и результатов из измененной модели на один график:
simscape.logging.plot... ({simlogRef.Measurements.Ideal_Rotational_Motion_Sensor.W... simlog.Measurements.Ideal_Rotational_Motion_Sensor.W}, ... 'names', {'Reference','Modified'})

Результаты выглядят одинаково.
Управление масштабированием для более пристального взгляда на точку перегиба при 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])

На этом уровне масштабирования можно увидеть небольшое различие в результатах для измененной модели. Однако моделирование является достаточно точным, чтобы результаты соответствовали ожиданиям, основанным на эмпирических и теоретических данных.
Чтобы еще больше повысить скорость моделирования перед выполнением процесса моделирования в реальном времени с помощью этой модели, попробуйте:
Повторение способа, показанного в этом примере, для идентификации и корректировки других элементов, вызывающих пересечение нулевого уровня, которые отвечают за малые шаги
Уменьшение любой численной жесткости, которая отвечает за малые шаги
simscape.logging.findNode | simscape.logging.plotxy | sscexplore | sscprintzcs