Symulator/MaSzyna/Sterowanie ruchem 2016: Różnice pomiędzy wersjami

Z Rainsted
Skocz do: nawigacji, wyszukiwania
m (Pętle eventowe półgłowic)
m (Pętle eventowe torów)
Linia 96: Linia 96:
  
 
Zadaniem pętli eventowej toru jest sprawdzić zajętość półgłowicy, a w przypadku wyjazdu również zajętość blokady liniowej. Jeśli jest to możliwe, półgłowica i blokada zostają zarezerwowane, co pozwala na przestwanie rozjazdów. Następnie sterowanie przekazywane jest do półgłowicy, która zapala stosowne sygnalizatory (zamyka też przejazdy). Pętla eventowa toru następnie sprawdza, czy ma do wykonania kolejne zadanie (np. ustawienie półgłowicy po przeciwnej stronie).
 
Zadaniem pętli eventowej toru jest sprawdzić zajętość półgłowicy, a w przypadku wyjazdu również zajętość blokady liniowej. Jeśli jest to możliwe, półgłowica i blokada zostają zarezerwowane, co pozwala na przestwanie rozjazdów. Następnie sterowanie przekazywane jest do półgłowicy, która zapala stosowne sygnalizatory (zamyka też przejazdy). Pętla eventowa toru następnie sprawdza, czy ma do wykonania kolejne zadanie (np. ustawienie półgłowicy po przeciwnej stronie).
 +
 +
===Kody kierunku ruchu===
 +
 +
Kody jazdy dla torów są inne niż kody pętli eventowych dla półgłowic. Tryb manerwory od pociągu rozróżnia się nazwą przebiegu (dla pociągowego podany jest kolejny posterunek, dla manewrowego nazwa toru). Kiedyś używane były kody 1 i 2 (w 2024 roku nadal są nieskorygowane pozostałości na Quarku), ale zostały zmienione na 6 i 7, ponieważ 1 i 2 bardziej kojarzą się z kierunkiem linii kolejowej (i w takim znaczeniu używane są dla półgłowic). Kody przelotu (1 oraz 2) oznaczają na ogół ruch na wprost po rozjazdach i dla torów głównych zasadniczych wyjazd uruchomi się automatycznie, dla pozostałych torów dopiero po ich zajęciu. Uruchomienie wyjazdu z toru będzie dodatkowo synchronizowane z czasem odjazdu podanym w rozkładzie.
 +
 +
* 1 — przelot po torze zgodnie ze wzrostem kilometrażu
 +
* 2 — przelot po torze w kierunku malejącego kilometrażu
 +
* 6 — wjazd na tor
 +
* 7 — wyjazd z toru
  
 
==Pętle eventowe półgłowic==
 
==Pętle eventowe półgłowic==

Wersja z 11:24, 25 mar 2024

Obecna propozycja sterowania jest rozwinięciem opracowanego w 2012 roku sterowania dla scenerii Quark. Główną zmianą jest ujednolicenie nazewnictwa rozjazdów, sygnalizatorów oraz odcinków izolowanych. (W pierwszym etapie prac na Quarku pozostało pierwotne nazewnictwo rozjazdów i semaforów, a dla odcinków izolowanych były testowane różne koncepcje, przez co przez kilka lat potem każda stacja mogła mieć inny system nazewnictwa. Wg stanu na 2019 rok powinno to już być w miarę ujednolicone, jednak nadal mogą się tam trafiać odstępstwa od niniejszych zaleceń.)

Cele sterowania

  • Unikanie przekładania rozjazdów pod składami poprzez rezerwację głowic (grup rozjazdów). Zarezerwowana głowica nie może być użyta do innego przebiegu. Dzięki wykorzystaniu odcinków izolowanych głowica jest zwalniana, gdy pociąg z niej zjedzie. Przy tradycyjnym wykorzystaniu eventów mogą występować zależności czasowe, które sprawiają problemy w przypadku jazdy z inną prędkością albo zmiany długości składu (np. 3×EN57 zamiast jednego).
  • Unikanie zderzeń na szlakach poprzez rezerwację blokad liniowych. Blokada liniowa uniemożliwia wyjazd pociągu, jeśli odstęp nie jest wolny. Dotyczy to w szczególności misji, w których jedzie się za jakimś pociągiem (np. towarowy za osobowym).
  • Wielokrotne przejazdy pociągów przez stacje, zależne od rozpoznanego typu pociągu (rozkładu). Normalnie przejazd wielu pociągów przez stację sprawia problemy w zakresie określenia wyjazdu tego pociągu ze stacji. O ile łatwo jest ustawić jeden sposób wyjazdu dla wszystkich pociągów, trudność rośnie, jeśli pociągi trzeba wysyłać w różnych kierunkach oraz badać przy tym zwolnienie blokady liniowej.
  • Łatwy sposób znalezienia wolnego toru dla pociągu. Po rozpoznaniu nadjeżdżającego pociągu można sprawdzić, czy najbardziej interesujący tor jest wolny. Jeśli tor jest zajęty, można sprawdzić inny. Pętla taka może się wykonywać aż któryś z torów się zwolni i będzie mógł być zarezerwowany dla pociągu.
  • Ułatwienie jazd torem lewym. Można uruchomić pętlę, która będzie wyszukiwała wolny tor szlakowy dla pociągu. Jeśli z powodu np. pociągu roboczego tor zostanie zamknięty, pętla może organizować wyjazd po torze lewym albo oczekiwać na usunięcie zamknięcia.
  • Otwartość i niezależność od pociągów. Nie jest wymagane aby liczba pociągów oraz ich trasy (z dokładnością co to toru) były ustalone i znane z góry.

Nazewnictwo

Wszystkie obiekty należące do stacji mają przedrostek w postaci Xyz_ (z wielkiej litery — wielka litera na początku nazwy oznacza w Rainsted nazwę zweryfikowaną, a nazwy z małej litery mają charakter przydzielanych automatycznie i mogą podlegać zmianom). Po przedrostku jest właściwa nazwa urządzenia. Przedrostki mogą być dwuliterowe (np. Ok_ dla Ozimka, Gn_ dla Gnaszyna), mogą też zawierać więcej wielkich liter (np. CzO_ dla Częstochowy Osobowej, CzS_ dla Stradomia, HrN_ dla Herbów Nowych). Zasadniczo przedrostki powinny być zgodne z oznaczeniami nastawni, jednak dopuszczalne są wyjątki, które wprowadzają większą czytelność (np. CzO_ zamiast CO_ dla Częstochowy Osobowej) albo pozwalają uniknąć powtórzeń (np. PnW_ użyte dla stacji Pątnów Wieluński zamiast Pn_, które pokrywałoby się z przedrostkiem dla stacji Panki — obie na linii 181, niedaleko od siebie). Uzyskanie pełnej zgodności z rzeczywistością nie jest możliwe ze względu na brak unikalności skrótów na sieci PKP PLK i wymóg unikalności w symulacji. W planach jest utworzenie tabeli z listą przedrostków dla posterunków w Polsce, aby były one konsekwentnie używane i miały również przełożenie na nazwy W4 oraz nazwy używane w rozkładach (w tym Hafas) i serwisach internetowych.

Nazewnictwo sygnalizatorów

Sygnalizatory (semafory, powtarzacze, tarcze) powinny być nazwane analogicznie jak w rzeczywistości (na schematach stacji), oczywiście z przedrostkiem. W szczególnych sytuacjach dopuszczalne są wyjątki (np. jedna ze stacji ma dwie tarcze manewrowe, nazwane Tm1, co jest niedopuszczalne w symulacji). Zasadniczo semafory mają nazwy w postaci pojedynczej wielkiej litery (np. A, B, Z). Na większych stacjach do liter dodawany jest numer toru (np. J3, J5 w Lublińcu). Nazwę tarczy ostrzegawczej tworzy się z nazwy odnośnego semafora, poprzez dodanie To pomiędzy przedrostkiem a nazwą semafora. Powtarzacze mają przedrostki ISp, IISp, IIISp przed nazwą powiązanego semafora (np. IISpF2), dopuszczalny jest brak litery I dla modelu bez tabliczki numerującej powtarzacze oraz mniej jednoznaczny wariant SpI, SpII, SpIII. Oznaczenie tarcz manewrowych składa się z przedrostka Tm i numeru (Tm1, Tm102). Sygnalizatory sygnału zastępczego powinny mieć przedrostek Sz, np. SzA, SzB, Sz1. Zdarzają się również wyjątki, jak USz i Sz2D w Lublińcu, SzAn w Herbach Nowych.

Dodatkowo odcinek toru bezpośrednio przy semaforze czy tarczy manewrowej powinien mieć taką samą nazwę jak sygnalizator, a odczyt sygnalizatora powinien być jako Event2. Jest to potrzebne do usprawnienia wstawiania składów. Odległość od punktu 1 toru do sygnalizatora nadal nie jest unormowana na konkretną wartość. Powinna być ona w zakresie od 1m do 20m, aby skład wstawiony bez przesunięcia znajdował się przed sygnalizatorem. W przypadku tarcz ostrzegawczych powiązanie z torem nie jest konieczne, jednak nazwa odcinka toru zgodna z nazwą tarczy pozwoli wygodniej wstawiać składy na szlaku (należy przy tym uważać na stan blokady liniowej zliczającej pojazdy).

Specyficznym rodzajem sygnalizatora jest wykolejnica, która dodatkowo modyfikuje własności odcinka toru o takiej samej nazwie (np. Gn_Wk2). Po zamknięciu działa jak semafor pokazujący S1, a dodatkowo powiązany tor powoduje wykolejenie. Otwarcie wykolejnicy nie zmienia sygnału wysyłanego do pociągu, wyłącza tylko opcję wykolejania. Zezwolenie na jazdę może być manewrowe (obecnie nazwane Ms2 ze względu na ujednolicenie z tarczami manewrowymi) albo pociągowe (odpowiednik S10, obecnie nieuwzględnione w plikach).

Nazewnictwo rozjazdów

Nazwę rozjazdu stanowi jego numer. Numeracja rozjazdów zaczyna się od mniejszego kilometrażu. Dopuszczalne są przerwy w ciągłości numeracji, pozostawione na ewentualne rozjazdy, które można by dodać. Zwrotnice w rozjeździe krzyżowym mają dodatkowo litery od a do d. Rzadko zdarzają się rozjazdy, w których zamiast zwiększenia numeru (liczby) są dołączane kolejne litery.

Nazewnictwo odcinków izolowanych rozjazdów

Izolacja rozjazdu ma przedrostek Iz przed numerem rozjazdu. Opisywane sterowanie było pierwotnie oparte na izolacji grup rozjazdów zamiast izolacji pojedynczych rozjazdów. Kwestia izolowania każdego rozjazdu osobno pojawiła się dopiero w 2015 roku, po unifikacji Linii 61 z klonem przeznaczonym do współpracy z programem SCS. W 2018 roku została w MaSzynie wprowadzona obsługa sumy logicznej odcinków izolowanych, także można już zaizolować osobno poszczególne rozjazdy, a ruch nadal prowadzić w oparciu o półgłowice (grupy). Zrezygnować z grupowania można jedynie w przypadku mijanek z dwiema zwrotnicami. (Możliwe jest opracowanie alternatywnego sterowania, które zamiast zdefiniowanych z góry grup rozjazdów będzie się posługiwać izolacjami poszczególnych rozjazdów, jednak wobec opisywanego tu sterowania wydaje się to niepotrzebną komplikacją, a ponieważ nadal nie ma dobrze działającego generatora skryptów i wymagane są ręczne poprawki, to używanie izolacji rozjazdów zamiast grup zwiększy prawdopodobieństwo błędów.)

Nazewnictwo odcinków izolowanych torów stacyjnych

Izolacja toru ma przedrostek It przed nazwą toru. Nazwy torów mogą mieć oznaczenie literowe po numerze toru, np. It8a (gdy tor jest podzielony rozjazdami).

Tory pomiędzy semaforami wjazdowymi a głowicą mają oznaczenie literowe semafora wjazdowego, np. ItA. Ponieważ na niektórych stacjach semafory wjazdowe mogą być też numerowane, może się również zdarzyć ItA1 i ItA2. Przejściowo tory te mogą mieć izolację grupy albo najbliższego rozjazdu — utrudniać to będzie wykonywanie manewrów do W5 (trzeba w inny od izolacji sposób wykrywać zjechanie za ostatni rozjazd), ale przy braku sumy izolacji upraszczało skrypty.

Nazewnictwo odcinków izolowanych półgłowic

Dla uproszczenia sterowania ruchem rozjazdy są zgrupowane, aby badać zajętość grupy zamiast pojedynczych rozjazdów. Dla linii dwutorowej wygodne jest podzielenie głowicy na dwie grupy, stąd dla uproszczenia została wprowadzona nazwa "półgłowice". Doświadczenia z Quarkiem pokazały, że zaizolowanie całej głowicy ogranicza płynność ruchu. W przypadku większych stacji może być potrzeba podzielenie głowic na więcej grup, co z kolei komplikuje sterowanie. Liczba grup określa, ile maksymalnie może być jednocześnie przepuszczanych pociągów na stacji.

Dla linii jednotorowej zaizolowane są całe głowice, nazwy ich to Ig11 oraz Ig21 (zgodnie z kilometrażem). Dla linii dwutorowej zalecane są nazwy Ig11, Ig12, Ig21, Ig22, przy czym pierwsza cyfra oznacza stronę stacji (kierunek w sensie kilometrażu, dla stacji węzłowych linii o najmniejszym numerze), a druga jest numerem toru (strona w sensie lewa/prawa). Gdyby trzeba było utworzyć półgłowice dla manewrów na torze 5, miały by one nazwy Ig15 oraz Ig25. Jeśli stacja zawiera głowice wewnętrzne, to dopuszczalne są nazwy typu Ig11, Ig21, Ig31, Ig41 (dla toru 1). Jeśli przy tym rozjazdy nie występują w torze 2, to na głowicy wyjazdowej powinien być zachowany numer jak dla toru 1 (czyli Ig42, a Ig22 oraz Ig32 są pominięte).

Na mijankach Quarka zostało przetestowane, że dwa rozjazdy mijanki nie powinny być wspólnie zaizolowane, bo opóźnia to realizację mijania pociągów. Podobnie dla stacji na linii dwutorowej wskazane było podzielenie każdej głowicy na dwie grupy. Jeśli na stacji wykonywane są manewry, które nie powinny zakłócać ruchu przelotowego, to rozjazdy wykorzystywane w manewrach powinny stanowić oddzielną grupę.

Nazewnictwo blokad liniowych

Wg stanu na połowę 2019 roku nie jest jeszcze do końca ustalone — zobacz też stronę Odcinki izolowane. Proponowane tutaj jest oddzielenie minusem skrótów nazw posterunków, uzupełnionych o numer toru stacyjnego, na który wjeżdża się przy domyślnym ułożeniu rozjazdów (dla krzyżowego na wprost) — nie jest to numer toru szlakowego! Spotykane też może być uzupełnienie tej nazwy o numer linii, poprzedzony znakiem @. Dla programu SCS przyjęta została inna konwencja: nazwy posterunków są oddzielone znakiem podkreślenia i zakończone ciągiem np. _It1 czy _It2.

Przykład: Gnaszyn

Schemat ideowy stacji (w orientacji takiej, że północ jest u góry — kilometraż rośnie w lewo) wygląda następująco:

             123.21km       .------ Gn_It5 ------.         121.38km
                            | .---- Gn_It3 ----. |
Gn1-Bln1 --- Gn_ItZ --- Gn_Ig21 --- Gn_It1 --- Gn_Ig11 --- Gn_ItA --- CzS1-Gn1
Gn2-Bln2 --- Gn_ItW --- Gn_Ig22 --- Gn_It2 --- Gn_Ig12 --- Gn_ItB --- CzS2-Gn2
                              '---- Gn_It4 ----'
  • CzS1-Gn1, CzS2-Gn2 oraz Gn1-Bln1 i Gn2-Bln2 to cztery blokady liniowe na szlakach do sąsiednich stacji, zakończone semaforami wjazdowymi. Nazwy posterunków są w kolejności wzrastającego kilometrażu, czyli tu od prawej do lewej.
  • Gn_It1, Gn_It2, Gn_It3, Gn_It4, Gn_It5 to są odcinki izolowane na torach stacyjnych, zakończone semaforami wyjazdowymi. Numeracja torów zgodna ze schematem stacji.
  • Gn_Ig11, Gn_Ig12, Gn_Ig21, Gn_Ig22 — półgłowice.
  • Gn_ItA, Gn_ItB, Gn_ItW, Gn_ItZ — tory manewrowe, zakończone tarczami manewrowymi od strony rozjazdów, a z drugiej strony wskaźnikami W5. Nawet jeśli rzeczywista stacja nie posiada tarcz manewrowych, wstawia się je na potrzeby usprawnienia symulacji.
  • Sterowanie ruchem za pomocą przebiegów sprawia, że dla osoby programującej jazdy pociągowe nie są istotne nazwy sygnalizatorów ani rozjazdów. Wyjątkiem są tory manewrowe, ale te są używane wewnętrznie przez półgłowice i w większości przypadków nie ma potrzeby się do nich odwoływać przy uruchamianiu przebiegu.
  • Pominięte zostały tory boczne (odgałęziające się od Gn_It5), ponieważ nie są obecnie używane w ruchu i nie są istotne dla opisania sterowania stacją.
  • Na końcu toru Gn_ItZ znajduje się semafor odstępowy Gn_O (za peronem). Dzięki temu pociągi osobowe mogą stanąć przy peronie za stacją, nawet jeśli tor szlakowy Gn1-Bln1 jest zajęty. Komplikuje to nieco sytuację, ale na potrzeby tego opisu może być pominięte.

Przykład: Mydelniczka

Na scenerii Quark zostało uruchomione losowanie wyjazdu pociągu roboczego ze stacji Mydelniczka. Jeden z trzech możliwych wariantów obejmuje przemanewrowanie lokomotywy na drugą stronę składu i wyjazd w przeciwnym kierunku, niż pierwotnie jest przygotowany pociąg. Ze szczegółowym opisem rozwiązania można zapoznać się na stronie opisującej ruch na scenerii Quark.

Blokady liniowe

Blokady liniowe są komórkami pamięci, zawierającymi informację o zajęciu toru szlakowego przez pociąg. Pierwsza wartość zawiera nazwę rozkładu pociągu zajmującego szlak, druga kierunek (1 – zgodny z kilometrażem, 2 – przeciwny, 3 – tor zamknięty), trzecia zajętość (albo 0/1 z odcinka izolowanego albo licznik pojazdów). Zwolnienie szlaku powinno do pierwszej wartości wpisać słowo free, które oznacza, że szlak może zostać zarezerwowany. Rezerwacja polega na wpisaniu (do pierwszego parametru) identyfikatora toru przez pętlę eventową toru. Rozbudowana pętla eventowa toru może rezerwować szlak tymczasowo, a następnie cofać tę rezerwację, np. w przypadku braku miejsca na stacji docelowej.

Nazewnictwo blokad liniowych bez SBL jest tworzone z przedrostków stacji w kolejności zgodnej z kilometrażem, z dodaniem numeru toru do obu. Czyli np. CzS1-Gn1 i CzS2-Gn2 dla odcinka Stradom – Gnaszyn, Gn1-Bln1 i Gn2-Bln2 dla odcinka Gnaszyn – Blachownia.

Blokada liniowa jako odcinek izolowany

Najwygodniejszym sposobem zorganizowania blokady liniowej jest utworzenie odcinka izolowanego pomiędzy semaforami wjazdowymi (jego granica jest na łączeniu torów pomiędzy semaforem wjazdowym a W5). Wadą takiego rozwiązania jest brak możliwości używania odcinków izolowanych do innych celów, np. zamykania i otwierania przejazdów. Po wprowadzeniu sumy logicznej odcinków izolowanych (np. wpisem area) trudnością będzie jedynie wskazanie wszystkich odcinków na szlaku.

Blokada liniowa z licznikami

Rozwiązaniem podobnym do odcinka izolowanego jest wprowadzenie liczników pomiędzy W5 a semaforem wjazdowym (eventy podłączone jako EventAll1). Przejazd od W5 w stronę semafora wjazdowego zwiększa licznik, a w przeciwną stronę zmniejsza. Licznik startuje od wartości 0 i jest ona uznawana za zwolnienie szlaku, umożliwiające jego rezerwację wraz z ewentualną zmianą kierunku. Wadą tego rozwiązania jest problematyczne wstawianie składów na szlaku, gdyż trzeba odpowiednio dostosować wartość początkową licznika (zwłaszcza jeśli skład ma zjechać i umożliwić prowadzenie ruchu). Wygodniejsze jest raczej wyprawianie składów ze stacji, które spowoduje zadziałanie licznika. Mniejszą uciążliwością jest logowanie każdej zmiany licznika, co nie ma miejsca dla odcinków izolowanych.

Blokady liniowe dla SBL

W przypadku SBL każdy odstęp wyznaczany sygnalizatorami SBL ma osobną komórkę pamięci (odcinek izolowany), a pętle półgłowic testują i rezerwują tylko sobie najbliższy. Na SBL, oprócz niezajętości najbliższego odcinka, musi być również sprawdzany kierunek blokady. Zasady odwracania kierunku SBL nie są jeszcze opracowane.

Propozycja do przetestowania:

  • Komórka przechowująca kierunek blokady, np. WKG1-Dej1 wraz ze zliczaniem pojazdów. Zmiana kierunku SBL jest możliwa tylko wtedy, gdy nie ma żadnego pojazdu na szlaku.
  • Komórki zajętości odcinków przylegających do stacji — WKG_WKG1-Dej1 oraz Dej_WKG1-Dej1, służące do sprawdzania, czy można wypuścić pociąg na szlak z SBL. Na niektórych stacjach pierwszy semafor SBL może być na wysokości semafora wjazdowego. Jeśli istnieje taki semafor (podobnie ustawiony, jak Gn_O, choć tu nie ma SBL), możliwe jest używanie w tym celu odcinka izolowanego o nazwie związanej z semaforem wjazdowym (jednak i tak trzeba sprawdzić kierunek pracy i czy tor nie jest zamknięty).

Pętle eventowe torów

Zadaniem pętli eventowej toru jest sprawdzić zajętość półgłowicy, a w przypadku wyjazdu również zajętość blokady liniowej. Jeśli jest to możliwe, półgłowica i blokada zostają zarezerwowane, co pozwala na przestwanie rozjazdów. Następnie sterowanie przekazywane jest do półgłowicy, która zapala stosowne sygnalizatory (zamyka też przejazdy). Pętla eventowa toru następnie sprawdza, czy ma do wykonania kolejne zadanie (np. ustawienie półgłowicy po przeciwnej stronie).

Kody kierunku ruchu

Kody jazdy dla torów są inne niż kody pętli eventowych dla półgłowic. Tryb manerwory od pociągu rozróżnia się nazwą przebiegu (dla pociągowego podany jest kolejny posterunek, dla manewrowego nazwa toru). Kiedyś używane były kody 1 i 2 (w 2024 roku nadal są nieskorygowane pozostałości na Quarku), ale zostały zmienione na 6 i 7, ponieważ 1 i 2 bardziej kojarzą się z kierunkiem linii kolejowej (i w takim znaczeniu używane są dla półgłowic). Kody przelotu (1 oraz 2) oznaczają na ogół ruch na wprost po rozjazdach i dla torów głównych zasadniczych wyjazd uruchomi się automatycznie, dla pozostałych torów dopiero po ich zajęciu. Uruchomienie wyjazdu z toru będzie dodatkowo synchronizowane z czasem odjazdu podanym w rozkładzie.

  • 1 — przelot po torze zgodnie ze wzrostem kilometrażu
  • 2 — przelot po torze w kierunku malejącego kilometrażu
  • 6 — wjazd na tor
  • 7 — wyjazd z toru

Pętle eventowe półgłowic

Pętle te są uruchamiane, gdy pętla toru ustali dostępność głowicy dla wjazdu albo wyjazdu. Celem pętli jest przygotowanie wjazdu bądź wyjazdu (w tym zamknięcie przejazdu w głowicy), a następnie podanie sygnału zezwalającego na jazdę. Pętla głowicy jest również odpowiedzialna za zależności na semaforach. Np. głowica wyjazdowa może uaktualnić sygnał na semaforze wjazdowym, jeśli ten zezwala na jazdę.

Pierwotnie pętla toru miała tylko ustalać przebieg, a pętla głowicy podawać sygnały zależne od kierunku i typu jazdy. Jednak takie rozwiązanie nie sprawdziło się w praktyce ze względu na konieczność rezerwacji blokady liniowej w przypadku wyjazdu.

W przyszłości pętla może również oczekiwać z podaniem wyjazdu na zatrzymanie pociągu osobowego przy peronie oraz na godzinę podaną w rozkładzie (wg stanu na połowę 2019 symulacja nie ma takich możliwości).

Kody kierunku ruchu

Kody jazdy pociągowej odnoszą się do kilometrażu linii kolejowej. Są inne niż kody pętli eventowych dla torów. Zależnie od podanego do głowicy kodu może być inne działanie, np. w zakresie zamykania przejazdów na szlaku (tylko kod wyjazdu zamyka przejazdy). Generator skryptów ustawia kody 1 oraz 2, pozostałe wymagają jeszcze doprecyzowania.

  • 1 — jazda pociągowa w stronę wzrastającego kilometrażu (dla danej półgłowicy jest to albo wjazd albo wyjazd)
  • 2 — jazda pociągowa w stronę malejącego kilometrażu (dla danej półgłowicy jest to albo wjazd albo wyjazd)
  • 3 — tor zamknięty — przejazdy przez półgłowicę są zabronione (tzn. w zakresie skryptów sterujących, można utworzyć własne reguły jazdy)
  • 4 — przejazd manewrowy przez półgłowicę, na inny tor, bez zmiany kierunku ruchu (i bez wyjazdu na szlak)
  • 5 — wyjazd manewrowy na tor szlakowy do wskaźnika W5

Przebiegi

Przebiegi są tą warstwą, która powinna interesować osoby tworzące misje. Pętle eventowe torów i półgłowic są na tym poziomie nieistotne, poza uruchomieniem pętli dla toru. Uwaga! Nazwa eventu z członem :loop została wprowadzona w czerwcu 2017 dla odróżnienia od innych. W skryptach powstałych wcześniej używane było _loop. Koncepcja jest taka, że do eventów z dwukropkiem może nie być nigdzie odwołania wprost i mimo to będą one prawidłowe.

Przed uruchomieniem przebiegu należy upewnić się, że tor jest wolny, ewentualnie ustalić, na który tor ma być skierowany pociąg. Uruchomienie przebiegu dla toru zajętego da rezultat inny od spodziewanego.

Przykłady przebiegów

Gn_It1<CzS1 Gn_It1:loop

Powyższa para eventów uruchamia na stacji Gnaszyn (Gn_) wjazd na tor 1 stacji (It1) z toru szlakowego 1 od strony Stradomia (CzS1). Po upewnieniu się, że półgłowica Gn_Ig11 jest wolna (nic nie wyjechało do W5 na tor szlakowy 1, nie ma aktywnego kolizyjnego przebiegu np. pomiędzy torem szlakowym 2 a torem 3 stacji), podany zostanie sygnał wjazdowy. Przed wykonaniem tych eventów należałoby się jeszcze upewnić, że tor 1 (a dokładniej odcinek izolowany Gn_It1) jest wolny oraz czy tor nie wykonuje już pętli. Wybieranie toru oraz rozpoznawanie typu pociągów należy już do warstwy wyższej niż przebiegi.

Gn_It1>Bln2 Gn_It1:loop

Uruchomienie wyjazdu z toru stacyjnego 1 na tor szlakowy 2 do Blachowni. Sprawdzona zostanie dostępność blokady liniowej Gn2-Bln2 oraz obu półgłowic (Gn_Ig21 i Gn_Ig22 — bo wyjazd na lewy). Wyświetlony będzie sygnał wyjazdowy z W24. Przed wykonaniem tych eventów należy upewnić się, że ewentualne pętla wjazdowa się zakończyła, inaczej organizacja wjazdu zostanie przerwana i zamiast tego będzie organizowany wyjazd.

Gn_It2=Bln2 Gn_It2:loop

Uruchomienie przelotu po torze 2 dla pociągu jadącego od Blachowni do Stradomia torem 2. Jeśli półgłowica Gn_Ig22 (zachodnia, od Blachowni) jest wolna, zostanie podany wjazd (jako S5 na semaforze). Następnie będzie sprawdzana dostępność blokady liniowej Gn2-CzS2 oraz półgłowicy Gn_Ig12 (wschodniej). Jeśli te okażą się wolne, podany będzie sygnał wyjazdowy, a na semaforze wjazdowym S5 zostanie zamienione na S2 (o ile wjazd pociągu na półgłowicę Gn_Ig22 nie zamienił na S1). Gdyby półgłowica Gn_Ig22 była zajęta, pętla będzie oczekiwać na jej zwolnienie. Dopiero po podaniu wjazdu na stację uruchomi się oczekiwanie na zwolnienie blokady liniowej Gn2-CzS2 oraz półgłowicy Gn_Ig12.

Gn_It2<Bln2 Gn_It2:loop Gn_It2_n>CzS2

Analogiczne działanie do poprzedniego, jedynie organizowanie wyjazdu będzie uruchomione dopiero po zajęciu toru Gn_It2. Taki przebieg jest dostępny dla wszystkich torów, które nie kończą się kozłem. Przebiegi ze znakiem równości są dostępne tylko dla torów głównych zasadniczych, dla których kierunek wyjazdu jest jednoznaczny. Od 2021 roku dla ustawienia przebiegu po zajęciu używany jest format Gn_It2_n>CzS2 zamiast Gn_It2>CzS2_next, ze względu na to, że Gn_It2_n jest nazwą komórki, a użycie znaków < oraz > może z czasem zostać przyjęte jako niejawne (bez jawnej definicji) zapisanie wartości do komórki pamięci związanej z odcinkiem izolowanym.

Wykrycie zajętości toru powinno być uzupełniane o modyfikator departuredelay -30, co oznacza, że dla pociągu z rozkładem, który nie jest spóźniony, przebieg wyjazdowy zostanie uruchomiony dopiero 30 sekund przed godziną odjazdu. Pozwala to np. ustalić priorytety na linii jednotorowej, co jest wykorzystywane na łącznicy pomiędzy Częstochową Osobową a Stradomiem.

Posterunek odgałęźny

Posterunek odgałęźny różni się tym od stacji, że nie ma torów stacyjnych ani semaforów wyjazdowych. Ponieważ jednocześnie nie ma potrzeby obsługiwania manewrów do W5, oczekiwaniem na zwolnienie rozjazdów i blokady liniowej zajmują się pętle eventowe torów za semaforami wjazdowymi.

Przykład: Liswarta

                                 .---- Lsw_ItC --- HrN2-Lsw3
Lsw1-Lis1 --- Lsw_ItE --- Lsw_Ig11 --- Lsw_ItB --- HrS1-Lsw1
Lsw2-Lis2 --- Lsw_ItF --- Lsw_Ig12 --- Lsw_ItA --- HrS2-Lsw2

Pominięte zostały żeberka ochronne, jako nieistotne dla sterowania ruchem. Pełnią one raczej rolę ozdobną, ewentualnie automatyczne przestawianie rozjazdów na żeberka zaraz po zwolnieniu zajętości może powstrzymać wirtualnych maszynistów, który by chcieli łamać przepisy.

Przykładowe przebiegi

Dla torów za semaforami wjazdowymi określone są tylko przebiegi wyjazdowe. Wjazd zostanie podany gdy uda się zarezerwować blokadę liniową oraz rozjazdy.

Lsw_ItB>Lis1 Lsw_ItB:loop
Lsw_ItF>HrN3 Lsw_ItF:loop

Wybór toru dla pociągu

Wybranie toru dla pociągu może być związane z jego zajęciem albo z kierowaniem ruchu na różne szlaki wyjazdowe, albo z zatrzymaniem na torze, przy którym jest peron.

W misjach wykorzystywane jest różne nazewnictwo, nie zostało jeszcze jednoznacznie ustalone (pod kątem użycia generatora zamiast ręcznego wpisywania). Co do zasady, dla uzyskania unikalności, do nazwy stacji powinien być dodany kierunek (1 albo 2) i numer toru (podobnie jak numeracja półgłowicy), a dalej numer toru stacji.

Koncepcja wyboru wolnego toru

Przykład dla Blachowni. Event Gn_Z:event1 jest uruchamiany po wyjeździe z wcześniejszej stacji (Gnaszyn), obecnie najlepiej podłączyć to pod semafor wjazdowy albo To. Uruchamia on pętlę eventową, która sprawdza zajętość torów na stacji, zaczynając od jazdy na wprost, czyli Bln_It1. Jeśli tor Bln_It1 jest wolny i szlak też, zostanie podany przelot (Bln_It1=Gn1 Bln_It1:loop). Jeśli nie, zostaną przetestowane dwa kolejne tory, przy czym wyjazd (z badaniem zajętości szlaku) będzie organizowany dopiero po zajęciu toru.

event Gn_Z:event1 multiple 10 none Blachownia11_tor1 endevent 
event Blachownia11_tor1 multiple 10 Bln_It1 Bln_It1=Gn1 Bln_It1:loop else Blachownia11_tor3 condition memcompare * * 0 endevent
event Blachownia11_tor3 multiple 10 Bln_It3 Bln_It3<Gn1 Bln_It3:loop Bln_It3_n>HrS1 else Blachownia11_tor4 condition memcompare * * 0 endevent
event Blachownia11_tor4 multiple 10 Bln_It4 Bln_It4<Gn1 Bln_It4:loop Bln_It4_n>HrS1 else Blachownia11_tor1 condition memcompare * * 0 endevent

Koncepcja wyboru kierunku jazdy

Wybór kierunku jazdy został opracowany dla stacji Herby Stare. Stacja docelowa jest odczytywana eventem WhoIs — należy jednak przy porównaniu uwzględnić wszystkie możliwości w rozkładach. Odczyt następuje do komórki pamięci blokady liniowej — można ją użyć, jeśli pociąg już znajduje się na szlaku. Natomiast nie można odczytać drugiej wartości liczbowej do komórki pamięci blokady liniowej, gdyż tam są zliczane pojazdy. Również nie należy używać komórki pamięci blokady na szlaku z SBL. W podanym przykładzie nie jest sprawdzana zajętość torów, należałoby to również uwzględnić.

event Bln_Z:event1 whois 0 Bln1-HrS1 9 endevent //odczyt docelowego miejsca
event losuj_herby:event2 multiple 0 Bln1-HrS1 HrS11_torem4 else HrS11_torem1 condition memcompare Katowice* * * endevent
event HrS11_torem1 multiple 1 none HrS_It1<Bln1 HrS_It1:loop HrS_It1_n>Lsw1 endevent //dalej Lisów i Kochanowice
event HrS11_torem4 multiple 1 none HrS_It4<Bln1 HrS_It4:loop HrS_It4_n>Kln1 endevent //dalej Kalina

Automatyczny dyspozytor

Pętle eventowe torów i półgłowic pozwalają prowadzić ruch bez kolizji. Jednak potrzebne jest decydowanie, na który tor wpuścić pociąg, zwłaszcza jeśli tor może być zajęty.

W przypadku gdy pociągi nadjeżdżają po linii z SBL, konieczne jest użycie buforowania odczytu rozkładu. Nie było by ono potrzebne, gdyby odczyt przenieść blisko semafora wjazdowego (bliżej niż najkrótszy możliwy pociąg), ale wtedy nie będzie możliwości podania wjazdu odpowiednio wcześniej. Wg stanu na marzec 2017 pewną niedoskonałością symulacji było to, że pociągi wjeżdżały na zajęty odstęp SBL i w efekcie podjeżdżały do siebie na niewielką odległość (zostało to naprawione później, ale sterowanie musiało uwzględniać mniej korzystny wariant).

Quark

Na scenerii Quark pociągi są rozróżniane po nazwie rozkładu (niektóre pociągi jeżdżą bez rozkładów). Zależnie od typu rozkładu przydzielany jest tor, na który pociąg ma wjechać na stację (np. na stacji Dejawy pociągi towarowe jadące od Wielkiego Kaca kierowane są na tor 3, a osobowe na tor 1). W przypadku zajętości domyślnego toru wybierany jest inny tor (w szczególności widać to na stacji Skwarki). Pociągi są rozpoznawane w pewnej odległości od stacji za pomocą eventu WhoIs (alternatywnym rozwiązaniem mogłoby być przekazywanie tej informacji przez stację wypuszczającą pociąg na szlak).

Linia 61

Sterowanie na scenerii "Linia 61" jest wprowadzane w oparciu o kilkanaście dotychczas istniejących misji, aby łatwiej było testować prawidłowość rozwiązań. Po przebudowie torów do stanu zgodnego z mapami pociągi otrzymują rzeczywiste rozkłady z lat 2007÷2012 (wyjątkowo 2003, kiedy jeszcze był ruch pomiędzy Kępnem a Częstochową). Pierwszym etapem prac jest wprowadzenie sterowania w oparciu o przebiegi i blokady liniowe. Dopiero w drugiej kolejności ruch będzie bazował na rozpoznawaniu pociągów.

Drawinowo

Ponieważ oryginalna sceneria miała problemy z ruchem składów, rozpoczęte zostało wprowadzanie opisanych tu rozwiązań. Pierwotnie składy były rozpoznawane wg kolejności dojazdu do stacji, jednak czasami ta kolejność ulegała zmianie. Rozpoznawanie pociągu po nazwie rozkładu było wprowadzane etapami — na połowę 2019 roku obejmuje już wszystkie posterunki, na których potrzebne było zróżnicowanie przejazdu zależnie od pociągu.

Wykorzystane mechanizmy

Główne prace nad nowym sterowaniem miały miejsce w 2012 roku i oparte były na wykorzystaniu scenerii Quark. Późniejsza przerwa w pracach była spowodowana rozpoczęciem prac nad zintegrowaniem linii rozwojowej Megapack i niezbyt udaną próbą połączenia scenerii fikcyjnych w sieć kolejową.

Przedstawione tu informacje nie są niezbędne do tego, aby korzystać ze sterowania. Mogą być jednak przydatne do zrozumienia działania plików sterujących.

Warunkowa zmiana komórki

Jednym z pierwszych mechanizmów było połączenie eventu zmiany komórki UpdateValues z działającymi już wcześniej warunkami wykonania eventu Multiple. Powstał w ten sposób event, który mógł zmodyfikować komórkę pod warunkiem, że wcześniej były w niej określone wartości. Jako zajętość została przyjęta trzecia wartość w komórce (druga liczbowa). Czyli event wpisywał określoną rezerwację pod warunkiem, że wcześniej w komórce trzecia wartość była zerem. Następnie kolejny event mógł wykonać operację pod warunkiem, że pozwalała na to wpisana w nią rezerwacja.

Przykład:

event Myd_It1(Tar updatevalues 0 Myd_Ig11 It1-Tar 1 1 condition memcompare * * 0 endevent
event Myd_It1(Tar multiple 0 Myd_Ig11 Myd_1:+ Myd_It1_done Myd_Ig11:start condition memcompare It1-Tar 1 1 endevent

Pierwszy event usiłuje zarezerwować komórkę głowicy Myd_Ig11 dla przebiegu o nazwie It1-Tar. Stanie się to tylko, jeśli trzecia wartość w komórce jest zerowa, czyli głowica nie jest zarezerwowana dla innego przebiegu ani nie znajduje się na niej tabor. O rezerwację głowicy może równolegle rywalizować przebieg na innym torze, np. wyjazdowy z toru 3 (Myd_It3). Jeśli głowica jest zajęta taborem, zwolni się ona, gdy ten zjedzie. Wtedy ostatnia wartość wyzeruje się, a następnie pierwsza próba rezerwacji się uda.

Drugi event wykona się tylko jeśli pierwszy dokona rezerwacji (wpisze do komórki podane w nim wartości). Ich obecność oznacza, że można przestawić rozjazdy (Myd_1:+) oraz uruchomić pętlę głowicy (Myd_Ig11:start), która poda odpowiedni sygnał do jazdy.

Łączenie eventów o tych samych nazwach

Aby ograniczyć liczbę eventów Multiple, które by następnie miały wywoływać eventy różnych typów (warunkowy UpdateValues rezerwujący i warunkowy Multiple, sprawdzający rezerwację), wprowadzone zostało łączenie eventów. Dotychczas eventy o identycznych nazwach sprawiały problemy — działał tylko ostatni znaleziony w plikach scenerii. Poprzez modyfikację parametrów wpisem config joinduplicatedevents yes endconfig można było doprowadzić do połączenia eventów o tych samych nazwach tak, że praktycznie wykonywały się one jednocześnie (w kolejności zapisanej w scenerii).

Niekolejkowane eventy AddValues

W celu zwiększenia elastyczności komórek pamięci, oprócz prostej modyfikacji ich zawartości eventem UpdateValues wprowadzone zostało sumowanie wartości w komórce z podanymi, za pomocą eventu AddValues. Jednym z jego zastosowań miało być zliczanie pojazdów na szlaku, a przez to wprowadzenie blokad liniowych. Jednak okazało się, że event dodany do kolejki nie może być dodany do niej po raz drugi. W związku z czym, jeśli event z kolejki nie wykonał się przed kolejną próbą dodania, zliczanie pojazdów było zakłócone. Dlatego eventy AddValues wykonują się obecnie natychmiastowo, aby nie uzależniać ich wykonania od tego, czy event już jest w kolejce, czy nie.

Przykładowe wpisy blokady liniowej zliczającej pojazdy:

//Stradom - Gnaszyn
node -1 0 CzS1-Gn1 memcell 0 0 0 free 1 0 none endmemcell //szlak do Gn torem 1
event   ++CzS1-Gn1    addvalues 0 CzS1-Gn1 * * 1 endevent
event   --CzS1-Gn1    addvalues 0 CzS1-Gn1 * * -1 endevent
event   --CzS1-Gn1 updatevalues 0 CzS1-Gn1 free * * condition memcompare * * 0 endevent
event   --CzS1-Gn1 updatevalues 0 CzS1-Gn1 free * 0 condition memcompare * * -1 endevent

Pierwszy wpis to definicja komórki pamięci CzS1-Gn1, która reprezentuje blokadę liniową. Następnie zdefiniowane są eventy: ++CzS1-Gn1 zwiększający liczbę pojazdów na blokadzie oraz --CzS1-Gn1 zmniejszający. Dodatkwo, zmniejszenie liczby pojazdów na blokadzie do 0 powoduje wpisanie tekstu free w pole tekstowe komórki. Odróżnia to blokadę całkowicie wolną od blokady zarezerwowanej przez którąś z głowic (która reż ma 0 pojazdów, ale jest przygotowywana do użycia). Eventy ++CzS1-Gn1 oraz --CzS1-Gn1 należy umieścić na obu końcach toru szlakowego, na torach pomiędzy semaforem wjazdowym a odczytem W5. Ostatni wpis jest prowizorycznym zabezpieczeniem blokady liniowej na okoliczność ustawienia jadącego pociągu na niej — jeśli ten pociąg zjedzie, pozostawi blokadę wolną. Bez tego wpisu liczba pojazdów stała by się ujemna, co byłoby równoznaczne jej zajęciu.

Komórki pamięci dla odcinków izolowanych

Pierwotnie w Quarku sterowanie działało na jawnie zdefiniowanych komórkach, które nie były połączone z odcinkami izolowanymi (jedynie dla wygody miały te same nazwy). W związku z częstym użyciem eventów :busy oraz :free (wyzwalanymi przez odcinek izolowany) do ustawiania komórki na określone wartości, wprowadzone zostało rozwiązanie automatyzujące ten proces. Obecnie odcinek izolowany tworzy automatycznie komórkę pamięci o tej samej nazwie, której ostatnia wartość zmienia się na 0 albo na 1 (a dokładniej, jest to zmiana na nieparzystą, czyli z 2 zrobi się 3, a następnie 0 po zwolnieniu), zależnie od stanu zajętości odcinka izolowanego. Jawna definicja komórki pamięci nie tworzy nowego obiektu, staje się jedynie ustawieniem wartości początkowych dla komórki odcinka izolowanego.

Samozapętlające się eventy Multiple

Dotychczas uruchamiany event nie mógł się ponownie dodać do kolejki, ponieważ w momencie uruchomienia nadal w niej był (dodawanie do kolejki sprawdza obecność w kolejce i nie dodaje drugi raz). W efekcie uruchamianie pętli eventowych, które miały na coś oczekiwać, wymagało użycia dwóch eventów Multiple, które dodawały się do kolejki na zmianę. Zostało to ulepszone w taki sposób, że event Multiple może się teraz dodać sam do kolejki, a jedynym warunkiem jest czas powtarzania wynoszący co najmniej 5 sekund (samododający się event z czasem 0 mógłby zawiesić symulację). Event taki powinien mieć również warunek pozwalający na przerwanie jego wykonywania w pętli.

Przykład:

event Gn_It1:loop multiple 9 Gn_It1 Gn_It1:loop Gn_It1_check condition memcompare * * 1 endevent

Jest to pętla odcinka izolownego toru, która z powtarzaniem co 9 sekund dodaje się sama do kolejki (Gn_It1:loop) oraz wywołuje sprawdzanie zleconego przebiegu (Gn_It1_check). Pętla się będzie wykonywać aż do zwolnienia toru (ostatnia wartość stanie się zerowa) albo do zmiany jego statusu na liczbę różną od 1 (zajęcie odcinka izolowanego Gn_It1 nie spowoduje zmiany ostatniej wartości w komórce Gn_It1 — w tym przypadku rezerwacja i zajętość jest oznaczona identycznie).

Problemy

Powyższa propozycja sterowania nie obejmuje takich zagadnień jak wyprzedzanie pociągów (odstawianie towarowego na bok, jeśli jedzie za nim osobowy) czy odwracanie kierunku SBL. Pozostają one nadal do rozwiązania.

Nie są również dokładnie określone zasady zamknięcia toru szlakowego (poza wpisaniem 3 jako kierunku blokady liniowej).

Synchronizacja z czasem odjazdu

Osobnym problemem jest synchronizacja podawania wyjazdu z rozkładowym czasem odjazdu pociągów pasażerskich (dotyczy też towarowych z wpisanym postojem do rozkładu). Testowana jest koncepcja użycia modyfikatora departuredelay z liczbą sekund, podobnego konstrukcyjnie do randomdelay. Dzięki temu event ma się uruchamiać o czasie równym czasowi odjazdu pomniejszonemu o podaną liczbę sekund albo w momencie dodania do kolejki, jeśli ten czas już upłynął (np. departuredelay -30 uruchomi się na 30 sekund przed odjazdem, a departuredelay -1 umożliwi zsynchronizowanie semafora z czasem odjazdu). Ewentualnie wartości dodatnie pozwalałyby wykryć pociąg opóźniony (departuredelay 60 uruchamiany tylko, jeśli minutę po rozkładowym czasie odjazdu nadal znajduje się w miejscu, w którym oczekiwał).

  • Dla paczki MaSzyna 20.01 nie działo prawidłowo departuredelay, jeśli upłynął czas odjazdu — departuredelay synchronizowało wykonanie eventu z czasem odjazdu z kolejnej stacji. Pozycja rozkładu na potrzeby departuredelay powinna zmieniać się dopiero po opuszczeniu stacji (minięciu W5). Nawet odjechanie od W4 może być zbyt słabym warunkiem, jeśli stacja ma tory oddalone od W4 (np. Stradom). Zachowanie zaobserwowane w Quarku, gdzie pociągi oczekują na zwolnienie szlaku do dalszej jazdy — czekały do czasu odjazdu z kolejnej stacji, wobec tego departuredelay zostało usunięte ze skryptów sterujących.
  • Dla paczki MaSzyna 21.04 nie jest wiązany aktywator z eventem, jeśli rozkład jest pobierany z sygnalizatora. Problem wyniknął na Quarku, gdzie składy miały pobierać rozkład z semafora wyjazdowego — wyjazd był podawany natychmiastowo. W przypadku braku aktywatora (np. event uruchomiony jako onstart albo przez eventlauncher), aktywator trzeba próbować przypisać przy okazji testu odcinka izolowanego (aktywatorem staje się pojazd z obsadą, zajmujący ten odcinek). Przykładowy kod, uruchamiający wyjazd pociągu, o ile tor jest zajęty — aktywator się nie ustawia:
node -1 0 none eventlauncher 0 0 0 -1 none 1018 Lubliniec62460 none end
event Lubliniec62460 multiple 40 Lbc_It3 else Lbc_It3>Jw2 Lbc_It3:loop condition memcompare * * 0 endevent
  • Dla paczki MaSzyna 21.04 przewijanie rozkładu nie współpracuje z departuredelay. Jeśli rozkład nie został przewinięty do odpowiedniej stacji, a event związany z zajęciem toru jest opóźniony przez departuredelay, to nie zostanie pobrany właściwy czas odjazdu. Problem objawił się np. w misji "l61+l144_towarowy" po powiększeniu jej o Kalety — z powodu braku W4 w Rusinowicach nie został przewinięty rozkład, a w efekcie nie był uwzględniany czas postoju w Lublińcu. O ile dodanie W4 w Rusinowicach załatwiło sprawę, to w misji "linia61_osobowy2" przypisanie rozkładu 46933 do pociągu z Katowic powoduje, że zamiast ten oczekiwać na godzinę odjazdu (postój 8 minut) dostaje wyjazd od razu i blokuje wjazd pociągu z Ozimka.

Podawanie sygnałów zastępczych

Wg stanu na połowę 2022 roku sytuacja sygnałów zastępczych nie jest uregulowana. W misjach na linii 61 są one jako wyjątki, omijające obsługę skryptem. Z tego względu nie jest sprawdzany stan izolacji ani blokady liniowej, bo wymagałoby to powielenia skryptu wraz z zestawem alternatywnych sygnałów (Sz może być podawany nie tylko z S1). Dodatkowym utrudnieniem jest wygaszanie Sz po 90 sekundach, co wymaga bliskości pociągu, a także uwzględnienia czasu odjazdu. Przykładowo, po dodaniu rozkładów z postojami w Fosowskich, trzeba było dodatkowo zsynchronizować sygnały zastępcze, żeby nie zostały wygaszone zbyt wcześnie. W praktyce kolejowej zdarzało się, że np. Sz był podawany po utwierdzeniu przebiegu manewrowego w przeciwną stronę.

Propozycja modyfikacji skryptów obejmuje (w pierwszym etapie) dodanie jednej komórki pamięci dla całej stacji, np. Fo_Sz. Wpisanie niezerowej wartości do drugiej zmiennej liczbowej wyłączy (zawiesi) działanie półgłowic. Jakiekolwiek zlecone do ułożenia przebiegi nie będą kończyć się podaniem sygnału zezwalającego, ale obsługa półgłowic zapętli się aż do momentu wpisania zera do np. Fo_Sz. Jeśli podczas zawieszenia zostanie podany sygnał Sz na semaforze, to izolacja głowicy zostanie zajęta, a następnie zwolniona, przez co po wycofaniu zawieszenia nie wykona się już podanie sygnału zezwalającego. Jednocześnie program misji będzie badał stan zmiennej głowicy, aby wykryć ułożenie przebiegu oraz uwzględni inne warunki do podania Sz. Na koniec zawieszenie głowic należy wyłączyć. Być może z czasem okaże się, że komórka zawieszająca powinna być osobna dla każdej półgłowicy lub będzie musiało to być robione w inny sposób.

//komórka pamięci zawieszająca podawanie sygnałów przez półgłowice (skrypt stacji)
node -1 0 Fo_Sz memcell 0 0 0 none 0 0 none endmemcell //normalnie włączone
event ++Fo_Sz addvalues 0 Fo_Sz * * 1 endevent //każdy wjazd na Sz zwiększa licznik
event --Fo_Sz addvalues 0 Fo_Sz * * -1 endevent //a po zakończeniu jest zmniejszany
//dodatkowa pętla wewnątrz obsługi półgłowicy (skrypt stacji)
node -1 0 Fo_Ig11 memcell 0 0 0 none 0 0 none endmemcell
event Fo_Ig11:start multiple 1 Fo_Sz
 Fo_Ig11_loop //przejść do zapalania semaforów, jeśli użycie Sz wyłączone
else
 Fo_Ig11_Sz //przejść do pętli oczekującej na zakończenie zawieszenia
condition memcompare * * 0 endevent
event Fo_Ig11_Sz multiple 5 Fo_Sz //zawieszenie półgłowicy
 Fo_Ig11_loop //przejść do zapalania semaforów, jeśli zawieszenie zakończone
else
 Fo_Ig11_Sz //oczekiwać na zakończenie zawieszenia
condition memcompare * * 0 randomdelay 15 endevent
event Fo_Ig11_loop multiple 5 Fo_Ig11 //standardowa pętla zapalająca semafory
 Fo_Ig11_loop Fo_Ig11_go
condition memcompare * * 1 randomdelay 15 endevent
//w skrypcie misji, po wykryciu pociągu nadjeżdżającego do Fosowskich i wylosowaniu wjazdu na Sz
//zawieszenie półgłowic, oczekiwanie na rezerwację przebiegu, podanie Sz oraz odwieszenie z opóźnieniem czasowym
event fos2.5 multiple 5.0 none
 ++Fo_Sz //włączenie zawieszenia półgłowic
 Fo_It1<Pld1 //przebieg wjazdowy z Pluder na tor 1 w Fosowskich
 Fo_It1:loop //uruchomienie ułożenia przebiegu (będzie oczekiwać na zwolnienie głowicy)
 Fo_It1-D_Sz_czekaj //przejście do pętli czekającej na ułożenie przebiegu
endevent
event Fo_It1-D_Sz_czekaj multiple 10 Fo_Ig11
 Fo_D_sz1 //jeśli przebieg ułożony, podanie Sz na wjazdowym
 Fo_It1-D_Sz_odblok //i następnie wyłączenie zawieszenia półgłowic
else
 Fo_It1-D_Sz_czekaj //dalsze oczekiwanie na ułożenie przebiegu
condition memcompare It1-Pld1 1 1 endevent
event Fo_It1-D_Sz_odblok multiple 100 Fo_Ig11
 --Fo_Sz //wyłączenie zawieszenia półgłowic po 100 sekundach (Sz powinno wygasnąć po 90 sekundach)
endevent

W powyższym przykładzie, jeśli pociąg nie zdąży wjechać na Sz (nie zajmie izolacji głowicy po podaniu Sz, a przed wyłączeniem zawieszenia), podany zostanie zwykły sygnał wjazdowy.

Propozycja jest testowana na linii 61, dostosowane zostały stacje Gnaszyn, Fosowskie, Ozimek oraz misje, w których był używany sygnał zastępczy.

Wdrożenia

Quark

W 2012 roku wstępna wersja takiego sterowania była testowana na scenerii Quark. Założeniem było umożliwienie wielokrotnych przejazdów pociągów przez stacje z rozróżnianiem pociągów osobowych od towarowych i obsługą zależną od tego rozróżnienia. Pierwotnie w planach było zapętlenie ruchu, aby był on prowadzony ciągle przez około 20 godzin. Jednak problemy z zaprojektowaniem obiegów taboru, cyklicznością rozkładów, a także błędami w układach torowych spowodowały zawieszenie dalszych prac.

Ruch został zorganizowany w oparciu o zastane nazewnictwo sygnalizatorów i rozjazdów, natomiast w zakresie nazewnictwa odcinków izolowanych testowane były różne rozwiązania. Wobec braku spójnej koncepcji nazewnictwa w 2012 roku pliki sterujące mogą wprowadzać pewną dezorientację. Jedynie dla stacji Mydelniczka oraz Dejawy nazewnictwo zostało ujednolicone zgonie z powyższym opisem (w październiku 2016).

  • Wersja Quarka do pacza MaSzyna 16.08 włącznie ma błędy w rezerwacji głowic. Poprawione pliki są od paczki 17.07.
  • Stan na październik 2021: głowice mają izolację grupową. Nazewnictwo rozjazdów nie jest uporządkowane, więc izolowanie pojedynczych rozjazdów prowadziłoby do bałaganu w nazwach odcinków izolowanych.

Tarniowo 2

Tarniowo zostało przebudowane jako etap prac nad edytorem, zbliżający tworzenie scenerii realistycznych do stanu scenerii uznawanych za skończone. Dla stacji Tarniowo został przygotowany algorytm sterowania ruchem, pozwalający ustalać przebiegi za pomocą klawiatury (opis użycia jest w pliku scenerii). Od zachodu powstało połączenie ze stacją Mydelniczka, jednak nie udało się dopracować dalszych stacji po wschodniej stronie ani podłączyć innych scenerii od południa czy północy.

  • Wersja Tarniowa do pacza MaSzyna 16.08 włącznie ma błędy w rezerwacji głowic. Poprawione pliki są do pobrania pod adresem http://rainsted.com/warsztat/Tarniowo2/ i są spodziewane w kolejnym paczu.

Linia 61

Sterowanie zostało wprowadzone na stacjach przelotowych Gnaszyn i Blachownia. Wg stanu na grudzień 2016 wprowadzane jest w Lisowie oraz Kochanowicach. W następnej kolejności będą uruchamiane posterunki odgałęźne Liswarta, Kalina i Jawornica oraz stacje węzłowe. Prace te służą do opracowania mechanizmów edycyjnych, mających usprawnić tworzenie skryptów sterujących dla kolejnych stacji. Docelowo skrypty sterowania przebiegami mają być generowane na podstawie ułożenia torów stacji.

  • Do pacza MaSzyna 16.08 włącznie publikowana jest linia 61 wg stanu z początku 2015 roku. Ostatnią wersję najlepiej pobrać uruchamiając instalację z zakładki Dodatki w Rainsted.
  • W połowie 2019 roku izolacja grupowa została wymieniona na izolację pojedynczych rozjazdów, a grupowanie następuje poprzez wpisy area w skryptach sterujących poszczególnych stacji.

Drawinowo

W lutym 2017 wprowadzone ujednolicone nazewnictwo rozjazdów oraz sygnalizatorów. Rozpoczęte wstawianie odcinków izolowanych dla posterunków, w których dotychczasowe sterowanie nie dawało oczekiwanych efektów. Sterowanie wprowadzane raczej minimalistycznie — ze względu na niedoskonałości układów torowych lepiej by było zacząć od poprawiania rozjazdów i dostosowania semaforów przed dopracowywaniem sterowania.

Wg stanu na połowę 2019, poprawione są niektóre układy torowe, a sterowanie ruchem na stacjach jest w całości oparte o skrypty, natomiast nadal są posterunki przepuszczające składy w uproszczony sposób. Planowana jest wymiana izolacji grupowej na izolację poszczególnych rozjazdów.

W 2021 przekazano do testów alternatywną wersję Drawinowa, z izolacją pojedynczych rozjazdów oraz alternatywną wersją sterowania (inną niż opisana tutaj). W związku z tym planowana jest wymiana izolacji grupowej na izolację poszczególnych rozjazdów.

Linia 181

Na przełomie 2018/2019 dodane zostały skrypty dla Pątnowa Wieluńskiego oraz Wielunia Dąbrowy. W 2022 doszedł skrypt dla Krzepic. Skrypty są dorabiane w miarę uruchamiania kolejnych pociągów i konieczności obsłużenia mijanek.

Linia 139

Na początku 2020 roku została udostępniona ulepszona wersja Linii 139, gdzie od razu były przygotowane izolacje rozjazdów, a w misjach demonstracyjnych zostały uruchomione mijanki przy pomocy skryptów sterujących stacjami. Dużą pomocą było wykorzystanie dostępnych publicznie schematów stacji. Skrypty kolejnych stacji zostały uruchomione na początku 2021 roku.


Scenerie realistyczne
Sceneria Podstrony i informacje
Gorlice Realistyczny układ torów
Kaliska Etap 1Etap 2Etap 3WyczerpyLK146LK131Komórki
Linia 61 UwagiWOS 2011Aktualne zmianyZmiany 2017÷201920162015Komórki
Linia 64 Realistyczny układ torów
Linia 139 Aktualne zmianyKomórki
Linia 181 WOS 2011Aktualne zmianyKomórki
Suwałki Zmiany
Szczecin Przeliczenie
Tarnowskie Góry ZmianyKomórki
Toruń Zmiany
Tramwaje GOP Realistyczny układ torów
Scenerie fikcyjne
Sceneria Podstrony i informacje
Czarne Prosty tor o długości ponad 460km
Drawinowo Zmiany
Linia 546 OpisDzierżawa
MZD Zmiany
Quark MydelniczkaRuch 2016Aktualne zmiany
SDR StrzęsowiecCzerwiceKarpiceKrętoszynPiaskowiecWostrzewo
Tarniowo Na bazie rzeczywistej stacji, poprawne profile pionowe na szlakach
Zwierzyniec Zmiany
Zagadnienia ogólne
Profil 2-5-13Odcinki izolowaneSterowanie ruchem 2016Zasięgi nazewnictwa
Sieć trakcyjnaRegulacja
Teren NMT-100Budynki CityGMLPrzeliczanie niweletamiPrzeliczanie obszaramiKomórkiPUWG1922
Formatowanie SCNUnifikacja klonówZapis czasu
YouTube: Sceneria w RainstedZakopane
Lista scenerii, którymi można się zaopiekować