Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Комбинорованный контроллер номерного

Разработка и эксплуатация подвижного состава

Комбинорованный контроллер номерного

Сообщение Artur » 11.06.2009, 00:30

Как сделать контроллер в кабине номерного комбинированным? Тоесть нужно сделать так, что бы можно было тормозить и давать позиции на ход контроллером. Применить хотелось бы вот тут Изображение - есть контроллер со всеми позициями, но все они работают на ход.
Куда и какой скрипт нужно прописать? Хотелось бы также привязать соответсвующие звуки (звуки ТЭДов при торможении электродинамикой) к торможению контроллером.
Аватара пользователя
Artur
 
Сообщения: 40
Зарегистрирован: 30.09.2006, 08:49
Откуда: Киев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Комбинорованный контроллер номерного

Сообщение agmike » 11.06.2009, 12:10

Скрипт нужно не прописать, а написать.
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

Re: Комбинорованный контроллер номерного

Сообщение kemal » 11.06.2009, 17:11

agmike
Я так понимю тут тоже самое, что ты говорил, когда мы тормоза обсуждали.
Раскажи, как это делается. Мне это тоже пригодится.
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Комбинорованный контроллер номерного

Сообщение agmike » 11.06.2009, 17:41

А что рассказывать, функции известные, контроллер настраивается. Ничего нового сказать не могу.
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

Re: Комбинорованный контроллер номерного

Сообщение kemal » 11.06.2009, 18:52

Кому известные, а кому как.. Не зря я открывал тему "Особенности скриптования ПС". По идее контроллеры тоже к ней относятся..
Так что рассказывай.
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Комбинорованный контроллер номерного

Сообщение Vano-sie72 » 11.06.2009, 19:03

ты будешь делать с выводом позиций? Т1-Т1А-Т1 и.тд ???
Vano-sie72
 
Сообщения: 80
Зарегистрирован: 06.01.2009, 17:57
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Иван

Re: Комбинорованный контроллер номерного

Сообщение agmike » 11.06.2009, 19:21

Млин, что непонятного, все делается с помощью SetEngineSetting(string,float)
"dynamic-brake",0 - режим тяги
"dynamic-brake",2 - режим ЭДТ
Мощность регулируется "throttle",число от 0 до макс. позиции
Все это задокументировано в АПИ, это базовые возможности, придумывать или изобретать ничего не надо. Надо только читать и использовать.
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

Re: Комбинорованный контроллер номерного

Сообщение TRam_ » 11.06.2009, 20:17

Мощность регулируется "throttle",число от 0 до макс. позиции
соответственно тяга выбирается из куидов enginespec вагонов (2 соответствующих раздела с тягой и "динмическим торможением" от скорости для каждой позиции).

Если захочешь, чтоб мощность была меньше, чем указанная там (для этого вагона) то можешь врубить буксование для данной силы тяги

Vehicle.SetMaximumTractiveEffort(float maxTE)


где maxTE - сила тяги "срыва в боксование" (
maxTE Maximum tractive effort of this vehicle in expressed in kilo Netwons(kN).
).
А если при этом охота, чтоб "колёса не пели", можно воспользоваться public native void SetWheelslipTractionMultiplier (float multiplier) как

Vehicle.SetWheelslipTractionMultiplier (1);

(типа при проскальзывании сила трения колеса равна силе тяги, т.е. колесо по 2 з-ну Нютона не проскальзывает, но сила тяги остаётся равной установленной в SetWheelslipTractionMultiplier)

ну а как писать "включение нужной тяги или торможения от скорости и положения рукоятки", думать вам самим

кстати, можете спросить Combine . Он вроде этим уже занимался для номерного...
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Комбинорованный контроллер номерного

Сообщение Artur » 12.06.2009, 01:03

А можна более конкретно сказать в какие строки нужно вписывать, что б нижние 3 позиции были тормозными? Я конечно понимаю, что вы все опытные на этом деле, и считаете это элементарным, но хотелось бы получить полную и развёрнутую информацию, что нужно для этого сделать.
Аватара пользователя
Artur
 
Сообщения: 40
Зарегистрирован: 30.09.2006, 08:49
Откуда: Киев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Комбинорованный контроллер номерного

Сообщение TRam_ » 12.06.2009, 17:11

во-первых, тебе надо написать "ручку" этого контроллера. Для этого в конфиге кабины обзываешь её мешь каким-нибудь своим именем, например "kontroller" . Соответственно обычные ручки для контроллера и переключатель динамического тормоза НЕ ДЕЛАЕШЬ

затем смотришь файл DefaultLocomotiveCabin.gs ... В нём есть следующая инициализация "стандартных органов управления", например, для того же контроллера

1) обьявлена объект "CabinControl "

CabinControl throttle_lever; //!< Throttle lever.

2)при инициализации этот объект линкуется к меши, которую ты прописал в конфиге

public void Init(void)
{

/////
throttle_lever = GetNamedControl("throttle_lever");

////////
}

3)при переведении рычага трейнз вызывает


void UserSetControl(CabinControl control, float value)
{
///

if (control == throttle_lever)
loco.SetEngineSetting("throttle", value);



////
}
и при этом value - это угол поворота левера, делённый на разность "максимального и минимального углов", и затем умножается на значение тега "limits" в конфиге

Если хочешь, чтоб было от "0" до "1", прописывай там limits 0,1

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

train_brake_lever.SetValue(<собственно степень поворота, если limits 0,1 то от 0 до 1 >);
правда, возможно, она в 2006 и 2007 не работает, только в классике и 2009
и ещё
есть одна функция, которая тут не используется, но вообще может быть полезна

public void Update(void)
вызывается трейнз автоматически, причём чем больше загруженность процессора, тем реже. Если ваши "проверяльщики параметров" будут вызываься из неё, никто не будет ругать Вас "за использование слишком большого числа потоков"

итак, тебе нужен пимерно такой скрипт


include DefaultLocomotiveCabin.gs
include "train.gs"
include "locomotive.gs"

class nomerny_cab isclass DefaultLocomotiveCabin
{

CabinControl Mykontroller;

public void Init(void)
{
inherited(); // эта штука прописывается, чтобы выполнилась функция Init класса DefaultLocomotiveCabin

Mykontroller=GetNamedControl("kontroller");
}

void UserSetControl(CabinControl control, float value)
{
inherited(); // вызывается UserSetControl из DefaultLocomotiveCabin . Это чтоб амперметры реверсоры и прочее работало...
// здесь это сделано вначале, т.к. именно она будет проверять, инициализирован ли локомотив.
// соответственно если UserSetControl из DefaultLocomotiveCabin вызовет return; то строки этой UserSetControl ниже inherited(); выполняться не будут



if (control ==Mykontroller)
{
if(value<0.3) // мы договорились, что значения будут от 0 до 1
{
// соответственно при 0 должна быть 8 позиция ЭДТ
// при < 0.3 ЭДТ должно включаться, при =>0.3 выключаться

loco.SetEngineSetting("dynamic-brake", 2);
// ну а дальше придуем рассчётную формулу "позиции ЭДТ" от "степени повёрнутости рычага"
// например "позиция" = ((0.3 - "степени повёрнутости")/0.3 )*8 (так как их всего 8)


loco.SetEngineSetting("throttle", (0.3 - value)/0.3 *8 );
}
else // вспоминаем что при =>0.3 ЭДТ выключается
{
loco.SetEngineSetting("dynamic-brake", 0); //(выключаем)

// формула для рассчёта "положения тяги" например такая
//"позиция" = (("степени повёрнутости"-0.3)/0.7 )*8

loco.SetEngineSetting("throttle", (value-0.3)/0.7 *8 );
}
}
}
}

работоспособность не гарантирую (не тестировал) но вообще должно быть так
(собственно это и есть мануал по скриптованию кабин, правда, без взаимодействия со скриптом локомотива)
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Комбинорованный контроллер номерного

Сообщение kemal » 18.11.2009, 21:00

В примере вычисления выполняются кабиной. Вопрос: можно ли эти вычисления поручить локомотиву? И как?
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Комбинорованный контроллер номерного

Сообщение TRam_ » 18.11.2009, 21:25

можно. Но для этого надо создать "мост" между локом и кабиной. Можешь посмотреть 2ТЭ10М, КДЭ161 или 2ТЭ116 (мостом может быть либо специальный класс-наследник класса CabinData (синхронизируемые объекты которого создаются и на локе, и на кабине, и взаимно обновляют друг друга), либо сообщения)
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Комбинорованный контроллер номерного

Сообщение AlexanderG » 18.11.2009, 22:19

А лучше ТГМ23 — там самый простой и дубовый скрирт.
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Re: Комбинорованный контроллер номерного

Сообщение kemal » 19.11.2009, 02:29

А примерами не поделитесь? А то найти не могу((
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Комбинорованный контроллер номерного

Сообщение TRam_ » 19.11.2009, 02:50

КДЭ161 http://railroadsim.net/ru/downloads/trainz/special_rs

ТГМ23Б есть у мну на trainzold.mylivepage.ru

они и являются примерами... Обращай внимание на фукцию SetCabinData() - именно в ней происходит обработка посылок от кабины к локу, а GetCabinData() - запросы кабины у лока

и то, и другое выполняет кабина. Причина тут в том, что когда перелезашь с одного вагона на другой, кабина на том, из которого ты вылез, "разбирается", а на том, который ты залез - инициализируется. Поэтому локу нерационально разузнавать, жива ли его кабина или нет. Поэтому,, если кабине что-то надо (кабина ссылку на лок получает при выполнении ф-ции attach() ), она обычно вызывает GetCabinData(), а если в лок надо что-то впихнуть - то лучше проводить <локомотив>.SetCabinData(<CabinData кабины>)
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

След.

Вернуться в [TZ] Подвижной состав

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron