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

- При качении тормозной момент всегда, подчеркиваю - всегда, действует в направлении, противоположном вращению колесной пары.
Это физика торможения, которую применяет 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 литров
это будет наш ЗР. Теперь загружаем модель тормозной рычажной передачи
Код: Выделить всё
brake_mech = loadBrakeMech(modules_dir + fs.separator() + "carbrakes-mech");
Этот код найдет стандартный модуль carbrakes-mech.dll в папке modules/ и загрузит его. Этот модуль так и называется - тормозная механика вагона. Для его тонкой настройки нужно написать конфиг, но об этом ниже. Подчеркиваю - можно написать и свой модуль и загрузить его! Но об этом потом.
Теперь загружаем воздухан
Код: Выделить всё
airdist = loadAirDistributor(modules_dir + fs.separator() + "vr242");
загрузится модуль vr242.dll - 242-й пассажирский воздухан. Теперь всё это хозяйство надлежит настроить
Продолжение следует...