33 - Rocail: azioni (ritardo, ripetizioni con uso di variabile, controllo movimento, ecc.)
Inviato: 10 gennaio 2025, 19:13
Ovviamente le azioni che possiamo usare sono molte e ne abbiamo esplorato solo alcune. Vediamo qualche altro esempio.
Abbiamo visto che una singola azione può essere applicata ad oggetti diversi.
Ad esempio le luci della locomotiva che si accendono quando la locomotiva si muove e si spengono quando la locomotiva si ferma:
Azioni: Le due azioni sono state applicate alle locomotive. Qui vediamo le azioni assegnate alla Litra ed alla OBB:
Ecco cosa succede ogni volta che muoviamo o fermiamo la locomotiva (sia manualmente che in modalità automatica):
Le luci si accendono quando la locomotiva riceve un comando di movimento e si spegnono quando la locomotiva riceve il comando di velocità 0.
Ma vogliamo che le luci si spengano con un ritardo di, ad esempio, 4 secondi.
Mettiamo quindi un ritardo, tramite il campo timer nella nostra azione: Mettendo il valore 4000 nel campo 'Timer', l'azione verrà eseguita con 4 secondi di ritardo dal momento della chiamata (4000 x 100ms = 4 sec.):
Quando la locomotiva riceve il comando di velocità 0 (still) esegue l'azione, ma questa ha un timer di 4 secondi, quindi l'effetto che otteniamo e che le luci si spengono dopo 4 secondi. Questo succede ogni volta che l'azione è usata. Sarà sempre eseguita con 4 secondi di ritardo.
Ma possiamo 'personalizzare' la chiamata dell'azione. Ad esempio far spegnere le luci prima per una locomotiva e dopo per un'altra.
Riportiamo l'azione ad usare un timer pari a zero: Per dmiostrazione, metteremo un 'ritardo' di 2 secondi sulla Litra e di 4 secondi sulla OBB:
Quindi andiamo nelle azione assegnate alla Litra: Nella azione che spegne le luci quando la locomotiva e in still (velocità 0) mettiamo un ritardo di 2 secondi (2000 x 100ms): Sulla OBB mettiamo invece 4 secondi: O2a, l'azione è la medesima ma verrà eseguita con ritardi diversi, 4 ssecondi per la OBB e 2 per la Litra:
Potete verificare anche usando l'orologio di Rocrail che le luci ora si 'spengono' dopo 2 secondi dall'arresto della Litra e dopo 4 secondi nel caso della OBB.
Quindi la stessa azione ('luci_off') viene 'personalizzata'. Ovviamente quando parlo di personalizzazioni le opzioni sono relative. Qui usiamo solo il ritardo di esecuzione. Ma tramite le condizioni possiamo 'personalizzarla' maggiormente.
Però dobbiamo tenere in considerazione cosa succede quando la locomotiva è in modalitù automatica.
Vediamo cosa succede quando la locomotiva si ferma nel blocco che è impostato con una attesa di 4 secondi:
Succede che la locomotiva riparte con le luci che si spengono.
Perchè?
Analizziamo la situazione.
La locomotiva arriva nel blocco con le luci accese.
Quando si attiva il sensore 'in' la locomotiva riceve il comando di velocità 0. Viene eseguita quindi l'azione che spegne le luci (ma con un ritardo di 4 secondi).
Nello stesso preciso momento però parte anche il conteggio del tempo di attesa nel blocco. Che è impostato a 4 secondi. Ma nelle priorità di funzionamento Rocrail esegue prima le operazioni di 'movimento' e poi le azioni, speciamente quelle con un timer.
Quindi il 'conteggio' del movimento (tempo di attesa nel blocco) viene eseguito 'prima' del conteggio dell'azione'.
Se guardate viene impostato un nuovo itinerario e la loco inizia a muoversi prima che siano passati i 4 secondi del timer dell'azione.
Ora direte: ma la locomotiva ha una azione che accende le luci quando riceve un comando di movimento. Ed in effetti il comando viene dato e ricevuto solo 'prima' che siano passati i 4 secondi del ritardo dell'azione che spegne le luci.
Riepilogando in sintesi succede questo:
1) La locmotiva attiva il sensore 'in'. Parte il conteggio dei 4 secondi di tempo di attesa nel blocco.
2) La locomtiova riceve il comado di velocità 0. Parte l'azione 'luci_off' ma con un ritardo di 4 secondi (nel frattempo tra il punto precedente e questo sono passati alcuni ms...)
3) passati 4 secondi Rocrail attiva un itinerario e invia il comando di velocità alla loco per farla muovere. Si attiva l'azione 'luci_on' sulla locmotiva
4) passano i 4 secondi del ritardo dell'azione 'luci_off' e l'azione viene eseguita. Le luci vengono spente anche se la locomotiva si muove.
Ora, se l'attesa nel blocco è superiore ai 4 secondi (diciamo 10) avremo questo effetto. La loco arriva nel blocco, si ferma e dopo 4 secondi spegne le luci. Dopo altri 6 secondi viene attivato un itienrario, la loco si muove e riaccende le luci.
Però non è che una loco quando si ferma in stazione spegne le luci...
Noi volgiamo che, quando muoviamo la locomotiva manualmente, le luci si accendano subito e si spengano dopo 4 secondi quando la fermiamo (usiamo la loco OBB), mentre se la locomotiva è in modalità automatica le luci devono restare accese quando la locomotiva si ferma nei blocchi.
Vediamo come possiamo ottenere questo risultato.
N.B questo è un esempio basato sulle azioni in uso. Si può ottenere lo stesso effetto con altri sistemi (azioni).
Andiamo nelle azioni della OBB: Aggiungiamo una condizione alla azione che spegne le luci: Diciamo che l'azione di spegnere le luci deve essere eseguita solamente se la locomotiva in questione è in modalità stop.
Ricordo ancora una volta che c'è differenza tra lo stop inteso come velocità = 0 e lo stop della mosalità di funzionamento.
Rocrail non usa lo 'stop' per dare il comando di velocità 0 ma lo 'still'. Qundi lo 'stop' indica che la locomotiva non è mossa automaticamente da Rocrail.
Con la condizione data ora le luci restano accese durante le attese nei blocchi (10 secondi di attesa in questo caso):
Quando la locomotiva si ferma per l'attesa nel blocco la sua modalità e 'wait'. Non viene messa in stop. Non essendo in stop l'azione non viene eseguita.
Il rovescio della medaglia è che le luci resteranno accese anche se mettiamo in 'stop' la locomotiva manuamente (ad esempio con un doppio click nel blocco di destinazione) come nel prossimo video. Però il comando manuale della locomotiva continua a funzionare (intendo accensione e spegnimento delle luci):
Perchè succede questo? Perchè quando arrestiamo una locomotiva (anche togliendo la modalità automatica a tutto il sistema) il comando di 'stop' viene inviato alle locomotive quando attivano il sensore 'enter' del blocco. Ricordo che se la locomotiva è in movimento e togliamo l'automazione questa comunque raggiungerà il blocco di destinazione.
Ma pur avendo ricevuto il comando di stop (in pratica Rocrail 'avverte' la locomotiva che quando si ferma al sensore 'in' dovra andare in modalità 'stop' la locomotiva non è in stop ma ancora in 'auto' ovvero in modalità automatica. Quando la locomotiva attiva il sensore 'in' viene dato il comando di velocità = 0 (still) ma la locomotiva non è ancora in 'stop', quindi l'azione viene ignorata perchè la condizione che abbiamo messo prevede che sia in modalità 'stop'.
Quindi anche se la nostra 'logica' di funzionamento ci dice che l'azione dovrebbe spegnere le luci, la 'logica' di funzionamento di Rocrail può differire da quanto ci aspettiamo.
Possiamo però ovviare a qusti problemi usando soluzioni più elaborate come l'uso delle variabili che vedremo nel prossimo esempio ma applicata ad altra situazione. Tanto è il concetto di uso che importa.
Per concludere con l'azione delle luci...
Quando la locomotiva inverte la direzione:
Comportamente del tutto normale. Siamo in condizione di locomotiva in 'stop' ma comandata manualmente. Le luci sono accese (nella direzione opposta).
La locomotiva si ferma perchè riceve il comando arresta (still). Parte l'aazione per spegnere le luci con i soliti 4 secondi di ritardo. Invertiamo la direzione di marcia ed ecco che le luci (che sono ancora accese perchè sono passati meno di 4 secondi) si accendo nel senso di direzione di marcia, per poi spegnersi perchè l'azione viene eseguita (4 secondi dal still).
Abbiamo visto che una singola azione può essere applicata ad oggetti diversi.
Ad esempio le luci della locomotiva che si accendono quando la locomotiva si muove e si spengono quando la locomotiva si ferma:
Azioni: Le due azioni sono state applicate alle locomotive. Qui vediamo le azioni assegnate alla Litra ed alla OBB:
Ecco cosa succede ogni volta che muoviamo o fermiamo la locomotiva (sia manualmente che in modalità automatica):
Le luci si accendono quando la locomotiva riceve un comando di movimento e si spegnono quando la locomotiva riceve il comando di velocità 0.
Ma vogliamo che le luci si spengano con un ritardo di, ad esempio, 4 secondi.
Mettiamo quindi un ritardo, tramite il campo timer nella nostra azione: Mettendo il valore 4000 nel campo 'Timer', l'azione verrà eseguita con 4 secondi di ritardo dal momento della chiamata (4000 x 100ms = 4 sec.):
Quando la locomotiva riceve il comando di velocità 0 (still) esegue l'azione, ma questa ha un timer di 4 secondi, quindi l'effetto che otteniamo e che le luci si spengono dopo 4 secondi. Questo succede ogni volta che l'azione è usata. Sarà sempre eseguita con 4 secondi di ritardo.
Ma possiamo 'personalizzare' la chiamata dell'azione. Ad esempio far spegnere le luci prima per una locomotiva e dopo per un'altra.
Riportiamo l'azione ad usare un timer pari a zero: Per dmiostrazione, metteremo un 'ritardo' di 2 secondi sulla Litra e di 4 secondi sulla OBB:
Quindi andiamo nelle azione assegnate alla Litra: Nella azione che spegne le luci quando la locomotiva e in still (velocità 0) mettiamo un ritardo di 2 secondi (2000 x 100ms): Sulla OBB mettiamo invece 4 secondi: O2a, l'azione è la medesima ma verrà eseguita con ritardi diversi, 4 ssecondi per la OBB e 2 per la Litra:
Potete verificare anche usando l'orologio di Rocrail che le luci ora si 'spengono' dopo 2 secondi dall'arresto della Litra e dopo 4 secondi nel caso della OBB.
Quindi la stessa azione ('luci_off') viene 'personalizzata'. Ovviamente quando parlo di personalizzazioni le opzioni sono relative. Qui usiamo solo il ritardo di esecuzione. Ma tramite le condizioni possiamo 'personalizzarla' maggiormente.
Però dobbiamo tenere in considerazione cosa succede quando la locomotiva è in modalitù automatica.
Vediamo cosa succede quando la locomotiva si ferma nel blocco che è impostato con una attesa di 4 secondi:
Succede che la locomotiva riparte con le luci che si spengono.
Perchè?
Analizziamo la situazione.
La locomotiva arriva nel blocco con le luci accese.
Quando si attiva il sensore 'in' la locomotiva riceve il comando di velocità 0. Viene eseguita quindi l'azione che spegne le luci (ma con un ritardo di 4 secondi).
Nello stesso preciso momento però parte anche il conteggio del tempo di attesa nel blocco. Che è impostato a 4 secondi. Ma nelle priorità di funzionamento Rocrail esegue prima le operazioni di 'movimento' e poi le azioni, speciamente quelle con un timer.
Quindi il 'conteggio' del movimento (tempo di attesa nel blocco) viene eseguito 'prima' del conteggio dell'azione'.
Se guardate viene impostato un nuovo itinerario e la loco inizia a muoversi prima che siano passati i 4 secondi del timer dell'azione.
Ora direte: ma la locomotiva ha una azione che accende le luci quando riceve un comando di movimento. Ed in effetti il comando viene dato e ricevuto solo 'prima' che siano passati i 4 secondi del ritardo dell'azione che spegne le luci.
Riepilogando in sintesi succede questo:
1) La locmotiva attiva il sensore 'in'. Parte il conteggio dei 4 secondi di tempo di attesa nel blocco.
2) La locomtiova riceve il comado di velocità 0. Parte l'azione 'luci_off' ma con un ritardo di 4 secondi (nel frattempo tra il punto precedente e questo sono passati alcuni ms...)
3) passati 4 secondi Rocrail attiva un itinerario e invia il comando di velocità alla loco per farla muovere. Si attiva l'azione 'luci_on' sulla locmotiva
4) passano i 4 secondi del ritardo dell'azione 'luci_off' e l'azione viene eseguita. Le luci vengono spente anche se la locomotiva si muove.
Ora, se l'attesa nel blocco è superiore ai 4 secondi (diciamo 10) avremo questo effetto. La loco arriva nel blocco, si ferma e dopo 4 secondi spegne le luci. Dopo altri 6 secondi viene attivato un itienrario, la loco si muove e riaccende le luci.
Però non è che una loco quando si ferma in stazione spegne le luci...
Noi volgiamo che, quando muoviamo la locomotiva manualmente, le luci si accendano subito e si spengano dopo 4 secondi quando la fermiamo (usiamo la loco OBB), mentre se la locomotiva è in modalità automatica le luci devono restare accese quando la locomotiva si ferma nei blocchi.
Vediamo come possiamo ottenere questo risultato.
N.B questo è un esempio basato sulle azioni in uso. Si può ottenere lo stesso effetto con altri sistemi (azioni).
Andiamo nelle azioni della OBB: Aggiungiamo una condizione alla azione che spegne le luci: Diciamo che l'azione di spegnere le luci deve essere eseguita solamente se la locomotiva in questione è in modalità stop.
Ricordo ancora una volta che c'è differenza tra lo stop inteso come velocità = 0 e lo stop della mosalità di funzionamento.
Rocrail non usa lo 'stop' per dare il comando di velocità 0 ma lo 'still'. Qundi lo 'stop' indica che la locomotiva non è mossa automaticamente da Rocrail.
Con la condizione data ora le luci restano accese durante le attese nei blocchi (10 secondi di attesa in questo caso):
Quando la locomotiva si ferma per l'attesa nel blocco la sua modalità e 'wait'. Non viene messa in stop. Non essendo in stop l'azione non viene eseguita.
Il rovescio della medaglia è che le luci resteranno accese anche se mettiamo in 'stop' la locomotiva manuamente (ad esempio con un doppio click nel blocco di destinazione) come nel prossimo video. Però il comando manuale della locomotiva continua a funzionare (intendo accensione e spegnimento delle luci):
Perchè succede questo? Perchè quando arrestiamo una locomotiva (anche togliendo la modalità automatica a tutto il sistema) il comando di 'stop' viene inviato alle locomotive quando attivano il sensore 'enter' del blocco. Ricordo che se la locomotiva è in movimento e togliamo l'automazione questa comunque raggiungerà il blocco di destinazione.
Ma pur avendo ricevuto il comando di stop (in pratica Rocrail 'avverte' la locomotiva che quando si ferma al sensore 'in' dovra andare in modalità 'stop' la locomotiva non è in stop ma ancora in 'auto' ovvero in modalità automatica. Quando la locomotiva attiva il sensore 'in' viene dato il comando di velocità = 0 (still) ma la locomotiva non è ancora in 'stop', quindi l'azione viene ignorata perchè la condizione che abbiamo messo prevede che sia in modalità 'stop'.
Quindi anche se la nostra 'logica' di funzionamento ci dice che l'azione dovrebbe spegnere le luci, la 'logica' di funzionamento di Rocrail può differire da quanto ci aspettiamo.
Possiamo però ovviare a qusti problemi usando soluzioni più elaborate come l'uso delle variabili che vedremo nel prossimo esempio ma applicata ad altra situazione. Tanto è il concetto di uso che importa.
Per concludere con l'azione delle luci...
Quando la locomotiva inverte la direzione:
Comportamente del tutto normale. Siamo in condizione di locomotiva in 'stop' ma comandata manualmente. Le luci sono accese (nella direzione opposta).
La locomotiva si ferma perchè riceve il comando arresta (still). Parte l'aazione per spegnere le luci con i soliti 4 secondi di ritardo. Invertiamo la direzione di marcia ed ecco che le luci (che sono ancora accese perchè sono passati meno di 4 secondi) si accendo nel senso di direzione di marcia, per poi spegnersi perchè l'azione viene eseguita (4 secondi dal still).