Si propongono alcune soluzioni esemplificative dei temi che stiamo affrontando. Si tratta di casi semplici e in alcuni di essi ci siamo certamente imbattuti quando abbiamo iniziato a lavorare sui nostri plastici:
l'aspetto combinato dei segnali;
comando completo per deviatoio;
comandare un deviatoio triplo;
la racchetta;
il blocco automatico;
regolare la velocità in modo analogico per via digitale.
Nei favolosi anni '60, di particolarmente favoloso ci fu il boom del treno elettrico. Ogni bambino di allora lo desiderava. Le grandi marche di modelli producevano anche la manualistica necessaria per suggerire le soluzioni tecniche agli appassionati. Tra i tanti, prendiamo come spunto il manuale dei tracciati della Fleischmann, dove erano mostrate tante meraviglie disegnate a china con una qualità grafica fenomenale per quei tempi.
La Fleischmann produceva un tipo di deviatoio dal funzionamento impeccabile. L'elettromagnete che muoveva gli aghi era abbastanza grosso ed era collocato a lato del deviatoio stesso coperto da una scatoletta protettiva altrettanto voluminosa. I progettisti avevano escogitato anche un ingegnoso accorgimento. L'ancoretta muoveva oltre agli aghi anche una coppia di mollette connesse da una parte una alla rotaia interna, l'altra a quella esterna. All'altra estremità le mollette toccavano ciascuna, a seconda della posizione degli aghi, un contatto o l'altro di una coppia. Si collegava alla rotaia esterna, senza interruzioni, una fase dell'alimentazione alternata. Le interruzioni e i sezionamenti erano tutti per convenzione sul binario interno. Era così possibile comandare da questi contatti i segnali con interruzione dell'alimentazione per la tratta interessata. Lo schema che segue illustra una parte di un tracciato in cui si vedono bene i collegamenti adottati:

I contatti 1 e 2 sono collegati alla rotaia esterna, mentre il 3 e il 4 al quella interna. In questo modo era sufficiente muovere lo scambio per avere la linea corrispondente all'istradamento al verde, l'altra al rosso. Le connessioni ai contatti 3 e 4 dello schema vanno ad alimentare le tratte di interruzione dei due binari convergenti.
Tutto bene, ma i modellisti sono esigenti. Questo schema non prevede il rosso per entrambe le linee. Non prevede neanche il verde, ma questo è un caso impossibile. Avere tutti i segnali di partenza al rosso è invece la regola. Come fare?
Riferendosi a quanto detto nei capitoli precedenti, dovremmo separare l'idea di tratta alimentata dall'aspetto dei segnali. Per questo esempio invece si propone una soluzione che mantiene l'uso tradizionale, ma che lo migliora permettendo l'aspetto rosso di entrambi i segnali.

Escludendo il doppio verde che non ha senso, ci troviamo a dover gestire tre casi:
| SEZ 1 | SEZ 2 | SGN 1 | SGN 1 | DEV 1 | |
| riposo | APERTO | APERTO | ROSSO | ROSSO | NORMALE |
| verde al binario 1 | CHIUSO | APERTO | VERDE | ROSSO | DEVIATO |
| verde al binario 2 | APERTO | CHIUSO | ROSSO | VERDE | NORMALE |
Nell'esempio l'alimentazione della linea è analogica. I numeri in colore nello schema indicano gli indirizzi assegnati ai commutatori dei decoder. Il deviatoio è di tipo recente con il dispositivo di fine corsa. In questo modo i decoder sono tutti uguali. Nel caso invece di un deviatoio di vecchio tipo o di segnali con braccio meccanico dovremmo usare dei decoder a contatto di impulso.
I tre casi possibili si traducono in altrettante procedure software. Il comando 33 connette il centrale di ogni commutatore al contatto di sinistra (Left); il comando 34 il contatto di destra (Right):
Sub Riposo
'sez 1:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(1)
Me.MSComm1.Output = Chr$(32)
'sez 2:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(2)
Me.MSComm1.Output = Chr$(32)
'sgn 1:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(32)
'sgn 2:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(32)
'dev 1:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(6)
Me.MSComm1.Output = Chr$(32)
End Sub
Sub VerdeBinario1
'sez 1:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(1)
Me.MSComm1.Output = Chr$(32)
'sez 2:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(2)
Me.MSComm1.Output = Chr$(32)
'sgn 1:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(32)
'sgn 2:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(32)
'dev 1:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(6)
Me.MSComm1.Output = Chr$(32)
End Sub
Sub VerdeBinario2
'sez 1:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(1)
Me.MSComm1.Output = Chr$(32)
'sez 2:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(2)
Me.MSComm1.Output = Chr$(32)
'sgn 1:
Me.MSComm1.Output = Chr$(34)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(32)
'sgn 2:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(32)
'dev 1:
Me.MSComm1.Output = Chr$(33)
Me.MSComm1.Output = Chr$(6)
Me.MSComm1.Output = Chr$(32)
End Sub
Le procedure possono essere scritte anche in maniera più sintetica. Per esempio nel primo caso avremo:
Sub Riposo
With Me.MSComm1
'sez 1:
.Output = Chr$(33)
.Output = Chr$(1)
.Output = Chr$(32)
'sez 2:
.Output = Chr$(33)
.Output = Chr$(2)
.Output = Chr$(32)
'sgn 1:
.Output = Chr$(34)
.Output = Chr$(3)
.Output = Chr$(32)
'sgn 2:
.Output = Chr$(34)
.Output = Chr$(4)
.Output = Chr$(32)
'dev 1:
.Output = Chr$(33)
.Output = Chr$(6)
.Output = Chr$(32)
End with
End Sub
I valori 33 e 34 possono essere poco evocativi e possiamo impiegare al loro posto delle costanti indicative della posizione dei commutatori di riferimento; anche il comando 32, il terminatore può essere evocato con una costante:
Sub Riposo
Const Fine = 32
Const L = 33
Const R = 34
With Me.MSComm1
'sez 1:
.Output = Chr$(L)
.Output = Chr$(1)
.Output = Chr$(Fine)
'sez 2:
.Output = Chr$(L)
.Output = Chr$(2)
.Output = Chr$(Fine)
'sgn 1:
.Output = Chr$(R)
.Output = Chr$(3)
.Output = Chr$(Fine)
'sgn 2:
.Output = Chr$(R)
.Output = Chr$(4)
.Output = Chr$(Fine)
'dev 1:
.Output = Chr$(L)
.Output = Chr$(6)
.Output = Chr$(Fine)
End with
End Sub
Possiamo estendere le stesse modifiche alle altre due procedure. La sostanza rimane la stessa. Per completare il nostro procedimento occorre ora determinare chi manda in esecuzione i tre script appena definiti. Possiamo inserire nella nostra scheda di progetto tre bottoni (cmd1, cmd2 e cmd3) in corrispondenza di una figura sinottica che possiamo inserire nella scheda stessa tramite il controllo image:
Ad ogni bottone possiamo assegnare una delle tre procedure. Così al bottone di comando 1 possiamo evocare la nostra procedura di riposo:
Private Sub cmd1_Click
Call Riposo
End Sub
Potremmo anche inserire in un quadro a parte tre pulsanti e ad essi collegare i contatti di retroazione. Il software in questo caso non richiede l'uso delle form, ma è strettamente procedurale. Si veda l'esempio dello scambio triplo.
Come funzionano nella realtà i deviatoi? Gli aghi sono di acciaio più tenero rispetto alle rotaie e sono mossi da motori elettrici potenti. Quando l'operatore muove un deviatoio tramite gli apparati il motore entra in moto, un ronzio di controllo è trasmesso alla cabina degli apparati mentre il motore gira; al termine il ronzio si ferma e cambiano aspetto le spie indicative della posizione se tutto va bene. In caso contrario si attivano gli allarmi opportuni.
Cosa avviene nei nostri plastici? la gestione è molto più semplice, ma possiamo affinarla. Nel caso più elementare ci troviamo ad avere una coppia di pulsanti. Ognuno eccita una parte del relé bistabile muovendo alternativamente gli aghi nelle due possibili posizioni:

I deviatoi dell'ultima generazione sono dotati di fine corsa, pertanto non restano eccitati una volta terminato il movimento. In questo modo non si corre il rischio di bruciare gli avvolgimenti del solenoide. Possono essere allora comandati da un commutatore. Se esso ha altri contatti possiamo avere sul quadro le spie indicative della posizione assunta:

Sarebbe meglio averne almeno due alimentazioni alternate distinte, la prima deputata al movimento dei deviatoi e motori vari (power), la seconda destinata alle sole luci (light); in questo modo il sovraccarico dei motori non abbassa l'intensità delle luci:
Si può fare ancora di meglio; ci sono in commercio infatti motori a corrente continua (Bemo, Fulgurex, il famoso Tortoise della Circuitron, ecc...) da collocare sottoplancia che muovono lentamente gli aghi in modo realistico; inoltre tali motori, dotati anch'essi di fine corsa, hanno normalmente due coppie di contatti associati. Ad una di esse si collega di solito il cuore che risulta così polarizzato, il secondo commutatore può essere usato per indicare la posizione raggiunta dal deviatoio. Ci avviciniamo pertanto di molto alla realtà: le spie indicative si accendono solo al termine del movimento dei motori dando quindi non solo l'indicazione della posizione, ma anche un riscontro di movimento andato a buon fine:

Si noti il doppio deviatore impiegato ad alimentare il motore elettrico; infatti questi motori invertono la rotazione in corrispondenza dell'inversione di polarità. Un ponte raddrizzatore è collocato a monte. L'alimentazione power si occupa così di tutti i dispositivi in movimento, anche quelli in corrente continua. La polarizzazione del cuore ha il vantaggio di permettere movimenti di locomotive corte da manovra sul deviatoio, ma ha lo svantaggio di andare in corto se il deviatoio è tallonato.
Che vantaggi ci possono essere con l'adozione dell'alimentazione digitale in questo caso? Il vantaggio principale sta in una razionalizzazione del cablaggio. Per esempio, lo schema appena illustrato potrebbe essere oneroso da allestire se il quadro si trovasse lontano dal binario con il deviatoio relativo. Le spie possono essere sostituite da simboli grafici sullo schermo del pc. Per fare questo occorre introdurre il modulo di retroazione a cui assegneremo due ingressi. Il doppio deviatore può essere sostituito da un relé comandato da un indirizzo di un decoder a contatti temporanei. Lo schema si trasforma allora così:

Anche se il decoder è di natura diversa e trasmette ai contatti la posizione in modo temporaneo, il suo comando è del tutto simile a quanto visto per i segnali precedentemente (secondo lo schema proposto l'indirizzo usato è il 2):
Sub PosizioneNormale
Const Fine = 32
Const L = 33
With Me.MSComm1
.Output = Chr$(L)
.Output = Chr$(2)
.Output = Chr$(Fine)
End with
End Sub
Sub PosizioneRovescia
Const Fine = 32
Const R = 34
With Me.MSComm1
.Output = Chr$(R)
.Output = Chr$(2)
.Output = Chr$(Fine)
End with
End Sub
Per completare l'argomento resta da chiarire come fare a leggere via software i valori degli ingressi del dispositivo di retroazione. Qui le cose si complicano un po' perchè occorre leggere il valore degli ingressi in modo asincrono rispetto agli effetti.
A
conclusione del progetto appena generato vale la pena di evidenziare: