Comandare i segnali

Torna alla pagina CONTROLLO

Segnali di avviso

In Italia i segnali di avviso nel caso più semplice possono assumere tre aspetti:

  1. ROSSO: via impedita;
  2. GIALLO: il prossimo segnale di prima categoria è disposto al rosso;
  3. VERDE: via libera, il segnale che segue è pure disposto a via libera.

Come fare per ottenerli? Si possono inserire tre lampadine colorate differentemente all'interno dell'involucro, ma la cosa è resa molto difficile se si vogliono rispettare le dimensioni in scala. Ci vengono fortunatamente incontro i micro-led. Oltre a non scaldare, la cosa sorprendente è che ne bastano due, risolvendo i problemi di collocazione e durata. Infatti l'emissione contemporanea dei due colori rosso e verde produce l'effetto del colore giallo! Riassumendo, la tabella che segue presenta le possibilità:

aspetto: LED ROSSO LED VERDE
ROSSO on off
GIALLO on on
VERDE off on

Con l'uso dei decoder il comando di questi due led divdenta molto semplice, è sufficiente impiegare due indirizzi di un decoder a cui collegare un led ciascuno. Nello schema che segue i led sono alimentati in corrente alternata, anche se sarebbe meglio la continua, ma funzionano ugualmente, alla peggio la luce non è costante ma sfarfalla leggermente. L'unica accortezza è quella di mettere in serie una resistenza adeguata per non bruciarli. Gli indirizzi assegnati al decoder nello schema sono il 3 e il 4:

Il comando 33 connette il centrale di ogni commutatore al contatto di sinistra (Left); il comando 34 il contatto di destra (Right). Se si collegano al contrario i contatti è sufficiente invertirli per mantenere la convenzione. Le procedure software per comandarli saranno tre, uno per ogni aspetto. Usiamo dichiarare dei valori costanti comodi dal punto di vista evocativo:

Sub Rosso

Const Fine = 32
Const L = 33
Const R = 34

'led rosso:
Me.MSComm1.Output = Chr$(R)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(Fine)
'led verde:
Me.MSComm1.Output = Chr$(L)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(Fine)

End Sub 

 

Sub Giallo

Const Fine = 32
Const L = 33
Const R = 34

'led rosso:
Me.MSComm1.Output = Chr$(R)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(Fine)
'led verde:
Me.MSComm1.Output = Chr$(R)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(Fine)

End Sub 

 

Sub Verde

Const Fine = 32
Const L = 33
Const R = 34

'led rosso:
Me.MSComm1.Output = Chr$(L)
Me.MSComm1.Output = Chr$(3)
Me.MSComm1.Output = Chr$(Fine)
'led verde:
Me.MSComm1.Output = Chr$(R)
Me.MSComm1.Output = Chr$(4)
Me.MSComm1.Output = Chr$(Fine)

End Sub

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, uno per ogni aspetto del segnale di avviso) in corrispondenza di una figura sinottica che possiamo inserire nella scheda stessa tramite il controllo image:

Tra le proprietà del controllo di tipo image c'è ovviamente il file grafico da cui attingere:

 

L'immmagine potrebbe essere così rappresentata:

Ad ogni bottone assegniamo una delle tre procedure. Così al bottone di comando 1 possiamo evocare la nostra procedura che mette il segnale di avviso al rosso:

Private Sub cmd1_Click
    Call Rosso
End Sub

Possiamo sostituire dinamicamente l'immagine in modo che essa rappresenti l'aspetto corrente del segnale di avviso. Occorre pertanto predisporre tre immagini distinte dal colore assunto dal segnale. In coda ad ogni chiamata andrà aggiunta un'istruzione come la seguente che modifica l'immagine sulla scheda (strFileName contiene il nome del file sa inserire di volta in volta):

Private Sub cmd1_Click
    Dim objs As Object

    Call Rosso
    Set objs = LoadPicture(strFileName)
    Me.imaSgn.Picture = objs
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. Quanto appena visto può essere esteso per comandare anche i segnali a due o tre vele ottenendo tanti aspetti a partire dalla combinazione di quelli elementari. Per ottenere l'effetto del lampeggio le cose si complicano un po'. Vedremo più avanti come fare.


L'aspetto combinato dei segnali

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 i manuali necessari per suggerire le soluzioni tecniche agli appassionati. Tra i tanti, prendiamo come spunto quello dei tracciati della Fleischmann, dove erano mostrate tante meraviglie disegnate a china con una cura e qualità grafica fenomenali 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?

Secondo quanto detto nei capitoli precedenti, dovremmo separare l'alimentazione della tratta dalla gestione dell'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 codice che segue riguarda la parte dichiarativa dove impieghiamo dei valori costanti a cui assegniamo dei nomi evocativi:

I tre script relativi alle configurazioni previste seguono. Per primo vedimmo quello che mette a riposo (o, per usare un inglesismo gergale, resetta) il modello:

Quello che segue mette al verde il primo binario e in accordo devia lo scambio;

Il terzo script al contrario mette al verde il binario 2 e mette lo scambio in posizione corretta:

Se i relè o i motori connessi alle uscite dei decoder assorbono una quantità di corrente elevata, si consiglia di interporre un tempo di attesa tra un comando e il successivo. Per fare questo si ricorre a una funzione standard di Windows che ci permette di sospendere l'esecuzione del programma per il tempo desiderato prima di eseguire l'istruzione successiva. La funzione si chiama Sleep e va dichiarata a livello di modulo:

Option Explicit

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 

Il suo impiego è molto semplice, va inserita tra due comandi successivi:

'sgn 2:
.Output = Chr$(Verde)
.Output = Chr$(4)
.Output = Chr$(Fine)

Call Sleep(200)

'dev 1:
.Output = Chr$(Corretto)
.Output = Chr$(6)
.Output = Chr$(Fine)

 

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 un controllo di tipo image:

Gli altri due bottoni dovrebbero esserci ora familiari

La scheda di esecuzione del programma potrebbe assumenre un aspetto come il seguente:

Anche in questo caso possiamo giocare con la sostituzione dinamica dell'immagine per avere un riscontro dello stato corrente della linea. Come per il segnale di avviso potremmo inserire in un quadro a parte tre pulsanti e ad essi collegare i contatti di retroazione.


Torna all'inizio pagina

Torna alla pagina CONTROLLO