L'ordinateur et le train
Attention le document n'est pas fini et les exemples non testes (donc bugs)!
Quelques bugs corriges le 24/07/99.
Table des matières
1.Introduction
2.Choix du langage de programmation
3.Quelques instructions de base
4.La communication avec l'extérieur
5.Manipulation rapide
6.Une petite carte
7.Exemples d'utilisation
8.Conclusion
1.Introduction
Actuellement l'informatique est présente à tous les niveaux dans les compagnies ferrovières et est même indispensable . L'ordinateur peut s'averrer aussi très éfficace en modélisme ferrovière pour la commande , l'automatisation ... Mon but à travers ce document est de montrer quelques possibilités de l'association informatique-train tout en restant accessible à tous . Nous n'irons pas très loin mais suffisament pour avoir une idée . Je propose également la réalisation d'une petite carte électronique à brancher sur l'ordinateur afin de piloter quelques appareils .
2.Choix du langage de programmation
Comme tout le monde le sait , un ordinateur ne comprend que les programmes . Il existe un très grand nombre de langage de programmation . J'ais choisi le QBASIC pour cette réalisation car il ne nécessite pas un très grand investissement pour le comprendre et il est disponible sur tous les ordinateurs sous DOS ou windows 3.1 dans le répertoire c:\dos . Si vous utiliser un autre système d'exploitation , comme windows 95 , vous avez le droit de le recopier chez un collègue . Pour l'utiliser , mettez-vous dans le répertoire dos et tapez qbasic.exe ou cliquer sur qbasic.exe sous window . Vous pouvez alors écrire le programme , sauver , charger et l'éxécuter . Pour éxécuter un programme , il faut impérativement être dans qbasic.exe car le QBASIC est un langage interprété ( c'est à dire que c'est qbasic.exe qui lit les lignes et les éxécute les unes après les autres , contrairement aux langages compilés qui transforme le programmes en codes directements compréhensible par le processeur ) . Ce langage est simple , mais revers de la médaille , il est lent car interprété et destrucutré . Donc il suffit pour des petits programmes car sinon ca devient horible . Pour des projets importants on préferrera des langages plus structurés et rapides comme C,pascal ...
3.Quelques instructions de base
Variables
Une variable est une boite pouvant contenir une valeur , en basic on n'a pas besoin de les déclarer (c'est à dire indiquer au début du programme les variables que l'on va utiliser ) .
Ex : A=10 : met la valeur 10 dans la variable A .
Tableaux
Un tableau est une grosse boite qui contient des cases qui contiennent elles même des valeurs .
On accéde aux différentes cases par un indice . Les tableaux doivent être déclarés au début du programme par : dim nomdutableau(nombre de case) et on accéde à une case par nomdutableau(numero de la case) . La numérotation commence à 1 .
Ex :
DIM duree(10)
duree(1)=25
duree(2)=126 ...
Goto
Goto permet d'aller à un autre endroit du programme . ( Cette instruction est détestée des informaticiens , car elle conduit à du code très difficile à comprendre si on en abuse , elle est même interdite dans certaines normes . Mais pour le débutant , c'est plus facile )
Ex :
A=1
debut : A=A+1
goto debut
Ce petit programme incrémente sans arrêt la variable A . Lorsque le programme rencontre goto debut , alors il saute à l'étiquette debut .
Test
Le test se fait avec if (si en anglais) then(alors)
If condition then action
Ex :
If a>10 then goto erreur
If a=b then c=0
On peut aussi utiliser else(sinon)
Ex :
If a>=0 tehn positif=1
Else positif=0
Les tests possibles sont < , > , <= , >= , = et <> (different)
Boucles
Une boucle permet d'éxécuter un nombre de fois fixé un bout de programme
Ex : Calcul de la somme des 10 premiers entiers :
somme=0
for i=1 to 10
somme=somme+i
next i
next i indique la limite de la boucle de compteur i .
cls
cls éfface l'écran
rem
rem ou ' permettent de mettre un commentaire
Ex :
Rem programme écrit le 10/12/1998 par ...
' calcul de ...
Print
Print affiche ce que l'on met entre guillemets et la valeur des variables non entre guillemets :
Ex :
A=10
Print " La valeur de a est " ; a
Input
Input demande la valeur d'une variable en affichant ? sur l'écran .
Ex :
Print " Trains à stopper "
Input train_stop
Affiche :
Train à stopper
?
La valeur saisie après ? est placée dans la variable train_stop
Sous programmes
Si on utilise souvent une portion de code , il est malin de ne l'écrire qu'une seule fois à la fin du programme , en la précédant par une étiquette et en mettant return à la fin . Ainsi ce sous programme sera éxécuté chaque fois que le programme rencontrera gosub nom de l'étiquette .
Ex : Ce sous programme affiche la position des 8 aiguillages qui sont dans le tableau aiguille (0=directe , 1=dévié)
...
gosub pos_aiguille
...
pos_aiguille :
for i=1 to 8
if aiguille(i)=0 then print " aiguillage " ; i ; " directe "
else print " aiguillage " ; i ; " dévié "
next i
return
Chaines
Une chaine est une variable qui contient plusieurs caractères , on met un $ pour ne pas confondre avec une simple variable .
Ex :
Nom$=BB26001
Print " La locomotive " ; nom$ ; " est prête "
Variables gérées par le QBASIC
Il existe des variables mises à jour automatiquement par le QBASIC
On trouve par exemple INKEY$ qui indique la touche actuellement préssée ou TIMER qui est un compteur de temps qui compte sans arrêt , c'est très bien pour faire des temporisations .
Ex :
Rem tempo de 3 secondes
t1=timer
att : if timer-t1 <3 then goto att
Ouf !
Voilà , avec ces quelques instructions , vous pouvez déjà faire pas mal de choses . Pour plus d'informations , consulter l'aide qui est d'ailleur fort bien faite .
4.La communication avec l'extérieur
N'oublions pas que le but à atteindre est de controller un train , il faut donc faire entrer et sortir des signaux de l'ordinateur . Pour cela , on utilise l'interface parrallèle qui se matérialise par un connecteur 25 broches femelles à l'arrière de l'ordinateur . On y branche souvent l'imprimante . Pour ce repérer facilement , chaque broche est numérotée .
Pour les sorties
On utilise D0 à D7 dont les numéros sont les suivants
D0 2
D1 3
D2 4
D3 5
D4 6
D5 7
D6 8
D7 9
(La masse est présente de 18 à 25)
Dans l'ordinateur , ces 8 broches sont reliées à un registre . C'est la valeur de ce registre qui fait apparaŒtre en sorties des tensions d'environs 5V (niveau logique 1) ou 0V (niveau logique 0) . Bien entendu par rapport à la masse . Cette valeur est du binaire sur 8 bits (un bit peut prendre 2 valeurs : 0 ou 1) .
Registre :

En binaire D0 à un poid de 1 ,D1 de 2,D2 de 4,D3 de 8 ...(à chaque fois on multiplie par 2)
La valeur à mettre dans le registre est égale à la somme des poids des bits que l'on veut mettre à 1 .
Ex :

Dans l'ordinateur , ce registre est à l'adresse 888 . Les adresses permettent d'avoir accés aux différents registres qui gérent le matériel . En QBASIC , l'instruction suivante écrit la valeur dans le registre désigné par son adresse : OUT adresse, registre
Ainsi pour sortir 113 , il faut faire : OUT 888,113
Pour les entées
On utilise STROBE,AUTOFEED,INIT,SELECT IN(noms des broches) . Normalement pour les entrées , on n'utilise pas ces broches mais 5 autres mais elles fonctionnent mieux et plus simple a mettre en ouvre Les numéros sont les suivants
STROBE 1
AUTOFEED 14
INIT 16
SELECT IN 17
(La masse est présente de 18 à 25)
Dans l'ordinateur , ces 4 broches sont reliées à un registre . Mais certains bits de ce registre sont inutilisés , et l'état des broches est inversé (Un 1 sur la broche se traduit par un 0 dans le registre et inversement ) . Les bits non utilisés peuvent donner des valeurs au hasard 0 ou 1 . Le registre est le suivant :

Comme pour les sorties , la valeur du registre est codée en binaire donc nos 4 bits ont les poids suivants :
STROBE 1
AUTOFEED 2
INIT 4
SELECT IN 8
Pour tester un bit , on utilise l'instruction and qui effectue un et logique bit à bit avec les 2 expressions , si les 2 bits correspondants sont à 1 alors le bit correspondant du résultat est à 1 .
Ex :
3 and 5
00000011
and 00000101
= 00000001
ainsi on peut isoler les bits , par exemple pour tester le bit AUTOFEED de poid 2 , on fait valeur du registre and 2 . Si AUTOFFED est à 0 alors le résultat vaut 0 sinon il est différent de 0 .
Ce registre est à l'adresse 890 et dit être initialisé avec la valeur 4 pour fonctionner correctement . Il faut donc mettre 4 avec l'instruction étudiée précedament : OUT 890,4
La valeur du registre est accessible dans variable en faisant : variable=IN(890)
Avec ce mode d'initialisation , si la broche est en l'air (connectée à rien) , alors s'est comme si on lui appliqué 5V donc 1 , pour mettre 0 , il faut la relier à la masse . N'oublions pas que les niveaux entre la broche et le registre sont inverssés donc une broche en l'air met le bit correspondant dans le registre à 0 et une broche reliée à la masse , par exemple par l'intermédiaire d'un interrupteur ou d'une pédale de voie met le bit correspondant à 1 dans le registre .
5.Manipulation rapide
Afin de comprendre ce qui précéde , je propose de réaliser le montage suivant :
Des diodes électoluminescantes protégées par des résistances de 470 Ohms sont placées entres les sorties et la masse et des interrupteurs entre les entrées et la masse . La sortie D0 est nommée S0 , D1 S1 ... L'entrée STROBE est nommée E0 , AUTOFEED E1 , INIT E2 et SELECT IN E3
Le programme suivant permet de faire fonctionner le montage , il indique les entrées reliées à la masse et lorsque l'on appuie sur S comme sortie , on rentre une valeur qui va se mettre dans le registre de sortie et donc allumer ou éteindre les diodes correspondantes . Q permet de quitter le programme :
Rem Programme d'expérimentation
Rem initialisations :
Out 890,4 rem bon mode pour les entrées
Out 888,0 rem extinction de toutes les diodes
Dim S(8) rem tableau des sorties
Dim E(8) rem tableau des entrées
For i=1 to 8
S(i)=0
Next i
Boucle :
Rem affiche les entrées
Gosub entree
Rem répartition des différentes actions suivant la touche enfoncée
Rem fin si q (en majuscule ou minuscule appuyée)
If (inkey$= " Q ") or (inkey$= " q ") then end
Rem modification des sorties si s (en majuscule ou minuscule appuyée)
If (inkey$= " S ") or (inkey$= " s ") then gosub sortie
Goto Boucle
Rem sous programme de sortie
Sortie :
Print " Entrer la valeur à mettre dans le registre de sortie "
Input sortie
Out 888,sortie
Rem remplit S0 à S7(1 si la sortie correspondante est à 1 , 0 si non)
If(Entre and 1)<>0 then S(1)=1
If(Entre and 2)<>0 then S(2)=1
If(Entre and 4)<>0 then S(3)=1
If(Entre and 8)<>0 then S(4)=1
If(Entre and 16)<>0 then S(5)=1
If(Entre and 32)<>0 then S(6)=1
If(Entre and 64)<>0 then S(7)=1
If(Entre and 128)<>0 then S(8)=1
Return
Rem sous programme d'entrée
Entree :
Entre=in(890)
Rem remplit E0 à E3 (1 si l'entrée correspondante est reliée à la masse, 0 si non)
If(Entre and 1)<>0 then E(1)=1
If(Entre and 2)<>0 then E(2)=1
If(Entre and 4)<>0 then E(3)=1
If(Entre and 8)<>0 then E(4)=1
Return
Rem sous programme d'affichage
Aff :
cls
print " entrées : "
for i=1 to 4
if E(i)=0 then print " E " ; i ; " : en l'air "
else print " E " ; i ; " reliée à la masse "
next i
print " sorties : "
for i=1 to 8
print " S " ; i ; " à : " ; S(i)
next i
return
6.Une petite carte
On va maintenant réaliser une carte électronique qui fonctionnera comme le précédent montage sauf qu'à la place des diodes , on met des relais électromagnétiques afin de pouvoir commander les trains . Un relais peut se voir comme un interrupteur commandé . Il est constitué d'une bobine qui pousse le ou les contacts lorsqu'elle est alimentée . Au repos il y a contact ente C et R et au travail (bobine alimentée) contact entre C et T .
Le scéma suivant montre un relais (1 RT car un seul inverseur)
Un relais est caractérisé par le nombre d'inverseur , la tension d'alimentation de la bobine , et l'intensité maximale pouvant passer dans le(s) inverseur(s) . par exemple : 12V 1A 2RT .
Mais on ne peut pas les brancher directement sur le port parallele car la bobine consomme trop . On utilise donc de transistor en mode bloqué saturé , dans ce mode , il se comporte comme des interrupteurs (attention , le courant ne passe que dans un seul sens) . Le shéma suivant montre le fonctionnement :
On branche ensuite le relais au transistor :
La diode suprime la surtension lorsque l'on suprime l'alimentation de la bobine Le +relais doit être connecté sur une alimentation de tension proche de la tension de la bobine . On peut utiliser un transfo de trains ou tout autre (bloc secteur ...) . Ne pas oublier de relier les masses entres-elles .
Il existe un circuit intégré qui contient 8 transistors de puissance ULN2803, il peut avantageusement remplacé les transistors .
Son brochage est le suivant . (L'intensitée maximale est de 500mA , on peut donc y relier directement des lampes , leds , moteurs ) . Mais pour les plus grosses puissances , le relai reste indispensable .
La figure suivante montre une réalisation possible avec l'ULN 2803
La figure suivante montre le racordement d'un relais , d'une lampe et d'une pédale de voie
Pour réaliser le montage , on peut utiliser une plaque percée pastillé et souder le tout . Pour relier la carte au montage , on peut soit se faire un cable , soit acheter un cable " droit " (la broche 1 du connecteur 1 est cablé sur la broche 2 du connecteur 2 ...) . C'est cables sont souvent mƒle-mƒle , il faut donc mettre un connecteur femelle sur la carte .
Pour tester le montage , on peut utiliser le programme précédent .
7.Exemples d'utilisation
7.1.Navette
Cet exemple montre comment réaliser une navette
Montage :
Le relais permet d'inverser le sens de la marche .
Les diodes bloquent le train aux éxtrémités .
Le traansformateur permet de régler la vitesse.
Programme :
Le prorgamme doit juste faire passer le courant dans un sens pendant un premier temps t_aller puis dans l'autre sens t_retour . Le temps d'aller est le temps de parcours plus le temps d'attente à l'aller . Le temps de retour est le temps de parcours plus le temps d'attente au retour .
Rem programme navette sur S0
Rem choix des temps en secondes
t_aller=10
t_retour=15
boucle :
Rem aller
Out 888,0
t=timer
att_a : if timer-t
Rem retour
Out 888,1
t=timer
att_r : if timer-t
goto boucle
Ce programme boucle toujours , pour l'arrêter , il faut appuyer sur ctrl et break . Ou alors rajouter le test des touches comme pour le programme d'essaie de la carte .
Vous allez dire qu'il n'y a pas besoin d'un ordinateur pour faire ceci , mais n'oublions pas le caractère didactique de ce document .
7.2.Navette plus complexe
Cet exemple montre comment réaliser une navette entre 2 gares dont l'une dispose de 2 voies (A et B) et l'autre d'une seul C . Le train ira donc de A en C en un temps tac (temps de parcours plus temps d'attente sur la voie C) , puis de C en B en un temps tcb , puis de B en C en un temps tbc puis enfin de C vers A en un temps tca . Puis le cycle se poursuit sans fin . Il faut donc gérer l'aiguillage . D0 s'occupe du sens du train , D1 choisit la direction de l'aiguille (0=directe , 1=dévié) que prendra l'aiguillage lorsque D2 validera la manouevre de l'aiguillage pendant une seconde afin de ne pas le griller . A ce titre , il est conseillé de pouvoir couper l'alimentation de l'aiguillage si la bobine est solicitèe trop longtemps ( mauvais programme , sortie durant l'opération de changement de direction , n'importe quoi sur les bits avant la mise en route du programme ... )
Montage :
Programme
Rem navette avec aiguillage
tac=10
tcb=15
tbc=12
tca=40
boucle :
rem A->C
out 888,0
tempo=tac
gosub attendre
rem C->B
rem aiguillage dévié
out 888,2+4
tempo=1
gosub attendre
rem autre sens
out 888,1
tempo=tcb
gosub attendre
rem B->C
out 888,0
tempo=tbc
gosub attendre
rem C->A
rem aiguillage direct
out 888,4
tempo=1
gosub attendre
rem autre sens
out 888,1
tempo=tca
gosub attendre
goto boucle
rem sous programme de temporisation , avant de l'appeler , il faut mettre dans tempo le temps à attendre
attendre :
t=timer
att : if timer-t< tempo then goto att
return
Ce programme boucle toujours , pour l'arrêter , il faut appuyer sur ctrl et break . Ou alors rajouter le test des touches comme pour le programme d'essaie de la carte .
7.3.Séquenceur
Un séquenceur permet de mettre en sorties , les valeurs contenues dans un tableau réguliérement (par exemple toutes les secondes) . Pour le tester , vous pouvez utiliser les montages précédents .
Programme :
Le programme montre un séquenceur à 120 positions avec un temps de rafraichissement de 1 seconde .
rem séquenceur
rem tableau
dim tab(120)
poid des sorties afin de remplir le tableau plus facilement
S0=1
S1=2
S2=4
S3=8
S4=16
S5=32
S6=64
S7=128
rem tableau à remplir
tab(1)=S0
tab(2)=S1+S2
tab(3)=S3
....
tab(120)=0
rem temps d'éxécution d'un pas (ici 1 sconde)
temps=1
rem durée (nombre de pas de la séquence)
duree=120
boucle :
for i=0 to duree
rem mise à jour de la sortie
out 888,tab(i)
rem temporisatrion
t=timer
att : if timer-t< temps then goto att
next i
goto boucle
L'utilisation est très simple , mais très lourde car pour une action qui dure 10 secondes , il faut écrire 10 fois la même chose .
7.4.Séquenceur plus complexe
Afin de remédier au problème du séquenceur précédent , ,on utilise un deuxième tableau duree qui indique le temps de chaque pas (ex : 1 pour une manouvre d'aiguillage , 10 pour un aller ...) . Pour vous faciliter la tƒche , vous pouvez remplacer S0=1 , S1=2 ... par les noms du montage ex ST=1 (sens train) , POSAIG=2 (position de l'aiguille souhaitée) , OKAIG=4 (action de l'aiguillage) ...
Programme :
Le programme montre un séquenceur à 120 positions avec un temps de rafraichissement réglable pour chaque pas .
rem séquenceur complexe
rem tableaux
dim tab(120)
dim duree(120)
poid des sorties afin de remplir le tableau plus facilement
S0=1
S1=2
S2=4
S3=8
S4=16
S5=32
S6=64
S7=128
rem tableaux à remplir
tab(1)=S0
duree(1)=1
tab(2)=S1+S2
duree(2)=45
tab(3)=S3
duree(3)=12
....
tab(120)=0
duree(120)=1
rem max(nombre de pas à éxécuter de la séquence)
max=120
boucle :
for i=0 to max
rem mise à jour de la sortie
out 888,tab(i)
rem temporisatrion
t=timer
att : if timer-t
next i
goto boucle
L'utilisation est très simple , par exemple pour la navette avec aiguillage il faudrait mettre :
max=6
tab(1)=0
duree(1)=10
tab(2)=6
duree(2)=1
tab(3)=1
duree(3)=15
tab(4)=0
duree(4)=12
tab(5)=4
duree(5)=1
tab(6)=1
duree(6)=40
On peut déjà faire des belles exploitations automatiques complexes
7.5.Séquenceur réactif
Ce dernier séquenceur utilise également les entrées . Il passe au pas suivant , si la durée est écoulée et si les entrées misent dans un 3eme tableau entr sont reliées à la masse . Pour les pas uniquement dépendant du temps , on met 0 dans entr . Pour les pas qui dépendent uniquement des entrées , on met 0 dans duree .
Programme :
Le programme montre un séquenceur à 120 positions avec un temps de rafraichissement réglable pour chaque pas et la prise en compte des entrées.
rem séquenceur réactif
rem tableaux
dim tab(120)
dim duree(120)
dim entr(120)
poid des sorties et des entrées afin de remplir les tableaux plus facilement
S0=1
S1=2
S2=4
S3=8
S4=16
S5=32
S6=64
S7=128
E0=1
E1=2
E2=4
E3=8
rem tableaux à remplir
tab(1)=S0
duree(1)=1
entr(1)=E0+E1
tab(2)=S1+S2
duree(2)=45
entr(2)=E2
....
tab(120)=0
duree(120)=1
entrt(120)=0
rem max(nombre de pas à éxécuter de la séquence)
max=120
rem initialisation pour les entrées
out 890,4
boucle :
for i=0 to max
rem mise à jour de la sortie
out 888,tab(i)
rem temporisatrion
t=timer
att : if timer-t
rem attente des capteurs
att2 : if (inp(890) and entr(i)) <> entr(i) then goto att2
next i
goto boucle
Appliquons notre dernier séquenceur à la gestion d'une maquette de démonstration d'un petit triage (effet garanti ! ) . La figure suivante montre le montage :
Les diodes permettent de réler la vitesse de la locomotive , car chaque diode fait baisser la tension de 0.6V . Par exemple 5 diodes sous une alimentation de 12V donnent 12-5*.6=9V (facile non !) .
Fonctionnement :
Au début la loco est deriére 5 wagons de marchandises . Lorsque l'on appuie sur départ , elle pousse le convoie sur la butte au sommet de laquelle on trouve un dételleur bloqué en position de détellage . Le 1ere wagon ets trié sur la voie C , les 2 suivant sur la D , le 4eme sur la C et le dernier sur la D . Ensuite la locom va rechercher ces wagons sur la voie C puis sur la voie D et revient en position d'attente . Pationnent non ? . Une pédale de voie détecte le passage des wagons afin de synchroniser le tout . La démonstration fonctionne pour 5 wagons .
Programme :
En premier , donnont des noms plus explicites aux poids combinés de nos entrées et sorties
Commande des aiguillages :
AIG1=S6 'mettre l'aiguillage 1 en directe
AIG1D=S6+S4 'mettre l'aiguillage 1 en devié
AIG2=S5
AIG2D=S5+S4
AIG3=S5+S6
AIG3D=S5+S6+S4
Commande de la locomotive :
D1=S3 'droite , vitesse lente
D2=S2 'droite ,vitesse moyenne
D3=S2+S3 'droite,vitesse maximale
G1=S1+S3
G2=S1+S2
G3=S1+S2+S3
Lampe :
LED=S0
Entrée :
DEP=E0
PED=E1
Bien sur ces affectations sont aà placer après l'affectation de S0,..,S7,E0,..,E3
La lampe indique que le système attend que l'utilisateur donne le départ
On peut à présent , écrire la démonstration
Attente de l'appuie sur le bouton départ
tab(1)=LED
duree(1)=0
entr(1)=DEP
Aiguillage 1 en position dévié
tab(2)=AIG1D
duree(2)=1
entr(2)=0
triage du wagon 1
Aiguillage 2 en position directe
tab(3)=AIG2
duree(3)=1
entr(3)=0
Aiguillage 3 en position directe
tab(4)=AIG3
duree(4)=1
entr(4)=0
Pousser le train sur la butte à vitesse lente et détellage du wagon de tête
tab(5)=D1
duree(5)=0
entr(5)=PED
Attendre 2 secondes afin de laisser le temps au wagon 1 de s'imobiliser
Tab(6)=0
Duree(6)=2
Entr(6)=0
triage du wagon 2
Aiguillage 3 en position déviée
tab(7)=AIG3D
duree(7)=1
entr(7)=0
Pousser le train à vitesse lente et détellage du wagon 2eme wagon
tab(8)=D1
duree(8)=0
entr(8)=PED
Attendre 1 secondes afin de laisser le temps au wagon 2 de s'imobiliser(uniquement une seconde car le 3 vas sur la même voie que le 2)
Tab(9)=0
Duree(9)=2
Entr(9)=0
Triage du 3eme wagon
Pousser le train à vitesse lente et détellage du wagon 3eme wagon
tab(10)=D1
duree(10)=0
entr(10)=PED
Attendre 2 secondes afin de laisser le temps au wagon 3 de s'imobiliser
Tab(11)=0
Duree(11)=2
Entr(11)=0
triage du wagon 4
Aiguillage 3 en position directe
tab(12)=AIG3
duree(12)=1
entr(12)=0
Pousser le train à vitesse lente et détellage du 4eme wagon
tab(13)=D1
duree(13)=0
entr(13)=PED
Attendre 2 secondes afin de laisser le temps au wagon 4 de s'imobiliser
Tab(14)=0
Duree(14)=2
Entr(14)=0
triage du wagon 5
Aiguillage 3 en position déviée
tab(15)=AIG3D
duree(15)=1
entr(15)=0
Pousser le train à vitesse lente et détellage du wagon 5eme wagon
tab(16)=D1
duree(16)=0
entr(16)=PED
retour de la loco au bas de la bute en vitesse moyenne puis lente
tab(17)=G2
duree(17)=1
entr(17)=0
tab(18)=G1
duree(18)=4
entr(18)=0
recupération des wagons de la voie C
tab(19)=AIG1
duree(19)=1
entr(19)=0
tab(20)=AIG2
duree(20)=1
entr(20)=0
tab(21)=D3
duree(21)=1
entr(21)=0
tab(22)=D1
duree(22)=6
entr(22)=0
recupération des wagons de la voieD
tab(23)=AIG2D
duree(23)=1
entr(23)=0
tab(24)=G2
duree(24)=10
entr(24)=0
tab(25)=D1
duree(25)=10
entr(25)=0
retour au point d'attente
tab(26)=G1
duree(26)=10
entr(26)=0
indication du nombre de pas
max=26
Remarque : Si on oublie un pas , pour l'inserrer , c'est la galère car il faut changer l'indice de toutes les affectations qui suivent . On peut contourner ce problème en créant une variable num au debut et en l'initialisant à 1 , la mettre comme indice et l'incrémenter après chaque pas . et donc max=num-1 . (On a utilisé 26 pas , imaginez ce qu'il est possible de faire avec 1000 pas ! )
On est à présent capable de faire de belles choses . On pourrait faire mieux en réalisant un automate programmable (appareil qui gére la plupart des systèmes dans l'industrie) suivant un graphique appellé graphcet . Un tel engin estr capable de gérer les choix et faire tourner plusieurs programmes , mais c'est une autre histoire .
8.Conclusion
Ce document à permit de montrer ce que l'on peut faire avec un ordinateur en le programmant soit même . Il est possible de faire beaucoup plus , mais cela sort du cadre de ce document initiatique et didactique . ( Il faut faire une carte avec plus d'entrées / sorties , utiliser un langage plus puissant ... ) . Il est à noter que certaines applications peuvent se réaliser directement avec uniquement de l'électronique .
Delmas-Begue Ulysse
Decembre 1998
Mon email: udelmas@etud.insa-tlse.fr
Retour a la page d'accueil du train