Script Itinerari

222 views
Skip to first unread message

Fabio Canepa

unread,
May 5, 2023, 4:09:21 PM5/5/23
to Traindir3
ciao a tutti
sto cercando di capire cosa non funziona in questo script
in pratica soddisfando i requisiti dei segnali richiesti e avendo fermata a Genova Pontedecimo, viene comunque generato l'itinerario.
come mai? dove sbaglio?
grazie

OnEnter:
if Signal(179,59).aspect=green and Signal(189,59).aspect=yellow and Train.nextStop!'Genova Pontedecimo@2' and Train.nextStop!'Genova Pontedecimo@3' and Train.nextStop!'Genova Pontedecimo'
do itinerary 2-BOLZ
end
end
end

palmas...@gmail.com

unread,
May 6, 2023, 1:27:15 PM5/6/23
to Traindir3
Ciao, secondo me c'è un end in più :)

Fabio Canepa

unread,
May 6, 2023, 8:15:21 PM5/6/23
to Traindir3
ciao
c'era un espressione prima relativa ai segnali che non ho messo, ecco il perché c'è un end in più

Fabio Canepa

unread,
May 22, 2023, 4:08:48 PM5/22/23
to Traindir3
scrivo un altro posto per chiedere aiuto
in questa circostanza
screen.png
per i treni da destra verso Genova Nervi ho messo il seguente script che però non risulta funzionante per le prime 4 opzioni, l'ultima opzione, invece, viene eseguita regolarmente.
cosa, secondo voi, non funziona?

OnEnter:
if Signal(279,199).aspect=green and Train.direction=0 and Signal(324,208).aspect=yellow
if Train.nextStop='Bogliasco' and Train.nextStop='Genova Nervi@2'
do itinerary BOGL-2
end
if Train.nextStop!'Bogliasco' and Train.nextStop='Genova Nervi@2'
do itinerary BOGL-2
end
if Train.nextStop='Bogliasco' and Train.nextStop='Genova Nervi@3'
do itinerary BOGL-3
end
if Train.nextStop!'Bogliasco' and Train.nextStop='Genova Nervi@3'
do itinerary BOGL-3
end
if Train.nextStop!'Genova Nervi' and Train.nextStop!'Bogliasco'
do itinerary BOGL-3
end
end
end

Grazie

Fabio Canepa

unread,
May 25, 2023, 7:24:18 AM5/25/23
to Traindir3
a nessuno è capitata questa situazione?
grazie delle info

Fabio Canepa

unread,
May 26, 2023, 6:03:21 PM5/26/23
to Traindir3
Buonasera
sto facendo altri test con uno scenario di prova e vedo che proprio gli script "nextStation" oppure "nextStop"applicati al binario non fanno attivare nulla.
Avete riscontrato altre anomalie?
grazie

Giampiero Caprino

unread,
May 27, 2023, 12:24:10 PM5/27/23
to trai...@googlegroups.com
Ciao Fabio,
   infatti, nextStation non puo' essere associato ai binari, ma solo ai treni e ai segnali,
come indicato nella pagina degli scritti:
Se vuoi associarlo ad un binario, prova Train.nextStation invece che semplicemente .nextStation.
(significa la nextStation associata al treno che passa su quel binario).

Ciao,
Giampiero Caprino


--
Se non desideri piú essere abbonato a questo gruppo, invia un messaggio a traindir3+...@googlegroups.com
Per ulteriori opzioni, visita il gruppo alla pagina http://groups.google.com/group/traindir3?hl=it
---
You received this message because you are subscribed to the Google Groups "Traindir3" group.
To unsubscribe from this group and stop receiving emails from it, send an email to traindir3+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/traindir3/93df8820-8631-4967-8ee8-50547c92a16dn%40googlegroups.com.

Giampiero Caprino

unread,
May 27, 2023, 12:27:48 PM5/27/23
to trai...@googlegroups.com
Oppure vuoi dire che anche Train.nextStation non viene eseguita
se e' in uno script OnEnter associato ad un binario?
Pero' hai detto che la quinta opzione funziona correttamente,

if Train.nextStop!'Genova Nervi' and Train.nextStop!'Bogliasco'
do itinerary BOGL-3
end

e nel tuo script non vedo niente di anomalo, quindi anche le
prime 4 opzioni dovrebbero funzionare.
Magari mandami scenario e .sav in privato cosi' lo debuggo.

Ciao,
Giampiero Caprino

Guido 42

unread,
May 27, 2023, 1:16:10 PM5/27/23
to Traindir3
Salve a tutti.
Dalle mie prove Train.nextStop (o Train.next.Station o Train.type) funzionano regolarmente.
Dal tracciato di Fabio mi sembra che lo script di binario sia posto prima della stazione di Bogliasco per cui viene prima la stazione di Bogliasco e come seconda la stazione di Nervi.
La condizione:
if Train.nextStop='Bogliasco' and Train.nextStop='Genova Nervi@3'
non sarà mai verificata perchè Train.nextStop esamina sempre e solo la prima stazione in orario che è sempre Bogliasco.
Una soluzione otrebbe essere:
if Train.nextStop=Bogliasco and Train.next.nextStop=Nervi@3,
ma dalle mie prove Train.next.nextStop non funziona, non è accettato.
Buon lavoro
Guido

Luca Mazzucco

unread,
May 28, 2023, 2:43:51 AM5/28/23
to Traindir3
Credo ci siano degli errori logici

Esempio:

if Train.nextStop='Bogliasco' and Train.nextStop='Genova Nervi@3'

Questa condizione non si verificherà mai, scritta così con "and" un treno non può avere come prossima fermata sia Bogliasco che nervi.
Ci vuole un "or" oppure condizioni diverse

Fabio Canepa

unread,
May 28, 2023, 7:23:35 PM5/28/23
to Traindir3
ciao a tutti e grazie delle info.
sul discorso Train.next.nextStop ho provato anche io ma non funziona.
Giampiero, posso chiederti un esempio? non ho ben capito lo script che mi suggerisci
grazie

Fabio Canepa

unread,
May 30, 2023, 5:10:42 AM5/30/23
to Traindir3
Aggiungo un test fatto ieri:

in questo script inserito prima della fermata di Pontetto:

screen.png

"if Train.nextStop!'Genova Nervi' and Train.nextStop!'Bogliasco'
do itinerary BOGL-3
end"

non funziona

Sembrerebbe corretto invece in questo modo:
"if Train.nextStop!'Genova Nervi' and Train.nextStop!'Bogliasco'  and Train.nextStop!'Pontetto'
do itinerary BOGL-3
end"

però mi viene il dubbio: non è che legge solo l'ultima frase "and Train.nextStop!'Pontetto'"?
Giampiero, non dovrebbe funzionare comunque il testo riportato sopra?
grazie delle info

Giampiero Caprino

unread,
Jun 1, 2023, 1:08:10 AM6/1/23
to trai...@googlegroups.com
Ciao Fabio.
Tutti i test che indichi sono formalmente corretti.
La questione e' se hanno senso dal punto di vista logico.
Se i test sono eseguiti prima della stazione di Pontetto per i treni in direzione Genova,
allora testare solo 'Genova Nervi' e 'Bogliasco' porta ad ignorare tutti i treni che fermano
a Pontetto (perche' per quei treni Train.nextStop e' uguale a 'Pontetto').
Cioe' l'itinerario si aprira' solo per i treni che transitano da Pontetto e non per quelli che hanno fermata.
Per questo sospetto che dici che "funziona" quando testi per tutte 3 le stazioni.

Come ho detto in precedenza, senza avere lo scenario e l'orario dei treni
e' un po' difficile capire esattamente dov'e' l'inghippo.

Ciao,
Giampiero Caprino


Fabio Canepa

unread,
Jun 2, 2023, 7:57:44 AM6/2/23
to Traindir3
ciao Giampiero
ti allego un tracciato prova che utilizzo per gli script dove troverai analoghe condizioni.
ciao
Fabio
Prova.rar

Giampiero Caprino

unread,
Jun 3, 2023, 11:29:15 PM6/3/23
to trai...@googlegroups.com
Ciao Fabio.
Il tracciato di prova che hai mandato usa dei test diversi da quelli che avevi indicato precedentemente,
e nello specifico, non possono funzionare per i seguenti motivi:
- non si puo' usare "Train.next.nextStop".  La notazione ".next." funziona solo per segnali, per far si che
il programma "guardi" al di la' del blocco protetto dal prossimo segnale. Non e' possibile testare il valore
della stazione oltre la prossima fermata. Quindi se un treno deve ancora fermare a Pietra, non potrai mai
testare se ferma anche a Isola o Ronco.
- se anche fosse possibile usare ".next." per le fermate la logica e' comunque sbagliata. La fermata dopo
la prossima (.next.nextStop) non puo' essere contemporaneamente Isola e Ronco (sullo script 1).
- la stessa logica errata e' usata nello script 2: Train.nextStop='Pietra' and Train.nextStop='Isola' non potra'
mai essere verificata, perche' il .nextStop non puo' essere contemporaneamente Pietra e Isola.
- allo stesso modo, lo script 3 non puo' funzionare perche' usa Train.next.nextStop, che come ho detto
sopra non e' valido per i treni.
Questo comportamento e' stato correttamente indicato da Guido 42 (che pero' puo' averti confuso con la riga:
> Dalle mie prove Train.nextStop (o Train.next.Station o Train.type) funzionano regolarmente.
nella quale Guido indica Train.next.Station, che e' sbagliato. Gli e' scappato un . di troppo. Train.nextStation
e' la corretta notazione.)

Ammetto che l'utilizzo degli scritti richiede una attenzione certosina a particolari minuscoli, come un
punto . al posto sbagliato, ma questa e' la natura di tutti i tipi di programmazione. Forse quando
sara' possibile integrare ChatGPT con Train Director allora gli si potra' chiedere di scrivere tutte queste
condizioni in linguaggio comune. Per adesso bisogna avere pazienza e controllare minuziosamente
la sintassi usata.

Ciao,
Giampiero Caprino


Fabio Canepa

unread,
Jun 4, 2023, 12:19:12 PM6/4/23
to Traindir3
ciao Giampiero
grazie delle info.
Train.nextStop funziona solo per una stazione prossima, non funziona se c'è una concatenazione di stazioni.
A tal proposito, ti riallego lo scenario di prima con gli stessi script del caso di Nervi che avevo postato.

Inoltre, mi date un suggerimento?
devo far fare in automatico l'itinerario da un segnale di partenza quando l'icona del treno diventa verde come in questo caso:
Immagine 2023-06-04 181745.png
potete aiutarmi?
grazie a tutti

Prova 2.rar

Guido 42

unread,
Jun 4, 2023, 12:32:19 PM6/4/23
to Traindir3

Ciao Fabio,

ho letto il post di Giampiero e scusami per il "punto" che proprio mi è scappato.

Tornando a quanto tu hai scritto, mi sembra di capire che lo scopo di inserire 3 script prima di Ronco sia quello di aprire per tempo l’itinerario IC-2 per quei treni che fermano a Pietrabissara e/o a Isola.

Se l’obiettivo è questo, sarebbe sufficiente:

script 2: if Train.nextStop='Pietra' or Train.nextStop='Isola'

Gli script 1 e 3 a mio giudizio sono ridondanti.

Non è necessario mettere il controllo dell’aspetto del semaforo di protezione di Ronco perché se l’itinerario IC-2 è già attivo rimane attivo. Inoltre non è sufficiente, perché un itinerario si attivi, che il segnale di inizio itinerario sia a via impedita: infatti se un treno è fermo al binario 2 di Ronco il semaforo di protezione è rosso, ma l’itinerario è occupato e non si attiva lasciandoti poi la manovra a mano.

Per i treni che non fermano né a Pietra né a Isola ma comunque sul binario 2 di Ronco, potresti aggiungere allo script la verifica della condizione:
or Train.nextStop='Ronco@2'
mettendo in orario l'indicazione del binario @2.

Inoltre se quello descritto è un comportamento costante per tutti i treni di tipo 2, come quello che hai pubblicato, potresti sostituire il controllo degli script da Train.nextStop a:

if Train.type=1.

1 e non 2 perché la numerazione di type negli script parte da 0.

Rimane da gestire l’attivazione di IC-2 per i treni che non fermano a Ronco, ma transitano per il binario 2. Potresti sempre inserire nello script 2 alla fine:

or Train.exit=AL or Train.exit=MI

Se i tentativi di attivare IC-2 vanno a vuoto perché Ronco@2 è occupato il treno potrebbe trovare il segnale di protezione di Ronco a via impedita. Due le soluzioni: manuale o automatica.

Quella manuale è semplice: attivi tu l’itinerario quando è possibile.

Per rendere questa manovra automatica dovresti inserire nell’orario di ogni treno che ferma a o transita da Ronco@2:

Script:
   OnWaiting:
     if Track(77,17).busy=1
       do itinerary IC-2
     end
   end
EndScript

Questa soluzione ha un difetto e cioè la OnWaiting è testata in continuazione (anche quando il treno si ferma ad un qualsiasi segnale lungo il suo percorso) fintanto che non si presenta la possibilità di attivare l'itinerario con il rischio che, se lo scenario è complesso, la simulazione venga rallentata.

Ti resta poi da decidere come gestire in contemporanea le fermate a Ronco@1.

Spero di non aver fatto errori e che un qualche suggerimento, anche se non richiesto, ti possa essere utile.

Buon lavoro, Guido

Fabio Canepa

unread,
Jun 5, 2023, 3:03:18 AM6/5/23
to Traindir3
ciao Guido, figurati e grazie anche a te delle info preziose sugli script.
riguardo a quanto mi segnali ti rispondo sotto:

Tornando a quanto tu hai scritto, mi sembra di capire che lo scopo di inserire 3 script prima di Ronco sia quello di aprire per tempo l’itinerario IC-2 per quei treni che fermano a Pietrabissara e/o a Isola.

Se l’obiettivo è questo, sarebbe sufficiente:

script 2: if Train.nextStop='Pietra' or Train.nextStop='Isola'

Gli script 1 e 3 a mio giudizio sono ridondanti.


Di per se, le fermate Pietra e Isola non mi interessano.
Mi interessa, invece, la fermata di Ronco ma ho bisogno di creare l'itinerario di arrivo prima, ecco il motivo per cui ho inserito nella stringa dello script Pietra e Isola.
Non so se hai visto lo scenario dell'ultimo allegato "Prova 2", lo script senza la fermata prossima ma con solo le fermate a valle non funziona.

Non è necessario mettere il controllo dell’aspetto del semaforo di protezione di Ronco perché se l’itinerario IC-2 è già attivo rimane attivo. Inoltre non è sufficiente, perché un itinerario si attivi, che il segnale di inizio itinerario sia a via impedita: infatti se un treno è fermo al binario 2 di Ronco il semaforo di protezione è rosso, ma l’itinerario è occupato e non si attiva lasciandoti poi la manovra a mano.

è vero, in questo caso non serve, ma sullo scenario che sto creando mi serve in quanto ci potrebbero essere più treni uno dietro l'altro. Certo, la condizione del segnale di protezione è ininfluente rispetto a quelli di linea, ma era per mettere nello script anche un segnale.

Per i treni che non fermano né a Pietra né a Isola ma comunque sul binario 2 di Ronco, potresti aggiungere allo script la verifica della condizione:
or Train.nextStop='Ronco@2' mettendo in orario l'indicazione del binario @2.


questo l'ho fatto ma, con le fermate di Isola e Pietra e posizionando lo script qualche segnale prima, non me lo fa.
sul tipo treno non posso farlo: alcuni treni dello scenario di tipo X hanno la fermata su un binario e altri su un altro binario.

sull'"Onwaiting", quindi non andrebbe bene per il caso che ho segnalato prima (treno in partenza con icona verde), corretto?

grazie mille a tutti
Fabio

Guido 42

unread,
Jun 5, 2023, 9:52:43 AM6/5/23
to Traindir3
Ciao Fabio,
non ho trovato soluzioni per rendere automatica la partenza di un treno in attesa di partire da una stazione, come nel tuo esempio.
Le azioni OnStop e OnStopped si attivano solo nel momento in cui il treno si arresta
L'azione OnWaiting si attiva solo se la testa del treno occupa la sezione di binario immediatamente precedente il segnale a via impedita ed è "in movimento", almeno così mi sembra di aver verificato.
Forse Giampiero o qualcuno del gruppo ha già affrontato oil problema ed anche risolto.
Buon lavoro,
Guido

Giampiero Caprino

unread,
Jun 5, 2023, 11:36:57 PM6/5/23
to trai...@googlegroups.com
Ciao Fabio,

> Mi interessa, invece, la fermata di Ronco ma ho bisogno di creare l'itinerario di arrivo prima, ecco il motivo per cui ho inserito nella stringa dello script Pietra e Isola.

Per questo potresti utilizzare una delle funzioni di Train Director: l'apertura automatica degli itinerari *senza scritti*.
La abiliti nel dialogo delle preferenze:

image.png

Quando questa funzione e' abilitata, il programma cerca di aprire un itinerario se il punto di arresto
successivo del treno e' un segnale rosso, ed esiste un itinerario che conduce dal segnale alla
stazione successiva.
Prova ad aprire l'esempio chiamato "autoitin.trk" nella cartella "Examples" del pacchetto di Train Director.

L'unica accortezza e' che se i punti di stazione hanno nomi diversi per i vari binari (es. Ronco@2)
anche la fermata specificata nell'orario del treno deve avere l'indicazione del binario.
Quindi entrambi i nomi devono essere o "Ronco" o "Ronco@2" altrimenti la funzione viene ignorata.

Nel tuo caso la funzione verrebbe attivata dopo che il treno e' partito da Isola, ed il segnale di
protezione di Ronco e' ancora rosso. Se il segnale e' verde (perche' l'hai messo tu a mano)
la funzione non fa nulla.  Anche nel caso che l'itinerario non possa essere aperto, per esempio
perche' c'e' un treno sul binario di arrivo o un altro itinerario blocca il percorso dal segnale di
protezione alla stazione.
In tutti questi casi non sono conteggiate penalita'.

La funzione non e' perfetta, ma dovrebbe risolvere molti dei tuoi problemi.

Ciao,
Giampiero Caprino




Guido 42

unread,
Jun 6, 2023, 4:23:24 AM6/6/23
to Traindir3
Grazie Giampiero,
mi ero completamente dimenticato di questa funzione.
Solo due osservazioni a margine:
la prima è che non si comporta come un OnWaiting e cioè se non lo apre la prima volta perchè l'iterario è occupato non ritenta l'apertura fino a che l'itinerario non è libero (immagino per non appensantire l'elaborazione in scenari complessi),
la seconda è che non tenta l'apertura, anche se l'itinerario è libero, se il treno è fermo ad un segnale dichiarato di partenza.
Ma credo che vada bene così com'è perchè nella realtà questi automatismi non credo che esistano.
Ne approfitto per una richiesta. E' possibile realizzare un comando del tipo "do itineraryShunt" visto che la procedura di apertura di un itinerario in shunt è già presente tramite pulsante usando ctrl-I e i pulsanti di itinerario direttamente o tramite "do ctrlclick" ? Ma anche questo non è essenziale.
Grazie per il lavoro che fai.
Guido

Fabio Canepa

unread,
Jun 7, 2023, 3:17:32 AM6/7/23
to Traindir3
ciao Giampiero

provo, faccio qualche test e vi aggiorno su questa funzione che non sapevo.
grazie a tutti

Reply all
Reply to author
Forward
0 new messages