Zdarzenia

reticulan
Posty: 237
Rejestracja: 29 maja 2018, 21:37
Miasto: Częstochowa
System DCC: Roco 10764

Re: Zdarzenia

Post autor: reticulan »

gbbsoft pisze: 20 lip 2020, 08:19 ad1. Widzę tylko możliwość użycia "Blok_UstawPrzejazd". Ale bez informacji zwrotnej przejazd się nigdy nie skończy... :(
Wracając do tematu klikając prawym przyciskiem myszy na semaforze pojawia nam się menu jak na screenie i można wybrać sygnał na semaforze, analogicznie do wyboru trybu manewrowego loka z panelu lokomotywy.

Tryb manewrowy udało nam się ogarnąć, wiec może i zmianę sygnału udało by się wywołać na konkretnym semaforze. Mógłbym tego użyć w swoich scenariuszach w urządzeniu przycisk.
Załączniki
sem.jpg
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

reticulan pisze: 20 lip 2020, 15:59 A czy da się także zrobić to samo z funkcją "czekaj"?

Żeby ustawić losowanie czekania od... do.. sekund.
Niestety, nie. Ten element stworzył Microsoft i nie mogę go modyfikować.
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

reticulan pisze: 20 lip 2020, 16:37 Wracając do tematu klikając prawym przyciskiem myszy na semaforze pojawia nam się menu jak na screenie i można wybrać sygnał na semaforze, analogicznie do wyboru trybu manewrowego loka z panelu lokomotywy.
Dodałem nową operację w zdarzeniach: Semafor_Zmiana. Wpisujesz nazwę semafora i numer sygnału, jaki chcesz ustawić.
Dla semaforów wielokomorowych, jest to numer sygnału na liście "Sygnały".
Dla semaforów prostych: 0 - stop, 1 - droga wolna, 2 - jazda ze zmniejszoną prędkością (o ile wystepuje).
reticulan
Posty: 237
Rejestracja: 29 maja 2018, 21:37
Miasto: Częstochowa
System DCC: Roco 10764

Re: Zdarzenia

Post autor: reticulan »

No coś chyba źle ustawiam. poniżej screen z błędem podczas kompilacji. Może to nie pójdzie jeśli uruchamiam przez dekoder martineza? Aczkolwiek teraz testuje na "sucho" bez podłączonie DCC.
Załączniki
sem2.jpg
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

OK. Zapomniałem o "przełączeniu kontekstu". Poprawiona wersja wystawiona. Zobacz, czy jest lepiej.
reticulan
Posty: 237
Rejestracja: 29 maja 2018, 21:37
Miasto: Częstochowa
System DCC: Roco 10764

Re: Zdarzenia

Post autor: reticulan »

no i teraz ok:)

A da się zrobić dodatkowo włączanie losowe?

To by już był bardziej rzeczywisty sposób sterowania "scenariuszem loka"
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

Losowo sygnał na semaforze?
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

Możesz zrobić tak:
- Dodajesz najpierw "Wyrażenie_Całkowite" a zaraz za nim "Semafor_Zmień".
- w "Wyrażeniu_Całkowitym" ustawiasz: Argument1=0, Operacja1=Random, Argument2=<górny numer sygnału, który chcesz losować>
- Nastepnie w "Zapisz jako Całkowite" klikasz na "żółtą baryłkę" i wskazujesz "Semaphore_Change_Active"->SignalNo

Edit: Powyższa metoda jest błędna. Czytaj niżej: Należy użyć zmiennej globalnej

W tej sposób "Wyrażenie" losuje numer i wstawia go do "Semafor_Zmień" jako numer sygnału.

Jak działa "Random"?

Wynikiem Random pomiędzy Argument1 i Argument2 jest: Argument1+Losuj(Argument2), gdzie Losuj(n) generuje liczbe całkkowitą od 0 do n
Czyli, jeżeli chcesz wylosować liczbe od A do B musisz wpisać: Argument1:=A oraz Argument2:=(B-A)

PS. Jeżeli w "Operacja1" nie masz "Random", to zainstaluj najnowszą wersje testową :-)
Załączniki
Adnotacja 2020-07-20 194710.jpg
reticulan
Posty: 237
Rejestracja: 29 maja 2018, 21:37
Miasto: Częstochowa
System DCC: Roco 10764

Re: Zdarzenia

Post autor: reticulan »

Tak. Można by to fajnie zgrać z prędkościami.

Trochę to zawiłe, nie wiem czy nie za dużo ustawiania jak na ok 30 scenariuszy.

Nie da rady zrobić tak jak z prędkościami. Fajnie to wyszło

PS. Opcja Random przy "argument1" jest ale Semaphore_Change_Active"->SignalNo w zapisz jako całkowite nie moge znaleść.

Wpisałem więc ręcznie i wywala błąd jak na screenie. Mam pytanie, skąd program wie o który semafor chodzi?
Załączniki
sem3.jpg
sem4.jpg
Awatar użytkownika
gbbsoft
Admin
Posty: 2178
Rejestracja: 09 lip 2008, 23:19
Miasto: Warszawa
System DCC: Lenz + Roco

Re: Zdarzenia

Post autor: gbbsoft »

1. Pobierz i zainstaluj nowszą wersję. Otworzyłeś "puszkę Pandory" to masz teraz... :-)

2. Z prędkościami też da radę tak zrobić.

3. Mój poprzedni przykład nie kompiluje się. Ponieważ "Wyrażenie" odwołuje się do "Semafora", który jest "później" na liście do wykonania, a okazuje się, że tak nie można. Wyjściem z tego jest stworzenie "Zmiennej globalnej".

4. Czyli:
- Tworzysz zmienną globalną typu "Liczba całkowita" o dowolnej sensownej nazwie (np: NumerSygnalu)
- Dodajesz najpierw "Wyrażenie_Całkowite" a zaraz za nim "Semafor_Zmień".
- w "Wyrażeniu_Całkowitym" ustawiasz: Argument1=0, Operacja1=Random, Argument2=<górny numer sygnału, który chcesz losować>
- Nastepnie w "Zapisz jako Całkowite" klikasz na "żółtą baryłkę" i wskazujesz zmienną globalną: NumerSygnału
- Następnie w "Semaphore_Change_Active"->SignalNo klikasz na "Zółtą baryłkę" i także wskazujesz zmienną globalną.

Drobna uwaga: Dla każdego takiego drzewka najlepiej stworzyć własną zmienną globalną. Lepiej nie używać danej zmiennej globalnej w wielu drzewkach na raz, bo przy jednoczesnym wykonywaniu wielu drzewek na raz, może źle działać i będzie to trudne do znalezienia...

5. W nowej wersji ten sam manewr można zrobić z opóźnieniem!
- Tworzysz zmienną globalną typu "TimeSpan"
- W "Wyrażeniu_Całkowitym" generujesz liczbe losową, która będzie w sekundach opisywać opóźnienie
- Dodałem "Zapisz jako TimeSpan" i wskazujesz zmienną globalną
- W "Czekaj" dla "TimeoutDuration" naciskasz "Zółtą baryłkę" i wskazujesz zmienna globalną stworzoną w kroku pierwszym.
ODPOWIEDZ