ЭР2Т

Делимся здесь своими пожеланиями и размышлениями о создании дополнений
Аватара пользователя
Den
Сообщения: 6
Зарегистрирован: 31 окт 2019, 16:27
Город: Белоозёрский(МО)
Настоящее имя: Денис
VK: https://vk.com/id58390013

Re: ЭР2Т

Сообщение Den » 14 июн 2020, 12:35

После большого перерыва возобновляю работу над ЭР2т.
На базе simple-loco как описано http://rusrailsim.org/?page_id=159 сделал базовый пример и .... оно едет!
Но пока не знаю как можно затормозить. Начал по аналогии вызывать методы из Вл60пк, но никакого торможения не происходит. Понимаю, что грузовые тормоза на МВПС это моветон, но сейчас мне просто нужно уметь набирать скорость и тормозить.
Можете подсказать, как можно остановится, а то вчера весь день убил на это :wall: .
Не открывать при поднятом токоприёмнике!

Аватара пользователя
maisvendoo
Модератор
Сообщения: 224
Зарегистрирован: 13 авг 2019, 10:25
Город: Ростов-на-Дону
Настоящее имя: Дмитрий
VK: https://vk.com/maisvendoo
Контактная информация:

Re: ЭР2Т

Сообщение maisvendoo » 14 июн 2020, 15:26

Den писал(а):
14 июн 2020, 12:35
Начал по аналогии вызывать методы из Вл60пк, но никакого торможения не происходит. Понимаю, что грузовые тормоза на МВПС это моветон
На ВЛ60пк тормоза пассажирские, на ВР242 и ЭВР305

По поводу как тормозить, сейчас напишу здесь длиннопост, следите за обновлением :D
Возврата к деспотии Ситхов не будет!

Аватара пользователя
Den
Сообщения: 6
Зарегистрирован: 31 окт 2019, 16:27
Город: Белоозёрский(МО)
Настоящее имя: Денис
VK: https://vk.com/id58390013

Re: ЭР2Т

Сообщение Den » 14 июн 2020, 16:45

Жду с нетерпением :)
Не открывать при поднятом токоприёмнике!

Аватара пользователя
maisvendoo
Модератор
Сообщения: 224
Зарегистрирован: 13 авг 2019, 10:25
Город: Ростов-на-Дону
Настоящее имя: Дмитрий
VK: https://vk.com/maisvendoo
Контактная информация:

Re: ЭР2Т

Сообщение maisvendoo » 16 июн 2020, 18:32

Ух... ну наконец-то я добрался что-то написать по этой теме.

Итак, прежде чем тормозить, нужно понимать две вещи:
  1. Какая схема тормозов используется на разрабатываемой модели ПС
  2. Какие средства имеются для её реализации в симуляторе
Начнем со второго. Если для тяги (и для электрического торможения, кстати, тоже!) мы прикладываем к колесным парам нашего экипажа крутящие моменты Q_a[1]....Q_a[Naxis], где Naxis - число осей, то для тормозов, у класса Vehicle тоже есть моменты - Q_r[1]....Q_r[Naxis]. Эти величины обладают рядом свойств, которые решаются внутри самого симулятора
  1. Q_r[j] >= 0 - всегда неотрицательны, и по сути, являют собой максимальную величину тормозного момента, связанную с трением скольжения. Этот момент - это момент, суммарный, от действия всех тормозных колодок на колесную пару. Чтобы экипаж начал тормозить, нужно задать Q_r[j] != 0
  2. Фактический момент от действия тормозов не всегда будет равен тому, что мы положили в Q_r[j]. Пример: заторможенный локомотив стоит на небольшом уклоне и никуда не едет. Чему равны тормозные моменты на колесных парах? Внезапно не Q_r[j]! Они меньше и равны ровно той величине, чтобы уравновесить действие сил, стремящихся укатить наш локомотив под уклон. Это так называемое трение покоя - оно будет тем больше, чем круче у нас уклон. Но когда трение покоя на колодках дорастет до заданного нами Q_r[j] - локомотив покатится :)
  3. При качении тормозной момент всегда, подчеркиваю - всегда, действует в направлении, противоположном вращению колесной пары.
Это физика торможения, которую применяет RRS. Наша задача - рассчитать эти самые Q_r[j], а для этого нужно собрать на локомотиве тормозную пневмосхему.

Вторая часть Марлезонского балета :)

В симуляторе есть билиотека device.dll, в ней сложены все необходимые для счастья (ну или почти все) блоки тормозного оборудования. Среди прочего
  • Кран машиниста усл. №395
  • Кран вспомогательного тормоза усл. №254
  • Воздухораспределитель усл. №242
  • Электровоздухораспределитель усл. №305
  • Реле давления 304
  • Тройники, переключательный клапан
  • Механическая часть тормоза - рычажка в сборе с ТЦ
Из этих стандартных блоков и нужно собирать тормоза. Можно делать и свои блоки, например свой тормозной кран, но это лучше реализовать через интерфейс API, об этом потом как-нибудь. Пока рассмотрю сборку тормозов на примере пассажирского вагона, для простоты без ЭПТ

Какое обрудование у нас будет на вагоне? Тормозная магистраль - она уже присутствует в классе Vehicle, давление в ней можно получить через переменную pTM. Далее на нужны - механическая передача и ТЦ, запасный резервуар, воздухораспределитель.

Для начала подключаем в наш "ашник" следующие заголовки

Код: Выделить всё

#include    "brake-mech.h" // Модель тормозной рычажной передачи
#include    "reservoir.h" // Модель резервуара
#include    "airdistributor.h" // Базовый класс "воздухораспределитель" 
В приватной секции класса ПЕ описываем переменные, где будут лежать наши приборы

Код: Выделить всё

// Тормозная рычажная передача
BrakeMech   *brake_mech;

// Запасный резервуар
Reservoir   *supply_reservoir;

// Воздухан
AirDistributor *airdist;
Теперь это добро надо проинициализировать. Для этого в нашем классе ПЕ переопределяем защищенный метод void initialization(). Этот метод будет вызван симулятором при начальной инициализации нашего экипажа. В теле этого метода пишем следующее

Получаем путь к каталогу стандартных модулей оборудования

Код: Выделить всё

FileSystem &fs = FileSystem::getInstance();
QString modules_dir(fs.getModulesDir().c_str());
В строке modules_dir осядет путь к папке modules/ симулятора, конкретно на каждой машине он может быть разным, поэтому специально придумен статический класс (синглтон Майерса) FileSystem, который автоматически при старте вычисляет все пути. Это очень полезная вещь, советую глянуть исходники сима на предмет знакомства его возможностями.

Далее, инициализируем резервуар объемом 78 литров

Код: Выделить всё

supply_reservoir = new Reservoir(0.078);
это будет наш ЗР. Теперь загружаем модель тормозной рычажной передачи

Код: Выделить всё

brake_mech = loadBrakeMech(modules_dir + fs.separator() + "carbrakes-mech");
Этот код найдет стандартный модуль carbrakes-mech.dll в папке modules/ и загрузит его. Этот модуль так и называется - тормозная механика вагона. Для его тонкой настройки нужно написать конфиг, но об этом ниже. Подчеркиваю - можно написать и свой модуль и загрузить его! Но об этом потом.

Теперь загружаем воздухан

Код: Выделить всё

airdist = loadAirDistributor(modules_dir + fs.separator() + "vr242");
загрузится модуль vr242.dll - 242-й пассажирский воздухан. Теперь всё это хозяйство надлежит настроить

Продолжение следует...
Возврата к деспотии Ситхов не будет!

Аватара пользователя
maisvendoo
Модератор
Сообщения: 224
Зарегистрирован: 13 авг 2019, 10:25
Город: Ростов-на-Дону
Настоящее имя: Дмитрий
VK: https://vk.com/maisvendoo
Контактная информация:

Re: ЭР2Т

Сообщение maisvendoo » 16 июн 2020, 19:24

Теперь немного об основах конфигурирования. Конфигурационные файлы (конфиги) - файлы формата XML, которые сим умеет парсить, извлекая из них значения параметров. Все конфиги делятся на стандартные и пользовательские.

Стандартные конфиги устройств лежат в каталоге cfg/devices. Вот его текущее содержимое
Изображение
Это настройки для стандартного оборудования, того, модули которого лежат в папке modules/. Файл tep70bs-mech затесался сюда случайно - ему тут не место, но это видимо тянется ещё со времен первых сборок RRS. Остальное - стандартное оборудование.

Для загрузки стандартного конфига, в классе Device предусмотрен метод read_config(QString name), где name - имя файл, без расширения *.xml. То есть, чтобы настроить 242 воздухан надо написать в инициализации такое

Код: Выделить всё

airdist->read_config("vr242");
сим знает, где у него лежат стандартные конфиги, поэтому достаточно только имени. Аналогично можно поступить и с рычажкой вагона

Код: Выделить всё

brake_mech->read_config("carbrakes-mech-composite");
загрузится стандартный конфиг для 4-х осного пассажирского вагона с композиционными колодками. А если мы хотим свою рычажку? У локомотивов и электропоездов ведь она своя. Тогда придется написать свой конфиг и положить его туда, где лежит основной конфиг ПЕ. Чтобы его прочитать, нужно использовать метод read_custom_config(QString path). Например так

Код: Выделить всё

brake_mech->read_custom_config(config_dir + QDir::separator() + "er2t-motor-brakes-mech");
Здесь указывается путь к конфигу (без ".xml"!!!!), который мы вычисляем, собирая вместе три переменных: config_dir - стандартная строка, где хранится путь к конфигам ПЕ, QDir::separator() - кроссплатформенный разделитель папок в пути, и собственно имя конфига.

QDir::separator() - возвращает слэш, разделяющий папки и файлы в путях. Почему нельзя просто указать слэш? Потому, что в винде это будет "\" а в линуксе и macOS - "/". Чтобы вызвать эту функцию в *.cpp файле нашего класса нужно подключить

Код: Выделить всё

#include <QDir>
Ну и конечно нужно создать файл er2t-motor-brakes-mech.xml, поместив его в каталог с главным конфигом ПЕ. Вот пример для ВЛ60пк

cfg/vehicle/vl60pk-1543/fwd-trolley-brake-mech.xml

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<Config>
	<Device>
		<Order>1</Order>
		<ShoeType>iron</ShoeType>
		<ShoesCyl>6</ShoesCyl>
		<ShoesAxis>4</ShoesAxis>
		<CylNum>2</CylNum>
		<DeadVolume>0.0</DeadVolume>
		<CylinderDiameter>0.356</CylinderDiameter>		
		<StockOut>0.1</StockOut>		
		<InitPressure>0.0</InitPressure>

		<Kmax>3.0</Kmax>
		<p_max>0.4</p_max>
	</Device>
</Config>
- Этот файл описывает переднюю тележку ВЛ60пк (есть еще и конфиг для задней!). Смысл параметров:
  • Order - число дифференциальных уравнений, описывающих устройство. В случае с рычажкой оно всегда равно 1
  • ShoeType - Тип колодок. Возможные варианты: iron - чугуняка; iron-ph - фосфористая чугуняка; composite - композиция
  • ShoesCyl - число колодок, приводимых в движение одним тормозным цилиндром. У ВЛ60пк на тележке 2 цилиндра, каждый приводит 6 колодок
  • CylNum - число тормозных цилиндров
  • DeadVolume - "мертвый" объем ТЦ - устарело, будет удалено
  • CylinderDiameter - диаметр ТЦ в метрах
  • StockOut - выход штока ТЦ
  • InitPressure - начальное давление в ТЦ при запуске игры, МПа
  • Kmax - тормозное нажатие при максимальном давлении в ТЦ, тс
  • p_max - максимальное давление в ТЦ, МПа
Ok, c конфигами разобрались, теперь нужно заставить все это работать....

Продолжение следует...
Возврата к деспотии Ситхов не будет!

Аватара пользователя
Den
Сообщения: 6
Зарегистрирован: 31 окт 2019, 16:27
Город: Белоозёрский(МО)
Настоящее имя: Денис
VK: https://vk.com/id58390013

Re: ЭР2Т

Сообщение Den » 20 июн 2020, 14:44

Большое спасибо! За счёт подстановки значений "от балды" в Q_r[j] получилось остановится!
Сейчас изучаю код ВЛ60 и пытаюсь сделать по аналогии для себя с применением вышеизложенной информации от Вас :)

Параллельно открыл репозиторий на github https://github.com/DoctorSnp/ER2T_RRS. Может в будущем удастся сделать что-то стоящее.

Графической частью занимаюсь не я. В симуляторе пока просто перемещается камера по путям.

Кстати, предлагаю вышеизложенный подробный мануал перенести в руководство разработчика: http://rusrailsim.org/?page_id=159
Не открывать при поднятом токоприёмнике!

Аватара пользователя
maisvendoo
Модератор
Сообщения: 224
Зарегистрирован: 13 авг 2019, 10:25
Город: Ростов-на-Дону
Настоящее имя: Дмитрий
VK: https://vk.com/maisvendoo
Контактная информация:

Re: ЭР2Т

Сообщение maisvendoo » 20 июн 2020, 23:04

Рад, что помог. Не получается регулярно писать, к сожалению, сейчас сложный период в жизни. Но я допишу этот пост до конца, и предложение на счет включения в мануалы на сайт очень толковое, и в общем я так и планирую. Но пусть лучше пройдет адаптацию среди сторонних разработчиков.
Den писал(а):
20 июн 2020, 14:44
Сейчас изучаю код ВЛ60 и пытаюсь сделать по аналогии для себя с применением вышеизложенной информации от Вас :)
Посмотрите еще код ЧС2т и ТЭП70 - все доступно в репозитории. Там многое сделано более практично, чем на 60-ке, 60-ка это первый опыт.
Возврата к деспотии Ситхов не будет!

Аватара пользователя
Ромыч РЖДУЗ
Модератор
Сообщения: 244
Зарегистрирован: 13 авг 2019, 19:06
Город: Москва, Зеленоград
Настоящее имя: Роман
Контактная информация:

Re: ЭР2Т

Сообщение Ромыч РЖДУЗ » 21 июн 2020, 16:30

Den писал(а):
20 июн 2020, 14:44
Графической частью занимаюсь не я. В симуляторе пока просто перемещается камера по путям.
Если нет никакого задела для визуализации, то систему электропоезда, можно просто отработать на тех же вагонах (моторный+прицепной), посмотреть как вообще она себя будет вести. А уже потом, кто-то займётся созданием визуальных моделей. ;)
"Строю маршрут Москва-Адлер, всё готово на 95%! Осталось освоить редактор маршрутов, а так же нужны фото, профиль, схемы, видео, текстуры вокзалов....
Чёрт! Проект закрыт, автор исчез..." :o

Аватара пользователя
Den
Сообщения: 6
Зарегистрирован: 31 окт 2019, 16:27
Город: Белоозёрский(МО)
Настоящее имя: Денис
VK: https://vk.com/id58390013

Re: ЭР2Т

Сообщение Den » 21 июн 2020, 18:18

Да, я так как раз и делаю. Сейчас в качестве прицепных гоняю пассажирские вагоны :) Вместо визуальной части у меня есть программулина, которая по сети принимает/передаёт параметры движения поезда между симулятором и самой программой, а затем отображает их или плюс передаёт/принимает данные на пульт тренажёра

[/img]https://c.radikal.ru/c09/2006/3a/52563f7e1293.png[/img]

Здесь приводится пульт 81.717 (программа делается параллельно для другого проекта на базе Garry's Mod: Metrostroi) но суть программы в том, чтобы быть неким транзитом между пультом и симулятором. Для этой программы уже делаю плагин для Эр2Т (программа ни к какому ПС и симулятору не привязана). О ней ,как появится время, напишу отдельный пост на форуме и выложу на гитхаб . Сейчас документацию по ней лень делать :D
Вложения
Proga.png
Proga.png (150.33 КБ) 1449 просмотров
Не открывать при поднятом токоприёмнике!

Ответить