Autor Wątek:  Jak zrobić rozkład dynamiczny?  (Przeczytany 32190 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline muri

  • Wiadomości: 627
    • Zobacz profil
  • Otrzymane polubienia: 5
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #60 dnia: 01 Grudnia 2014, 23:37:13 »
Gdzie mogę znaleźć jak zrobić odcinek izolowany? W quarku jest? Otaczam czymś fragment definicji torów, czy po prostu definiuję sam odcinek od pierwszego toru do ostatniego? Czy odcinek izolowany ma jeszcze jakąś funkcję poza grupowaniem torów?
W definicji toru dajesz "isolated xyz". przykłady tutaj:
Cytat: \scenery\baltyk\baltyk_ctl\tory_ctl.scm (4 hits)
   Line 5654: isolated start_ctl
   Line 7207: isolated balwidprz_eu07
   Line 7451: isolated osobowka_wyjazd
   Line 7636: isolated balwidprz_en57

Offline HTD

  • Wiadomości: 697
  • "Twoja stara mieszka w Boldach" xD
    • Zobacz profil
    • I like trains
  • Otrzymane polubienia: 30
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #61 dnia: 02 Grudnia 2014, 08:32:20 »
OK. Mam tor, dodaję mu parametr 'isolated'. Ale czym on się różni od zwykłego toru?
Patrząc na przykład to te odcinki wyglądają jak normalne tory. Co zmieniło określenie tego toru jako 'isolated'? Może mogę tę samą nazwę przypisać do więcej niż 1 toru?

Offline youBy

  • Deweloper
  • Wiadomości: 6163
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 865
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #62 dnia: 02 Grudnia 2014, 08:49:30 »
Może mogę tę samą nazwę przypisać do więcej niż 1 toru?
Tak.

OK. Mam tor, dodaję mu parametr 'isolated'. Ale czym on się różni od zwykłego toru?
Patrząc na przykład to te odcinki wyglądają jak normalne tory. Co zmieniło określenie tego toru jako 'isolated'?
Dla pojazdu – nic. Natomiast teraz możliwe jest teraz sprawdzanie zajętości i wywoływanie zdarzeń w chwili zajmowania lub zwalniania konkretnego odcinka izolowanego.
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

Offline muri

  • Wiadomości: 627
    • Zobacz profil
  • Otrzymane polubienia: 5
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #63 dnia: 02 Grudnia 2014, 09:29:55 »
Poczytaj: http://rainsted.com/pl/Symulator/MaSzyna/EU07.EXE_212#24._Sygnalizacja_zaj.C4.99to.C5.9Bci.2Fzwolnienia_grupy_tor.C3.B3w . W skrócie działa to tak:
--tor1:isolated aaa---|--tor2:isolated aaa---|---tor3:isolated aaa--|--tor4:isolated bbb----|--tor5:isolated bbb--|-tor6:isolated bbb---Czyli masz kilka odcinków torów (tutaj: 6) "zgrupowanych" w dwa odcinki izolowane.
Z oczywistych względów, odcinek nie może mieć "dziur", no i nazwa musi być unikalna w skali scenerii...
Daje Ci to możliwość zdefiniowania 4 zdarzeń:
aaa:free oraz  aaa:busy - analogicznie dla bbb. Zdarzenia ta wywołają się kiedy jakiś pojazd (do doczytania czy musi być z obsadą, czy dowolny) wjedzie na pierwszy tor będący składnikiem odcinka (event xxx:busy), lub ostatni pojazd zjedzie z danego odcinka (xxx:free). Tylko tyle i aż tyle.
Dodatkowo tworzona jest też (chyba) komórka pamięci o nazwie takiej jak odcinek, i można też ją odpytywać w jakiś sposób o zajętość odcinka - szczegółów szukaj tutaj: http://eu07.pl/forum/index.php?action=search2&search=isolated


  Dodano: 02 Grudnia 2014, 09:43:50
Przejrzyj sobie pliki *.ctr , np. w scenery/quark. Np:
Cytat: scenery\quark\bruchniewo.ctr (17 hits)
   Line 32: event br_pn:busy updatevalues 0 br_pn * * 3 endevent
   Line 33: event br_pn:busy     multiple 0 none br_d_s1 br_e_s1 br_f_s1 endevent //S1 po zachodniej stronie
   Line 34: event br_pn:free updatevalues 0 br_pn * 0 0 endevent
   Line 35: event br_pn:free updatevalues 0 Bru-Kon * 0 0 condition memcompare * 2 * endevent //zwolnienie szlaku
   Line 46: event br_pd:busy updatevalues 0 br_pd * * 3 endevent //południowa część zajęta
   Line 47: event br_pd:busy     multiple 0 none br_a_s1 br_b_s1 br_c_s1 endevent //S1 po wschodniej stronie
   Line 48: event br_pd:free updatevalues 0 br_pd * 0 0 endevent //południowa część wolna
   Line 49: event br_pd:free updatevalues 0 WKD-Bru * 0 0 condition memcompare * 1 * endevent //zwolnienie szlaku
   Line 78: event br_1:free   updatevalues 0 br_1 * * 0 endevent //tor zwolniony
   Line 79: //event br_1:busy       multiple 0 br_1 br_1>Kon br_1_loop condition memcompare WKD 1 1 endevent //tor został zajęty - wjazd ze WKD
   Line 80: //event br_1:busy       multiple 0 br_1 br_1>WKD br_1_loop condition memcompare Kon 2 1 endevent //tor został zajęty - wjazd ze WKD
   Line 81: //event br_1:busy   updatevalues 0 br_1 * 0 * condition memcompare * 1 * endevent //tor zajęty, kasowanie wjazdu
   Line 82: event br_1:busy       multiple 0 br_1_n else br_1_next condition memcompare * 0 * endevent
   Line 107: event br_2:free   updatevalues 0 br_2 * * 0 endevent //tor zwolniony
   Line 108: //event br_2:busy       multiple 0 br_2 br_2>Kon br_2_loop condition memcompare WKD 1 1 endevent //tor został zajęty - wjazd ze WKD
   Line 109: //event br_2:busy       multiple 0 br_2 br_2>WKD br_2_loop condition memcompare Kon 2 1 endevent //tor został zajęty - wjazd ze WKD
   Line 110: event br_2:busy       multiple 0 br_2_n else br_2_next condition memcompare * 0 * endevent
To wszystko są eventy reagujące na zmianę stanu odcinków izolowanych.
« Ostatnia zmiana: 02 Grudnia 2014, 09:44:46 wysłana przez muri »

Offline HTD

  • Wiadomości: 697
  • "Twoja stara mieszka w Boldach" xD
    • Zobacz profil
    • I like trains
  • Otrzymane polubienia: 30
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #64 dnia: 02 Grudnia 2014, 10:03:44 »
Dzięki. Postaram się odwdzięczyć w postaci dokumentacji i poprawek w scenariuszach.

Offline Siecool

  • Deweloper
  • Wiadomości: 983
    • Zobacz profil
  • Otrzymane polubienia: 233
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #65 dnia: 05 Grudnia 2014, 22:24:04 »
Zetknął się ktoś z sytuacją, że przypisanie jakiegokolwiek rozkładu jazdy (nawet pustego) do pociągu powoduje wywalenie się programu ("program wykonał nieprawidłową operację")?
Przedstawiam dla potomności rozwiązanie problemu - w pliku scn było "Firstinit" zamiast "FirstInit". Skutek - Rainsted przy zapisywaniu pliku tymczasowego scenerii pomijał to słówko, co w połączeniu z deklaracją rozkładu dla jakiegokolwiek pociągu powodowało wywalenie się programu. Prawda, że to proste i logiczne? ;)

Offline Siecool

  • Deweloper
  • Wiadomości: 983
    • Zobacz profil
  • Otrzymane polubienia: 233
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #66 dnia: 22 Grudnia 2014, 19:57:19 »
Piszę dzisiaj doktorat z przypisywania pojazdowi rozkładu jazdy i jakoś nie mogę dojść do porozumienia z tym bajerem. Historia wygląda następująco: przyjeżdża sobie wesoły pociąg na ostatnią stację swojego poprzedniego rozkładu i ponieważ ma w nim zawarty znak "@" lokomotywa grzecznie się odpina. Następnie równie grzecznie oblatuje skład, odbijając się dwa razy od W5, po czym do niego wraca. Przed składem ma podawany event Shunt -3 -3, bo sama się nie podepnie (choć z dokumentacji exe 291 wynika, że powinna, bo dałem jej "@" w rozkładzie). Po podpięciu przechodzi w tryb pociągowy i czeka. W międzyczasie wykonywany jest taki oberek:
node -1 0 jan_osob_rozklad_tor11 memcell -18811.873 -20.2 -53919.930 Timetable:slimson\calkowo_v2\test02 10 0 none endmemcell

event jan_osob_nadajrozklad_tor11 multiple 120.0 none jan_osob_nadajrozklad_tor11a jan_osob_nadajrozklad_tor11b jan_osob_nadajrozklad_tor11c jan_osob_nadajrozklad_tor11d endevent

event jan_osob_nadajrozklad_tor11a copyvalues 0.0 jan_osob_tor11a_mem jan_osob_rozklad_tor11 endevent
event jan_osob_nadajrozklad_tor11b copyvalues 0.0 jan_osob_tor11b_mem jan_osob_rozklad_tor11 endevent
event jan_osob_nadajrozklad_tor11c copyvalues 0.0 jan_osob_tor11c_mem jan_osob_rozklad_tor11 endevent
event jan_osob_nadajrozklad_tor11d copyvalues 0.0 jan_osob_tor11d_mem jan_osob_rozklad_tor11 endevent

node -1 0 jan_osob_tor11a_mem memcell -18861.873 -20.2 -53919.930 Wait_for_orders 0 0 jan_osob_tor11a endmemcell
node -1 0 jan_osob_tor11b_mem memcell -18911.873 -20.2 -53919.930 Wait_for_orders 0 0 jan_osob_tor11b endmemcell
node -1 0 jan_osob_tor11c_mem memcell -18961.873 -20.2 -53919.930 Wait_for_orders 0 0 jan_osob_tor11c endmemcell
node -1 0 jan_osob_tor11d_mem memcell -19011.873 -20.2 -53919.930 Wait_for_orders 0 0 jan_osob_tor11d endmemcell

Dziwaczna konstrukcja z czterema eventami w multiplu wynika z wysyłania tej samej informacji do czterech torów - po to, abym miał pewność, że jak pociąg będzie dłuższy to mi i tak ta konstrukcja zadziała.

Niestety powyższy mechanizm nie działa - eventy są wykonywane, ale informacja o wpisaniu komendy z rozkładem do komórki przypisanej do toru, na którym stoi pociąg, nie dociera do niego. W efekcie pociąg sobie grzecznie stoi i czeka. W związku z tym pytanie, co tu się powinno zrobić, aby ten bajer zadziałał? Patrzyłem, że w Quarku są jeszcze tajemnicze eventy addvalues, które podobno wysyłają coś do toru, a przynajmniej tak wynika z komentarzy w kodzie:
//rozkłady jazdy kopiowane do pociągów
node -1 0 kon_osobowy_WKD   memcell 0 0 0 Timetable:quark\roj1102 0.1 0 none endmemcell //dołem
event kon_osobowy_WKD!   copyvalues 2 kon_t5_com kon_osobowy_WKD endevent //przesłanie do pociągu
event kon_osobowy_WKD!    addvalues 2 kon_t5_com * 0 0 endevent //bo copyvalues nie wysyła do toru
event kon_osobowy_WKD++ addvalues 300 kon_osobowy_WKD * * 30 endevent //takt dla jazdy dołem
Wygląda na to, że to jest ten element, który jest mi potrzebny, bo zgodnie z komentarzem "copyvaules nie wysyła do toru". Niemniej jednak kłóci mi się to z tym, co Ra napisał tutaj:
Cytuj
4. Event AddValues z wartościami * 0 0 jest formalnie bez sensu, bo nie modyfikuje komórki z rozkładem.
Podsumowując:
- czy event addvalues jest potrzebny, aby pociąg zorientował sie, że w komórce przypisanej do toru, na którym stoi, coś się zmieniło?
- czy w powyższych eventach jest coś nie tak?
- czemu komendy Timetable:costam nie można po prostu podać jako putvalues?

Offline Stele

  • Zasłużony dla Symulatora
  • Wiadomości: 10133
    • Zobacz profil
  • Otrzymane polubienia: 2610
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #67 dnia: 22 Grudnia 2014, 20:30:45 »
event jan_osob_nadajrozklad_tor11x updatevalues 0.0 jan_osob_tor11a_mem Timetable:slimson\calkowo_v2\test02 10 0 none endeventNie załatwiłoby problemu w mniejszej ilości kodu?
Jeśli pojazd jest aktywny, a po manewrach jest, wystarczy wysłać mu rozkład od komórki którą skanuje. Jak nie ma rozkładu, to W4 jej nie zasłania. Wyślij to do semafora wyjazdowego i problem toru na którym stoi zniknie.
Mój kanał youtube

Offline muri

  • Wiadomości: 627
    • Zobacz profil
  • Otrzymane polubienia: 5
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #68 dnia: 22 Grudnia 2014, 21:03:51 »
Dla mnie na chłopski rozum - to kopiujesz jakąś wartość między komórkami pamięci. Ale nigdzie nie widzę, gdzie coś odczytuje te komórki? Nie powinno być gdzieś jakieś GetValues albo PutValues?

Offline Stele

  • Zasłużony dla Symulatora
  • Wiadomości: 10133
    • Zobacz profil
  • Otrzymane polubienia: 2610
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #69 dnia: 22 Grudnia 2014, 21:14:07 »
Nie.
node -1 0 jan_osob_tor11a_mem memcell -18861.873 -20.2 -53919.930 Wait_for_orders 0 0 jan_osob_tor11a endmemcellOstatni parametr to wskaźnik na tor. Gdy stan komórki ulega zmianie, pojazd na nim stojący otrzymuje komendę.
Mój kanał youtube

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6308
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 336
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #70 dnia: 22 Grudnia 2014, 21:17:39 »
Event CopyValues nadal nie wysyła zmienionej wartości komórki do połączonego z komórką toru, tak więc wskazane jest użycie AddValues * 0 0 w tym celu. Być może w jakiejś przyszłej wersji się to zmieni. Również możliwe jest to, że rozkład będzie można wysłać do jakiegokolwiek wagonu w składzie i trafi on do AI.
« Ostatnia zmiana: 22 Grudnia 2014, 21:18:43 wysłana przez Ra »
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline muri

  • Wiadomości: 627
    • Zobacz profil
  • Otrzymane polubienia: 5
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #71 dnia: 22 Grudnia 2014, 21:21:33 »
Ostatni parametr to wskaźnik na tor. Gdy stan komórki ulega zmianie, pojazd na nim stojący otrzymuje komendę.
Event CopyValues nadal nie wysyła zmienionej wartości komórki do połączonego z komórką toru, tak więc wskazane jest użycie AddValues * 0 0 w tym celu. Być może w jakiejś przyszłej wersji się to zmieni. Również możliwe jest to, że rozkład będzie można wysłać do jakiegokolwiek wagonu w składzie i trafi on do AI.
Te rzeczy powinny znaleźć się tutaj: http://rainsted.com/pl/Symulator/MaSzyna/Scenery.doc#node_.E2.80.A6_memcell

Offline Siecool

  • Deweloper
  • Wiadomości: 983
    • Zobacz profil
  • Otrzymane polubienia: 233
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #72 dnia: 22 Grudnia 2014, 21:33:24 »
event jan_osob_nadajrozklad_tor11x updatevalues 0.0 jan_osob_tor11a_mem Timetable:slimson\calkowo_v2\test02 10 0 none endeventNie załatwiłoby problemu w mniejszej ilości kodu?
Jeśli pojazd jest aktywny, a po manewrach jest, wystarczy wysłać mu rozkład od komórki którą skanuje. Jak nie ma rozkładu, to W4 jej nie zasłania. Wyślij to do semafora wyjazdowego i problem toru na którym stoi zniknie.
O, i takie rozwiązania lubię - dzięki za pomoc. Trzy linijki kodu i działa od pierwszego kopa. A te trzy linijki to:
event jan_osob_nadajrozklad_tor11 multiple 120.0 none jan_osob_g_wpiszrozklad jan_osob_g_resetuj endevent
event jan_osob_g_wpiszrozklad updatevalues 0.0 jan_osob_g_sem_mem Timetable:slimson\calkowo_v2\test02 10 0 endevent
event jan_osob_g_resetuj multiple 10.0 none jan_osob_g_s1 endevent
Event resetuj ma na celu powrót komórki semafora do normalnej wartości na wypadek, gdyby po nadaniu rozkładu okazało się, że czas odjazdu minął i pociąg by przeciął semafor, który nie nadaje Setvelocity 0 0, tylko mówi coś o jakimś timetable.

Offline Stele

  • Zasłużony dla Symulatora
  • Wiadomości: 10133
    • Zobacz profil
  • Otrzymane polubienia: 2610
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #73 dnia: 22 Grudnia 2014, 21:46:09 »
To ostanie daj jako:
event jan_osob_g_sem_mem:sent multiple 1 none jan_osob_g_s1 endevent I stosuj takie coś jako zabezpieczenie za każdym razem gdy używasz komórki sygnalizatora do innych celów. Event wykona się po odczytaniu przez AI komendy podanej wcześniej, a ta będzie tam wisieć do tego czasu na wypadek jakby ai było opóźnione czy coś.
Mój kanał youtube

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6308
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 336
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #74 dnia: 22 Grudnia 2014, 21:48:31 »
Event resetuj ma na celu powrót komórki semafora do normalnej wartości na wypadek, gdyby po nadaniu rozkładu okazało się, że czas odjazdu minął i pociąg by przeciął semafor, który nie nadaje Setvelocity 0 0, tylko mówi coś o jakimś timetable.
To resetowanie powinno być zrobione eventem jan_osob_g_sem_mem:sent, który zostanie dodany do kolejki zaraz po tym, jak AI odbierze rozkład. Jakakolwiek komenda wpisana do sygnalizatora (komórki skanowanej, w której wcześniej było SetVelocity) odpowiada wpisaniu tam Setvelocity 0 0.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline Siecool

  • Deweloper
  • Wiadomości: 983
    • Zobacz profil
  • Otrzymane polubienia: 233
Odp: Jak zrobić rozkład dynamiczny?
« Odpowiedź #75 dnia: 22 Grudnia 2014, 21:57:46 »
Czyli jak rozumiem nie ma sensu tego eventu wpisywać do multipla?