Развертывание приложений требует использования решателя с фиксированным шагом. Обычно для симуляции рабочего стола используется решатель переменного шага. Решатели с переменным шагом делают меньшие шаги, когда они обнаруживают событие пересечения нулем. Меньшие шаги помогают захватить динамику, которая приводит к точному пересечению нуля. Решатели с фиксированным шагом не изменяют размер шагов, которые они делают. Если ваша модель полагается в большой степени на обнаружение пересечений нуля, вам, возможно, потребуется задать очень небольшой размер фиксированного шага, чтобы точно захватить динамику. Небольшой шаг может привести к переполнению во время симуляции в реальном времени. Уменьшая количество пересечений нуля, можно сконфигурировать решатель, чтобы использовать больший размер шага как для развертывания с переменным шагом, так и для развертывания с фиксированным шагом, одновременно генерируя результаты, которые являются достаточно точными.
Симулируйте свою модель, чтобы сгенерировать данные, которые можно использовать для:
Решите, какие элементы модели нужно изменить, чтобы уменьшить количество событий пересечения нулем.
Оцените точность измененной модели.
Чтобы открыть модель, в 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 Results Explorer для взаимодействия с записанными в журнал данными моделирования.
sscexplore(simlogRef)
В дереве результатов щелкните Pneumatic Motor, чтобы увидеть результаты для двигателя.
Большинство пересечений нуля происходит между t = 0 и t = 1 секундами, когда другие сигналы в блоке близки к нулю. Несколько оставшихся пересечений нуля происходят приблизительно на t = 5 секундах.
Чтобы идентифицировать исходный код, который инициирует некоторые пересечения нуля, выберите Directional 5-way valve > Variable Area Orifice 2 > SimulationStatistics (ZeroCrossings) > zc_1 - 8 crossings. Щелкните ссылку Pneumatic.Elements.VariableOrifice, которая появится в нижнем, левом углу окна.
Исходный код блока Pneumatic Motor открывается курсором в этом коде:
% Area - limit to be greater than Area0 AreaL = if Area<Area0, Area0 else Area end;
Условный оператор, который отвечает за пересечения нуля, связан с площадью постоянного отверстия.
Уменьшите количество пересечений нуля путем уменьшения максимальной площади постоянного отверстия направляющего 5-ходового клапана. Откройте 5-сторонний клапан диалогового окна блока и задайте 995
для параметра Maximum orifice area (mm^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