Соображения о расчёте сопротивления и прочей механики

Раздел посвящен обсуждению вопросов разработки DLL-модулей подвижного состава
Ответить
Toman
Сообщения: 6
Зарегистрирован: 19 мар 2022, 13:01

Соображения о расчёте сопротивления и прочей механики

Сообщение Toman » 19 мар 2022, 17:41

Приветствую форумчан и разработчиков!

Довольно давно уже с интересом наблюдаю со стороны за развитием RRS, и за ситуацией в мире ж.д. симуляторов в целом. Сам давно уже не играл и не пытался разрабатывать дополнений вообще ни под какими играми - за неимением в настоящее время игрового компьютера с виндой, а глобально - из-за неудовлетворённости самими играми 15-20-летней давности, в которые играл в те времена. Но хочется, конечно же, вернуться в тему. Вот в очередной раз открыл форум посмотреть, нет ли чего нового и как вообще идут дела. Заодно в очередной раз перечитал темы, касающиеся расчётов механики и в частности сопротивления движению, в т.ч. тему про класс Vehicle - и всё-таки возникло желание высказаться, пришлось вот зарегистрироваться, наконец, на форуме.

Вероятно, в меня сейчас будут кидать гнилыми помидорами, поскольку я сейчас буду 1) предлагать вносить довольно серьёзные изменения в процедуру расчёта сопротивления и в способ его описания в конфигурационных файлах, и 2) посягать на святое - традиции оных расчётов из ПТР, понятие удельного сопротивления и т.д. Однако считаю, что во имя тру-реализма физики, к которому мы все стремимся, это всё же необходимо сделать.

Попробую объяснить, почему. Всё-таки формулы из ПТР создавались не для симуляции реалистичной динамики по составу и даже не для точного расчёта динамики поезда как целого. И вообще не для компьютерной симуляции/расчётов. Они создавались для возможно большего упрощения расчётов режимов вождения (и самой возможности провести поезд) для некого среднестатистического поезда в условиях, несколько приближенных к худшему случаю - т.е. с некоторыми запасами и погрешностями, и не интересуясь точным распределением сил по составу. Чтобы была возможность выполнения оценочных расчётов при предельно ограниченных вычислительных ресурсах, вплоть до чисто ручных расчётов, графических при помощи чертёжных инструментов и т.п.

Именно из такого подхода, очевидно, и возникла концепция расчёта сопротивления через удельное. Дескать, представим состав (или более-менее однородную часть состава) как состоящий из одинаковых среднестатистических вагонов среднестатистического веса, удельное сопротивление которых описывается такой-то формулой, после чего уже по ходу расчёта можно просто помножить удельное сопротивление на массу части состава, всё это сложить, поделить на общую массу состава... Или, ещё проще для расчёта, вначале заранее из формул-многочленов для однородных частей состава через их массы создать линейной комбинацией формулу-многочлен удельного сопротивления для всего состава в целом, и уже по этой формуле каким-то предельно простым способом считать движение состава как целого (также переведя тяговые характеристики локомотивов в формат удельной силы тяги для данного состава), вообще не используя никаких масс по ходу расчёта, а используя только коэффициент энергии вращающихся масс в составе в целом, который также считается заранее.

Вот для такого расчёта эти формулы и были созданы. Применение их в симуляторе, где мы хотим реалистичного расчёта продольной (а в перспективе и не только продольной) динамики состава, и где расчёт сил ведётся индивидуально для каждой подвижной единицы и даже для каждой оси, даже выглядит противоестественно (в процедуре расчёта появляются элементарно лишние арифметические действия: вначале поделить на массу (в формуле - осевую нагрузку), а потом тут же обратно домножить на неё, по сути), но кроме того и грозит некорректностью самого распределения сил по составу и соотв. динамики - т.е. с одной стороны мы вроде хотим реалистичной динамики, но с другой сохраняем некий ZDS-подобный подход расчёта, не предназначенный ни для чего кроме расчёта движения состава как целого.

Далее, следует заметить, что формулы эти сугубо эмпирические и полученные для некого усреднённого вагона, некого усреднённого пути и усреднённых условий (причём на настоящее время наверняка устаревших). Как мне помнится из MSTS-овской практики, там для описания основного сопротивления вообще используют, в соответствии, видимо, с американской ж.д. практикой, не многочлены, а сумму двух экспонент от скорости. Когда я ставил себе появлявшиеся отечественные вагоны и локомотивы, у некоторых из них (в особенности у ходивших тогда пассажирских вагонов) было просто явно всё не в порядке с сопротивлением движению, так что по крайней мере для пассажирских вагонов мне тогда пришлось, чтобы нормально играть, менять коэффициенты этих экспонент. Специально подбирал их такими, чтобы график основного сопротивления получался как можно ближе к нашим советским многочленам из ПТР - и, в общем, что-то более-менее подходящее подобрал. Сразу замечу, что я лично считаю представление сопротивления при помощи экспонент вообще концептуально неправильным просто с точки зрения реальной физики - там должны быть именно многочлены, поскольку практически все силы описываются какими-то степенями от скорости. Так что это просто как пример того, насколько оторванными от реальной физики могут быть эмпирические формулы в некоторых странах/сообществах.

Что же касается отечественных формул из ПТР, они, хоть и имеют правильный с точки зрения физики вид многочленов, с ними, помимо отнесения к среднестатистическому вагону, есть ещё одна проблема - а именно ступенчатость. Например, для гружёных и порожних (или близких к ним малозагруженных) вагонов предлагается использовать разные формулы. При этом нехитрые вычисления показывают, что эти формулы друг с другом вообще не стыкуются на границе осевой нагрузки, где предлагается между ними переходить. Понятно, что в реальной жизни такого быть просто не может, реальная зависимость просто обязаны быть непрерывной и плавной. Аналогично и с локомотивами: для них даются отдельные формулы для выбега и для тягового режима, но в реальной жизни и, соотв., для вычислений реалистичной физики, такого быть не может, и должна быть какая-то непрерывная плавная зависимость от сил тяги/электродинамического торможения (а таже, замечу, и от величины потока воздуха вентиляции ТЭД).

Ещё одна важная тема, которую классические формулы игнорируют - это зависимость коэффициентов сопротивления, в первую очередь тех, что связаны с аэродинамикой, от положения подвижной единицы в составе. Т.е. в голове состава, в хвосте, либо в середине, а также что именно является соседями единицы (грубо говоря, насколько качественно экранирует встречный ветер). Формулы ПТР, созданные для расчёта движения поезда как целого, могут позволить себе считать все вагоны находящимися внутри состава между усреднёнными другими вагонами, а всё дополнительное аэродинамическое сопротивление, имеющее место на лобовом и хвостовом концах поезда, отнести на счёт локомотива, вогнав в формулу для него. Но для расчёта реалистичной динамики по составу это, конечно, не годится, а локомотивы могут располагаться не только в голове и присутствовать в составе в различном количестве (многосекционные локомотивы, кратная тяга, локомотивы в хвосте или в середине состава).

Можно подумать, что я предложу сейчас как-то чрезвычайно усложнить расчёт сопротивления, пытаясь учесть вообще всё что можно как можно точнее, что сделает расчёт неподъёмным для реалтаймовой работы игры. Конечно же, нет. Конечно, полноценный расчёт аэродинамики и много другого, полноценная продувка единиц и межвагонных промежутков в аэродинамических трубах для игры, а потом обсчёт подобного в реальном времени - это некая очевидная фантастика, бред и жуткий оверкилл. Нет, я предлагаю примерно столь же упрощённые (или даже местами более простые в смысле исключения лишних арифметических действий) с точки зрения сложности вычислений на компе формулы и коэффициенты для них, но немножко другого вида - более приближенного к цели расчёта именно сил для отдельных подвижных единиц и соотв. динамики состава.

А именно, для начала возьмём классическую формулу:
w = b0 + (b1 + b2 * V + b3 * V * V) / q0 .

Обозначим число осей подвижной единицы z, тогда её массу можно выразить как z * q0 (если считать, что нагрузка на оси для всех осей одинакова - а для большинства обычных вагонов это приблизительно так). Тогда на этапе расчёта силы сопротивления, действующей на единицу, получаем:
W = (z * q0) * (b0 + (b1 + b2 * V + b3 * V * V) / q0) = (z * q0) * b0 + z * (b1 + b2 * V + b3 * V * V) = full_mass * b0 + z * b1 + z * b2 * V + z * b3 * V * V .

Это всё ещё в кгс, конечно - но понятно, что "перевод в ньютоны" можно зашить прямо в коэффициенты, так же, как туда естественным образом зашивается и число осей. И формула расчёта силы основного сопротивления подвижной единицы приобретает и визуально, и вычислительно куда более простой вид:
W = full_mass * c0 + c1 + c2 * V + c3 * V * V , а сама процедура вычисления становится короче на несколько лишних делений и умножений. Именно такую формулу я и предлагаю использовать для расчётов, выполняемых наиболее часто. А вот значения коэффициентов вполне имеют право быть динамическими, т.е. не быть фиксированными для подвижной единицы, а меняться в зависимости от текущих условий и соотв. вычисляться более сложным образом из некоторых более базовых параметров (подвижной единицы, её положения в составе, параметров участка пути и погоды), что не должно нас пугать в смысле производительности, поскольку обновление этих расчётов не требуется на каждом шаге, а может происходить на порядки реже, по мере изменения условий - зато позволяет радикально более реалистично (и при этом легче вычислительно!) учитывать эти различные факторы (расположение единицы в составе, кривые, тип и характеристики пути и земляного полотна, погода), нежели это делается в ПТР при помощи добавок и коэффициентов, просто накладываемых поверх вычисленного основного сопротивления. Ну, на самом деле чуть-чуть сложнее: в идеале нужны отдельные коэффициенты для квадрата земляной и квадрата воздушной скорости - для возможности учёта встречного или попутного ветра.

А классические формулы из ПТР - они вполне имеют право на существование, но только не для использования непосредственно в расчётах в игре, и не для задания параметров в конфигурационных файлах подвижного состава, а лишь в качестве ориентира для проверки правильности назначения первичных параметров подвижных единиц, пути и др. условий: если некий стандартный поезд как целое ведёт себя в неких стандартных условиях похоже на то, как говорят формулы из ПТР, значит, заданные нами параметры похожи на правду, если не похоже - надо искать, где промах, и исправлять.

Ответить

Вернуться в «Программирование модулей подвижного состава и оборудования (C++ API)»