Реализуем простейшую тяговую характеристику

Реализуем простейшую тяговую характеристику

Активные движущие силы и способ их задания

В RRS, чтобы заставить локомотив двигаться, необходимо подать на его колесные пары крутящий момент. В классе Vehicle существует специальная переменная Q_a, которая носит название вектор обобщенных активных сил. Этот вектор хранит NumAxis + 1 значений, а если вы помните, то NumAxis определяется в конфиге локомотива как число его осей.

Значение Q_a[0] описывает линейную силу, приложенную к кузову подвижной единицы, а значения с Q_a[1] по Q_a[NumAxis] — как раз таки крутящие моменты, приложенный к колесным парам, с номерами от 1 до NumAxis, от тягового привода.

Для чего нужна линейная сила Q_a[0]. Например, у вас появится желание сделать модель поезда с реактивной тягой (а такой поезд реально испытывался на отечественной железной дороге и кабину его вагона с реактивными двигателями можно увидеть в качестве памятника перед главной проходной Тверского вагоностроительного завода). Вот тогда нам потребуется передача активного тягового усилия через кузов. Через этот параметр можно передавать различные тестовые усилия. В обычных условиях он равен нулю и не используется, но кто знает для каких целей он может понадобится разработчику…

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

Для начала переопределим в классе SimpleLoco метод step() вызываемый движком на каждом шаге интегрирования модели поезда. В нем происходит основная работа по вычислению параметров, обеспечивающих движение подвижного состава.

В качестве параметров этот метод принимает от движка игры текущее время симуляции t и текущий шаг интегрирования по времени dt. Эти параметры необходимы нам для описания процессов, происходящих в подвижном составе, так как все процессы в оборудовании разворачиваются во времени, и движок любезно предоставляет нам все параметры отсчета времени, актуальные на данный момент. Реализуем метод step() написав такой код

Что мы сделали? Мы задали некоторый постоянный момент torque равный 5000 Н · м, и приложили к каждой колесной паре нашего локомотива, с учетом текущего заданного уровня тяги, которым мы управляем с клавиатуры. Компилируем библиотеку, запускаем симулятор и теперь мы увидим, как наш локомотив, повинуясь командам с клавиатуры берет разбег и начинает движение!

Тяговая характеристика локомотива

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

Тяговая характеристика локомотива — кривая, задающая зависимость силы тяги, реализуемой локомотивом от его скорости и различного рода ограничений (по сцеплению и по мощности, развиваемой приводом)

Типичная тяговая характеристика может выглядеть так, как показано на рисунке ниже

Типовая тяговая характеристика локомотива

Идеальная тяговая характеристика имеет форму гиперболы, и на данном графике вторая половина кривой имеет гиперболическую форму. Почему? Потому, что любой тяговый привод имеет ограниченную мощность — никакой двигатель не в состоянии выдать мощность более той, на которую он рассчитан. Скажем, тяговые двигатели локомотива суммарно обеспечивают мощность равную P_nom. А мощность, как известно, определяется как произведение силы тяги на скорость

P_nom = F · v

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

F = P_nom / v

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

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

Теперь, зная все это, скорректируем код нашего локомотива, чтобы реализовать правильную форму его тяговой характеристики. Введем в наш класс ряд параметров

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

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

Теперь у нас есть функция, позволяющая рассчитать силу тяги, которую может развить локомотив при данной скорости. Но это еще не всё — в методе step() пишем следующий код

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

Во-вторых, на колесные пары мы подаем момент, реализуемый приводом этой колесной пары, а тяговая характеристика дает полную тягу локомотива. Поэтому эту полную тягу следует пересчитать в момент приходящийся на одну КП. Для этого всю тягу мы делим на число осей, а потом умножаем на радиус колеса, так как момент приложенный к КП и сила тяги, приходящаяся на эту ось находятся в соотношении

Mкп = Fкп · rколеса

Радиус колеса мы можем вычислить как половина диаметра, используя стандартную переменную wheel_diameter, в которой хранится диаметр колеса, заданный нами через конфиг. Аналогично, число осей локомотива хранится в переменной num_axis.

Теперь, если мы запустим симулятор и дадим тягу, то увидим, как наш локомотив разгоняется, причем довольно шустро. Выведем на экран, через отладочную строку несколько дополнительных параметров, для чего перенесем инициализацию отладочной строки в метод step()

Теперь внизу, в отладочной строке, можно увидеть, как меняется сила тяги по мере разгона, в точном соответствии с заданной нами характеристикой.

Назад Вперед
Содержание