Класс Vehicle: полное описание
Добавлено: 01 мар 2020, 17:31
Думаю будет полезно описать подробно основные классы, с которыми работает физический движок RRS. И начать нужно с класса Vehicle, являющегося основой для разработки подвижного состава.
С интерфейсом этого класса можно ознакомится в в заголовочном файле sdk/include/vehicle.h который идет в комплекте с игрой. Класс этот довольно объемный, я бы сказал монструозный. Данный класс описывает так называемую единицу подвижного состава или подвижную единицу (ПЕ). Под единицей подвижного состава в симуляторе понимается железнодорожный экипаж, имеющий свой кузов, ходовую часть и внутреннее оборудование. Это может быть секция локомотива, вагон МВПС, несамоходный вагон.
Ещё раз повторю ключевую особенность RRS - в этом симуляторе все подвижные единицы динамически равноправны. Это означает, простым языком, что вагон с точки зрения движка игры, ничем не оличается от секции локомотива. То есть вообще ничем. Движок игры оперирует с классом Vehicle, получая от него текущую величину ускорения кузова. Какое внутреннее оборудование порождает это ускорение движок игры слыхом не слыхивал, все это остается на совести разработчика DLL-модуля подвижной единицы.
Класс Vehicle наследует от Qt-класса QObject, для того, чтобы использовать все ключевые возможности фреймворка Qt, на котором основана игра, в частности для использования механизма передачи сигналов от одного класа другому.
Поскольку класс довольно большой, разобью описание его свойств и методов на несколько разделов.
1. Защищенные свойства класса Vehicle
full_mass = empty_mass + payload_coeff * payload_mass
причем payload_coeff программно ограничивается в диапазоне от 0.0 до 1.0. Так что схитрить и задать в конфиге этот параметр равным 1000 не выйдет
Идем далее
w = b0 + (b1 + b2 * V + b3 * V * V) / q0
где V - скорость экипажа в км/ч. Сама сила, в справочнике Гребенюка имеет размерность килограмм силы на тонну массы, то есть кгс/т. Коэффициенты этой формулы b0 - b3 определяются экспериментально для каждой серии подвижного состава по методике ВНИИЖТ. Есть замечательная книга-справочник "Тяговые расчеты" за авторством П.Т. Гребенюка, где можно получить эти коэффициенты для вагонов и локомотивов.
Для того чтобы расчитать силу сопротивления, вычисляется удельное сопротивление по этой формуле, а затем пересчитать в силу действующу на ПЕ, вырашенную уже в Ньютонах
W = full_mass * Physics::g * w / 1000.0
где Physics::g - константа движка, в которой хранится значение ускорения свободного падения.
Продолжим
G = full_mass * Physics::g * inc / 1000.0
а по кривизне пути, удельное сопротивление движению в кривой
wk = 700 * curv
Под current_kind понимается именно род электрического тока, переменный синусоидальный или постоянный. Устройства контроля рода тока должны реагировать именно на значения этого параметра.
Q_a[1] - Q_a[num_axis] - крутящие моменты, передаваемые на колесные пары от тягового привода, в том числе и в режиме электродинамического торможения. Эти моменты задаются разработчиком DLL-модуля и являются входными параметрами, позволяющими воздействовать на динамику ПЕ и поезда в целом.
Q_r[0] - линейная тормозная сила. Может быть использована, например для реализации магнитно-рельсового тормоза.
Q_r[1] - Q_r[num_axis] - тормозные моменты, развиваемые фрикционными тормозами и передаваемые на ось колесной пары. Через эти момент реализуется действие тормозов.
Все эти параметры доступны в классе ПЕ, унаследованном от Vehicle. Все они, кроме крутящих и тормозных моментов, задаются либо в конфигах, либо рассчитываются самим симулятором, что, безусловно, не исключает и воздействия на них со стороны разработчика дополнения.
Пока остановлюсь на этом, но продолжение следует...
С интерфейсом этого класса можно ознакомится в в заголовочном файле sdk/include/vehicle.h который идет в комплекте с игрой. Класс этот довольно объемный, я бы сказал монструозный. Данный класс описывает так называемую единицу подвижного состава или подвижную единицу (ПЕ). Под единицей подвижного состава в симуляторе понимается железнодорожный экипаж, имеющий свой кузов, ходовую часть и внутреннее оборудование. Это может быть секция локомотива, вагон МВПС, несамоходный вагон.
Ещё раз повторю ключевую особенность RRS - в этом симуляторе все подвижные единицы динамически равноправны. Это означает, простым языком, что вагон с точки зрения движка игры, ничем не оличается от секции локомотива. То есть вообще ничем. Движок игры оперирует с классом Vehicle, получая от него текущую величину ускорения кузова. Какое внутреннее оборудование порождает это ускорение движок игры слыхом не слыхивал, все это остается на совести разработчика DLL-модуля подвижной единицы.
Класс Vehicle наследует от Qt-класса QObject, для того, чтобы использовать все ключевые возможности фреймворка Qt, на котором основана игра, в частности для использования механизма передачи сигналов от одного класа другому.
Поскольку класс довольно большой, разобью описание его свойств и методов на несколько разделов.
1. Защищенные свойства класса Vehicle
- idx - индекс подвижной единиы, то есть номер, с которого начинается часть вектора состояния поездаб относящаяся к данной ПЕ;
- empty_mass - "сухая" масса, для вагоны это масса тары вагона, для локомотива - его масса в неэкипированном состоянии;
- payload_mass - полная, подчеркиваю, полная, максимально возможная масса полезной нагрузки. Для вагона это его полная грузоподъемность, для локомотива - полная масса всех экипировочных материалов (топливо, вода, масло, песок и т.д.);
- payload_coeff - коэффициент загрузки, то есть доля полной грузоподъемности. Этот коэффициент варьируется от 0.0 до 1.0 и характеризует степень загрузки данной ПЕ;
- full_mass - полная масса подвижной единицы.
full_mass = empty_mass + payload_coeff * payload_mass
причем payload_coeff программно ограничивается в диапазоне от 0.0 до 1.0. Так что схитрить и задать в конфиге этот параметр равным 1000 не выйдет
Идем далее
- length - длина ПЕ между осями автосцепок;
- num_axis - число осей;
- J_axis - момент инерции колесной пары относительно оси вращения;
- wheel_diameter - диаметр колеса по кругу катания
- rk - радиус колеса, он не задается из конфига, а вычисляется путем деления wheel_diameter пополам.
- R1 - усилие в переднем сцепном приборе;
- R2 - усилие в заднем сцепном приборе;
- railway_coord0 - начальная координата ПЕ;
- railway_coord - текущая координата ПЕ;
- velocity - текущая скорость ПЕ;
- wheel_rotation_angle - массив, число элементов которого равно num_axis, содержащий углы поворота колесных пар;
- wheel_omega - массив размера num_axis, сожержит угловые скорости вращения колесных пар;
- b0, b1, b2, b3, q0 - коэффициенты формулы удельного сопротивления движению;
w = b0 + (b1 + b2 * V + b3 * V * V) / q0
где V - скорость экипажа в км/ч. Сама сила, в справочнике Гребенюка имеет размерность килограмм силы на тонну массы, то есть кгс/т. Коэффициенты этой формулы b0 - b3 определяются экспериментально для каждой серии подвижного состава по методике ВНИИЖТ. Есть замечательная книга-справочник "Тяговые расчеты" за авторством П.Т. Гребенюка, где можно получить эти коэффициенты для вагонов и локомотивов.
Для того чтобы расчитать силу сопротивления, вычисляется удельное сопротивление по этой формуле, а затем пересчитать в силу действующу на ПЕ, вырашенную уже в Ньютонах
W = full_mass * Physics::g * w / 1000.0
где Physics::g - константа движка, в которой хранится значение ускорения свободного падения.
Продолжим
- inc - уклон профиля пути, в тысяных, на котором находится в данный момент ПЕ;
- curv - кривизна пути в плане, численно равна еденице, деленной на радиус кривой;
G = full_mass * Physics::g * inc / 1000.0
а по кривизне пути, удельное сопротивление движению в кривой
wk = 700 * curv
- dir - направление движения поезда. Равно 1 если рабочая кабина локомотива/головного вагона направлена в сторону увеличения координаты, и -1 если в сторону уменьшения.
- p0 - давление в начале тормозной магистрали. Необходимо для корректной работы кранов машиниста;
- auxRate - темп дополнительной разрядки тормозной магистрали, МПа/с. Служит для дополнительной разрядки ТМ от воздухораспределителя
- pTM - текущее давление в тормозной магистрали данной ПЕ;
- DebugMsg - строка типа QString, содержащая отладочное сообщение выводимое внизу экрана по нажатию F1.
- prev_vehicle - укзазатель типа Vehicle на предыдущу ПЕ, вцепленную в поезд перед данной ПЕ;
- next_vehicle - указатель на следующую ПЕ, вцепленную в поезд сразу за нашей.
- config_dir - строка типа QString, в которой хранится полный путь к папке с конфигурационными файлами данное ПЕ. Автоматически определяется симулятором, служит для удобного доступа к конфигам из DLL-модуля.
- Uks - напряжение в контактной сети;
- current_kind - род тока в контактной сети: 1 - переменный ток; 2 - постоянный ток;
Под current_kind понимается именно род электрического тока, переменный синусоидальный или постоянный. Устройства контроля рода тока должны реагировать именно на значения этого параметра.
- Q_a - вектор обобщенных активных сил размером num_axis + 1;
- Q_r - вектор обощенных диссипативных (тормозных) сил размером num_axis + 1;
- a - вектор обощенных ускорений размером num_axis + 1;
Q_a[1] - Q_a[num_axis] - крутящие моменты, передаваемые на колесные пары от тягового привода, в том числе и в режиме электродинамического торможения. Эти моменты задаются разработчиком DLL-модуля и являются входными параметрами, позволяющими воздействовать на динамику ПЕ и поезда в целом.
Q_r[0] - линейная тормозная сила. Может быть использована, например для реализации магнитно-рельсового тормоза.
Q_r[1] - Q_r[num_axis] - тормозные моменты, развиваемые фрикционными тормозами и передаваемые на ось колесной пары. Через эти момент реализуется действие тормозов.
- keys - массив, содержащий состояние клавиатуры, по каждой клавише;
- analogSignals - массив сигналов из 200 элементов, через который DLL-модуль воздействует на визуальную модель локомотива, управляя анимациями;
- control_signals - массив сигналов, принимаемых от внешнего аппаратного пульта;
- feedback_signals - массив сигналов, передаваемых на внешний аппаратный пульт;
- ept_control - массив линий управления ЭПТ;
- ept_current - массив токов в линиях управления ЭПТ;
Все эти параметры доступны в классе ПЕ, унаследованном от Vehicle. Все они, кроме крутящих и тормозных моментов, задаются либо в конфигах, либо рассчитываются самим симулятором, что, безусловно, не исключает и воздействия на них со стороны разработчика дополнения.
Пока остановлюсь на этом, но продолжение следует...