Symulator EU07 (i nie tylko) > Pomoc w tworzeniu

 Pytania o eventy

<< < (144/149) > >>

gg:
Odgrzewam wątek. Mam pytanie dotyczące konkretnego eventu, który chciałbym wykorzystać:
Chciałem zrobić tak, żeby poprzez event zamykał się przejazd, a potem otwierał (ale ze sprawdzeniem , czy tor na przejściu kolejowym jest pusty). Da się to tak zrobić?

danniel:
Sprawdź jak działają przejazdy na td.scn. Ogólnie musisz mieć odcinek izolowany na torze w obrębie przejazdu (ok. 25m), i po dwa eventy na każdy kierunek jazdy, które zliczają pojazdy.

gg:
A można to zrobić za pomocą: condition trackfree?

danniel:
Jest to mniej wygodne, bo w takim przypadku zwolnienie toru nie wywoła eventu. Musiałbyś robić pętlę z takim warunkiem. Lepiej nazwa_izolowanego:free.

Transkei:
Jeżeli robisz to na jednotorowej linii, to musisz z dwóch stron umieścić event zamykający - w miarę daleko przed przejazdem, natomiast tuż przy przejeździe po evencie otwierającym dla każdego kierunku.
Przypuśćmy, że w torze o nazwie "tor1001" umieszczasz event o nazwie "otwieraj_przejazd1". Można to zrobić z poziomu torów ale zdecydowanie lepiej będzie przypisać zdalnie:

--- Kod: ---event tor1001:event2 multiple 0 none otwieraj_przejazd1 endevent
--- Koniec kodu ---
Czy piszemy event1 czy event2 - zależy to od kierunku toru. I teraz w składni możesz umieścić warunek do sprawdzenia zajętości toru. Ale uwaga! Jeżeli będzie to tylko pojedyncze sprawdzenie, to najpewniej przejazd nigdy się nie otworzy. Trzeba zrobić event rekurencyjny, czyli coś przypominającego pętlę programistyczną:

--- Kod: ---event otwieraj_przejazd1 multiple 5.5 tor1000 NAZWA_PRZEJAZDU_otwieraj else otwieraj_przejazd1 condition trackfree endevent
--- Koniec kodu ---
"tor1000" to tor, przez który przebiega droga na przejeździe.

Jeżeli chodzi o przejazdy wielotorowe, to sprawa się komplikuje. Najbardziej odporny mechanizm, to wspomniane zliczanie pociągów. W tym celu potrzebna jest zmienna wraz z eventami służącymi do zmiany jej wartości:

--- Kod: ---node -1 0 przejazd1_mem memcell 0 0 0 * * 0 none endmemcell
event przejazd1+ addvalues 0 przejazd1_mem * * 1 endevent
event przejazd1- addvalues 0 przejazd1_mem * * -1 endevent
--- Koniec kodu ---
Event zamykający przejazd powinien mieć taką składnię:

--- Kod: ---event tor0xxx:event2 multiple 0 none NAZWA_PRZEJAZDU_zamykaj przejazd1+ endevent
--- Koniec kodu ---
Natomiast każdy event otwierający najpierw powinien poczekać na zwolnienie toru. Po jego zwolnieniu zmniejszyć wartość zmiennej, a potem sprawdzić czy je wartość jest równa zero. Jeżeli tak, to można otwierać przejazd:

--- Kod: ---event otwieraj_przejazd1 multiple 5.5 tor1000 przejazd1- otwieraj_przejazd1_a else otwieraj_przejazd1 condition trackfree endevent
event otwieraj_przejazd1_a multiple 1 przejazd1_mem NAZWA_PRZEJAZDU_otwieraj condition memcompare * * 0 endevent
--- Koniec kodu ---
Oczywiście eventów otwierających będzie więcej i trzeba sprawdzać w nich właściwy tor. Jednakże ten mechanizm daje praktycznie 100% poprawności działania przejazdu.
Można też to zrobić za pomocą odcinka izolowanego i przez event wywoływany podczas jego zwolnienia, ale i tak musi być zliczanie pociągów, więc różnica bardzo niewielka.

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks Likes Pro Mod