Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   MSTS - Маршруты (http://www.trainsim.ru/forum/forumdisplay.php?f=19)
-   -   Сигнализация: конфигурация и скрипты (http://www.trainsim.ru/forum/showthread.php?t=13819)

vicente 25.09.2021 13:33

[QUOTE=КЕ;602289]
Какое число было необходимым?[/QUOTE]
7

roman5 25.09.2021 13:44

[QUOTE=vicente;602286]Прграммировать светофоры для этого нужно с [B]С#[/B], а я вообще не знаю его, и в жизни программированием не занимаюсь.
[/QUOTE]
Удобный язык для программирования, еще qt c++ мощная штука. В msts внешнее апи очень урезанное, даже под отладку нормальных возможностей не дали - из скрипта невозможно определить с каким из шейпов идет работа. Приходится извращаться: снимать user1-4 опции у нужных сигналов, чтобы получить уникальный набор [B]future[/B].

Я тут поборол сигналку на БМО 1.8. Покопав далее скрипт distance входных сигналов заметил такое:

[CODE]if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( ( block_state() ==# BLOCK_OCCUPIED || POEZD !=# 0 ) && opp_POEZD !=# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
if ( opp_ONE_WAY ==# 1 || opp_POEZD ==# 2 ) { state = SIGASP_STOP_AND_PROCEED; }
}[/CODE]

Оказывается для удержания направления перегона используют не только SAP в distance, но и SAP в normal проходных сигналов.

Глянул код голов normal у проходных, нашел это:

[CODE]state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}[/CODE]
То есть, если сигналы включены, то distance [B]POEZD [/B] = 0 по скрипту и занятые участки будут в normal SAP ставить.

А выше это в коде:

[CODE]WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }[/CODE]

Обеспечивает удержание sap на головах normal, где участки уже clear.

Направление перегона переключается не в Иванцево, а в Драчеево, то есть с другого конца, по редактору видно, что [B]enable[/B] не дотягивает до входного, его скрипт не срабатывает. Попробовал увеличить в[B]APK_3AB_YGR_YW_DISTANCE[/B] параметр [B]SignalNumClearAhead[/B] до 15. Теперь работает на тестовой сцене.

vicente 25.09.2021 13:51

[QUOTE=КЕ;602289]В смысле - менять исходный код ORTS?
[/QUOTE]
Нет. Исходный код меняют разрабы. Есть там определённая процедура изменения кода. "Открытость" состоит в том, что любой желающий может [B]предложить[/B] изменения в коде, а команда вносит эти изменения в тестовые версии по своему усмотрению. Русификацию, например, делает твой "визави" на форуме Игоря... ну, тот, что в беседу тебя внёс на elvastower.com , ссылку на которую ты мне кинул :D
Речь идёт о замене sigscr.dat на программу на С#.

Кстати, молодёжь, кто знает Шарп? Я вообще в нем ни бум-бум! :o
Может кто-нибудь набрость какой-нибудь скрипт сигнальной головы? Я имею в виду перевод из этого недо-С в С#... Я бы глянул и смекнул: что к чему. Потому что самоучитель я ниасиливаю (стар?), да и времени, если честно - совсем на него нет. Туплю на азах, в общем.
Форма скрипта в с# такова:
[QUOTE]
using System;
using Orts.Simulation.Signalling;

namespace ORTS.Scripting.Script
{ public class MYSIGNALTYPE : CsSignalScript // мой сигнальный тип - название Signal_Head
{
public override void Initialize()
{
// Perform some initializations here, taking into account // that no route information is available at this point
}
public override void Update()
{
// Set the aspect of your signal here depending on route state } public override void HandleSignalMessage(int signalId, string message)
{} } }
[/QUOTE]

roman5 25.09.2021 13:59

[QUOTE=vicente;602294]
Кстати, молодёжь, кто знает Шарп? Я вообще в нем ни бум-бум! :o[/QUOTE]
Да проблема не в языке, а в самом проекте, нужно ведь изучить сорцы OR, прочитать даташиты по их функционалу, что и как подавать в эти переопределяющие методы [B]ovveride[/B]. Сам язык понять можно быстро по ютуб урокам.

Судя по всему вся логика в [B]Update[/B]. А вот [B]HandleSignalMessage[/B] это что не очень понял, то ли для отладки, то ли обмен инфой между сигналами.

vicente 25.09.2021 14:16

Рома, я писал, что не вижу по Иванцево буфера изменения направления. Головы входного "хватают" STOP_AND_PROCEED с выходного и соответственно - противоположное направление. А как в Драчеево это переключается? Там стоит дополнительный служебный маркер?

И, это... спасибо за проделанную работу. Дотошный :D

[size="1"][color="Silver"]Добавлено через 4 минуты[/color][/size]
Источник скачивается на сайте. Если понимаешь язык, можешь разобраться не только с сигналкой, но и с другими интересующими вещами в соответствующих cs файлах. Меня интересует пока только синтаксис

[size="1"][color="Silver"]Добавлено через 11 минут[/color][/size]
[QUOTE=roman5;602295]
Судя по всему вся логика в [B]Update[/B]. А вот [B]HandleSignalMessage[/B] это что не очень понял, то ли для отладки, то ли обмен инфой между сигналами.[/QUOTE]
Если честно, пока (подчёркиваю- пока), вся эта авантюра с С# - довольно спорна. Но, старое поколение уходит, может быть, в скором времени вся логика, заимствованная из MSTS будет переписана. Это не есть хорошо, ИМХО, так как совместимость с MSTS - основоопределяющее условие, которое было заявлено при открытии проекта. Сейчас она (совместимость эта) всё дальше и дальше. Главная причина перехода на С#-скрипты - уаеличение аспектов, которых [S]тупым американцам[/S] кое-кому там не хватает. Снятие информации с предыдущего светофора промелькнуло в одном из постов, но с тех пор по теме - тишина. Синтаксис, как я уже сказал, моя главная проблема, но беглым просмотром sc я узнаю знакомые функции. Пока по сигналам "сзади" - глухо.

roman5 25.09.2021 14:39

[QUOTE=vicente;602296]Головы входного "хватают" STOP_AND_PROCEED с выходного и соответственно - противоположное направление.[/QUOTE]
Не совсем так, выходные вроде тут вообще не участвуют, у них нету в distance SAP. Между входным и выходными стоят служебные маркеры: они выдают res на занятые либо копируют distance с выходного, но там все кроме sap. То есть когда появляется поезд на станции, входной видит res состояние на маркере. И тут делает себе sap:
[CODE]if ( ( block_state() ==# BLOCK_OCCUPIED || POEZD !=# 0 ) && opp_POEZD !=# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
if ( opp_ONE_WAY ==# 1 || opp_POEZD ==# 2 ) { state = SIGASP_STOP_AND_PROCEED; }[/CODE]

При чем тут несколько вариантов, [B]opp_POEZD=0[/B] для станции отправления:
1. Поезд еще на станции [B]POEZD=2[/B] - попадаем в первый if, потом выезжаем за маркер, тут по [B]block_state()[/B] начинает sap удерживаться.
2. На Драчеево стоит маркер около входного встречный.
3. Когда заезжаем за входной, на встречном проходном скрипт делает на normal голове аспект sap, благодаря этому теперь [B]opp_ONE_WAY=1[/B] помогает держать перегон.
В тех случаях, где входной и встречный проходной не рядом стоят, то за счет встречного маркера у входного делается [B]opp_POEZD=2[/B] - состояние res встречного маркера.

Таким образом, [B]opp_ONE_WAY [/B] помогает держать sap на перегоне, если туда заедут по удалению не сколько поездов, переменная будет скинута, как только последний поезд заедет за входной станции прибытия.

[size="1"][color="Silver"]Добавлено через 14 минут[/color][/size]
Немножко скринов еще сделал.

[SPOILER][IMG]https://s211vla.storage.yandex.net/rdisk/aabbde5b669ae2f4481f86b9535ba636316e26da12a8f4ed0088bfc843807432/614f3369/CP0r4W7WBqH1rzBA08nC4dSHB9NBKYWTVvXur3FQYzlWW0ve7GbuUBTO0SFRUT-zO0U0tg0NY2Xy7SutJph6RA==?uid=0&filename=скрин.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&owner_uid=0&fsize=6158980&hid=e66f946d1c2d88d42353df6bdc6529b8&media_type=image&tknv=v2&etag=aa177c74985ba659ed0bd397b98645f3&rtoken=ikV2VPtqKCcG&force_default=no&ycrid=na-73296d88f8ae215f3a32364f55c8dc10-downloader13f&ts=5ccd2c234ec40&923c7898e5226691c790fcae3ec9f53b&pb=U2FsdGVkX1_NOwEFOQiMFHP9xVzSo1O8LvXkxXfpFvjnAUWIEkYG0i44ayGbHPzldywxYqLCOcrid6BNDMA0s68-yMDKRo03hc2anjgbTaM[/IMG][/SPOILER]

На 1-2 скринах: никого нет, сигналка в обе стороны включена.
На 3: трафик появился, белый на маркере, sap подхватился.
На 4-5 выезд со станции. Переключение маркера на clear2 - перегон свободен за ним.
На 6-7: проходной изначально stop normal, по проезду на sap перешел.

КЕ 25.09.2021 17:09

У всех скрины открываются? А то у меня - нет.

Predator 25.09.2021 17:19

[QUOTE=КЕ;602301]У всех скрины открываются? А то у меня - нет.[/QUOTE]
У меня не открываются.

КЕ 25.09.2021 19:03

Ром, скрины проверь - не открываются!

[size="1"][color="Silver"]Добавлено через 1 час 3 минуты[/color][/size]
[QUOTE=vicente;602296]Синтаксис, как я уже сказал, моя главная проблема, но беглым просмотром sc я узнаю знакомые функции. Пока по сигналам "сзади" - глухо.[/QUOTE]
Сюда бы еще Рому RWM, он тоже вроде программер. Жаль, давно пропал с форумов...

Predator 25.09.2021 19:40

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

КЕ 25.09.2021 19:45

В MSTS - разгонись, потом КМ в ноль, и реверс назад. Проедешь закрытый сигнал без разбора у начальника депо!:crazy:

Predator 25.09.2021 21:08

А как трафик в этом случае поведёт себя? :)

КЕ 25.09.2021 21:21

Встанет у красного, разумеется.

roman5 25.09.2021 21:55

[QUOTE=КЕ;602301]У всех скрины открываются? А то у меня - нет.[/QUOTE]
Перезалил, хотел с яндекс диск дать ссылки на оригинальные скрины, не пожатые.
[SPOILER]

[IMG]https://i.ibb.co/wd1vyBt/1.png[/IMG]
[IMG]https://i.ibb.co/Nj2gHBV/2.png[/IMG]
[IMG]https://i.ibb.co/JCkPRx2/3.png[/IMG]
[IMG]https://i.ibb.co/vxdDTkk/4.png[/IMG]
[IMG]https://i.ibb.co/vhhfN3G/5.png[/IMG]
[IMG]https://i.ibb.co/r3n7TCm/6.png[/IMG]
[IMG]https://i.ibb.co/Q8kSLFM/7.png[/IMG]

[/SPOILER]

vicente 25.09.2021 22:24

[QUOTE=КЕ;602291] Олег, ты говоришь про это? -[/QUOTE]
Именно


[QUOTE=КЕ;602291]
Нашёл интересное замечание в наших давних сообщениях:
[/QUOTE]
"Как молоды мы были, как молоды мы были..."
Именно так эта функция описана кужувцами в Документации по сигнализациям MSTS . Не я один "сел в лужу" с оппозитами, надо сказать в своё оправдание. Вполне себе уважаемые Буржуи в отношении сигнализаций, тоже не вкуривали этот вопрос, пока знающие люди не разъяснили. На данный момент, совершенно очевидно: как работают функции с префиксом opp_


Текущее время: 08:31. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim