Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: gbbsoft »

Nie rozumiem. Fukcja "IsFree" na bloku jest od dawna... Nie mam co wymyślać...

Możesz w "Jeżeli":
- w polu "Wyrażenie - ustawienia" -> "ActiveBlock" wskazać blok po nazwie, np: "Block1" (aby "ActiveBlock." w wyrażeniu odnosił się do "Block1")
- w wyrażeniu wpisać: ActiveBlock.IsFree(false)=false

Tu była o tym mowa, jak używać "ActiveBlock" w "jeżeli" do wskazywania innych bloków niz bieżący: viewtopic.php?p=1904#p1904
andrzej-n
Posty: 209
Rejestracja: 24 lis 2015, 20:48

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: andrzej-n »

Piotr,
ja się kompletnie pogubiłem i nie rozumiem tego co napisałeś powyżej.
Chcę zrobić coś takiego: Jeżeli Blok "X" jest zajęty to.....: jeżeli nie to.....
I nie wiem co mam wpisać w pole ConditionName funkcji "jeżeli" .
Andrzej
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: gbbsoft »

Po pierwsze zainstaluj ostatnią wersję testową (1.72.6232), bo okazało się, że w wyrażeniach nie widać właściwości z parametrami, więc musiałem isFree przerobić na funkcję.

Najpierw w "Condition" wybierasz "Warunek reguły deklaratywnej" i naciskasz "+" po lewej stronie.
W ConditionName nic nie wpisujesz, klikasz "...", które się pojawia, gdy postawisz kursor.
Potem w oknie naciskasz "Nowa" i oknie Warunek wpisujesz: ActiveBlock.IsFree(false)=false
andrzej-n
Posty: 209
Rejestracja: 24 lis 2015, 20:48

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: andrzej-n »

Wiem, że w "ConditionName" nic się nie wpisuje. To było takie uproszczenie. Poprzednie tak właśnie robiłem, ale nie wchodziło. Teraz jest poprawnie.
Żeby ActiveBlock ustawić na konkretny blok (b3) zrobiłem tak ja w załączniku, ale pojawia się komunikat : Event engine. Nie można wywołać metody IsFree, ponieważ jej obiekt docelowy jest zerowy.
Załączniki
rys1.jpg
Andrzej
andrzej-n
Posty: 209
Rejestracja: 24 lis 2015, 20:48

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: andrzej-n »

W uzupełnieniu poprzedniego wpisu: czy nie można by od razu w pytaniu wstawić nazwę bloku o który chodzi?
Andrzej
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: gbbsoft »

Wszystko zle.... musze sprawe przemyslec.

Ustawienie ActiveBlock nie wychodzi poza jeden kwadracik!
Wiec jak przed if ustawiles ActiveBlock, to w warunku juz ActiveBlock jest znowu puste, woec twoj program wywala sie w warunku if.

To trzeba jakos onaczej zrobic... Daj mi troche czasu, bo aktualnie mam grype i 38st... ☺
andrzej-n
Posty: 209
Rejestracja: 24 lis 2015, 20:48

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: andrzej-n »

Nie ma żadnego pośpiechu. Wracaj do zdrowia.
Andrzej
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: gbbsoft »

andrzej-n pisze: 23 sty 2017, 12:32 W uzupełnieniu poprzedniego wpisu: czy nie można by od razu w pytaniu wstawić nazwę bloku o który chodzi?
Dokładnie masz rację!

Wystawiłem nową wersję, w której w obiekcie Engine dodałem różne funkcje do szukania różnych obiektów po nazwach, m.in: BlockByName("nazwa")
Teraz:
- ustawienie ActiveBlock w ogóle nie jest potrzebne
- w if w warunku wstawiasz: Engine.BlockByName("b3").IsFree(true)=true
andrzej-n
Posty: 209
Rejestracja: 24 lis 2015, 20:48

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: andrzej-n »

Działa, tylko..............Do tej pory byłem przekonany, że blok jest wolny dopóki nie wjedzie lok. Faktycznie jednak blok jest zajęty już w momencie uruchomienia Autoprzejazdu. A mnie zależy na tym, by sprawdzić czy lok dojechał. Zwracałeś wcześniej na to uwagę, ale to jakoś przeoczyłem.
Zgodnie z Twoimi sugestiami
Blok jest wolny wtedy, gdy "IsFree(false)=true"
Lok dojechał, gdy blok jest zajęty i "Blok.CurrentTrainStatus=0"
zrobiłem coś takowego -w pętli while dopóki blok "b9" jest wolny i lok nie dojechał, to... (załącznik).
Ale pojawia się ten komunikat.
Czy da się to sprawdzić w zdarzeniach?
Załączniki
rys2.jpg
Andrzej
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Operacja "AutoPrzejazd_Zmien" w Zdarzeniach

Post autor: gbbsoft »

Nie ma czego takiego jak "Blok.", dlatego program zglasza ci blad.

W tym miejscu musisz powtorzyc: Engine.BlockByName("b3").
ODPOWIEDZ