TFO - Oggetti che si muovono sulle rotaie

Sezione dedicata esclusivamente ai simulatori ferroviari BVE e OPENBVE

Messaggioda GianP » 11/06/2026, 19:34

Nuova discussione con argomento:

TFO - Track Following Object - Oggetti (ad animazione comandata) che seguono le rotaie.
Questa funzionalita' e' presente da alcuni anni ma non molto utilizzata nelle (poche) nuove "routes"(*).

Qui :arrow: la documentazione ufficiale
Un "simpatico" esempio di realizzazione e' nella discussione "Vigezzina" (link nel 3° intervento) ove due treni si incrociano a Masera.
Un treno e' quello dell'utente mentre l'altro e' sotto controllo dell' intelligenza artificiale (AI .... uuhhh, che argomento di moda oggi!)

(*)Qui :arrow: c'e' un semplice uso di TFO (incrocio su binario parallelo).


Quali sono gli elementi necessari per avere il TFO?

1) Un richiamo della funzionalita' nel "route namespace"
Codice: Seleziona tutto
With Route,
.. (altro)
..
    .TFOXML(..\..\Other\TFO\RhB_freight_reverse.xml)
..
.. (altro)

Nel mio caso ho scelto di inserire tutto cio' che riguarda il TFO nella cartella "Other" che affianca le cartelle Railway, Sound e Train e che, solitamente, e' vuota.
Se si preferisce avere il TFO altrove e' necessario gestire l'indirizzamento della cartella.

In seguito vedremo cosa contengono il file che "comanda" l'oggetto e le particolarita' di un "treno TFO"

.... cont
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda GianP » 11/06/2026, 19:40

Ora, a pezzetti, vediamo cosa contiene il file che "comanda" l'oggetto.
Ci sono i commenti originali che, forse, ho reso un po' piu' comprensibili(sic!)

Codice: Seleziona tutto
<?xml version="1.0" encoding="utf-8"?>
<openBVE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TrackFollowingObject>

   <Definition>
      <!-- Daytime when the object appears [hh.mmss] or ...  -->
      <AppearanceTime>12.2320</AppearanceTime>
      <!-- ... or the player train distance (point) at which the object appears [m] -->
      <AppearanceStartPosition>0</AppearanceStartPosition>
      <!-- The player train distance (point) at which the object dis-appears [m] -->
      <AppearanceEndPosition>8100</AppearanceEndPosition>
      <!-- The duration for which the object is alive [hh.mmss] -->
      <LeaveTime>00.3000</LeaveTime>
    </Definition>

   <Train>
      <Directory>.\Ge4-4_Rhb-rev</Directory>      <!-- Relative path of Train folder -->
      <Reversed>0</Reversed>
    </Train>


La sezione Definition indica che:
1) L'oggetto appare alle 12:23:20 - quindi prima dell'arrivo alla stazione di partenza del treno utente (che e' l'inizio simulazione)
Perche' questa scelta?
Nel caricare il treno TFO il sim ha un impuntamento. Se e' caricato subito all'inizio si allunga un po' l'attesa, ma se l'utente e' gia' in movimento il breve fermo da fastidio (paranoia personale!)

2) In alternativa si puo' far caricare l'oggetto (treno) quando l'utente e' a una specifica distanza da dove il treno TFO comincia ad agire - qui e' a zero. Alternativa da non usare per evitare il breve fermo appena citato.

3) La distanza dall'utente a cui il treno/oggetto TFO viene fatto sparire/scaricato
Al momento scomparirebbe a 8100 metri dall'utente. Siccome la Vigezzina attuale e' meno di 8000m .... resta dove arriva "ad libitum".

4) Pero', comunque, scompare dopo 30 minuti di simulazione.


La sezione Train indica la cartella che contiene il treno. Gestendo l'indirizzamento puo' essere ovunque.
In questo caso e' la sottocartella .. Other\TFO\Ge4-4_Rhb-rev
Il parametro "reversed" indica se il treno deve essere "girato di 180°"
Io l'ho "costruito" gia' girato e, tra l'altro, mi pare di ricordare che questo paramentro non funziona correttamente.

... cont
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda GianP » 11/06/2026, 19:49

Passiamo ora ai "movimenti" che sono nella maxi-sezione "Stops"
Mi sono "divertito" a rispettare le velocita' della linea e, quindi, la sezione e' piuttosto complessa!
La mappa della linea nella discussione "Vigezzina" puo' aiutare.
Ogni istruzione e' commentata (commento quasi originale).

Essendo a binario singolo il treno TFO inizia sul binario 0 e comincia stando fermo 3min 59sec.
Perche' questo tempo strano?
Il TFO (AI) tra i vari punti "Stop" e "Point" (che sono transiti) lavora su velocita'/accel/decelerazioni e NON sul tempo. Quindi, con vari tentativi, bisogna capire quanto deve stare fermo all'inizio (Creggio) per poi scendere a Masera arrivando subito dopo l'arrivo dell'utente.
Codice: Seleziona tutto
    <Stops>
   <Stop>      <!-- Starting point - Creggio 12:27:19 -->
      <Rail>0</Rail>               <!-- Traveling track -->
      <StopPosition>05466</StopPosition>      <!-- In-game distance of stop position[m] -->
      <StopTime>00.0359</StopTime>         <!-- Time to keep stopping[hh.mmss] -->
      <TargetSpeed>20</TargetSpeed>      <!-- Speed after acceleration[km/h] -->
      <Accelerate>1.01</Accelerate>      <!-- Acceleration[km/h/s] -->
      <Decelerate>0</Decelerate>         <!-- Deceleration[km/h/s] -->
      <Doors>N</Doors>               <!-- Door that open at this point (None) -->
      <Direction>-1</Direction>         <!-- Progress direction [1: fwd, -1: bwd] -->
    </Stop>
   <Point>      <!-- Set to run the turnback at 25 Km/h -->
      <Rail>0</Rail>
      <Position>005350</Position>
      <PassingSpeed>20</PassingSpeed>
       <TargetSpeed>25</TargetSpeed>
      <Accelerate>1.01</Accelerate>
      <Decelerate>0</Decelerate>
    </Point>   


Cosa notiamo qui sopra (1a sez. stop)
La direzione e' contraria al senso "normale" di marcia della route (-1) e non apre le porte (e' un merci!)
Vuole raggiungere 20Km/h accelerando a 1.01 Km/h/sec

La sez. Point:
Alla progressiva 5350 passa a 20Km/h continuando ad accelerare fino a un max di 25Km/h


Evito tutte le accelerazioni e decelerazioni su curve e tornanti e vediamo cosa succede a Masera, dove deve fermare, pero' passando sul bin 1, visto che sul bin 0 c'e' l'utente! (se si scontrassero .... passerebbero indenni uno attraverso l'altro!)

Le deviate sulla Vigezzina sono a 15 Km/h. Quindi c'e' una prima frenata da 27 a 20Km/h
Poi un'altra frenata per arrivare a 15 Km/h MA, contemporaneamente, passare dal bin 0 al bin 1.
Per funzionare bene il bin 1 DEVE essere sovrapposto al bin 0 per almeno 25m prima del deviatoio (dopo il deviatoio considerato il senso normale di marcia)
Codice: Seleziona tutto
   <Point>      <!-- Set to slowdown before switch at 20 Km/h -->
      <Rail>0</Rail>
      <Position>003725</Position>
      <PassingSpeed>27</PassingSpeed>
       <TargetSpeed>20</TargetSpeed>
      <Decelerate>1.50</Decelerate>
      <Accelerate>0.00</Accelerate>
    </Point>   
   <Point>      <!-- Switch to rail 1 at 15 Km/h -->
      <Rail>1</Rail>
      <Position>003700</Position>
      <PassingSpeed>20</PassingSpeed>
       <TargetSpeed>15</TargetSpeed>
      <Decelerate>1.60</Decelerate>
      <Accelerate>0.00</Accelerate>
    </Point>


Indi c'e' una breve fermata a Masera e ripartenza.
Da osservare che, per fermare, ci sono Decelerazione e Accelerazione insieme.
Codice: Seleziona tutto
   <Stop>      <!-- Masera 12:31:44 * 31:55-->
      <Rail>1</Rail>               <!-- Traveling track -->
      <StopPosition>03633</StopPosition>      <!-- In-game distance of stop position[m] -->
      <StopTime>00.0011</StopTime>         <!-- Time to keep stopping[hh.mmss] -->
      <TargetSpeed>15</TargetSpeed>      <!-- Speed after acceleration[km/h] -->
      <Accelerate>1.01</Accelerate>      <!-- Acceleration[km/h/s] -->
      <Decelerate>1.10</Decelerate>      <!-- Deceleration[km/h/s] -->
      <Doors>N</Doors>               <!-- Door that open at this point (None) -->
      <Direction>-1</Direction>         <!-- Progress direction [1: fwd, -1: bwd] -->
    </Stop>
   <Point>      <!-- Set to run on main at 34 Km/h -->
      <Rail>0</Rail>
      <Position>003550</Position>
      <PassingSpeed>15</PassingSpeed>
       <TargetSpeed>34</TargetSpeed>
      <Accelerate>1.45</Accelerate>
      <Decelerate>0</Decelerate>
    </Point>
...
...

  </TrackFollowingObject>
</openBVE>

Una volta ripartito, dopo il deviatoio, bin 1 deve essere sovrapposto almeno per 25m al bin 0 (quindi PRIMA del deviatoio considerando il normale senso di marcia)

In arrivo a Domo-Vigezzina c'e' il medesimo meccanismo di sovrapposizione binari per concludere sul binario subito a destra di quello 0 della route.

... cont
Ultima modifica di GianP il 11/06/2026, 20:00, modificato 1 volta in totale.
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda GianP » 11/06/2026, 19:56

Una prima considerazione sul movimento:
Mentre quando il treno TFO viaggia sul bin 0 la distanza tra i punti e' infinitesimale (calcolata in modo che il treno segua perfettamente il binario) i punti del bin 1 sono conosciuti solo ogni 25m.
Questo fa si che, nelle curve con variazione di distanza tra bin 0 e 1, il treno TFO cambi direzione in modo istantaneo verso il punto successivo.
Cio' si osserva bene quando il treno TFO arriva a Masera.
Sul deviatoio, ove la distanza tra bin 0 e 1 aumenta tra inizio e fine, si nota il repentino ruotare del treno. (un elemento alla volta)
Inoltre la rotaia curva divergente non viene seguita ma tagliata. E su raggi di curvatura stretti si nota!


Un treno TFO - particolarita'

1) Tutta la parte relativa al "panel" puo' mancare.
2) Mi pare che una copia del file "train.dat" rinominata "train.ai" (nella medesima cartella) aiuta per un miglior funzionamento. (o puo' sostituire train.dat?)
3) Se il senso di marcia e' il medesimo del treno utente il treno TFO puo' essere un treno "normale".
4) Se il senso di marcia e' opposto e il parametro "Reversed" visto precedentemente e' "0" la numerazione dei "Car" nel file Extensions.cfg deve essere rovesciata.
Nel caso del merci RhB sulla Vigezzina(!) il locomotore e' [Car2] con Bogie4 e 5 e il carro merci finale e' [Car0] con Bogie0 e 1.

Ho provato con le usuali definizioni nel file Extensions.cfg e col parametro "Reversed" a "1" ma ricordo che non funzionava correttamente.
Il parametro "Reversed" e' un'aggiunta relativamente recente, nella prima versione TFO non c'era.

Per ora ..... stop.

cheers
GP
Ultima modifica di GianP il 11/06/2026, 20:34, modificato 1 volta in totale.
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda tof63 » 11/06/2026, 20:07

Grazie ! :D
Luigi Cartello
tof63 Non connesso

Avatar utente
 
Messaggi: 44
Iscritto il: 19/04/2015, 12:11
Località: Torino

Messaggioda fas » 12/06/2026, 13:07

Grazie GianP!
Ad essere onesto pensavo che la simulazione di questi oggetti fosse molto più semplice, però non mancherò di studiare e fare un po' di prove per implementarli anche sulla Genova. :ugeek:
fas Non connesso

Avatar utente
 
Messaggi: 2165
Iscritto il: 23/12/2011, 16:28

Messaggioda fas » 23/06/2026, 22:41

Ipotizziamo che io voglia inserire un TFO (Train\Aln501v2) sul rail 1, che alle 9:15 parte dalla progressiva 36+650 (in direzione avanti), accelerando fino alla velocità di 50 km\h.
Questo è il codice che ho scritto:
Codice: Seleziona tutto
<?xml version="1.0" encoding="utf-8"?>
<openBVE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TrackFollowingObject>
    <Definition>
      <!--Time when the object appears[hh.mmss]-->
      <AppearanceTime>09.1500</AppearanceTime>
    </Definition>
    <Train>
      <!--Relative path of Train folder-->
      <Directory>Aln501v2</Directory>
    </Train>
    <Stops>
      <Stop>
 <StopPosition>36650</StopPosition>      <!-- In-game distance of stop position[m] -->
        <!--Acceleration[km/h/s]-->
        <Accelerate>1.71</Accelerate>
        <!--Speed after acceleration[km/h]-->
        <TargetSpeed>50</TargetSpeed>
        <!--Progress direction [1: forward, -1: backward]-->
        <Direction>1</Direction>
        <!--Traveling track-->
        <Rail>1</Rail>
      </Stop>
    </Stops>
  </TrackFollowingObject>
</openBVE>


Aprendo la route con OBVE non mi appare alcun errore, ma non c'è neanche traccia del TFO.
Dove sto sbagliando?
fas Non connesso

Avatar utente
 
Messaggi: 2165
Iscritto il: 23/12/2011, 16:28

Messaggioda GianP » 24/06/2026, 15:43

Buondi'
Beh, come minimo devi dirgli dove deve andare, quindi serve un punto dove fermarsi, ovvero un secondo stop.
Inoltre credo che i parametri nella sezione "definition" ci vogliano tutti (quando appare+scompare e quanto "vive")
Poi, come prima prova, mettilo abbastanza vicino al tuo treno.
Per finire. ricorda che TFO non funziona nel routeviewer ma solo nel sim.

GP

ps: non sono a casa, e ho un piccolo portatile.
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda GianP » 24/06/2026, 19:33

Questo funziona. (io l'ho battezzato "GE_TFO.xml)
Da mettere assieme al regionale R21047 e aggiungere nella sezione "with route"
.TFOXML(GE_TFO.xml)

Nota: non ricordo se, a suo tempo, ho allungato la stazione di Brignole. Potrebbe essere necessario modificare le due posizioni.

Codice: Seleziona tutto
<?xml version="1.0" encoding="utf-8"?>
<openBVE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TrackFollowingObject>

   <Definition>
      <!-- Daytime when the object appears [hh.mmss] or ...  -->
      <AppearanceTime>13.3325</AppearanceTime>
      <!-- ... or the player train distance (point) at which the object appears [m] -->
      <AppearanceStartPosition>0</AppearanceStartPosition>
      <!-- The player train distance (point) at which the object dis-appears [m] -->
      <AppearanceEndPosition>9999</AppearanceEndPosition>
      <!-- The duration for which the object is alive [hh.mmss] -->
      <LeaveTime>00.3000</LeaveTime>
    </Definition>

   <Train>
      <Directory>Aln501v2</Directory>      <!-- Relative path of Train folder -->
      <Reversed>0</Reversed>
    </Train>

    <Stops>
   <Stop>      <!-- Starting point -->
      <Rail>1</Rail>               <!-- Traveling track -->
      <StopPosition>01400</StopPosition>      <!-- In-game distance of stop position[m] -->
      <StopTime>00.0030</StopTime>         <!-- Time to keep stopping[hh.mmss] -->
      <TargetSpeed>40</TargetSpeed>      <!-- Speed after acceleration[km/h] -->
      <Accelerate>1.21</Accelerate>      <!-- Acceleration[km/h/s] -->
      <Decelerate>0</Decelerate>         <!-- Deceleration[km/h/s] -->
      <Doors>N</Doors>               <!-- Door that open at this point (None) -->
      <Direction>1</Direction>         <!-- Progress direction [1: fwd, -1: bwd] -->
    </Stop>

   <Stop>      <!-- Arrival point -->
      <Rail>1</Rail>               <!-- Traveling track -->
      <StopPosition>01999</StopPosition>      <!-- In-game distance of stop position[m] -->
      <StopTime>00.1030</StopTime>         <!-- Time to keep stopping[hh.mmss] -->
      <TargetSpeed>00</TargetSpeed>      <!-- Speed after acceleration[km/h] -->
      <Accelerate>0</Accelerate>      <!-- Acceleration[km/h/s] -->
      <Decelerate>1.50</Decelerate>         <!-- Deceleration[km/h/s] -->
      <Doors>N</Doors>               <!-- Door that open at this point (None) -->
      <Direction>1</Direction>         <!-- Progress direction [1: fwd, -1: bwd] -->
    </Stop>
       </Stops>
      </TrackFollowingObject>
    </openBVE>
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda GianP » 29/06/2026, 18:43

Nella descrizione iniziale ho dimenticato ...
... con TFO e' anche possibile sostituire il "classico" preceeding train (istruzioni .Interval e .Velocity)
Qual'e' il vantaggio di usare TFO invece del "classico" per comandare i segnali (occupare/liberare le sezioni davanti al treno utente)
Il vantaggio e' che si puo' usare un treno "leggero" per il computer, quando il treno utente e' complesso e "pesante".
Unico avvertimento .... se il treno utente e' un Frecciarossa 1000 non farlo precedere da un Aln773. Difatti vengono usate le prestazioni di ogni treno e il 773 andrebbe subito in ritardo, ritardando l'apertura dei segnali!

Qui un esempio (vigezzina)

Codice: Seleziona tutto
<?xml version="1.0" encoding="utf-8"?>
<openBVE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TrackFollowingObject>

     <RunInterval>436.00</RunInterval>
   <Train>
      <Directory>.\Ge4-4_Rhb_EW_III</Directory>      <!-- Relative path of Train folder -->
    </Train>

  </TrackFollowingObject>
</openBVE>

Al solito, nella sezione "With Route" aggiungere il nome del file qui sopra, es:

.TFOXML(RhB_PreTrain_f.xml)
.
.
GianP Non connesso

Avatar utente
 
Messaggi: 42
Iscritto il: 30/11/2024, 17:46

Messaggioda fas » 30/06/2026, 12:49

Grazie, ora mi è più chiara la configurazione del file .xml e sono riuscito a simulare i treni incrocianti.

Ora farò un po' di prove per simulare anche il traffico stradale.
Per il momento ho creato la strada utilizzando l'istruzione .rail e un treno composto da numerosi veicoli (costituiti dai 3d delle auto) e la soluzione sembra funzionare discretamente.
Biosognerà poi capire come configurare i due flussi di traffico (nella stessa direzione del treno e, soprattutto, nella direzione opposta), in modo che dal treno si veda la circolazione delle auto su una tratta lunga alcuni km.
fas Non connesso

Avatar utente
 
Messaggi: 2165
Iscritto il: 23/12/2011, 16:28


Torna a Simulazione ferroviaria (solo BVE - OPENBVE)

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti