Symulator EU07 (i nie tylko) > Na warsztacie
Projekt Lua, czyli automatyzacja scenerii
jakubg1:
Wzbogaciłem poradnik wyżej o połączenia eventów.
Edit 23.03.18: Wysłałem nową wersję skryptu - 3.0. Kodu z poprzedniej wersji niewiele zostało, oto najważniejsze zmiany:
* Rozbicie kodu na kilka części. W samym kernelu pozostały tylko includy.
* Druga mijanka do toru doświadczalnego, autor @stapox. Wszelkie uwagi w tej sprawie kierować do niego.
* Jedna głowica ma semafory kształtowe, druga - świetlne, na tej drugiej "panuje" ograniczenie do 100 km/h (test pasów świetlnych).
* Zrobienie od nowa systemu danych. Teraz zamiast odwoływania się do zmiennych jest jedna wielka tabela ze wszystkimi urządzeniami. Dodano przy okazji obsługę semaforów kształtowych.
* Trochę innych rzeczy.W razie błędów proszę pisać.
Edit 25.03.18: Postanowiłem samemu przebadać scenariusz pod kątem błędów i znalazłem 2 błędy:
* Zmienne nie resetowały się przy wygaszaniu się semafora kształtowego (było wykrywanie komendy pod względem "_s1", dorobiłem wykrywanie również pod względem "_sr1" i przy okazji "_tm1"). Tak więc ten bug już jest naprawiony;
* Nieco poważniejszy bug w konkretnych przypadkach mogący doprowadzić do kolejnych Szczekocin - system działa tak, że w momencie wyzwolenia eventu wyjazdowego (przy wjeździe pociągu na stację) sprawdzana jest zajętość toru szlakowego. Jeżeli jest wolny - semafor jest podawany. Jeżeli jest zajęty - wówczas po losowym czasie wykonywana jest następna próba - i tak aż do skutku. Jeżeli mamy taką sytuację, że na dwóch mijankach stoją pociągi "chcące" wjechać na przeciwne mijanki, a szlak pomiędzy nimi jest wolny, wówczas może się zdarzyć taka sytuacja, że pociąg 1 wyjedzie ze stacji, ale "nie zdąży" zająć szlaku - w trakcie wyjazdu pociągu 1 może zostać podjęta próba podania wyjazdu dla pociągu 2, która przechodzi pozytywnie - system patrzy, że szlak jest wolny, mimo, że na ten szlak właśnie wjeżdża inny pociąg. Pociągowi 2 jest podawany wyjazd, wjeżdża na szlak, a dalszy ciąg wydarzeń można sobie już dokończyć za pomocą odrobiny wyobraźni.
Rozwiązanie wprawdzie jest, tylko nie zostało zaimplementowane - w momencie podania wyjazdu odcinki zostaną "zarezerwowane" (jest już "zaklepana" zmienna w składni danych toru), a przy sprawdzaniu "wolności" szlaku będzie brana pod uwagę również rezerwacja.Błędy planuję poprawić w następnej wersji. Poradnika wyżej nie będę kontynuował, ponieważ wpadłem na pomysł zrobienia dokumentacji bezpośrednio w paczce.
Edit 31.05.18:
To na początek kilka słów celem usprawiedliwienia nieobecności.
Jakiś miesiąc temu przeniosłem się na Linuxa. Tam Maszyna nie działała. Teraz komputer całkowicie i nieodwracalnie się zepsuł, więc korzystam z pożyczonego. Dane są ocalone, ale sam dysk został w punkcie naprawy (to nie taki zwykły dysk, który można podłączyć do USB, toteż trzeba przekopiować dane). Niestety sam symulator na tymczasowym komputerze działać nie będzie, a uzasadnienie tego znajdziecie w załączniku. Obrałem za to już plany na wersję 4.0, i będzie to kolejna wersja, w której głównie posprzątam. Najważniejsza będzie restrukturyzacja tablic z kolejką eventów i z tablicą urządzeń, od nowej wersji dostęp do nich będzie na zasadzie "słownika", co wyeliminuje funkcje pośrednie i znacznie zwiększy wydajność. Taki najprostszy przykład:
--- Kod: ---listaUrzadzen = {{}, {}, {}}
--- Koniec kodu ---
zostanie zamienione na:
--- Kod: ---listaUrzadzen = {tory = {}, zwrotnice = {}, semafory = {}}
--- Koniec kodu ---
Oprócz tego kod będzie bardziej czytelny. Następną zmianą będzie zamiana pętli "for" pętlami "while", co zlikwiduje potrzebę używania tymczasowej zmiennej "ok". @matek__9292 też zauważył parę rzeczy do poprawy, bardzo za to dziękuję.
Prace rozpocznę zaraz po tym, jak uda mi się przywrócić symulator do normalnego działania.
Edit 16.07.18: Zaplanowano także prace mające na celu "zangielszczenie" kodu na prośbę użytkowników.
Edit 20.08.18:
Rozpoczynam prace nad wersją Cztery Zero. Główne aspekty tej wersji będą optymalizacyjne. Zangielszczanie kodu, zrobienie użycia ze słowników zamiast zwykłych list, tworzenie dokumentacji.
Zapraszam do pobrania wersji 3.1, w której zostały naprawione błędy oraz dostosowanie do najnowszej wersji MaSzyny. Pięć kółek przejechanych bez problemu.
Edit 26.08.18:
Wakacje się kończą, więc nadszedł czas na premierę wersji 4.0. Oprócz przetłumaczenia kodu na język angielski (nie licząc komentarzy, te zostają) oraz zmiany organizacji struktury danych zostało dodanych kilka ciekawych rzeczy.
- Log systemu Lua został przeniesiony do osobnego pliku - folder lua_log w głównym katalogu symulatora.
- Dodano debugger - po uruchomieniu symulatora, wciśnięciu klawisza F12 i naciśnięciu kombinacji Shift + 0 można podejrzeć stan każdej zwrotnicy, semafora i odcinka izolowanego. Dzięki temu można łatwiej złapać błędy związane z organizacją przebiegów. Debugger można wyłączyć wciskając te same klawisze (Shift + 0, F12). Kolejność wciskania nie ma znaczenia.
Docelowo debugger zostanie przeniesiony do zupełnie innej aplikacji (jeszcze nie zaczęła ona powstawać), gdzie po wybraniu pliku będzie można na bieżąco podglądać stan scenerii oraz przeglądać jej przebieg po zakończeniu symulacji, co może być dużą pomocą w przypadku napotkania błędów. Program będzie oczywiście dostępny dla wszystkich, kod źródłowy będzie otwarty.
- Zepsucia semaforów i zwrotnic mogą już być naprawione - po instalacji i wejściu w scenery/lua/dlugosczepsucia (OpenDocument) można zobaczyć krzywą prezentującą obecnie dobrane ustawienia. Około 4% usterek będzie się przeciągać przez ponad 2 godziny, 0.5% przez ponad 3 godziny. Dajcie znać czy tak może zostać.
jakubg1:
No to zaczynamy z drugim podejściem.
Od początku tego roku rozpocząłem prace nad kompletnie nową wersją. Ze starej praktycznie nic nie zostało - cały skrypt został przepisany od nowa. Organizacja kodu również została bardziej przemyślana. System od teraz jest napisany w sposób obiektowy, zamiast strukturalnego jak wcześniej. Ułatwia to pracę nad kodem.
Testowanie kodu jest prostsze - napisałem specjalny program, pozwalający na testowanie systemu bez konieczności uruchamiania symulatora. Jest oparty na silniku LOVE2D - kodu nie będę na razie udostępniał z powodu konieczności posiadania zainstalowanego silnika w celu działania aplikacji. Jak ktoś bardzo chce - zapraszam na PW lub na czat. Program do testowania wraz z samym systemem zostaną upublicznione na GitHubie, gdy zostanie ukończony drugi etap tworzenia systemu.
Plan pracy jest taki:
Etap 1 - definiowanie stacji, szlaków, torów, semaforów i zwrotnic oraz komunikacja ich z symulatorem. Pole testowe - zmodyfikowana sceneria TD.
Etap 2 - proste AI stacji bazujące na rozkładach jazdy. Dynamiczne generowanie rozkładów jazdy na podstawie scenerii. Pole testowe - zmodyfikowana sceneria Krzyżowa.
Dalsze etapy nie są jeszcze zaplanowane, ale będą to głównie dodatkowe funkcje i tzw. "smaczki".
Udostępniam paczkę do testu, żebyście sprawdzili, czy wszystko działa dobrze.
Prosiłbym o testowanie wygaszania semafora, blokady podawania przebiegów sprzecznych oraz na tory zajęte oraz poprawnego uzależniania obrazów na semaforach od sygnału na następnym semaforze.
Prosiłbym o nie testowanie AI oraz braków w osygnalizowaniu itp.
Lista przebiegów:
Shift+1, Shift+2 - wjazd od strony pociągu na starcie (tak jak w oryginalnym torze doświadczalnym)
Shift+3, Shift+4 - wjazd od drugiej strony (lustrzane odbicie Shift+1, 2)
Shift+5, Shift+6 - wyjazd ze stacji, odpowiedniki Shift+3, 4 w oryginalnym torze doświadczalnym.
Shift+7, Shift+8 - lustrzane odbicia powyższego.
Shift+9 - zezwolenie na jazdę na semaforze po drugiej stronie scenerii. Występuje uzależnienie z semaforem wjazdowym na stacji!
Shift+0 - reset wszystkiego.
Download: https://eu07.pl/userfiles/22592/lua_5_0_test1.zip
Wypakować do głównego katalogu symulatora. Żadne pliki nie są nadpisywane.
Jak poprzednio, konieczne posiadanie exe Milka do działania systemu!
Nawigacja
Idź do wersji pełnej