Symulator/MaSzyna/Sterowanie ruchem 2016

Z Rainsted
Skocz do: nawigacji, wyszukiwania

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 (na Quarku pozostało pierwotne nazewnictwo rozjazdów i semaforów, a dla odcinków izolowanych były testowane różne koncepcje, przez co każda stacja mogła mieć inny system nazewnictwa).

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.

Nazewnictwo

Wszystkie obiekty należące do stacji mają przedrostek w postaci Xyz_. 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).

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). Sygnalizatory sygnału zastępczego powinny mieć przedrostek Sz, np. SzA, SzB, Sz1. Oznaczenie tarcz manewrowych składa się z przedrostka Tm i numeru (Tm1, Tm102). Powtarzacze mają przedrostki ISp, IISp, IIISp przed nazwą powiązanego semafora (np. IISpF2). 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ć.

Nazewnictwo odcinków izolowanych rozjazdów

Izolacja rozjazdu ma przedrostek Iz przed numerem rozjazdu. W opisywanym sterowaniu nie jest używana izolacja pojedynczych rozjazdów. Taka nazwa izolacji rozjazdu może być stosowana jedynie w przypadku mijanek z dwiema zwrotnicami. Docelowo w planach jest wprowadzenie sumy logicznej odcinków izolowanych, wtedy będzie można zaizolować osobno poszczególne rozjazdy, a ruch nadal prowadzić w oparciu o półgłowice.

Nazewnictwo odcinków izolowanych torów

Izolacja toru ma przedrostek It przed nazwą toru. Nazwy torów mogą mieć oznaczenie literowe po numerze toru, np. It8a. Tory pomiędzy semaforami wjazdowymi a głowicą mają oznaczenie literowe semafora wjazdowego, np. ItA.

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, a druga jest numerem toru. 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 zakłócają ruchu przelotowego, rozjazdy wykorzystywane w manewrach mogą stanowić oddzielną grupę.

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:

                            .------ Gn_It5 ------.
                            | .---- 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 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 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 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.

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 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 odcinek wyznaczany sygnalizatorami SBL ma osobną komórkę pamięci (odcinek izolowany), a pętle półgłowic testują i rezerwują tylko sobie najbliższą. 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. Trzeba jeszcze sprawdzić, na ile możliwe jest używanie w tym celu odcinka izolowanego o nazwie związanej z semaforem wjazdowym.

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. Pętla eventowa toru następnie sprawdza, czy ma do wykonania kolejne zadanie (np. ustawienie półgłowicy po przeciwnej stronie).

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 grudzień 2016 symulacja nie ma takich możliwości).

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.

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.

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
Lis1-Lsw1 --- Lsw_ItE --- Lsw_Ig11 --- Lsw_ItB --- HrS1-Lsw1
Lis2-Lsw2 --- Lsw_ItF --- Lsw_Ig12 --- Lsw_ItA --- HrS2-Lsw2

Pominięte zostały żeberka ochronne.

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_ItF_loop
Lsw_ItF>HrN3 Lsw_ItF_loop

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 jest to, że pociągi wjeżdżają na zajęty odstęp SBL i w efekcie podjeżdżają do siebie na niewielką odległość.

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. 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. Częściowo wprowadzone jest rozpoznawanie składu po nazwie rozkładu.

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_loop 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_loop), 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

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.

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).

Osobnym problemem jest synchronizacja podawania wyjazdu z rozkładowym czasem odjazdu pociągów pasażerskich. Nieprecyzyjnie jest określone, czy przebieg następny (wyjazdowy) ma być ustawiany po przygotowaniu przebiegu wjazdowego, czy dopiero po zajęciu toru. Wskazane by było mieć obie możliwości.

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ą do pobrania pod adresem http://rainsted.com/warsztat/Quark/ i są spodziewane w kolejnym paczu.

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.

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.


Scenerie realistyczne
Sceneria Podstrony i informacje
Gorlice Realistyczny układ torów
Linia 61 UwagiWOS 2011Aktualne zmianyZmiany w 2016Zmiany w 2015
Linia 64 Realistyczny układ torów
Linia 139 Realistyczny układ torów
Linia 181 WOS 2011Aktualne zmiany
Suwałki Realistyczny układ torów
Szczecin Realistyczny układ torów
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-13Unifikacja klonówOdcinki izolowaneSterowanie ruchem 2016