Page d'accueilVers la page d'accueil       UTS 2000 - PROGRAMME sous WINDOWS   (mise à jour du 08/09/2024)       


UTS est compilé sous C++ 2013 Express (Gratuit et Génial de Microsoft) mais n'est plus compatible avec Win98 ou W2000.
Un PC équipé de Pentium III à 450 Mhz est suffisant pour faire tourner ce programme, sous XP, W7,W8 et W10.
Sur Windows 7, 8 et 10, il ne faut pas installer UTS dans les répertoires "Programmes" ou "Program Files(x86)", sinon le programme ne peut pas modifier le TCO (en écriture).


<<<----------V3.7i------------------ Mise à jour au 08/09/2024 --------------------------------->>>
Amélioration du programme UTS, et passage de 200 à 250 actions d'horodatage.
Modification des numéros d'écran, dans le cas d'appel par clic sur une touche du TCO.


<<<----------V3.7h------------------ Mise à jour au 08/04/2024 --------------------------------->>>
Le nombre maximum de garages passe de 16 à 32.

<<<----------V3.7g------------------
Mise à jour au 12/12/2021 --------------------------------->>>
Une amélioration du programme sur le PC, avec un meilleur fonctionnement des variables "separe" et "regroupe".
Ce qui fonctionne bien maintenant :
 - en manuel sur le TCO : Ok entre deux cantons ou entre un canton et son garage.
 - en semi auto avec les variables 9400 et 9500 avec bouton sur le TCO : Ok avec dans la déclaration de la variable "separeX" en  premier critère pour la loco et deuxième pour les wagons.
 - en auto dans un déplacement: avec la fonction sfin : Ok entre un canton et son garage ou entre cantons.

<<<----------V3.7e------------------ Mise à jour au 15/02/2020 --------------------------------->>>
Quand on lance un déplacement, possibilité d'écouter une annonce sonore complète, avant que le train ne démarre. Voir la section #depl.
Et nouvelles possibilités pour lancer les annonces sonores en arrière plan. Voir la section #exe.

<<<----------V3.7d------------------
Mise à jour au 12/11/2017 --------------------------------->>>

Ajout une variable "arret_urg_on" pour activer la fonction d'arrêt d'urgence, depuis un bouton poussoir situé près du réseau.
Amélioration dans le tableau de la liste des actions horodatées.  La colonne "Départ" est devenue interactive. Si l'on clique dessus, on positionne l'horloge à l'heure-1mn, pour démarrer sur ce premier événement.
Une correction sur l'affichage des heures + délais de blocage des actions qui dépassaient l'heure ronde.
Pour un événement horodaté, la codification "Jour de de semaine/Jour de week-end" a changé. Au lieu de 'e' ou 'w', il faut maintenant saisir 's' ou 'w' (jour de la semaine ou du week-end).
Nouveau, appuyer sur les touches [0] à [7] du clavier pour afficher le TCO correspondant. La touche [²] située au bout du clavier affiche aussi le TCO 0.
Les touches du clavier affichent aussi :
  [²]   =  TCO 0
  [8]  =  Caractéristiques des trains
  [9]  =  Tableau de la liste des événements horodatés
  [)]   =  Tableau des déplacements
  [=]  =  Tableau des itinéraires

<<<----------V3.7c------------------ Mise à jour au 05/12/2016 --------------------------------->>>
J'ai amélioré la gestion des trains parcourant les boucles de retournement.
Une fois qu'un train sort d'une boucle de retournement, sa commande est inversée. Pour la même position de la manette, le train avance maintenant en sens inverse.
Dans cette version, les fonctions d'aiguillage automatique, de BAL, de ralentissement, de halte et de blocage prennent en compte la commande inversée de ce train.
Pour compléter ces améliorations, un nouveau bloc de fonctions multiples "INV" est apparu, pour remettre à l'état initial le sens de parcours des cantons inversés.
Dans les déplacements automatiques, l'activation d'un déplacement vers un garage occupé n'est plus possible. Ce déplacement passera actif seulement quand le garage sera libéré.


<<<----------V3.7b------------------
Mise à jour au 16/07/2016 --------------------------------->>>
Dans la fenêtre d'édition du TCO et de rendu des couleurs, il est maintenant possible de faire un clic-droit ou un clic-gauche sur les cases, pour incrémenter ou décrémenter les couleurs.
Une nouvelle case RAZ permet de remettre les couleurs C1, C2, C3 et C4 à l'état initial.
Une nouvelle case RAZ permet d'effacer le texte, et de saisir directement le nouveau texte.
On peut ajouter un pictogramme sur les blocs de texte, les blocs de voies, les blocs de bouton poussoirs et les blocs interrupteur.
Les blocs de redirection ont plusieurs représentations.
Le texte dans les bloc du TCO peuvent contenir les caractères   0-9  a-z   A-Z   [  ]  <  >   (  )  *  -   _  et espace.
Dans la section #train, une explication sur les paramètres "acc_progressif" et "dec_progressif".


1 - Utilisation du logiciel UTS
Pour comprendre le fonctionnement de UTS, il faut commencer par lire le manuel original de UTS 2000.
fA la livraison d'une nouvelle version logicielle d'UTS, il est possible de prendre le nouveau fichier 'config.txt' livré et
d'y intégrer ses descriptions personnelles des sections. Ainsi on dispose de données de son TCO et d'une aide à jour.
La police d'affichage du texte sur le blocs du TCO est aussi modifiée par le réglage "Ajuster le texte ClearType" de Windows.

UTS est fourni en deux versions logicielles. Une version 'V3' et une version 'V3---V2' (sur demande via les forums).
La version V3---V2 comprend  les améliorations logicielles de la version V3, tout en restant
compatible avec les anciennes cartes à PIC 8Mhz en V2 à 19200 bps.

La version V3---V2 présente des restrictions :
 - Il est déconseillé d'utiliser les servos avec cette version.
 - La gestion améliorée de la liaison RS232 n'est pas implantée dans cette version.
 - Le temps de réaction carte-logiciel est plus long.
 - L'inertie des trains est multipliée par 2, donc prendre les paramètres en conséquence.
 - Elle n'a pas été testée sur circuit.

Démarrage d'UTS et messages d'erreur
Le fichier 'config.txt' est utilisé au démarrage pour configurer les données du programme.
Si le logiciel sort une fenêtre d'erreur du type :
erreur
On affiche le nom de la section et la ligne en erreur.
Vérifier que  :
  1 / Le nombre maximum de ligne n'est pas atteint. (ici si l'on a dépassé cent lignes 'cant:')
  2 / Le nombre maximum de paramètres n'est pas atteint. (ici 'plusur:' + 6 paramètres maximum, 'blocage:' + 22 conditions au maximum)
  3 / Les éléments obligatoires comme les signes '+' et '-', (ici '+-', 'plusur:' ou 'blocage:').
  4 / La syntaxe interdite comme deux '|' qui se suivent, ou un '|' en début ou à la fin des conditions de  'blocage:'.
  5 / La syntaxe comme ici la présence obligatoire de ':' ou d'espace à certains endroits.
  6 / La valeur des paramètres, exemple la vitesse comprise entre -64 et +64, ou 8 caractères pour un nom de trains.
  7 / Le texte doit être en minuscule sans accents ou de syntaxe libre pour les noms d'itinéraires, de trains ou de déplacements.
  8 / Lire l'aide mise à jour dans le fichier 'config.txt'.
  9 / Bien écrire les variables comme 'det_5.1' et non pas 'det5.1'.
Dans cette exemple de fenêtre d'erreur, l'erreur est sur le n° d'aiguillage > 64.


Démarrage d'UTS et le fichier 'Train_UTS_log.txt'
Le fichier "Train_UTS_log.txt" doit rester vide. Si il existe et grossit, il faut l'ouvrir avec Notepad pour voir les erreurs de fonctionnement.
Si le fichier "Train_UTS_log.txt", contient des erreurs de type "-Erreur4 : Lecture N° variable interne : Var inconnue = 4316", cela peut venir du fichier "config.txt".
Il faut alors chercher la chaine de caractère  "4316" ou ce qui correspond à la variable "det2_16". Cette variable "det2_16" n'existe pas (ok = det2_0 à det2_15), c'est cette variable hors limite qui provoque l'erreur.
Si l'on ne trouve pas cette chaine de caractère, il faut alors voir dans l'autre fichier de configuration, "config_tco.txt", le tco et le bloc qui contient "4316".
Pour ce fichier du tco, voir l'aide tout en bas de la page "Description du fichier de configuration  config.txt" pour trouver le bloc en erreur.


Démarrage d'UTS et configuration générale dans 'config.txt'
Dans 'config.txt', la section suivante est d'ordre générale.
Certains paramètres sont optionnels ou ont une valeur par défaut.

#general

[

    relief on
    resolution_ecran 1130 735
    show_cards_found off
    leds_card_0 on
    ir_aig_digit 2
    inv_pot_0 on
    inv_pot_1 on
    train_aigauto on
    memorisation_train on
    memorisation_aig   on
]


relief <on|off>
      on  = Effet de relief sur les blocs du TCO et écran grisé (Par défaut = on ).
      off  = Pas d'effet de relief sur les blocs du TCO.
      En relief, passe l'écran en nuance de gris. Augmente légèrement le taux d'utilisation du cpu.

resolution_ecran  <taille_horizontale>  <taille_verticale>  |   plein ecran
      Démarre le programme, avec une fenêtre de cette taille en pixel. (Par défaut = 800 700).
      Minimum utilisable = 800 x 700.  Taille maximum = 32*25 cases = 1290 x 1050.
      Si on écrit    resolution_ecran  plein ecran    alors UTS le lance en plein écran.
     
show_cards_found <on|off>
      show_cards_found off  = Si l'on trouve des cartes UTS, démarre le programme sans afficher de message (Par défaut =off).
      show_cards_found on  = Si l'on trouve des cartes UTS, démarre le programme en affichant les numéros des cartes UTS détectées.

leds_card_<0-3> <on|off>
      leds_card_<0-3> on  = Active les leds (Les leds 'led_0' à 'led_47' sont activées) Paramètre = n° de carte (Par défaut = on).
      leds_card_<0-3> off  = Désactive les leds (Les sorties 'out_24' à 'out_39' sont utilisables en tant que sorties).

ir_aig_digit <1|2>
      2 = Utilise un nombre à 2 chiffres pour commander les aiguillages (Par défaut = 2).
      1 = Utilise un nombre à 1 chiffre pour commander les aiguillages.

inv_canton_<0-315> <on|off>
inv_pot_<0-305> <on|off>
      off  = N'inverse pas le sens du canton ou du potentiomètre (Par défaut = off).
      on  = Inverse le sens du canton ou du potentiomètre.
      Il n'est pas garanti que les fonctions élaborées (exemple #balauto) , prennent en compte la polarité inverse de ces cantons (A éviter donc).

train_aigauto <on|off>
      on = Le programme utilise la configuration de la section '#aigauto', aiguillages automatiques (Par défaut = on).
      Les aiguillages devant les trains en mouvement sont alors mis automatiquement en bonne position.
      off  = Le programme n'utilise pas la configuration '#aigauto'.

memorisation_train <on|off>
      on = Le programme sauvegarde les positions des 32 trains avant de fermer et les récupèrent au prochain lancement.
              Dans ce cas, dans la section #train, la description des trains "trainxx:" n'est pas prise en compte. Seul les trains de type "reserve :" sont lus.
              UTS replace les trains sur leurs cantons respectifs.
              Si un déplacement était en cours, UTS replace le train sur le canton qui était occupé, ou sinon sur les cantons du déplacement.
      off  = Le programme ne sauvegarde pas la position des trains avant de fermer (Par défaut = off).

memorisation_aig <on|off>
      on = Le programme sauvegarde les positions des aiguillages avant de fermer et les récupèrent au prochain lancement.
              Dans ce cas, dans la section #aig, la position au départ des aiguillages "position_depart : ax.y az.w" n'est pas prise en compte.
              UTS replace les aiguillages dans leurs positions respectives.
      off  = Le programme ne sauvegarde pas la position des aiguillages avant de fermer (Par défaut = off).


Démarrage d'UTS

Si une seule locomotive n'est pas à l'endroit prévu,
cliquer sur le Bloc à fonctions multiples, configuré avec 'OPT=3'. a
Cette commande replace le train sur le canton si un seul canton est en défaut de captage et si un seul train n'est pas affecté à un canton.
Le nom du train sans canton et le numéro de canton cible sont indiqués sur ce bloc à fonctions multiples.

Pour repositionner un ou plusieurs trains sur le réseau, passer par le menu : [Trains->Cantons].

Sur cet écran sélectionner un train et choisir un canton libre, de préférence un canton en jaune car UTS s'attend à avoir un train sur ce canton.
Le voyant [OCCUPATION...] passe au vert quand tous les trains sont sur des cantons avec leurs présences détectées.
Si un train a été retiré du réseau, par le menu : ' Tables > Caractéristiques des Trains', le retirer ou le placer sur un garage inutilisé.
Cliquez sur le bouton [TRAINS] pour afficher la page dédiée aux wagons.


Pour ajouter plus facilement des trains sur le réseau, il est possible d'en configurer 23 d'avance dans le fichier 'config.txt'.
Il faut ajouter des lignes 'reserve :' dans la section '#train'.
Cela permet d'ajouter en configuration des trains avec leurs caractéristiques (vitesse, couleur...) pour les prendre en compte sur le réseau en un seul clic.

La couleur des trains est dynamique. Elle est définie dans #train, pour les trains au lancement d'UTS et pour les trains en réserve.
Quand on quitte UTS, on sauvegarde la couleur des trains, mais pas des wagons, sauf si la position des trains est sauvegardée.
On peut toujours modifier la couleur des trains, par le menu  : Modifications > Rendu TCO.

Si le paramètre général "memorisation_train" = "on", les positions et les caractéristiques des trains sont mémorisées à la mise sous tension et les directives "train<xx>:" seront alors ignorées.
Seul les trains décrits dans la partie "reserve" seront alors pris en compte.

Exemple :
#train
[
    train0 : RAILCHEM c0   color : 2 clav0   06-64-13-13-xx en_auto
    train1 : DBROUGE_ c9   color : 4 clav1   01-40-11-07-xx en_auto
    train2 : AUTORAIL c5             clav2   02-44-12-03-xx en_auto
    clav_conf_0  : +a !q -w
    clav_conf_1  : +z !s -x
    clav_conf_2  : +e !d -c
    reserve : RAILCHEM 05-64-13-13-xx color :  2 name : Trix_verte_R4C1201
    reserve : DB_ROUGE 05-20-13-05-xx color :  4 name : Roco_rouge_BD_215_083_7
    reserve : BB_67381 09-64-13-11-xx color : 11 name : Trix_diesel_bleu
    reserve : BB115052 07-50-13-11-xx            name : Trix_electrique_grise_filet_rouge
    reserve : BB660097 02-45-13-11-xx            name : Loco_piko_diesel_bleue
    reserve : ABJRENAU 13-46-13-11-xx            name : Autorail_Mabar_beige_rouge
    reserve : VAPNOIR1 12-40-13-11-xx            name : Fleishmnn_Piccolo_7161_NS851_noire
    reserve : VAPE150X 08-40-13-11-xx            name : Roco_vapeur_150_X_noire
    reserve : VAPE131_ 04-55-13-11-xx            name : Arnold_131_TX404_noire
    reserve : VAPE1030 11-50-13-11-xx            name : Fleismann_7030_33_verte

]

Si le paramètre général memorisation_train = on, les trains décrits dans ce paragraphe ne sont pas pris en compte, car l'on reprend ceux en place lors de la mise sous tension.
train<0-15>    : <nom_du_train> c<0-315>|g<0-15>    color : <0-23>  [clav<0-4>/pot<0-304>] [<1-50>-<6-64>-<1-28|xx>-<1-28|xx>-<1-28|xx>]  inv  en_auto
  Au démarrage d'UTS, position des trains par défaut sur le plateau (16 trains maximum).
  Nom du train sur 8 caractères ('-', '_', '[' et ']' autorisés), à compléter obligatoirement avec des '_' pour avoir 8 caractères. Exemple :  TGV_____
  c<x> ou G<x> = Canton ou garage de départ.
  Color : <0-23> = Couleur du train optionnelle (La table des couleurs est visible par le menu : Modifications > Rendu TCO à droite de la fenêtre)..
      noir=0, bleu clair=1, vert=2, cyan=3, rouge=4, violet=5, ,jaune=6, blanc=7, vert fluo=8, ,rouge foncé=9,
      orange=10, marron=11, kaki=12, bleu=13, gris vert=14, vert foncé=15, gris foncé=16, gris=17, gris clair=18, gris fond d'écran tco=19,
      magenta couleur des wagons=20, bleu foncé=21, lilas=22, cyan foncé=23
  Caractéristiques du train [min-max-acc-dec-frein] = Vitesse minimum, vitesse maximum, 3 valeurs d'inerties ou 'xx' si pas d'inertie.
  min = Alimentation minimum du train = Le train doit commencer à se déplacer quand la vitesse de consigne = 1.
  max = Alimentation maximum du train = Vitesse maximum à atteindre quand la vitesse de consigne = 64.
  ac, dec, frein = Inertie sur la vitesse des trains (Temps de passage du train de 0 à vitesse maxi).
     Tableau des valeurs 'Accélération' ou 'Décélération" de 1 à 28 donne une inertie de X secondes pour aller de Vmax à 0 ou de 0 à Vmax.
      1 =  0,3 sec,    2 = 0,4 sec,     3 =  0,5 sec,     4 =  0,6 sec,    5 =  0,8 sec,     6 =  1 sec,
      7 =  1,2 sec,    8 = 1,3 sec,     9 =  1,5 sec,   10 =  1,7 sec,   11 =  2 sec,     12 =  2,3 sec,
     13 =  2,7 sec,   14 = 3 sec,     15 =  3,5 sec,  16 =  4 sec,      17 =  5 sec,     18 =  6 sec,
     19 =  7 sec,      20 = 8 sec,     21 =  9 sec,     22 = 10 sec,     23 = 12 sec,    24 = 14 sec,
     25 = 18 sec,     26 = 24 sec,   27 = 36 sec,    28 = 74 sec.
 UTS corrige automatiquement certaines valeurs pour que : 64>=VMAX>=6, 50>=VMIN>=1, VMAX>VMIN, 28>=ACC>=1, 28>=DEC>=1, 28>=FREIN>=1.

acc_progressif : [<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>]
     Une variable commune à tous les trains.
     En accélération, permet d'ajouter un peu plus de progressivité aux faibles vitesses, car les trains ont tendance à accélérer trop vite.
     Indique la vitesse sous la quelle on change de valeur d'inertie (8 vitesses maximum en valeurs croissantes).
     Exemple, si la valeur d'inertie d'un train est définie à 11 et si l'on indique acc_progressif : 5 10 15,
    
l'inertie qui est de 2 secondes pour passer de 0 à 64, passe alors à :
       si la vitesse du train > 15                alors sa valeur d'inertie = 11 = 2 secondes
       si la vitesse du train > 10 et <= 15  alors sa valeur d'inertie = 11 + 1 = 2,3 secondes
       si la vitesse du train >   5 et <= 10  alors sa valeur d'inertie = 11 + 1 + 1 = 2,7 secondes
       si la vitesse du train >   0 et <=   5  alors sa valeur d'inertie = 11 + 1 + 1 + 1 = 3 secondes
     Exemple, si la valeur d'inertie d'un train est définie à 11 et si l'on indique acc_progressif : 2 4 6 8 10 12 14 16,
    
l'inertie qui est de 2 secondes pour passer de 0 à 64, passe alors à :
       si la vitesse du train > 16                alors sa valeur d'inertie = 11 = 2 secondes
       si la vitesse du train > 14 et <= 16  alors sa valeur d'inertie = 11 + 1 = 2,3 secondes  
       si la vitesse du train > 12 et <= 14  alors sa valeur d'inertie = 11 + 1 + 1 = 2,7 secondes  
       si la vitesse du train > 10 et <= 12  alors sa valeur d'inertie = 11 + 1 + 1 + 1 = 3 secondes  
       si la vitesse du train >   8 et <= 10  alors sa valeur d'inertie = 11 + 1 + 1 + 1 + 1 = 3,5 secondes  
       si la vitesse du train >   6 et <=   8  alors sa valeur d'inertie = 11 + 1 + 1 + 1 + 1 + 1 = 4 secondes  
       si la vitesse du train >   4 et <=   6  alors sa valeur d'inertie = 11 + 1 + 1 + 1 + 1 + 1 + 1 = 5 secondes  
       si la vitesse du train >   2 et <=   4  alors sa valeur d'inertie = 11 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 6 secondes  
       si la vitesse du train >   0 et <=   2  alors sa valeur d'inertie = 11 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 7 secondes (Remarque : ici 7 secondes, mais seulement ici entre une vitesse comprise 0 et 2, soit peu de temps en fait au total)
     les valeurs pour une accélération rapide      :   acc_progressif : 10 20
     les valeurs pour une accélération moyenne  :   acc_progressif : 5 10 15 20
     les valeurs pour une accélération lente         :   acc_progressif : 2 4 6 8 10 12 14 16
     les valeurs pour une accélération très lente mais que dans les basses vitesses :   acc_progressif : 1 2 3 4 5 6 7 8
     Essayer les valeurs :  acc_progressif :  2 4 6 8 10 12 14 16  (En fait l'inertie ajoutée est quand même faible, surtout pour une inertie de train = 11 = 2 secondes pour aller de 0 à 64 à l'origine).
     Il faut faire attention au fait que cette inertie se rajoute à l'inertie des trains. Si vous avez des trains avec une inertie de 10 à 20,  cela a beaucoup plus d'impact sur les trains à 20.
     A voir d'autres valeurs, si vous avez déjà des inerties de trains > 10 secondes.

dec_progressif : [<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>]
     Une variable commune à tous les trains.
     En décélération, permet d'ajouter un peu plus de progressivité aux faibles vitesses, pour éviter de ralentir trop vite.
     Indique la vitesse sous la quelle on change de valeur d'inertie (8 vitesses maximum en valeurs croissantes).
     Le principe est le même que pour l'accélération.
     Essayer les valeurs :   dec_progressif : 5  10 15   (Ne pas mettre trop d'inertie, sinon les trains vont bruler les signaux au rouge).

reserve :  <nom_du_train>    [<1-50>-<6-64>-<1-28|xx>-<1-28|xx>-<1-28|xx>]   color : <0-23>  inv   name  :  <commentaires>
   Pour mettre en route facilement des trains (23 trains maximum) que l'on vient de poser sur le réseau.
   Nom du train sur 8 caractères, à compléter si nécessaire avec des '_'. 
   Caractéristiques du train [min-max-acc-dec-frein] = valeur d'inertie ou 'xx' si pas d'inertie.
   color : <0-23> = Couleur du train optionnelle, de 0 à 23.
      noir=0, bleu clair=1, vert=2, cyan=3, rouge=4, violet=5, ,jaune=6, blanc=7, vert fluo=8, ,rouge foncé=9,
      orange=10, marron=11, kaki=12, bleu=13, gris vert=14, vert foncé=15, gris foncé=16, gris=17, gris clair=18, gris fond d'écran tco=19,
      magenta couleur des wagons=20, bleu foncé=21, lilas=22, cyan foncé=23.
      inv = Optionnel, inverse l'alimentation de ce train.
      Il n'est pas garanti que les fonctions élaborées (exemple #balauto) , prennent en compte la polarité inverse de ces locomotives. (A éviter donc).
   name : Commentaire sur 40 caractères maximum sans espace ni caractères particuliers. Sera affiché dans UTS. Utiliser des '_'  à la place des espaces. Ne pas utiliser des sigles '+', '-' ou ':'.
   On peut aussi décrire des groupes de wagons à essieux résistifs qui sont souvent seuls sur le réseau.

Quand on ajoute un train par le menu : ' Tables > Caractéristiques des Trains' en cliquant dans la colonne 'n° TR' sur une
ligne libre, la fenêtre suivante apparaît :
a
Il suffit de choisir entre le nom par défaut ou un train en réserve avec prise en compte automatique de ses caractéristiques
[min-max-acc-dec-frein] et 'inv'. Le commentaire qui suit 'name :' est affiché sur ces cases, sous le nom de la loco.

Remarques :
J'ai mis pour ma locomotive Roco BD rouge '05' en décélération, pour éviter de griller les cantons en 'balauto',
car cette locomotive a naturellement beaucoup d'inertie.
Pour changer la couleur du train, il faut passer par le menu : "Modifications > Rendu TCO".


Explications supplémentaires sur les paramètres "acc_progressif" et "dec_progressif" :
Ces paramètres ajoutent de l'inertie aux basses vitesses.
Pour un train ayant comme accélération et décélération successivement les valeurs  = 10, 15 et 20, on affiche les courbes en fonction des valeurs des paramètres "acc_progressif" et "dec_progressif'".

On constate que l'accélération et décélération sont plus ou moins progressifs, suivant les valeurs de ces paramètres.
Si l'on ne défini pas ces paramètres, on retrouve l'accélération prévue les les trains, soit pour 10 = 1,7 secondes, 15 = 3,5 secondes ou 20 = 8 secondes, pour passer de 0 à 64.

En rouge, vert et bleu, le train à une accélération et décélération propre de 10, 15 et 20.
Pour chaque série de trait d'une couleur, le trait de gauche correspond au paramètre "acc_progressif"  =  pas défini (ligne à située à gauche), "1, 2, 3, 4, 5, 6, 7, 8" (un peu d'inertie) et  "2, 4, 6, 8, 10, 12, 14, 16" (plus d'inertie, à gauche).
Accélérations suivant l'accélération propre au train (10, 15 ou 20) et "acc_progressif " (La vitesse va de 0 à 64 et le temps est en secondes) :
acc

Décélérations suivant la décélération propre au train et "dec_progressif " :
dec


Pour cette deuxième série de courbe, avec un train ayant comme accélération et décélération les valeurs fixes de 20 (= 8 secondes), on teste plusieurs valeurs pour les paramètres "acc_progressif" et "dec_progressif'".
Le trait de gauche correspond au paramètre "acc_progressif"  =  pas défini (ligne droite), puis   "5, 10, 15",     "1, 2, 3, 4, 5, 6, 7, 8",    "18, 20, 22, 24, 26",
"1, 4, 7, 10, 13, 16, 19, 22",    "2, 4, 6, 8, 10, 12, 14, 16",    18, 20, 22, 24, 26, 28",    1, 5, 10, 15, 20, 25, 30, 35"  et  "30, 32, 34, 36, 38, 40".

On constate que l'accélération et décélération sont plus ou moins progressifs, suivant les valeurs de ces paramètres et affectent surtout les basses vitesses.

Accélérations suivant divers valeurs de "acc_progressif " (La vitesse va de 0 à 64 et le temps est en secondes) :
acc

Décélérations suivant divers valeurs de "dec_progressif " (La vitesse va de 0 à 64 et le temps est en secondes) :
dec

Il faut faire attention au fait que cette inertie se rajoute à l'inertie des trains. Si vous avez des trains avec une inertie de 10 à 20,  cela a beaucoup plus d'impact sur les trains à 20 que ceux à 10.


Le paramétrage manuel des trains

Pour un fonctionnement optimal, il faut trouver les paramètres de chaque trains, ce qui prend 2 minutes par locomotive.
Lancer UTS et faire tourner un train en rond.
Après cette minute de rodage, aller dans le menu 'Tables > Caractéristiques des Trains'.
Cliquer sur la case 'Profile : Vmin, Vmax', sur le train en fonctionnement..
Cliquer sur la case [DEFAUT].
Tourner la manette au minimum pour que le train soit alimenté et que la colonne 'Vites' n'indique plus 0, mais une valeur faible < 4.
Sur la ligne 'VMIN', cliquer sur les cases '-' et '+' pour que le train avance le plus lentement possible (Il ne faut pas qu'il reste immobile). Noter 'VMIN'.
Ensuite mettre la manette au maximum et régler 'VMAX' pour une vitesse réaliste.
Noter 'VMAX' et passer à la locomotive suivante.

Si tous les trains vont trop vite et qu'aucun train n'est réglé à 'VMAX' = 64, il faut sans doute réduire la tension d'alimentation des voies (Entre12 et 15 volts).

Exemple de paramétrage de locomotives pour une alimentation de +15 Volts :
Marque
Modèle
VMIN
VMAX
ROCO
DB 215 083-7
5
20
TRIX
RailChem
5
64
TRIX
115052
7
50
TRIX
67381
9
64
MABAR
ABJ Renault
13
46
FLEISHMANN
7161 - NS851
12
40
ROCO
150-X
8
40
PIKO
66097
2
45
ARNOLD
131 TX404
4
55

Recopier ces valeurs dans la section '#train' de 'config.txt', sur les lignes 'train:' et  'reserve:', comme indiqué ci-dessus.


Les menus d'UTS

La touche 'Esc' permet de revenir au TCO depuis un affichage de 'Debug' de 'Tables' ou d'édition.
Les écrans modifiables sont rangés sous le menu 'Tables'.
Les écrans de consultation ou de débug sont rangés sous le menu 'Debug'.
Un clic-droit sur ces écrans permet de passer à la page suivante.
Si une table possède une colonne désignable, elle a un petit trait en diagonal dans le titre de la colonne.

Les touches à accès direct
En appuyant sur ces touches, on affiche directement un TCO ou une fenêtre d'un tableau.
Les touches [0] à [7] affichent le TCO correspondant. La touche [²] située au bout du clavier affiche aussi le TCO 0.
Les touches :
  [²]   =  TCO 0
  [8]  =  Caractéristiques des trains
  [9]  =  Tableau de la liste des événements horodatés
  [)]   =  Tableau des déplacements
  [=]  =  Tableau des itinéraires

Les fenêtres d'édition des TCO
On accède à ces fenêtres par le menu 'Modification > ...' ou directement en appuyant sur la touche ' + '.
La touche ' + ' permet d'afficher la fenêtre d'édition. Si l'on appuie encore sur la touche ' + ', cette fenêtre se déplace,
ensuite la fenêtre d'aide s'affiche, puis la fenêtre de rendu s'affiche, puis on ferme cette fenêtre.
La palette de couleur dans les fenêtres d'édition n'est pas désignable, mais sert d'information sur le défilement des couleurs.  
Clic-droit = Coller, Clic-gauche = Copier. Cela permet de faire du Copier/Coller, même entre TCO différents.

L'aide contextuelle sur l'édition des blocs de TCO
Dans la fenêtre d'édition de TCO, une aide s'affiche en bas quand l'on sélectionne un bloc de TCO.
Ceci permet de connaître les paramètres utilisés par ce bloc de TCO.
Par exemple, quand on sélectionne un bloc d'aiguillage, on affiche :
a

L'affichage sur les TCO
Des points noirs sur la voie indiquent la limite entre deux cantons de numéros différents.
Les flèches indiquent le sens de parcours du train sur tous les éléments de voie.
a

 
Des éléments de voies en pointillés symbolisent une voie souterraine ou l'entrée d'un tunnel.
a


Les blocs pour les croisements de voies
L'aspect des blocs du TCO de pleine voie sont modifiables, en renseignant les champs '#1', '#2' et 'opt'.

Attention : Si les croisements peuvent être représentés, ils ne sont pas gérés nativement par UTS (Risque de collision).
Les croisements peuvent être gérés dans les déplacements à condition de réserver le canton coupé par un déplacement. Voir un cas pratique en fin de paragraphe.
Les croisements peuvent être gérés en mode BAL (Bloc Automatique) à condition de bloquer le train si le canton coupé est occupé.
Il n'y a bien sûr pas de problème si les croisements sont sur deux niveaux distincts.

Une TJD (Traverse de Jonction Double) peut être affichée par deux aiguillages tête bêche dont un avec le même n° d'aiguillage ou sans n° d'aiguillage.

Remarque
: Sur un ancien TCO, il faut que les paramètres '#1', '#2' et 'opt' des blocs de pleine voies soient par défaut à -1, sinon des
dessins supplémentaires vont apparaître. Il faut donc parfois reprendre l'édition des blocs de voie pour mettre'-1' dans  '#1', '#2' et 'opt'.

Seul les blocs simples de pleines voies peuvent être complétés graphiquement.
Les blocs avec des aiguillages, feux, butoir ou contact ne sont pas enrichissables.
Pour ajouter une voie secondaire (ici en rouge) sur un bloc simple, il faut renseigner les champs '#1' et '#2' :

   '#1' avec la valeur = 0,1, 2, 3, ... 16 pour obtenir le dessin ci-dessous.
   '#2' avec le n° de canton de la voie secondaire ajoutée.
On obtient le dessin de l'ajout de la voie secondaire suivante, en fonction de '#1' :
a


Pour ajouter des traits symbolisant un pont, il faut renseigner le champ  '#1' avec la valeur = 100, 200, 300 ...800.
On obtient l'ajout des traits noirs suivants, en fonction de '#1'. Exemple :
a

On peut combiner ces ajouts en additionnant les valeurs. Ajouter une voie secondaire et un pont en mettant dans '#1' la somme des deux choix. Exemple '#1' = 200+2 = 202.

Pour les éléments de voies ci-dessous, on peut donner un aspect en pointillé pour symboliser le passage sous le décor, avec la variable 'OPT'.
  'opt' = -1 ou 0 : la voie est pleine.
  'opt' = 1 : la voie est dessinée en pointillées.
On obtient les traits suivants, en fonction de 'opt' =-1(ou0) et 1:
cr

Si l'on a une voie principale plus une voie secondaire dans le même bloc,
  'opt' = -1 ou 0 : voie principale pleine et voie secondaire pleine.
  'opt' = 1 : voie principale en pointillée et voie secondaire pleine.
  'opt' = 2 : voie principale pleine et voie secondaire en pointillée.
  'opt' = 3 : voie principale en pointillée et voie secondaire en pointillée.
On obtient les traits suivants, en fonction de 'opt' :
.a

Uniquement pour les éléments de voies horizontales ou verticales, on ajoute un pictogramme si opt = 4 à 29 (voir bouton poussoir).
Exemple de pictogramme pour opt = 4 à 9 :
Picto

Voici des exemples d'utilisation.   Voie n° 0 = voie rouge et voie n° 1 = voie bleue.
a

a


Limitations:
Sur le trait de la voie secondaire, il n'y aura pas de flèche indiquant le sens du train.
Dans certains cas des points noirs pour séparer les cantons, seront en trop ou manquants.
Si ce cas se présente, ajouter un élément vertical, horizontal ou en diagonal pour par exemple séparer un aiguillage et un croisement.

Les croisements :
Voici une méthode pour configurer un croisement comme indiqué dans les illustrations ci-dessous, pour assurer la sécurité des convois.
On utilise 2 variables dans 'config.txt' pour gérer le conflit au croisement. Ceci pour bloquer un train que lorsque l'autre train est sur le canton du croisement.
Dans #balauto, on utilise une variable 'var_12.1' plutôt que 'det_2.1', pour bloquer un train que si le canton du croisement est occupé et non pas simplement réservé.
Sinon en utilisation habituelle, une ligne 'cant:' bloque un train sur un prochain canton occupé ou réservé.

#balauto
  cant:c1:+   ral:32 dec:11   plusur:       blocage: det_2.1 | var_14.1 a1.1
  cant:c3:+   ral:32 dec:11   plusur:       blocage: det_4.1 | var_12.1 a1.1

#depl
  d0   c1+30  c2+40  c4+1 c5+60  a1.0       start:c1  libe:det_1  fin:det_5        taf0 tsf0 name: D1
  d1   c1+30  c2+40  c4+1 c7+60  a1.1       start:c1  libe:det_1  fin:det_7        taf0 tsf0 name: D2
  d2   c3+30  c4+40  c2+1 c6+60  a1.0       start:c3  libe:det_3  fin:det_6        taf0 tsf0 name: D3

#tdv
    equ: l  det_2 = var_12
    equ: l  det_4 = var_14


On obtient le fonctionnement suivant :
Les deux trains avancent, car aucun n'est sur les cantons de croisement (n°3 et n°4).
croisement

Si le train vert est le premier (et aiguillage dévié) le train rouge est bloqué.
croisement

Si le train rouge est le premier (et aiguillage dévié) le train vert est bloqué.
croisement

Quand les trains sont engagés sur les cantons n° 2 ou n°4, il ne faut pas actionner l'aiguillage 'a1'.
Les déplacements automatiques sont aussi protégés, par les directive dans '#depl'.
Il est néanmoins possible qu'une autre configuration dans 'config.txt' donne de meilleurs résultats.
Je vous encourage à simuler ces comportements.

Les boucles de retournement :
Voici un exemple avec les cantons n° 0, 1 et 2.
Il est conseillé d'avoir au moins 5 cm de voie entre l'aiguillage et la boucle de retournement, qui fassent parti du canton n° 1. Ceci évite les faux contacts
du dernier wagon sur l'aiguillage, afin de ne pas libérer par erreur le canton n° 1. Cela évite aussi d'actionner l'aiguillage automatiquement avec encore des wagons dessus.
Boucle

Configuration dans le fichier 'config.txt'.
Déclaration de l'alimentation des cantons en fonction de la positions des aiguillages :
#selectif
[
     c1:+ c0+
     c0:- c1-
     c2:+ c1+ a1.0          c2:- c1+ a1.1
     c1:- c2+ a1.1          c1:- c2- a1.0
]


Utilisation de la fonction de commande automatique des aiguillages, quand le train avance sur le canton n° 2 en manuel :
On peut ajouter une barrière infra-rouge facultative (entrée 'in_43') aux frontières du canton n° 1 et n° 2, pour ne pas commander l'aiguillage si il y a encore des wagons dessus.
On pourrait ajouter une ligne pour commander l'aiguillage quand on arrive sur le canton n° 1 en vitesse positive, pour passer toujours dans le même sens dans la boucle.
#aigauto
[
    cant:  c2:+5    plusur: c1         condi: in_43.0           actions:  a1.1
    cant:  c2:-5    plusur: c1         condi: in_43.0           actions:  a1.0
]


Utilisation de la fonction de limitation de vitesse et de cantonnement automatique :
'vitmax' facultatif, pour limiter la vitesse d'un train sur cette boucle.
On protège les cantons d'entrée et de sortie.
#balauto
[
  vitmax:c2:-30
  vitmax:c2:+30
  cant:c1:-   plusur: c2       blocage: det_0.1
  cant:c1:+   plusur: c0       blocage: det_2.1
  cant:c2:-   plusur:          blocage: det_1.1
  cant:c2:+   plusur:          blocage: det_1.1
]


Déclaration des déplacements :
Un déplacement 'd0' pour partir du canton n° 0 vers le canton n° 2 (Exemple de boucle sens horaire).
Un déplacement 'd1' pour partir du canton n° 0, parcourir la boucle (sens horaire) et enchainer avec un second déplacement pour revenir sur le canton n° 0.
Un déplacement 'd2' pour partir du canton n° 2 (boucle sens horaire), vers le canton n° 0.
Si l'on veut un déplacement pour parcourir la boucle, il faut un déplacement pour entrer dans la boucle puis activer automatique un second déplacement pour sortir de la boucle.
On peut commander les déplacements depuis un clic sur les rectangles rouge (Active les déplacements n° 0 (1er dépl de la liste pour C0->C2) et n° 2).
Un clic sur les rectangles [C0] puis [C2] active le déplacement 'd0'.
Pour commander un retournement complet du train au départ sur le canton n° 0, on place un bouton [DPL C0 BOUCLE] qui active la variable 6501 = Déplacement n° 1.

#depl
[
  acc-dec: 14-14
  d0   c0+30  c1+40  c2+20 a1.0    start:c0  libe:det_1  fin:det_2      taf0 tsf0 name:C0___BOUCLE_RETRN_HAUT
  d1   c0+30  c1+40  c2+20 a1.0    start:c0  libe:det_1  fin:det_2      taf0 tsf0 name:C0___BOUCLE_RETRN_C0       sfin:depl_start_run_2
  d2   c2+30  c1-40  c0-20 a1.1    start:c2  libe:det_1  fin:det_0      taf0 tsf0 name:BOUCLE_RETRN___C0
]


Si le canton n° 2 est assez grand, on peut placer une barrière infra rouge à mi-parcours pour arrêter les déplacements 'd0' et 'd1'. Dans ce cas, on est sûr qu'il n'y a plus de wagons sur le canton précédent.

Animation du TCO :
Boucle

On peut visualiser l'état de la barrière infrarouge facultative avec un élément de voie prévu pour.
Boucle

Si le réseau comprend une boucle de retournement, ajouter au TCO un bloc de fonction multiple 'INV' avec 'opt' = 8.
Quand un train sort d'un boucle de retournement, le sens de sa commande est inversé.
Ce bloc de fonction sert à remettre les cantons inversés à l'état initial, pour retrouver le sens original de la commande de vitesse de ce train.


Les blocs - Feux de passage à niveau routier

En plus d'afficher des feux ferroviaires classiques (OPT=1, 2, 3, ou 4), ce bloc permet de visualiser un passage à niveaux.
Il faut utiliser un bloc TCO de type 'Feu' avec l'option 'OPT:' = 5 ,
Pour animer ce bloc, il faut renseigner V1 = variable d'entrée (Exemple : 'det2_4' pour un clignotement si le canton n° 4 est occupé).
La variable det2_xx est temporisée par rapport à la variable brute det_xx, ce qui évite des clignotements intempestifs des feux.
On affiche un bloc avec feux clignotants, si la variable = 1.
Exemples :  V1='det_xx'= 0     V1='det_xx' =1
a

Pour animer un passage à niveau au milieu d'un canton, avec un servomoteur, on peut utiliser les équations  (ici au milieu du canton n° 7)
#tdv
[
@ Barrières du passage à niveau placées sur le canton n° 7, activées par le servo n° 0.
@ Vitesse de fermeture rapide  = 50  Position fermée  = 950.
@ Vitesse de d'ouverture lente = 20  Position ouverte =  80.
    equ: l  det2_7 =val srv_cmd_000 950 =val srv_cmd_010 50
    equ: ln det2_7 =val srv_cmd_000  80 =val srv_cmd_010 20

Pour animer un passage à niveau au début d'un canton, avec des diodes leds rouge, on peut utiliser les équations  (ici au début du canton n° 5, à la suite du canton n° 4)
avec les variables det2p_xxx et det2m_xxx.  On fait clignoter les leds si le train est sur le canton n° 5 ou si il avance sur le canton précédent n° 4.
#tdv
[
@ Feux clignotants activées par les leds n° 45, si le train est sur le canton n° 5.
@ Si un train avance sur le canton précédent n° 4, on active aussi ces feux.
    equ: l det2_5 o det2p_4 = led_45
    equ: l det2_5 o det2p_4 = led_cli_45

Pour animer les servo avec du retard, voir le paragraphe "Pour obtenir des délais de quelques secondes dans les actions"

Les blocs - Affichage de la détection d'un train au droit d'une barrière infrarouge
Ce bloc informatif est différent du bloc 'Etat de l'occupation du canton'.
Si le train coupe une barrière infrarouge ou passe sur un contact, ce bloc animé permet de savoir si la détection fonctionne.
Pour animer ce bloc, il faut renseigner V1 =  variable d'entrée (Exemple : 'in_42').
Exemples : V1='in_xx'= 0     V1='in_xx' =1
a

Ces blocs permettent un gain de place sur le TCO.
Les butoirs peuvent afficher en plus un détecteur fin de parcours, si la variable 'V1' est définie.
Si 'V1' est à -1, le symbole du détecteur n'est pas affiché.
Ceci permet de savoir si le train est proche du butoir.
C'est utile pour vérifier le fonctionnement des déplacements qui se terminent sur cette variable.
Pour animer ce bloc, il faut renseigner V1 = variable d'entrée (Exemple : 'in_42').
Un détecteur placé 10 cm avant un butoir, permet de rentrer complètement un train sur une voie de garage.
Exemples : V1=-1     V1='in_xx'= 0     V1='in_xx' =1
a

Pour les déplacements automatiques :
 - Si un garage se termine par un butoir, il est indispensable d'avoir un capteur en fin de course (de 5 à 10 cm du butoir),
    pour donner le signal de fin à un déplacement automatique.
 - Si un canton se termine par un butoir, il n'est pas nécessaire d'installer un capteur, le train s'arrêtera
    automatiquement quand le canton précédent sera libre (Avec l'instruction 'libe:').

Les blocs - Dételeurs
Ces blocs affichent l'état d'un dételeur sur la voie. L'affichage dépend de l'état de la variable 'V1'.
Pour le moment, ces blocs sont simplement animés, sans être désignables.
Exemples :  V1='in_xx'= 0      V1='in_xx' =1 :
aa


Les blocs - Servos-moteurs

Il ne faut pas définir des boutons de commandes sur un TCO, et une équation dans "config.txt" pour le même servo. Cela reviendrait à donner des ordres contradictoires à ce servo.
Les servos-moteurs servent à motoriser un pont tournant, des barrières de passage à niveaux ou des automates.
La course et la vitesse de chaque servo est configurable. (5 servos maximum par carte).
La consigne est comprise entre 0 et 1023 et la position médiane = 512.
La consigne est divisée par 4 avant d'être envoyée à la carte électronique, ce qui donne 256 positions effectives à un servo.

Remarque : La vitesse affichée dans la table 'Menu : Débug> Servo-moteur' ne correspond pas à la variable 'OPT' du bloc
de TCO 'Servo', mais au nombre de pas de déplacement du servo par 'tic' de base.

La carte UTS délivre un créneau vers les servo, compris entre 1 msec et 2 msec, avec un neutre à 1,5 msec.
Certains servo récents sont prévus pour fonctionner entre 0,7 msec et 2,3 msec pour obtenir 180 ° de battement.
Donc, avec ce type de servo, on a un déplacement de +/- 45° soit 90°. C’est ce que j’observe sur mon train, 90° de débattement.
Dans tous les cas un créneau de 1,5 msec est la position médiane, soit 512 dans UTS.

Il existe aussi des servomoteur de type spécial, par exemple pour animer un treuil.
C’est le servo 360°, donc sans buté, avec un fonctionnement prévu en continu. Un servo à rotation continue fonctionne :
    - dans un sens avec les largeurs d'impulsion entre 1ms et 1,5ms
    - à l'arrêt à 1,5ms
    - dans l'autre sens entre 1,5ms et 2ms
Avec UTS, on pourrait avoir un problème de servo qui tourne sans fin, si l'on croit utiliser un servo standard 90° ou 180°.
Pour des essais, prendre un micro servo  à 3 euro pour faire des tests (pas un modèle 360°).

Les servos se commande aussi dans la section '#tdv' à partir des variables :

srv_cmd_xxx = consigne de position du servo de 0 à 1023.   (xxx  = numéro de variable de 000 à 004, 100 à 104...).

srv_cmd_xxx+10 = pas de déplacement du servo de 0 (lent)  à 1023 (rapide) à chaque tic (80 ms). (xxx  = numéro de variable de 010 à 014, 110 à 114...).

Exemples :
  srv_cmd_000 = 512 => le servo n°0 doit être en position médiane. (de 0 à 1023).
  srv_cmd_010 = 20 => la vitesse de déplacement du servo n° 0 est de 20 pas toutes les 80 ms.
  Ceci ne sert que dans 'config.txt' pour faire bouger un servo suivant l'état d'une variable (de 1 à 1023).
  On peut ainsi fermer lentement un passage à niveau par un servo, si un train est détecté.
  (si var_511 est toujours égale à 0)
  equ:  l  var_511  =val  srv_cmd_0   0       Envoi de la consigne '0' au servo n° 0.
  equ:  l  var_511  =val  srv_cmd_10 20       Vitesse de déplacement du servo = 20 (1=lent, 1023=rapide)
ou
  equ:  l   in_0  =val  srv_cmd_0     0       Passage fermé
  equ:  l   in_0  =val  srv_cmd_10   50       Vitesse fermeture
  equ:  ln  in_0  =val  srv_cmd_0  1023       Passage ouvert
  equ:  ln  in_0  =val  srv_cmd_10  100       Vitesse ouverture

Pour utiliser ces servo, de nouveaux boutons poussoirs ont été définis, exemples :
servo

1 / Pour un déplacement ponctuel dans un sens ou l'autre,  exemple : une orientation d'un objet tant que le bouton reste enfoncé, avec comme configuration, #1=-1 et  #2=-1 :
#1    : -1
#2    : -1
S+    : = [+] ou [-] = sens du déplacement
V1    : Variable du servo = 8000-8004, 8100-8104
V2    : -1
OPT   : temps de rotation (0-255 max=25secondes) en 1/10 de secondes
TEXTE : texte


2 / Pour plusieurs positions du servo  (#2) avec plusieurs boutons poussoirs, un BP par position,  exemple : pont tournant, avec comme configuration, #1=-1 et #2 <>-1 :
#1    : -1
#2    : (0-1023) Valeur à atteindre, si le bouton poussoir a été actionné
V1    : Variable du servo = 8000-8004, 8100-8104
V2    : -1
OPT   : temps de rotation (0-255 max=25secondes) en 1/10 de secondes
TEXTE : texte


3 / Pour un déplacement incrémentale à pas fixe (+-#1), à chaque action d'un bouton poussoir,  exemple : une orientation d'un objet, avec comme configuration, #1<>-1 et #2=-1 :
#1    : (0-1023) Valeur du pas
#2    : -1
S+    : = [+] ou [-] = sens du déplacement
V1    : Variable du servo = 8000-8004, 8100-8104
V2    : -1
OPT   : temps de rotation (0-255 max=25secondes) en 1/10 de secondes
TEXTE : texte


4 / Pour deux positions, avec un bouton poussoir change de position à chaque action,  exemple : une animation, avec comme configuration, #1<>-1 et #2<>-1 et V2=-1 :
#1    : Valeur bouton poussoir au départ (0-1023)
#2    : Valeur bouton poussoir autre position (0-1023)
V1    : Variable du servo = 8000-8004, 8100-8104
V2    : -1
OPT   : temps de rotation (0-255 max=25secondes) en 1/10 de secondes
TEXTE : texte


5 / Pour deux positions commandées par une variable ou une entrée numérique, exemple : une barrière de passage à niveau, configurer une équation dans 'config.txt' :
#tdv
[
@ Barrières du passage à niveau placées sur le canton n° 7, activées par le servo n° 0.
@ Vitesse de fermeture rapide  = 50  Position fermée  = 950.
@ Vitesse de d'ouverture lente = 20  Position ouverte =  80.
    equ: l  det_7 =val srv_cmd_000 950 =val srv_cmd_010 50
    equ: ln det_7 =val srv_cmd_000  80 =val srv_cmd_010 20
]

Dans le fichier 'config.txt', on peut manipuler les variables d'UTS. Les servos se commande dans la partie '#tdv'à partir des variables :
 - srv_cmd_xxx = consigne de position du servo de 0 à 1023.
 - srv_cmd_xxx+10 = pas de déplacement du servo de 1 à 1023 à chaque tic (80 ms).

Remarque : Ne pas oublier de donner une vitesse de déplacement non nulle, sinon le servo ne bougera pas.
Pour animer les servo avec du retard, voir le paragraphe "Pour obtenir des délais de quelques secondes dans les actions"

Les blocs - Texte
Dans la fenêtre d'édition, choisir le bloc avec "text" en bas.
On affiche 4 lignes de 4 caractères.
La couleur du texte par défaut est celle définie dans la fenêtre de rendu, à la ligne "Bloc d'écran du TCO / Couleur texte".

Texte =  Caractères  0-9  a-z   A-Z   [  ]   <  >   (  )  *  -   _  et espace.
Si la variable 'C1' est définie, elle donne la couleur du texte.
Si 'OPT' = -1 ou 0, on affiche le texte simple sur 4 lignes.
Si 'OPT' = 1 à 29, on ajoute le pictogramme correspondant au numéro (voir Bouton Poussoir).
Si 'OPT' = 27 ou 28, la variable 'C1' donne la couleur du rectangle (voir Bouton Poussoir). La couleur du texte est alors celle par défaut.
Si 'OPT' = 29 et si les variables 'C1' et 'C2' sont définies, elles donnent la couleur des rectangles haut et bas. Les variables 'C3' et 'C4' donnent la couleur des rectangles gauche et droit (voir Bouton Poussoir).
Il est possible de mixer les rectangles horizontaux et verticaux, sachant que les rectangles verticaux sont affichés par dessus les rectangles horizontaux. La couleur du texte est alors celle par défaut.
Exemples avec la couleur par défaut ou imposée :
texte

Les blocs - Texte & Numérique - Variable analogique.
Dans la fenêtre d'édition, choisir le bloc avec "0000" en bas, disponible à coté du bloc de texte.
Ce bloc permet d'afficher 3 lignes de texte  +  une valeur comprise entre 0 et 1024 sur 4 digits.
Un trait symbolisant un bargraphe animé est affiché au dessus des chiffres.
(0 à 1024).

Texte = caractères     0-9  a-z   A-Z   [  ]    <  >   (  )  *  -   _  et espace.
V1 = Variable à afficher.
Si la variable 'C1' est définie, elle donne la couleur du texte.
Si la variable 'C2' est définie, elle donne la couleur du trait.
Si la variable 'C3' est définie, elle donne la couleur du nombre.
Exemples :
 - pour afficher la position réelle du servo-moteur 0, 'V1' = 280x, (La position réelle suit la consigne en fonction de la vitesse demandée).
 - pour afficher la consigne du servo-moteur 0, 'V1' = 800x.
Bloc numérique


Le bloc - Horloge

Un pied est ajouté quand l'horloge est en marche, il est de couleur jaune quand le train de nettoyage est actif. Affiche le jour de 0 à 6, l'heure et les minutes.
Les couleurs sont paramétrables par C1, C2 et C3.
L'horloge se bloque, quand un déplacement ne s'est pas fini dans un temps imparti, suite à un déraillement ou faux contacts sur la loco.
Après remise en route du train l'horloge repart. Ceci permet de synchroniser les trains qui n'arrivent pas à l'heure.
Exemples, voyant rouge et "bloc" = horloge en marche mais bloquée,  voyant vert = horloge en marche, "off" = horloge à l'arrêt"bloc" et "off" = horloge à l'arrêt et bloquée :
bloc horloge Voir le paramétrage ici.


Le bloc - Bouton Poussoir
Ce bloc 'Bouton-Poussoir' est utilisé pour changer l'état d'une variable.
La couleur du voyant est celle définie par défaut dans la fenêtre de rendu, à la ligne "Voyant interrupt/bp".
L'aspect de ce bloc varie en fonction de la variable 'OPT'.  Exemples de pictogramme ajouté pour 'OPT' = -1 à 29.
BP

Texte =  Caractères  0-9  a-z   A-Z   [  ]    <  >   (  )  *  -   _  et espace.
La variable 'V1' est mise à 1, tant que l'on appuie sur le bouton.
La variable 'V2' est mise à 1, au moment d'appuyer sur le bouton.
La variable 'V3' est mise à 0, au moment d'appuyer sur le bouton.
Si 'V2' (ou 'V3') est renseignée le bouton reste enfoncé tant que la variable vaut 1 (ou 0).
Si l'on veut que le bouton ne reste que momentanément visiblement enfoncé en utilisant V2 ou V3, il faut renseigner une variable bidon (non utilisée) en 'V1'.

Si 'OPT' = -1 ou 0, on affiche le bouton poussoir classique avec un voyant.
Si 'OPT' = 1 à 29, on ajoute le pictogramme correspondant à ce numéro.
Si 'OPT' = 27 ou 28, la variable 'C1' donne la couleur du rectangle.

Si 'OPT' =  29 et si les variables 'C1' et 'C2' sont définies, elles donnent la couleur des rectangles haut et bas. Les variables 'C3' et 'C4' donnent la couleur des rectangles gauche et droit.
Il est possible de mixer les rectangles horizontaux et verticaux, sachant que les rectangles verticaux sont affichés par dessus les rectangles horizontaux.
Exemples avec :  C1=violet,   C1=violet et C2=vert,   C3= rose et C4 =vert foncé,  C1=jaune et C3=rouge.
BP

Le voyant en haut à gauche est affiché par défaut si opt = -1, mais plus quand l'on affiche un pictogramme.
Si l'on ajoute +100 à 'OPT', on affiche ce petit voyant en haut à gauche.
Exemples avec opt = 101 à 104.
BP


Le bloc - Interrupteur
Ce bloc est utilisé pour changer l'état d'une variable.
La couleur du voyant est celle définie par défaut dans la fenêtre de rendu, à la ligne "Voyant interrupt/bp".
L'aspect de ce bloc varie en fonction de la variable 'OPT'.  Exemples de pictogramme ajouté pour 'OPT' = -1 à 29.
int

Texte =  Caractères  0-9  a-z   A-Z    [  ]  <  >   (  )  *  -   _  et espace.
La variable 'V1' change d'état (0/1) à chaque pression sur ce bouton.

Si 'OPT' = -1 ou 0, on affiche l'interrupteur classique avec voyant.
Si 'OPT' = 1 à 29, on ajoute le pictogramme correspondant à ce numéro.
Si 'OPT' = 27 ou 28, la variable 'C1' donne la couleur du rectangle.

Si 'OPT' =  29 et si les variables 'C1' et 'C2' sont définies, elles donnent la couleur des rectangles haut et bas. Les variables 'C3' et 'C4' donnent la couleur des rectangles gauche et droit.
Il est possible de mixer les rectangles horizontaux et verticaux, sachant que les rectangles verticaux sont affichés par dessus les rectangles horizontaux.
Exemples avec :  C1=violet,   C1=violet et C2=vert,   C3= rose et C4 =vert foncé,  C1=jaune et C3=rouge.
int

Le voyant en haut à gauche est affiché par défaut si opt = -1, mais plus quand l'on affiche un pictogramme.
Si l'on ajoute +100 à 'OPT', on affiche ce petit voyant en haut à gauche.
Exemples avec opt = 101 à 104.
int


 Les blocs - Multifonctions
Pour exploiter facilement UTS, disposer ces blocs de fonction sur les TCO.
Depuis la fenêtre d'édition du TCO, utiliser le bloc marqué 'DPL' pour créer tous ces blocs.

Il faut mettre les 8 blocs ci-dessous sur le TCO principal, pour faciliter l'exploitation du réseau.
Blocs : 'Stop',  'Commandes', 'Déplacements',  'Itinéraires',  'Halte',  'Blocage', 'Affectation automatique Loco->Canton' et 'Raz cantons inversés' .
bloc

Renseigner la valeur 'OPT' du bloc pour définir la fonction d'un bloc.
Liste des fonctions possibles :
OPT = 4 : 'STP'
 - Stop. Arrêt d'urgence pour stopper tous les trains en cas de problème.
 - Un clic sur ce bloc stoppe tous les trains. Un second clic remet tout sous tension progressivement.
      On peut aussi activer l'arrêt d'urgence depuis un bouton poussoir installé sur le réseau, qui alimentera la variable "arret_urg_on".
      Ce bouton sur le réseau fonctionne en parallèle avec le bouton du TCO, Ils ont la même fonction. 
      Dans ce cas, on branche un bouton poussoir sur une entrée "in_xxx", et dans la partie "#tdv" l'on décrit l'équation  "equ: l in_xxx = arret_urg_on".
      Si l'on veut connaitre l'état de l'arrêt d'urgence, il faut lire la variable "arret_urg_state" (1=UTS est en arrêt d'urgence).

OPT = 7 : 'CMD'
 - Commandes actives. Affiche la consigne de vitesse des trains.
 - Utile avant de remettre tout sous tension par le bloc 'STP'.

OPT = 1 : 'DPL'

 - Affiche la liste des déplacements en cours.
 - Un clic sur ce bloc annule tous les déplacements en cours.

OPT = 2 : 'ITI'
 - Affiche la liste des itinéraires en cours.
 - Un clic sur ce bloc annule tous les itinéraires en cours.

OPT = 5 : 'HLT'
 - Affiche la liste des cantons en 'halt:' stoppés par les directives 'halt:' de '#balauto'.
 - Si l'on clic sur ce bloc, la fonction 'halt:' est inhibée et les trains pourront continuer à avancer.

OPT = 6 : 'BLC'
  - Affiche la liste des cantons en 'blocage:' bloqués par les directives 'cant:' de '#balauto'.
  - Si l'on clic sur ce bloc, la fonction 'cant:' est inhibée et les trains pourront continuer à avancer.

OPT = 3 : 'AFF'
 - Bloc d'affectation automatique 'Train > Canton'. Dans le cas où un canton n'a pas de train et un train
   est sans canton, ce bloc affiche le nom du train et le numéro du canton.

 - Un clic sur ce bloc va affecter ce train à ce canton. Sert à replacer un train quand UTS l'a perdu.
 - Résout 2 fois sur 3 un problème de captage ou de perte de synchronisme entre UTS et le réseau.
 - Fonctionne rarement si une locomotive est arrêtée avec chaque bogie sur un canton différent.

OPT = 8 : 'INV'
 - N'est utile que si le réseau comprend une boucle de retournement.
 -
Bloc permettant de remettre les cantons à l'état initial. Quand un train parcourt une boucle de retournement, en sortie la commande du train est inversée.
   Un clic sur ce bloc fait un raz des états "Cantons inversés", à condition que les trains soient à l'arrêt.


Utilisation des Blocs Multifonctions
En temps normal, les blocs ont l'allure suivante :
bloc

En cours de fonctionnement, ils peuvent changer comme ci-dessous.

Sert de bouton 'Panic'.
Si l'on clique sur ce bloc, les trains s'immobilisent et le bloc devient rouge. Utilisé en cas de déraillement.
Changer aussi d'état, quand on appuie sur un bouton poussoir qui affecté à la variable "arret_urg_on".
a
Affiche la valeur de consigne de vitesse des trains. Correspond à la position des manettes ou la vitesse donnée depuis le clavier. Utile quand l'on a arrêté les trains avec le bouton 'STOP', avant de remettre sous tension. dans ce cas les barres clignotent en rouge. Bloc moins utile depuis que la remise sous tension des trains est progressif.
Si des déplacements sont prévus ou en cours, les n° des déplacements sont affichés (ici n° 4 et n° 60).
Si l'on clic sur ce bloc, tous les déplacements sont annulés.
Si des itinéraires sont prévus ou actifs, les n° des itinéraires sont affichés (ici n° 8 et n° 10).
Si l'on clic sur ce bloc, tous les itinéraires sont annulés.
Des trains sont stoppés par les directives '#balauto'+'halt:' et les n° des cantons sont affichés (ici n°  8 et n° 10).
La fonction 'halt' évite à un train de toucher un butoir.
Si l'on clic sur ce bloc, il deviendra orange. La fonction 'halt:' sera inhibée et les trains pourront continuer à avancer.
La fonction 'halt:' est inhibée. Les trains peuvent continuer à avancer, même si le canton est en 'halt:'.
Cela permet à une locomotive d'aller chercher des wagons placés devant un butoir équipé d'une barrière infrarouge.
Si l'on clic sur ce bloc, la fonction 'halt:' redeviendra active.
La fonction 'halt:' est inhibée. Les trains peuvent continuer à avancer, même si le canton est en 'halt:'.
Le texte 'INHB' signifie que des trains auraient du être stoppés par la directive 'halt:', si elle n'était pas inhibée.
Si l'on clique sur ce bloc la liste des cantons stoppés apparaîtra et la fonction 'halt:' redeviendra active.
Des trains sont bloqués par les directives '#balauto'+'cant:' (ou 'blocage:') et les n° des cantons sont affichés (ici n° 4 et n° 20). La fonction 'cant:' (ou 'blocage:') évite à un train de rencontrer un aiguillage fermé ou de rejoindre le train précédent.
Si l'on clic sur ce bloc, il deviendra orange. La fonction 'cant:' (ou 'blocage:') sera inhibée et les trains pourront continuer à avancer.
La fonction 'cant:' (ou 'blocage:') est inhibée. Les trains peuvent continuer à avancer, même si le canton est en 'cant:' (ou 'blocage:').
Ceci permet d'aller chercher des wagons qui sont détectés comme un train, si ils ont les essieux résistifs.
Si l'on clic sur ce bloc, la fonction 'cant:' (ou 'blocage:') redeviendra active.
La fonction 'cant:' (ou 'blocage:') est inhibée. Les trains pourront continuer à avancer, même si le canton est en 'cant:' (ou 'blocage:'). Le texte 'INHB' signifie que des trains auraient du être bloqués par la directive 'cant:' (ou 'blocage:'), si elle n'était pas inhibée.
Si l'on clique sur ce bloc la liste des cantons bloqués apparaîtra et la fonction 'cant:' (ou 'blocage:') redeviendra active.
La fonction d'affectation automatique a détecté et affiché un cas ou un train et un canton sont en défaut.
Si l'on clic sur ce bloc le train en défaut est affecté au canton en défaut.
Résout 2 fois sur 3 un problème de captage ou de perte de synchronisme entre UTS et le réseau.
B-H
Si l'on utilise ce bloc avec l'option=56, on a un bloc 'B-H'  qui regroupe les fonctions des blocs 'BLC' et 'HLT'.
Dans ce cas, avec ce seul bouton, on inhibe les blocages et les haltes des trains.
ATTENTION, ce bloc ne peut être utilisé que si les blocs de type 'BLC' ou 'HLT' ne sont pas utilisés sur les TCO (sur aucun TCO !). Dans le cas contraire, le fonctionnement de ces blocs sera erratique.
inv
N'est utile que si le réseau comprend une boucle de retournement.
Bloc permettant de remettre à les cantons à l'état initial. Quand un train parcourt une boucle de retournement, en sortie la commande du train est inversée.   Un clic sur ce bloc fait un raz des états "Cantons inversés", si le train est à l'arrêt.



Les blocs - Pour afficher un autre écran
Ce bloc est utilisé pour afficher depuis un TCO, directement l'écran demandé.
Texte =  Caractères  0-9  a-z   A-Z    [  ]   <  >   (  )  *  -  _  et espace.
OPT = Numéro d'écran à afficher.
Si la variable 'C1' est définie, elle donne la couleur du texte.
Si la variable '#1' est définie, elle donne la forme du bloc.
Exemples pour '#1' = -1, 1, 2, 3 et 4.
ind

La valeur de la variable 'OPT indique le numéro d'écran à afficher. Valeurs possibles pour la variable 'OPT' : Liste modifiée en V3.7i.
tco0 = 0,     tco1 = 1,     tco2 = 2,     tco3 = 3,      tco4 = 4,      tco5 = 5,    tco6 = 6,    tco7 = 7,
train = 8,    posloc = 9,   depl1 = 10,   depl2 = 11,    depl3 = 12,    depl4 = 13,  depl5 = 14,  depl6 = 15,   depl7 = 16,
horo = 17,    vib = 18,     iti1 = 19,    iti2 = 20,     garage = 21,   aig1 = 22,   aig2 = 23,   RS232-serial = 24,
var1 = 25,    var2 = 26,    var3 = 27,    canton1 = 28,  canton2 = 29,  servo = 30,  tdvérité = 31,
select1 = 32, select2 = 33, select3 = 34, aigauto1 = 35, aigauto2 = 36, aigauto3 = 37, balauto-vitmax1 = 38,
balauto-vitmax2 = 39, balauto-halt1 = 40, balauto-halt2 = 41, balauto-cant1 = 42,    balauto-cant2 = 43,        balauto-cant3 = 44,
exe2 = 46,    exe3 = 47,    tdv2 = 48,    horo1 = 49,    horo2 = 50,    horo3 = 51,  horo4 = 52,  horo5 = 53,
horo6 = 54,   horo7 = 55,   horo8 = 56,   train2 = 57,   posloc2 = 58,  separe1= 59, separe2 = 60. 




Les Variables 'var_xxx'
Les variables 'var_450' à 'var_599' sont réservées au fonctionnement du programme pour débugage. Ne pas les utiliser pour l'exploitation du réseau.
Les variables 'var_450' à  'var_599' permettent de simuler la présence d'un train sur un canton et ainsi de tester les déplacement, les tables de vérités, les feux...
Ne pas oublier de mettre la variable 'var_499' à 1 pour activer ce mode 'Débug'.

Les variables utilisables sont les suivantes pour simuler l'occupation des cantons :
 var_450 : Canton n° 00         var_462 : Canton n°   12       var_474 : Canton n° 108
 var_451 : Canton n° 01         var_463 : Canton n°   13       var_475 : Canton n° 109
 var_452 : Canton n° 02         var_464 : Canton n°   14       var_476 : Canton n° 110
 var_453 : Canton n° 03         var_465 : Canton n°   15       var_477 : Canton n° 111
 var_454 : Canton n° 04         var_466 : Canton n° 100       var_478 : Canton n° 112
 var_455 : Canton n° 05         var_467 : Canton n° 101       var_479 : Canton n° 113
 var_456 : Canton n° 06         var_468 : Canton n° 102       var_480 : Canton n° 114
 var_457 : Canton n° 07         var_469 : Canton n° 103       var_481 : Canton n° 115
 var_458 : Canton n° 08         var_470 : Canton n° 104
 var_459 : Canton n° 09         var_471 : Canton n° 105        var_482 à var_498 ne pas les utiliser, me sert au débugage du programme en interne.
 var_460 : Canton n° 10         var_472 : Canton n° 106       
 var_461 : Canton n° 11         var_473 : Canton n° 107        var_499 : Si = 1, le mode débug est activé.

Utilisation :
Le fichier 'config_tco.txt' fourni en exemple comporte ces blocs sur le coté droit du TCO[0].  Voir la page [SIMULATION].

Sur le coté du TCO, ajouter un bloc interrupteur avec le texte = "FORCDETCCANT" et V1 = 5899 = var_499.
Ajouter ensuite les blocs interrupteur avec les textes = "CANT 00" et V1 = 5850 = var_450,
"CANT 01" et V1 = 5851 = var_451, "CANT 02" et V1 = 5852 = var_452 . . . etc.

Quand on veut passer en mode débug, cliquer sur le bloc "FORCDETCCANT", puis sur un des blocs 'CANT xx'.
On force ainsi la valeur 'det_xx' à 0 ou à 1 pour faire croire au programme qu'un train est détecté sur ces cantons.


TDV - Tables de vérité et équations pour les variables dans 'config.txt'
Les commandes utilisables dans les tables de vérité 'tdv:', les équations 'equ:' ou les pulsations 'pulse:' dans le fichier 'config.txt' sont décrites en détails sur la page "config.txt".

Les équations :  equ: <opérande1> <var1> <opérande2> <var2> ...
Ces équations commencent par le texte "equ:". Permet suivant le résultat d'un test de renseigner des variables.

Les tables de vérité : tdv:
Table de vérité pour initialiser des variables. Le programme commence par initialiser ces variables.
Table de vérité pour renseigner des variables de sortie en fonction des variables d'entrée.

Les pulsations : pulse:     pulse<0-31>:<tic_off1>-<tic_on>-<tic_off2>-<tic_on2>-<tic_off3> [<var_out1>] [<var_out2>]
Une pulsation est décrite par une ligne commençant par "pulse:".
Permet d'activer une variable ou une sortie en mode "off/on/off/on/off" avec des délais paramétrables. Le délais est égal à N fois la durée en "tics" de 0.095 sec.
La sortie est activée pendant la période "on".

Pour obtenir des délais de quelques secondes dans les actions.
On a besoin parfois d'un délai, pour établir un retard de quelques secondes, par exemple entre la mise en route des feux du PN et la fermeture des barrières, quand on détecte un train.
On souhaite retarder des actions. Il faut ajouter un délai dans l'activation des variables dans les équations.

Comme astuce, on utilise les variables servant à commander normalement les servos de la dernière carte n°3, car ils ne sont généralement pas câblés, ni utilisés.
De ce fait, on déplace fictivement ce servo en lui imposant des consignes de positions et vitesses, et l'on compare sa position temps-réel pour alimenter une variable de sortie.

Exemple de délais  en pratique :
On veut un retard de 6 secondes quand le train est détecté sur un canton avant de fermer les barrières d'un passage à niveau, et un retard d'une seconde avant d'ouvrir les barrières quand le train a quitté le canton 3.
On veut un retard de 6 secondes dans un sens et 1 seconde dans l'autre sens, soit un temps total de 7 secondes.
On prend la plus grande amplitude possible avec des consignes du servo = 1 et 1022.
La durée "Tic" = 95 msec et le servo se déplace du paramètre vitesse du servo à chaque "Tic". 
    Autre exemple : Si la vitesse du servo = 10, la position de départ =1 et la consigne = 100, à T+0,1 sec position = 11, à T+0,2 sec position = 21,à T+0,3 sec position = 31,à T+0,4 sec position = 41...
                             La position du servo est incrémentée de "10" toutes les 1/10 de secondes. On arrive à la position 100 au bout d'une seconde.
Pour nos 7 secondes, on en déduit une vitesse de déplacement du servo ((1022-1)*0.095)/(6+1) = 14     (A cette vitesse, le servo mettra 7 secondes pour aller de 1 à 1022).

Si l'on veut un temps plus long à la fermeture qu'à l'ouverture, il faut comparer la position du servo à un "Pas de comparaison" :
  6 secondes =>  (Pas*0.095)/vitesse = temps  =>  (Pas*0.095)/14 = 6 =>   Pas = (14*6)/0.095 = 884
  1 seconde  =>   (Pas*0.095)/vitesse = temps  =>  (Pas*0.095)/14 = 1 =>   Pas = (14*1)/0.095 = 147

Si l'on utilise les variables du servo n°4, les variables à utiliser sont :  srv_cmd_304 = Consigne (0-1023),  srv_cmd_314 = Vitesse (1-1023),  srv_pos_304 = Position temps réel (0-1023).

On en déduit les équations à placer dans la partie "tdv:" :
  equ: l  det2_3 =val srv_cmd_304 1022 =val srv_cmd_314 14
  equ: ln det2_3 =val srv_cmd_304    1 =val srv_cmd_314 14
  equ: l srv_pos_304>147 = out_42

Les deux lignes suivantes sont facultatives. Elles permettent de forcer la position en butée dés le dépassement du point de comparaison.
Les temporisations sont ainsi respectées, même quand l'on vient juste de dépasser la position 147 et de changer l'état de "det2_3".
Evite d'attendre 1 ou 6 secondes avant que que le servo atteigne la position en butée.
Par contre, pour un changement intempestif de "det2_3", la temporisation de 1 ou 6 secondes repart de 0. Commencer par faire des tests sans ces deux lignes facultatives.
  equ: l srv_pos_304>147 a  det2_3 =val srv_cmd_314 1023
  equ: l srv_pos_304<147 an det2_3 =val srv_cmd_314 0

Selon l'état que l'on veut donner à la variable de sortie et suivant le sens de temporisation désiré, on peut changer "147" par "884" ou inverser "1022" et "1".

Pour aider à la compréhension, vous pouvez provisoirement placer des blocs d'aide sur le TCO.
3 Blocs pour afficher un texte et une valeur numérique et un bargraphe (bloc : text + 0000) avec :
 - 1er  bloc   V1=8304 = srv_cmd_304 = Consigne (0-1023)
 - 2éme bloc V1=8314 = srv_cmd_314 = Vitesse (1-1023)
 - 3éme bloc V1=3104 = srv_pos_304  = Position temps réel = (0-1023)


Variables   'special_var_xx'
Ces variables sont affichées par le menu : "Debug > Variables 480 - 599 et Variables spéciales".

UTS modifie ces variables en temps réel pour animer vos divers automatismes.
Elles se nomment special_var_0 à special_var_99 pour un numéro interne de 9100 à 9199.
Elles sont utilisables dans l'édition des TCO et dans 'config.txt', dans les tables de vérité et les équations.

La plupart sont en lecture seule, mais les variables de type "Vitesse" peuvent être modifiées comme 'special_var_20'.

On peut utiliser des combinaisons de variables pour produire des clignotements fixe ou pseudo-aléatoire.
Exemple dans la partie '#tdv' pour allumer une lampe une fois sur quatre :
    equ: l  special_var_15 a special_var_16 = out_42   (out_42 = lampe)
 
Variables issues d'un compteur interne. Elles changent d'état régulièrement (0-1). Au démarrage, elles sont toutes à '0'.
    special_var_0  =       80 msec
    special_var_1  =      160 msec
    special_var_2  =      320 msec
    special_var_3  =      640 msec  ( 0,6 seconde)
    special_var_4  =    1.280 msec  ( 1,3 seconde)
    special_var_5  =    2.560 msec  ( 2,6 secondes)
    special_var_6  =    5.120 msec  ( 5,1 secondes)
    special_var_7  =   10.240 msec  (10   secondes)
    special_var_8  =   20.480 msec  (20   secondes)
    special_var_9  =   40.960 msec  (40   secondes)
    special_var_10 =   81.920 msec  (1 minute  et 20 secondes)
    special_var_11 =  163.840 msec  (2 minutes et 40 secondes)
    special_var_12 =  327.680 msec  (5 minutes et 27 secondes)
    special_var_13 =  655.360 msec  (11 minutes)
    special_var_14 = 1310.720 msec  (22 minutes)
    special_var_15 = 2621.440 msec  (44 minutes)


Variables pour commander des feux de carrefour routier.
    special_var_20 = feux 1&2 vitesse de séquencement.
                     Valeur modifiable = (  1 à  99)  15= feux normaux (1 = très rapide).

                                         (101 à 199) 105= feux orange clignotants (101 = très rapide).
    special_var_23 = feux 1 - lampe rouge = 0 ou 1
    special_var_22 = feux 1 - lampe orange
    special_var_21 = feux 1 - lampe vert
    special_var_26 = feux 2 - lampe rouge
    special_var_25 = feux 2 - lampe orange
    special_var_24 = feux 2 - lampe verte

Peut servir à plusieurs carrefours, mais ils seront tous synchrones.
Exemple pour alimenter directement les feux tricolores routier d'un carrefour dans 'config.txt' : (equ: l   = lettre 'L' minuscule pour load).
@ Feux du carrefour routier.
@ var_003 : Calcul plage horaire éclairage.
@ var_004 : Cmde feux routiers orange clignotants.
@ special_var_21,22,23 = Feux 1 : Vert Orange Rouge.
@ special_var_24,25,26 = Feux 2 : Vert Orange Rouge.
@ Commande manuelle des feux clignotants par un interrupteur depuis le TCO qui commande la variable n° 4.
@ special_var_20 = Vitesse des feux de 1 à 99 (par défaut prendre 20). Feux orange clignotants de 101 à 199 = (par défaut prendre 105).
@ Quand l'horloge UTS est entre 23 et 6 heure (>23 ou <6), les feux passent en orange clignotant.
@ var_3=variable intermédiaire.
    equ: l  special_var_21 = led_38
    equ: l  special_var_22 = led_37
    equ: l  special_var_23 = led_36
    equ: l  special_var_24 = led_41
    equ: l  special_var_25 = led_40
    equ: l  special_var_26 = led_39
    equ: ln var_4 =val special_var_20 15
    equ: l  var_4 =val special_var_20 105
    equ: l  special_var_93>=23 = var_3
    equ: l  special_var_93<6 o var_3 =val special_var_20 105

@ Quand l'horloge UTS est entre 22 et 7 heure, mettre l'éclairage Gare + Municipal en marche.
@ Forçage de la mise en marche de l'éclairage Gare ou  Municipal depuis un interrupteur du TCO[1].
    equ: l  special_var_93>=22 = var_3
    equ: l  special_var_93<7 o var_3 o var_5 = out_37
    equ: l  special_var_93<7 o var_3 o var_6 = out_40



Variables pour commander divers automates. Allumage de type chenillard. Peut servir à allumer une barrière lumineuse de chantier.
Une seule variable est à '1' à la fois. Les autres sont à '0'.
On dispose de 6 chenillards de 2, 3, 4, 5, 6 et 10 sorties, ayant chacun une vitesse indépendante et modifiable.

    special_var_30 = vitesse de séquencement (Valeur modifiable de 1 à 99)   1=rapide.
    special_var_31 = lampe 1
    special_var_32 = lampe 2

    special_var_33 = vitesse de séquencement (
Valeur modifiable de 1 à 99)   1=rapide.
    special_var_34 = lampe 1
    special_var_35 = lampe 2
    special_var_36 = lampe 3

    special_var_37 = vitesse de séquencement (
Valeur modifiable de 1 à 99)   1=rapide.
    special_var_38 = lampe 1
    special_var_39 = lampe 2
    special_var_40 = lampe 3
    special_var_41 = lampe 4

    special_var_42 = vitesse de séquencement (
valeur modifiable de 1 à 99)   1=rapide.
    special_var_43 = lampe 1
    special_var_44 = lampe 2
    special_var_45 = lampe 3
    special_var_46 = lampe 4
    special_var_47 = lampe 5

    special_var_48 = vitesse de séquencement (
Valeur modifiable de 1 à 99)   1=rapide.
    special_var_49 = lampe 1
    special_var_50 = lampe 2
    special_var_51 = lampe 3
    special_var_52 = lampe 4
    special_var_53 = lampe 5
    special_var_54 = lampe 6

    special_var_55 = vitesse de séquencement (
valeur modifiable de 1 à 99)   1=rapide.
    special_var_56 = lampe 1
    special_var_57 = lampe 2
    special_var_58 = lampe 3
    special_var_59 = lampe 4
    special_var_60 = lampe 5
    special_var_61 = lampe 6
    special_var_62 = lampe 7
    special_var_63 = lampe 8
    special_var_64 = lampe 9
    special_var_65 = lampe 10

Variables numériques (0-255 et 0-1023) en boucle. Si pas définie, par défaut vitesse = 1.
Quatre variables, signaux en dent de scie lent, la valeur augmente et repasse à zéro :
    special_var_66 = vitesse de séquencement lent (Valeur modifiable de 1 à 99)   1=rapide, 2=+lent...
    special_var_67 = variable s'incrémentant automatiquement de 0 à  255 et repasse à 0.
    special_var_68 = variable
s'incrémentant automatiquement de 0 à 1023 et repasse à 0.

    special_var_69 = vitesse de séquencement lent (Valeur modifiable
de 1 à 99)   1=rapide, 2=+lent...
    special_var_70 = variable s'incrémentant automatiquement de 0 à  255 et repasse à 0.
    special_var_71 = variable
s'incrémentant automatiquement de 0 à 1023 et repasse à 0.

Variables numériques (0-255 et 0-1023) en boucle. Si pas définie, par défaut vitesse = 1.
Quatre variables, signaux en dent de scie rapide, la valeur augmente et repasse à zéro :
    special_var_72 = vitesse de séquencement rapide (Valeur modifiable de 1 à 99) 1=lent, 2=+rapide...
    special_var_73 = variable
s'incrémentant automatiquement de 0 à  255 et repasse à 0.
    special_var_74 = variable
s'incrémentant automatiquement de 0 à 1023 et repasse à 0.

    special_var_75 = vitesse de séquencement rapide (Valeur modifiable
de 1 à 99) 1=lent, 2=+rapide...
    special_var_76 = variable
s'incrémentant automatiquement de 0 à  255 et repasse à 0.
    special_var_77 = variable
s'incrémentant automatiquement de 0 à 1023 et repasse à 0.

Variables numériques (0-255 et 0-1023) en boucle. Si pas définie, par défaut vitesse = 1.
Quatre variables, signaux en dent de scie triangulaire lent, la valeur augmente puis diminue :
    special_var_78 = vitesse de séquencement lent (Valeur modifiable de 1 à 99)   1=rapide, 2=+lent...
    special_var_79 = variable
s'incrémentant automatiquement de 0 à  255 puis de 255 à 0.
    special_var_80 = variable
s'incrémentant automatiquement de 0 à 1023 puis de 1023 à 0.

    special_var_81 = vitesse de séquencement lent (
Valeur modifiable de 1 à 99)   1=rapide, 2=+lent...
    special_var_82 = variable
s'incrémentant automatiquement de 0 à  255 puis de 255 à 0.
    special_var_83 = variable
s'incrémentant automatiquement de 0 à 1023 puis de 1023 à 0.

Variables numériques (0-255 et 0-1023) en boucle. Si pas définie, par défaut vitesse = 1.
Quatre variables, signaux en dent de scie triangulaire rapide, la valeur augmente puis diminue :

    special_var_84 = vitesse de séquencement rapide (Valeur modifiable de 1 à 99) 1=lent, 2=+rapide...
    special_var_85 = variable
s'incrémentant automatiquement de 0 à  255 puis de 255 à 0.
    special_var_86 = variable
s'incrémentant automatiquement de 0 à 1023 puis de 1023 à 0.

    special_var_87 = vitesse de séquencement rapide (Valeur modifiable de 1 à 99) 1=lent, 2=+rapide...
    special_var_88 = variable
s'incrémentant automatiquement de 0 à  255 puis de 255 à 0.
    special_var_89 = variable
s'incrémentant automatiquement de 0 à 1023 puis de 1023 à 0.


Variables en lecture pour obtenir les informations sur l'heure UTS (Pas celle de Windows !).
    special_var_90 = horloge en marche=1.
    special_var_91 = horloge bloquée=1.
    special_var_92 = jour courant=0 à 6.
    special_var_93 = heure courante=00 à 23.
    special_var_94 = minute courante=00 à 59.
    special_var_95 = 60*heure courante + minute courante = 0 à 1439.

Exemple :
  Quand l'horloge UTS est entre 22 et 7 heure (>22 ou <7), mettre l'éclairage municipal en marche (Sortie = 'out_40' et variable intermédiaire = 'var_3').
  et les feux passent en orange clignotant.
    equ: l  special_var_93>=22 = var_3
    equ: l  special_var_93<7 o var_3 = out_40

Remarque sur le dernier exemple :
Il n'est pas possible de combiner ces tests numériques, comme ici : equ: l
special_var_93>=22 o special_var_93<7 = var_3 (Ne fonctionne pas !).
Par contre ceci fonctionne :  equ: l
special_var_93>=22 a in_1 =val var_25 5 
Le premier test peut être sur des variables numériques, mais les tests suivants doivent être sur des états binaires (0 ou 1).


Fonction de commande automatique d'aiguillage : Aigauto

Actionne automatiquement les prochains aiguillages rencontrés par un train en mouvement.
Quand l'on conduit un train depuis le clavier ou une manette, cela facilite le déplacement du train en évitant de rencontrer un aiguillage fermé.
Les aiguillages sont activés qu'une seule fois. Pour réinitialiser l'action, il faut que le train ait quitté le canton ou qu'il s'arrête. (Vitesse et Consigne = 0).

Pour paramétrer cette fonction, il faut ajouter une section '#aigauto' dans 'config.txt'.
Pour activer cette fonction, dans la section '#general' du fichier 'config.txt', ajouter la directive 'train_aigauto on'.
La configuration lue par UTS est affichable et animée dans le menu : 'Debug > Aigautoxx'.

Exemple :
#aigauto
[
    cant:  c0:+10   plusur: c7                  condi:  det_1.0                               actions:  a3.0
    cant:  c1:-10   plusur: c2  c13             condi:  det_9.0  a3.1                         actions:  a2.1
    cant:  c6:+10   plusur: c5                  condi:  det_7.0                               actions:  a9.1   a8.1
    cant:  c7:-10   plusur: c0  c1              condi:  det_6.0  pos1_aig_8.1  pos1_aig_9.1   actions:  a6.0   a7.0
    cant:  c7:+10   plusur: c6  c14  c15        condi:  det_9.0  pos1_aig_0.1                 actions:  a1.1
    cant:  c1:-10   plusur:                     condi:  in_49.1  garage_lock_status_0.0       actions:  a4.0  a5.0
    cant: c11:+10   plusur:                     condi:  in_51.1  garage_lock_status_1.0       actions:  a11.0 a12.1
]

cant:<0-315>:<+-vitesse>  plusur: c<0-315>.<0|1> c<0-315>.<0|1> c<0-315>.<0|1>  condi: <var>.<0|1> <var>.<0|1> <var>.<0-1>  actions: a<1-63>.<0|1>  a<1-63>.<0|1>  a<1-63>.<0|1>
Exemple: cant:  c1:-10    plusur:  c3 c4     condi:  det_5.0 in_49.1 garage_lock_status_0.0        actions:  a4.0  a5.0
Dans la section '#aigauto', on peut placer au maximum 100 lignes et par ligne, 6 cantons 'plusur:', 6 conditions 'condi:' et 6 actions sur les aiguillages.

IMPORTANT : Par ligne, il faut obligatoirement déclarer tous les termes "cant:",  "plusur:",  "condi:"  et  "actions:"  même si aucun paramètre ne les suit.

cant: c<0-315>:<+-vitesse>
c<0-315>:<+-vitesse> = Canton où est le train en mouvement : Sens de parcours et vitesse minimum pour déclencher les actions. (Le signe "+-" est obligatoire, la vitesse '0' est interdite)
    La vitesse est comprise entre -64 à -1 et +1 à +64. Si la vitesse = +30 ou -30, le train devra rouler rapidement pour déclencher les aiguillages. Ceci permet de faire des manoeuvres sans action sur les aiguillages.
    Cette fonction se base sur la vitesse du train, mais aussi de la valeur de la consigne (potentiomètre ou clavier).
    Exemple : cant:  c0:+10

plusur: c<0-315> c<0-315>
c<0-315> = Cantons devant être libérés par ce train pour déclencher les actions.
    6 cantons au maximum.
    Les cantons devrons être tous libérés pour commander les aiguillages.
    Ceci permet de déclencher les aiguillages, quand le train est entièrement sur le canton 'cant:' et qu'il n'est plus sur les cantons précédents.
    A la différence d'une occupation de canton, si un autre train est sur ces cantons, les actions peuvent être déclenchées.
    Ne rien mettre après 'plusur:' si le canton est petit et que le train pourrait ne pas avoir quitté entièrement le canton précédent.
    Exemple : plusur: c2  c13

condi: <var>.<0|1> <var>.<0|1>
<var>.<0|1> = Toutes les conditions doivent être réalisées pour déclencher les actions.
    6 conditions au maximum.
    Les variables doivent être égales aux valeurs indiquées.
    Les conditions devrons être toutes valides pour commander les aiguillages.
    En général utiliser 'det_xx.0' pour vérifier que le canton où se dirige le train est libre.
    Si on place des termes 'det_xx.0', on vérifie aussi que les canton 'xx' où se dirige le train ne sont pas réservés, ni en manuel ni en déplacement automatique.
    On peut modifier avec un interrupteur, le parcours depuis le TCO, en testant une variable de type 'var_xxx'.
    Attention de ne pas confondre dans les conditions :
    pos0_aig_3.1 = L'aiguillage n° 3 doit être en position '0'.
    pos1_aig_4.1 = L'aiguillage n° 4 doit être en position '1'.
  garage_lock_status_5.0 = Le garage n° 5 doit être connecté au canton.
    Exceptionnellement dans cette directive 'condi:', pour réduire la place utilisée, le programme traduit 'aX.Y' en 'posY_aig_X.1'.
    On peut donc écrire :    'a8.1  a9.0'     à la place de    'pos1_aig_8.1 pos0_aig_9.1'.
    Exemple : condi:  in_49.1  garage_lock_status_0.0  a9.0

actions: a<1-63>.<0|1> a<1-63>.<0|1>
a<1-63>.<0|1> = Aiguillages devant être positionnés lors du déclenchement des actions.
    6 actions sur les aiguillages au maximum.
    Les aiguillages sont positionnés à l'état indiqué, sauf si ils sont réservés.
    Exemple : actions:  a9.1   a8.1

Quand un train sur le canton avance dans le sens précisé et à une vitesse supérieure à celle indiquée, et que les conditions sont réunies, on active les aiguillages.
Les cantons "plusur:" doivent être libérés par le train en mouvement. Il faut lister tous les cantons d'où peut provenir le train.
Les conditions "condi:" doivent être utilisées pour interdire l'action en cas de présence d'un train sur le canton suivant, et pour autoriser l'action en fonction de la position des aiguillages.
Les actions "actions:" ne concernent que des aiguillages à activer et pas d'autre type de variables.
Les valeurs des conditions ou actions ne peuvent être égales que à "0" ou à "1".
Il peut y avoir plusieurs lignes avec le même canton d'origine "cant:" et même sens de parcours, les actions pouvant être différentes suivant les conditions demandées.


Utilisation (Les exemples correspondent à mon TCO)
    cant: c0:+10   plusur: c7.0           condi: det_1.0                            actions: a3.0
Un train avance sur le canton n° 9, il a quitté le canton précédent n° 7. Le prochain canton n° 1 est libre. On actionne alors l'aiguillage 3 en position 0.

    cant: c1:-10   plusur: c2.0  c13.0    condi: det_9.0  pos1_aig_3.1              actions: a2.1
Un train recule sur le canton n° 1, il a quitté les cantons précédent n°  2 et n° 13. Le prochain canton n° 9 est libre et l'aiguillage n°3 est en position '1'. On actionne alors l'aiguillage 2 en position 1.

    cant: c1:-3    plusur:                condi: in_49.1 garage_lock_status_0.0     actions: a4.0 a5.0
Un train recule sur le canton n° 1. Il était sur le garage n° 0, car le garage n° 0 est relié au canton 'garage_lock_status_0.0' et la barrière infrarouge 'in_49.1' l'a détecté.
On actionne alors l'aiguillage n° 4 et n° 5 en position 0. La vitesse (-3) est faible, car le train quittant rapidement la barrière IR, il faut que cela fonctionne dès qu'il démarre.


Conseils sur la fonction de commande automatique d'aiguillage Aigauto
Si un train semble coincé devant un aiguillage, c'est surement qu'il avançait et qu'un aiguillage a été déplacé devant lui.
Quand la voie redevient libre, penser à mettre la manette à 0,  pour réinitialiser cette fonction.

Pour alimenter les cantons de la meilleur manière, paramétrer correctement la section '#selectif' avec la description des aiguillages comme dans cet exemple :
 c1:+ c0+ a3.0          c1:+ c9+ a2.1 a3.1       c1:- c2- a4.1


Exemple pour le cas particulier un train sort du garage G1
Sur mon réseau qui est équipé de capteurs de fin de course sur les garages, on peut ajouter une directive #aigauto pour sortir des garages.
Il n'y a aucune difficulté à utiliser #aigauto pour les garages.
 - Soit ils sont isolés et UTS s'attend à avoir une train stocké dessus.
 - Soit ils sont reliés au canton, et considérés comme une portion ordinaire d’un canton.
 
Effectivement tous mes garages ont des détecteurs en fin de course, mais c'était au départ pour signaler la fin des déplacements automatiques,
car mes garages sont très courts et il faut que le train aille jusqu'au bout.
 
Exemple d'utilisation de la directive "garage_lock_status_1.0"
 - J’ai un train sur le garage G1.
 - Le train est encore sur ce garage car l'entrée n° 51 est active (contact ou barrière infrarouge en fin de garage G1, à gauche du garage).
 - Le garage est relié au canton n° 11. (sinon le train serait isolé sur son garage et ne se déplacerait pas)
 - Le train qui est sur le garage avance et va rencontrer les aiguillages n° 11 et n° 12 (train à une certaine vitesse pour pour activer la fonction  #aigauto)
 
Je voudrais donc dans ce cas particulier, activer les aiguillages n° 11 et n° 12.
aigauto     > Si le train sur G1 avance >  aigauto

         
J’ai donc décrit la ligne :
  cant: c11:+3    plusur:            condi:  in_51.1   garage_lock_status_1.0          actions:  a11.0   a12.1
 
cant:c11:+3     est une valeur de vitesse très faible , mais c'est pour détecter rapidement le départ du train, avant qu'il ne quitte la barrière infrarouge.
garage_lock_status_1.0    indique que le garage est relié au canton, sinon je n’aurais pas à m'occuper d'un train hors tension sur un garage isolé.
in_51.1    me donne l'information comme quoi, le train détecté sur le canton est bien sur le garage G1.
 
Si je n’ai pas d’information sur l'entrée n° 51 qui me dit qu’un train est sur le garage G1, je ne pourrais pas activer l'aiguillage n° 12, car je ne saurais pas où est le train sur le canton n° 11 ?
 
Si les garages ne sont pas en cul de sac, et si le train peut provenir de plusieurs endroits qu’UTS en peut pas deviner, il faut un (ou plusieurs) détecteur (barrière infrarouge) pour avoir ces informations.
 
Cela rejoint le problème décrit dans la section #balauto avec des configurations complexes ou inconnues d'UTS.


Fonction de Bloc Automatique : Balauto
Permet de conduire d'un train en toute sécurité avec le clavier ou une manette.
Il est préférable de placer les aiguillages près des frontières entre deux cantons mais de laisser peu d'espace (5 à 10 cm) entre cet aiguillage et cette frontière.
Dans ce cas, les conditions de blocage sont plus faciles à écrire, car le train sera rarement bloqué entre un aiguillage et la frontière du canton.
Le fonctionnement est prévu avec des wagons aux essieux graphités ou avec le dernier wagon du train qui provoque la détection d'occupation de canton.
Les 5 à 10 cm de rails entre un aiguillage et la fin du canton évite les faux contacts du wagon de queue au passage de l'aiguillage.

Pour paramétrer cette fonction, il faut ajouter une section '#balauto' dans 'config.txt'.
La configuration lue par UTS est affichable dans les menus de 'Debug > Vitmax_xx' ou 'Halt_xx' ou 'Balauto_xx'.
Cette fonction se base sur la vitesse du train, mais aussi de la valeur de la consigne (Potentiomètre ou clavier).

Cette fonctionnalité est l'intégration d'un système de Bloc Automatique Logiciel dans UTS, pour assurer l'espacement des trains.
Dans la section '#balauto', il faut décrire quatre directives : 'tempo-libe-cant:', 'vitmax:', 'halt:' et 'cant:'.
 - 'tempo-libe-cant:' => Pour définir une temporisation avant de libérer les cantons plus occupés par le train précédent.
 - 'vitmax:' => Pour limiter la vitesse d'un train sur une voie en cul de sac ou en descente.
 - 'halt:' => Pour stopper un train qui dépasserait une barrière infrarouge devant un butoir, ou un train qui s'engagerait vers un garage déjà occupé.
                 Cette directive est aussi utile quand la directive 'cant:' n'est pas utilisable.
 - 'cant:' => Pour bloquer un train sur un canton quand les conditions de sortie ne sont pas réunies. Ce peut être la position des aiguillages ou l'occupation du canton suivant.

Principe de configuration
bal

Sur l'exemple ci-dessus, on va empêcher le train de quitter le canton  c5 par la droite, en donnant trois groupes de conditions :
 - bloqué si aiguillage a4 direct et a5 est dévié
 - bloqué si aiguillage a4 direct et c8 occupé
 - bloqué si aiguillage a4 dévié  et c6 occupé

Ce qui se traduit par la ligne avec trois groupes de conditions de blocage séparés par un '|' qui signifie 'ou':
    cant:c5:+   plusur: c2          blocage: a4.0 a5.1 | a4.0 det_8.1 | a4.1 det_6.1

Si les conditions ne tiennent pas sur une seule ligne, on peut les écrire sur plusieurs lignes.
La ligne ci-dessus est équivalente aux 3 lignes ci-dessous, mais il est plus performant de regrouper tout sur une ligne.
  cant:c5:+   plusur: c2          blocage: a4.0 det_8.0
  cant:c5:+   plusur: c2          blocage: a4.1 det_6.1
  cant:c5:+   plusur: c2          blocage: a4.0 a5.1



Exemple de configuration :
#balauto
[
  tempo-libe-cant:10

  vitmax:c1:+11     condi: a4.0 a5.0  
  vitmax:c6:+11     condi: a7.1
  vitmax:c7:-11     condi: a9.0 a14.0
  vitmax:c8:-11

  halt:c1:+   condi: a4.0 a5.0  in_49.1 garage_lock_status_0.0
  halt:c11:-  condi:            in_51.1 garage_lock_status_1.0
  halt:c6:+   condi: a7.1       in_41.1 garage_lock_status_3.0
  halt:c7:-   condi: a9.0 a14.0 in_40.1 garage_lock_status_4.0
 
  cant:c5:+                    plusur: c4          blocage: det_6.1 a6.0 | det_11.1 a6.1 | a6.1 a10.0 det_12.1 | a6.0 a7.1 garage_lock_status_3.1
  cant:c6:+   ral:32  dec:11   plusur: c5          blocage: det_7.1 | a8.0 | a9.0
  cant:c7:+   ral:32  dec:11   plusur: c6 c14 c15  blocage: det_0.1 a0.0 | a0.1 a1.0 | a0.1 a1.1 det_9.1
  cant:c8:+           dec:11   plusur:             blocage: det_9.1 | a1.1
  cant:c9:+           dec:11   plusur: c7          blocage: det_1.1 a2.1 a3.1 | det_10.1 a2.0 | a2.1 a3.0
  cant:c11:+          dec:11   plusur:             blocage: a12.0 in_51.1 garage_lock_status_1.0 | a12.1 in_50.1 garage_lock_status_2.0
]

tempo-libe-cant:
Directive optionnelle pour temporiser la libération d'un canton quand un train n'est plus détecté. En absence de directive, le canton est libéré immédiatement.
Si un faux contact ne permet plus de détecter un train, on attend un peu pour voir si le contact revient, sinon le train suivant s'engagerait dés
que le canton devant lui est libre, au moins faux contacts du train devant lui.
Pour une utilisation plus sûre d'UTS, ne pas oublier cette directive et l'utiliser avec la valeur 10 par défaut (= 1 seconde), puis l'adapter si nécessaire.
Exemple: tempo_libe_cant:10
tempo-libe-cant:<0-99>
    <0-99> = temporisation en dixièmes de secondes  (0 = Pas de temporisation, 10 = 1 seconde, 99 = 10 secondes).

vitmax :

Directive pour limiter la vitesse sur une voie en cul de sac ou descendant trop rapidement. N'a pas d'effet sur les déplacements automatiques.
Si le même numéro de canton est sur présent sur plusieurs lignes, il suffit qu'une des lignes remplisse les conditions pour ralentir le train.
Exemple: vitmax:c1:+10  condi:a1.0  a2.1
vitmax:c:<0-315>:<+-vitesse> 
    c:<0-315> = Canton ou s'applique la vitesse maximum.
    :<+-vitesse> = Vitesse maximum de parcours dans le sens indiqué -64 à +64 (0 interdit).
condi: <var>.<0|1>  <var>.<0|1>
    6 conditions au maximum.
    Les variables doivent être égales aux valeurs indiquées.
    Les conditions devront être toutes valides pour limiter la vitesse.
    Cette fonction limite la valeur de la consigne (potentiomètre ou clavier).
    Exceptionnellement dans cette directive 'condi:', pour réduire la place utilisée , le programme traduit 'aX.Y' en 'posY_aig_X.1'.
    On peut donc écrire :    'a8.1  a9.0'     à la place de    'pos1_aig_8.1 pos0_aig_9.1'.
    Si l'on n'a pas de condition, on peut omettre le paramètre 'condi:'.

halt:
Directive pour stopper net un train en fin de voie, par exemple quand il franchi une barrière infrarouge placé 5 à 10 cm avant un heurtoir.
Pour rechercher des wagons isolés placés devant un heurtoir, cette protection est désactivable depuis le TCO avec le bloc à fonctions multiples 'HLT' ('OPT'=5).
Si un n° de canton est sur présent sur plusieurs lignes de texte, il suffit qu'une des lignes remplisse les conditions de blocage pour stopper le train.
Exemple: halt:c1:+   condi: a4.0 a5.0  in_49.1 garage_lock_status_3.0
halt:c:<0-315>:<+-> 
    c:<0-315> = Canton ou s'applique l'arrêt immédiat.
    :<+-> = Sens de parcours.
condi: <var>.<0|1>  <var>.<0|1>
    6 conditions maximum.
    Les variables doivent être égales à leurs valeurs.
    Les conditions doivent être toutes valides pour stopper le train.
    Exceptionnellement dans cette directive 'condi:', pour réduire la place utilisée , le programme traduit 'aX.Y' en 'posY_aig_X.1'.
    On peut donc écrire :    'a8.1  a9.0'     à la place de    'pos1_aig_8.1 pos0_aig_9.1'.
Attention, on utilisera 'garage_lock_status_3.0' pour arrêter le train qui roule sur un garage, et qui atteint la fin de la voie. '0'= Garage libre relié au canton, c'est le train que l'on déplace sur ce garage.

cant:
Directive pour bloquer un train sur son canton, car les conditions ne lui permettent pas de passer au canton suivant. C'est une sorte de Bloc Automatique.
Pour rechercher des wagons isolés sur un canton, cette protection est désactivable depuis le TCO avec le bloc à fonctions multiples 'HLT' ('OPT'=6).
Il faut interdire au train de rentrer sur le prochain canton occupé, de rencontrer un aiguillage fermé ou de se diriger vers un garage occupé.
Si le même numéro de canton est présent sur plusieurs lignes, il suffit qu'une des lignes remplisse les conditions de blocage pour bloquer le train.
Exemple: cant:c6:+   ral:32  dec:11   plusur: c5    blocage: det_7.1 | a8.0 | a9.0
cant:c<0-315>:<+->
    :c<0-315> = Le canton que le train n'a pas le droit de quitter.
    <+-> = Sens de parcours du canton.
ral:<1-64>
    Consigne de vitesse en cas de ralentissement. C'est une sorte de régulation sur feu orange (Optionnel, mais conseillé).
    Si la partie 'plusur:' n'est pas encore valide, mais qu'un groupe de condition 'blocage:' est déjà valide, cela signifie que
    le prochain canton est occupé, mais comme le train n'est pas encore totalement entré sur le canton en cours, il continue son trajet.
    Quand tous les wagons seront sur le canton, le train va s'arrêter avec une certaine inertie. Pour éviter de dépasser le canton, on peut imposer une vitesse maximum
    sur ce canton quand on détecte qu'un groupe de condition 'blocage:' est vérifié (et pas la directive 'plusur:') sur le prochain canton. Le passage en mode ralenti se fait avec inertie.
    Si la directive 'ral:' n'est définie, cette fonction de ralenti ne sera pas utilisé pour ce canton.
    Cette valeur n'est pas signée, car l'on connaît déjà le sens de parcours.
    Exemple :  ral:32
dec:<1-28>
    Valeur d'inertie pour la décélération sur ce canton (Optionnel). Voir la correspondance en secondes dans la section '#train'.
    La valeur utilisée sera la plus faible entre cette valeur et celle propre au train situé sur le canton. Utile avec un canton court, pour décélérer rapidement.
    Exemple :  dec:11
plusur:c<0-315>.<0|1> = Cantons devant être libérés par CE train pour vérifier si il peut sortir du canton.
    6 cantons au maximum.
    Les cantons devrons être tous libérés pour bloquer le train.
    Permet de bloquer le train quand il est entièrement entré sur ce canton. Le dernier wagon a quitté le canton précédent.
    A la différence d'une occupation de canton, si un autre train est sur ces cantons, ce n'est pas une condition de blocage.
    Si le canton est trop petit pour contenir le train le plus long, on ne configurera pas cette directive.
    Exemple :  plusur: c6 c14 c15
blocage:<var>.<0|1> = Conditions devant être réalisées pour bloquer le train sur le canton.
    22 conditions au maximum, y compris le sigle '|'.
    Les variables doivent être égales aux valeurs indiquées.
    Un ou = '|' sépare les groupes de variables. Un groupe de variables doivent être à l'état indiqué pour bloquer le train.
    Exceptionnellement dans cette directive 'condi:', pour réduire la place utilisée , le programme traduit 'aX.Y' en 'posY_aig_X.1'.
    On peut donc écrire :    'a8.1  a9.0'     à la place de    'pos1_aig_8.1 pos0_aig_9.1'.
    Si un aiguillage cité est en mouvement, il est considéré comme bloquant pour le train. Cela évite au train d'avancer quand on bouge des aiguillages.
    Attention, on utilisera  'garage_lock_status_3.1' pour arrêter le train qui s'engagerait vers un garage occupé. '1'= Garage isolé du canton, donc avec un autre train déjà dessus.
    Attention, on utilisera  'garage_lock_status_3.0' pour arrêter le train qui sortirait du garage. '0'= Garage libre relié au canton, c'est le train que l'on déplace de ce garage vers
    le canton, alors que les aiguillages de sortie sont mal positionnés.
    Exemple :   blocage:  det_6.1 a6.0  |  det_11.1 a6.1


Dans des cas complexes, il est impossible de bloquer avec certitude un train qui sort d'un canton.
Sur cet exemple, un train peut venir du canton c4, s'arrêter au milieu du canton c3 et d'aller vers le canton c5 alors que l'aiguillage a1 est dirigé vers le bas.
On ne sait pas si il va sortir par c2 ou c5.
bal

Pour l'exemple ci dessus on peut tenter la configuration suivante :
  cant:c3+   plusur: c1          blocage: det_2.1 a1.1 | det_41 a1.0 a2.1 |det_5.1 a1.0 a2.0


Sur le schéma ci-dessus le train peut très bien être en haut, alors que les aiguillages ont changés de place entre-temps.
Dans ces conditions, pour établir un bloc automatique il faut installer des barrières infrarouges.
Si les aiguillages sont en sortie de canton, suivant le sens de parcours, le problème ne se pose pas, car on sait par où le train va quitter ce canton.

Pour notre exemple, on peut améliorer le système en ajoutant une deuxième ligne :
  cant:c3+   plusur: c1          blocage: det_2.1 a1.1 | det_41 a1.0 a2.1 |det_5.1 a1.0 a2.0
  cant:c3+   plusur: c1          blocage: det_4.1 in_1.1 | det_5.1 in_2.1 |det_2.1 in_3.1

où si la place est trop courte pour freiner progressivement ou le train trop court pour rester encore sur la barrière infrarouge après son freinage :
  cant:c3+   plusur: c1          blocage: det_2.1 a1.1 | det_41 a1.0 a2.1 |det_5.1 a1.0 a2.0
  halt:c3+  condi: det_4.1 in_1.1
  halt:c3+  condi: det_5.1 in_2.1
  halt:c3+  condi: det_2.1 in_3.1


On peut aussi diriger les aiguillages avec des barrières infrarouge et la fonction '#aigauto'.
Les deux fonctions 'aigauto' et 'balauto' sont alors interactives.



Utilisation de la fonction de Bloc Automatique : Balauto
Sur le TCO, on affiche les blocs d'occupation des cantons avec le texte 'HT', 'BL', 'VM' ou 'RA' si le canton est en halte, bloqué, en vitesse maximum ou en mode ralenti.
a


Exemple d'utilisation n° 1
#balauto
[
  vitmax:c8:-11
  halt:c8:-  condi:     in_48.1
]
Le train roule vers la droite et atteint la vitesse de '-11'. Il reste limité à cette vitesse. On affiche 'VM' (Vitesse Maximum) sur le bloc d'occupation.
a


Le train roule vers la droite et atteint la barrière infrarouge (Entrée n° 48) devant le butoir. Il est stoppé net. On affiche 'HT' (HalTe) sur le bloc d'occupation.
a

Exemple d'utilisation n° 2
#balauto
[
  cant:c0:+   plusur: c7          blocage: det_1.1 | a3.1
  cant:c9:+   plusur: c7          blocage: det_1.1 a2.1 a3.1 | det_10.1 a2.0 | a2.1 a3.0
]
Le train vert qui roule vers la gauche est bloqué 'BL', car le train rouge roule déjà vers la gauche vers ce canton n° 1.
a


Le train rouge qui roule vers la gauche est bloqué 'BL', car le train vert roule déjà vers la gauche vers ce canton n° 1.
a

Exemple d'utilisation n° 3
#balauto
[
  vitmax:c6:+11  condi: a7.1
  halt:c6:+      condi: a7.1   in_41.1 garage_lock_status_3.0
  cant:c5:+      plusur: c4    blocage: a6.1 a10.0 det_12.1 | a6.0 a7.1 garage_lock_status_3.1
  cant:c6:+      plusur: c5    blocage: det_7.1 | a8.0 | a9.0
]
Le train qui roule vers la droite est limité en vitesse à +11, car l'aiguillage (a7.1) le dirige vers un garage relié au canton (garage_lock_status_3.0).
a


Le train roule sur la voie du haut vers la droite. Le train est stoppé net, car il a atteint la barrière infrarouge devant le
butoir (in_41) et le garage est relié au canton (garage_lock_status_3.0).  Utiliser la directive 'halt:' avec 'garage_lock_status_3.0'.
a


Le train rouge est sur le garage, isolé du canton. (garage_lock_status_3=1)
Le train vert qui roule vers la droite est bloqué 'BL' sur le canton n°5, car l'aiguillage (a7.1) le dirige vers un
garage déjà occupé (garage_lock_status_3.1). '.1' = Isolé du canton, donc avec un autre train dessus.
Utiliser la directive 'cant:' avec 'garage_lock_status_3.1'.
a


Exemple d'utilisation n° 4
Utilisation de 'cant: + 'ral:'. En une seul directive, on ralenti le train et on le bloque sur un canton.

#balauto
[

  cant:c9:+   ral:10   dec:11   plusur: c7  c8   blocage: det_1.1 a2.1 a3.1 | det_10.1 a2.0 | a2.1 a3.0
]
On utilise la directive 'ral:' pour ralentir le train quand il s'engage sur le canton n9, car il va être bloqué quand il aura quitté entièrement le canton n° 8.
Sur cet exemple, on voit la différence entre [RA] et [BL]. Dans le premier cas le train qui roule vers la gauche est ralenti à +10, après il est bloqué, car il n'est plus sur c8.





Exemple d'utilisation n° 5
Utilisation de 'vitmax:'
Si l'on utilise des équations ou tables de vérités pour allumer les feux de signalisation ferroviaires, les variables commandant les leds orange ou rouge peuvent être utilisées
dans les conditions 'cant:' ou 'vitmax:'.

    tdv:
        in:   led_3 det_1 pos1_aig_3 | out: led_2 led_14 led_26 @  Out = leds rouge, jaune et verte (feux voie n°0 à gauche)
        eq:   x     x     1          |      1     0      0
        eq:   x     1     0          |      1     0      0
        eq:   1     0     0          |      0     1      0
        eq:   0     0     0          |      0     0      1


On peut faire ralentir le train, si la led n° 14 est allumée
  vitmax:c1:+11     condi: led_14.1


Conseils sur la fonction de Bloc Automatique : Balauto
Utiliser la directive  'tempo-libe-cant:10'.
Prendre par défaut la valeur '10' pour temporiser d'une seconde la libération des cantons. Après usage modifier si-besoin ce paramètre.
Cela évite de rendre par erreur un canton libre au moindre faux contacts du wagon de queue encore présent sur ce canton.

Il est préférable de placer les aiguillages près des frontières entre deux cantons et de laisser peu d'espace (entre 5 et 10 cm) entre cet aiguillage et cette frontière.
Il y a toujours un risque de dysfonctionnement quand on arrête une locomotive à cheval entre deux cantons. Elle risque de n'être reconnue que sur un seul canton et de plus être alimentée.

Le fonctionnement de 'balauto' est prévu avec des wagons aux essieux graphités ou avec le dernier wagon du train qui provoque la détection d'occupation de canton.

Si l'on déplace une locomotive seule, la fonction 'RA' (ralentissement) ne fonctionne pas, car elle passe instantanément d'un canton à l'autre, et passe donc directement
en mode blocage, mais quand même avec de l'inertie. Il n'existe pas de temps intermédiaire où une partie du train est sur un canton et où le canton précédent n'est pas encore libéré.

Pour alimenter correctement les cantons, paramétrer la section '#selectif' avec la description des aiguillages comme ceci :
 c1:+ c0+ a3.0          c1:+ c9+ a2.1 a3.1       c1:- c2- a4.1

Amélioration ::
Si l'on utilise le paramètre 'ral: xx' (avec une valeur), le fonctionnement des trains est plus fluide, car cela simule le ralentissement du convoi au passage d'un feu orange virtuel.
Utiliser une configuration des trains dans la partie '#train' qui fait doit faire avancer lentement les trains pour des vitesses de '01' à '03' (ils ne doivent pas rester immobiles),
et à la vitesse maximum souhaitable pour une vitesse de 64. Si une locomotive va trop vite n'hésiter pas à lui donner '32' ou même '20' comme vitesse maximum.
Le paramètre d'accélération peut être important, mais en décélération il ne doit pas dépasser une certaine valeur, au risque de bruler les feux rouges des conditions de blocage.
Le paramètre 'frein' ne sert pas dans 'balauto'.

Perte de wagons :
Si un wagon se détache du convoi, il reste détecté sur le canton précédent et le train va donc continuer à entrer sur le canton suivant,
car UTS croit que le convoi n'est toujours pas entièrement sur le canton et le train reste en mode 'ralenti'.
Dans ce cas le trains ne passera pas en mode 'blocage' et va heurter le train précédent.
Une possibilité est de donner à 'ral:xx' une valeur très faible (Exemple : 05), pour ne pas heurter trop violemment le train précédent en cas de perte de wagons.
Dans ce cas, le train risque de ne pas entrer sur le canton et d'occuper deux cantons.
Il faut alors 2 fois plus de canton que de trains sur une même voie, plus un canton de libre pour que les train tournent.
Si l'on ne met pas de directive 'ral:xx' le problème est aggravé, car le train ne ralentira même pas en cas de perte de wagons.
Si l'on a vraiment peur, mettre 'ral:01', mais 'ral:20' est plus réaliste.

Avec la fonction aigauto:
La fonction 'aigauto' fonctionne parfaitement avec 'balauto'.
La seul remarque est que si un train est arrêté devant un aiguillage par la fonction 'balauto', parfois,
il faut repasser sa vitesse à 0 pour réinitialiser la fonction 'aigauto' et ainsi commander les aiguillages automatiquement.



Gestion de la séparation et regroupement des wagons et locomotives :

Cette fonctionnalité permet de gérer de manière semi-automatique les wagons.
Les déplacements des trains sont plus précis et plus sûrs quand les wagons ont des essieux résistifs.
L'inconvénient des essieux résistifs et que si l'on sépare une locomotive de ses wagons, le canton avec les wagons reste occupé pour UTS.
Pour gérer ces wagons, la nouvelle fonction d'UTS permet de séparer ou regrouper les wagons d'un simple clic de souris.

Si des wagons n'ont pas d'essieux résistifs, ils ne sont ni connus, ni gérés par UTS.
On peut alors séparer les locomotives des wagons quand l'on veut, mais en déplacement automatique un train risque de s'arrêter
sur le canton d'arrivée avec des wagons encore sur le canton précédent, et la fonction 'balauto' n'assure pas la sécurité des convois.
Pour cela, il est conseillé d'avoir des essieux résistifs sur tous les wagons.

La fenêtre d'affichage des caractéristiques des trains comporte une page pour les locomotives et une nouvelle page pour les wagons.
UTS gère  les wagons comme des locomotives, ainsi un train ne va par heurter des wagons avec la fonction 'balauto'.
Le programme fait la différence entre une locomotive et des wagons uniquement par son numéro (<16 ou >16).
UTS ne sait pas gérer deux locomotives en UM, à moins de les garder constamment associées.
On peut découper un train en gardant une partie des wagons avec la locomotives.

Les wagons séparés doivent tenir sur un canton et ne doivent pas dépasser de ce canton.
On peut déposer une partie des wagons sur un canton et ensuite une autre partie sur un autre canton.

Il faut que les blocs d'occupation des cantons  du TCO soient bien renseigné avec le n° de canton et que les essieux des wagons soient résistifs..

Manipulation à réaliser sur le TCO pour séparer une locomotive de ses wagons.

On a séparé la locomotive de ses wagons et l'on a déplacé la locomotive sur le canton n° 9 en laissant les wagons sur le canton n° 8.
Pour le moment, malgré la séparation physique, UTS ne voit qu'un seul train.
Appuyer sur le bouton gauche de la souris sur le bloc d'occupation rouge de la future position de la locomotive.


En gardant ce bouton appuyé, déplacer le curseur sur le bloc d'occupation rouge du train des futurs wagons.


Lâcher le bouton. Si l'opération peut être réalisée, un cadre magenta s'affiche pendant une seconde.


Un fois la séparation effective, un nouveau train est créé pour les wagons.
Un nouveau train a été créé sous le nom : 'WGON[xx]' (xx =  du numéro 16 au 31).


On peut aussi séparer un train entre un canton et un garage
en laissant les wagons sur le garage ou

la locomotive sur le garage.




Manipulation à réaliser sur le TCO pour regrouper une locomotive et des wagons.
La locomotive et les wagons sont sur des cantons adjacents, ici les cantons n° 9 et n° 8.
Avec la fonction 'balauto', la locomotive vert ne peut pas rejoindre les wagons.
Il faut regrouper la locomotive et ses wagons sous le même numéro de train, avant de raccrocher physiquement la
locomotive et ses wagons.
Appuyer sur le bouton gauche de la souris sur le bloc d'occupation rouge de la locomotive ou des wagons.


En gardant ce bouton appuyé, déplacer le curseur sur le deuxième bloc d'occupation rouge.


Lâcher le bouton. Si l'opération peut être réalisée, un cadre magenta s'affiche pendant une seconde.


Un fois le regroupement effectif, le train des wagons est supprimé.

La locomotive peut se rapprocher des wagons.

On peut aussi regrouper un train entre un canton et un garage.
Il n'est pas encore possible de découper un trains de wagons en deux d'un clic de souris. Il faut passer par le menu "Table > Caractéristiques de Trains".


Quand un nouveau train est créé automatiquement, il porte un nom de type : 'WGON[xx]'.
On retrouve ce train dans la fenêtre de caractéristique des trains, menu  'Tables > Caractéristiques des Trains'.
La fenêtre contient les trains du numéro 0 à 15. Quand on clique sur le bouton [TRAINS], on affiche les WAGONS.



La fenêtre contient les trains du numéro 16 à 31 qui sont des wagons. On peut modifier ces trains comme ceux de la page précédente.



Les variables liées aux séparation et regroupement des wagons et locomotives
Comme expliqué ci-dessus, quand on clique sur deux cases pour regrouper une locomotive et des wagons, on regroupe en fait deux cantons.
Cette action manuelle peut se faire automatiquement en mettant une variable de type "regroupe_xx" à 1.
Dans l'exemple du paragraphe précédent, on regroupait une locomotive sur le canton n° 9 et des wagons sur le canton n° 8.

Pour faire cela automatiquement, dans la section #iti, déclarer une ligne comme dans l'exemple ci-dessous :

#iti
   regroupe0: c8   c9

   regroupe0: c1   g4

Quand une locomotive et des wagons sont sur les cantons n° 8 et n° 9, en mettant cette variable à 1, on réunis les deux éléments situés sur
ces cantons pour former un seul train, comme si l'on l'avait fait en cliquant sur les deux cases.
Fonctionne avec des numéro de canton ou de garage.
Pour une question de présentation uniforme dans la section #iti, on n'utilise pas le terme "regroupe_XX>" mais "regroupeXX".
Quand on voudra utiliser les variables "regroupe_xxx", il faut mettre un '_' dans le nom de la variable.

Exemple d'utilisation : Sur le TCO, on configure un bouton poussoir pour mettre à 1 cette variable (V1=9500). Quand on l'active, on active ce regroupement.

On visualise la configuration lue par UTS, par le menu : Débug > "Sépare - Regroupe".
On peut mettre à 1 ces variables dans le cadre d'actions générées par l'horloge pour automatiser des regroupements.

De la même façon, il existe des variable de type "separe_xx" que l'on peut mettre à 1, pour séparer un train en une locomotive et des wagons.

Quand l'on met ces variables à 1, UTS tente ces actions comme si on le faisait manuellement.
Que cette action soit réalisée ou pas réalisée, la variable est remise automatiquement à 0.

separe_xx (xx = 0 à 99), numéro interne = 9400 à 9499.
regroupe_xx (xx = 0 à 99), numéro interne = 9500 à 9599.



Les déplacements

Si l'on annule un déplacement en cours et que le train n'est plus détecté, le train sera placé par défaut sur le canton d'arrivé.
La vitesse des déplacements est la moyenne des vitesses des cantons occupés. Si le train occcupe les cantons c1=20 et c2 = 30, la vitesse du train sera de 25.
Dans le cas du dernier canton, dés que le train arrive sur ce canton, c'est la vitesse de ce dernier canton qui est imposé, même si il reste un bout du train sur le canton n-1,
ceci pour éviter que le train aille trop vite sur le dernier canton.
Si aucun train n'est détecté sur les cantons du déplacement en cours, la vitesse est temporairement réduite à 10.

En V3.7e, ajout ici du paramètre tempo:xxx et amélioration des annonces sonores dans la partie exe#.
Pour écouter une annonce sonore complète, avant le déplacement effectif du train, utiliser ces deux directives :  sdeb:exe_xx   tempo:xxx
Dans ce cas, quand on lance un déplacement, UTS réserve les cantons et les aiguillages, positionne les variables de début, puis attend xxx secondes avant de faire avancer train.
Cela permet d'attendre la fin de l'annonce sonore, avant de commencer à déplacer le train. Exemple de configuration, si l'annonce sonore n° 00 dure 20 secondes : sdeb:exe_00 tempo:20
Pour visualiser le décompte de cette temporisation en nombre de 'tics', lancer le menu : Tables > Déplacements.
On peut aussi activer une variable 'var_xxx', puis par une équation activer une annonce sonore suivant la valeur d'autres variables.

Directive  = 'acc-dec <1-28>-<1-28>' pour configurer l'inertie des déplacements.

On peut décrire 200 déplacements maximum dans la section '#depl'.
Les anciennes directives pour les déplacements. 'fin0:' et 'fin1:' en V2, sont devenues  'pass:', 'libe:' et 'fin:' en V3.

Voir les exemples dans le  fichier 'config.txt' :

depl
[
  acc-dec: 14-15
  d49  c9-20 c8-15         a1.0                  start:c9              libe:det_9  fin:det_8  halt:in_62 taf2 tsf0 name:C9__C8

  d88 c14+30 c7+40 c0+60   a14.1 a9.0 a0.0       start:c14             libe:det_7  fin:in_42  stop:c0    taf0 tsf1 name:C14__C11_G1   sfin:depl_start_run_77
  d91  c0+30 c7+40 c0+60   a14.1 a9.0 a0.0 a3.0  start:c14  pass:det_7 libe:det_7  fin:det_0             taf0 tsf0 name:C14__C14_P
 d134 c14-30 c13-30        a13.0                 start:c14             libe:det_14 fin:det_13            taf1 tsf0 name:C14__C13      sfin:depl_start_run_137
 d147 c12-15 c11-30 c5-40  a10.0 a6.1 a4.1       start:c12                         fin:in_40  stop:g4 sdeb:exe_00 tempo:20 taf0 tsf1 name:C12__Garage4
]


acc-dec:
acc-dec: <1-28>-<1-28>
   Valeur d'inertie pour l'accélération et décélération des trains pour tous les déplacements. Voir la correspondance en secondes dans la section '#train'.
   La valeur utilisée sera la plus faible entre cette valeur et celle du train situé sur le canton.
   Si l'on indique 'acc-dec xx-xx' ou pas de directive, on prendra la valeur d'inertie des trains.
   Exemple : acc-dec: 14-15

d<xx>:
d<0-199> = N° de déplacement dans la liste. Il peut y avoir des numéros inutilisés.
   c<n° de canton><+-Vitesse> = N° des cantons parcourus suivi de la consigne de vitesse <+-0-64>. (10 cantons maxi)
   a<n° d'aiguillage>.<n° position> =N° des aiguillages à manœuvrer avant le départ pour établir l'itinéraire. (10 aiguillages maxi).

start:c<0-15,100-115,200-215,300-315> = Canton de départ (Obligatoire).
pass:det_<0-15,100-115,200-215,300-315> = Canton de passage pour accéder à la condition de fin, indispensable si le canton de début et de fin sont identiques.
libe:det_<0-15,100-115,200-215,300-315> = Canton que le train doit libérer pour que la condition de fin soit réalisée. Généralement c'est l'avant dernier canton parcouru.

fin:<var> ou  fin:det_<0-15,100-115,200-215,300-315> = Condition de fin (Obligatoire). Généralement 'fin:det_xx' ou 'fin:in_xx', sur arrivé sur un canton ou sur détection par barrière IR.
stop:<var> = Si la condition de fin est un contact 'fin:in_xx', il faut ajouter 'stop:cx' pour que ce déplacement puisse être sélectionné sur le TCO par clic sur deux voyants d'occupation.
halt:<var> = Condition de halte. Arrête immédiatement le train sans inertie, utile pour un contact de fin de voie prés d'un butoir.

taf<0-999> = Temps en secondes entre la détection de fin et la mise hors tension des cantons. (Par défaut mettre 0 ou 1).
tsf<0-999> = Temps en secondes entre la détection de fin et la libération des cantons. (Par défaut mettre 0 ou 1).

name <nom_du_parcours> = Nom du parcours sur 40 caractères maximum. Pas d'espace ou de "+-" dans le nom, mais '_' autorisé.

Modification de variables avant ou après le déplacement. Par exemple, pour lancer des annonces sonores ou pour activer un second déplacement à la suite.
sdeb:<var> = Met la variable à 1 au début du déplacement.
cdeb:<var> = Met la variable à 0 au début du déplacement.
tempo:<0-999> = Attend xxx secondes après avoir activé les variables de début et avant de mettre le train sous tension. Utile si une annonce sonore est confi
sfin:<var> = Met la variable à 1 à la fin du déplacement. Exemple "sfin:depl_start_run_137" = Lance un second déplacement après la fin du premier déplacement.
cfin:<var> = Met la variable à 0 à la fin du déplacement.
sc:<var> = Met la variable à 1 au début du déplacement et à 0 à la fin.

Remarques :
La directive 'libe:' permet de libérer complètement le canton précédent quel que soit la longueur du train et sans temporisation.
Par contre, il faut que les wagons ou tout du moins le dernier aient ses essieux résistifs pour faire fonctionner la détection d'occupation des cantons.
Ceci permet de garer un train sur un canton terminus d'une ligne.

Exemples dans 'config.txt' pour aller d'un canton à un autre ou pour aller d'un canton à un garage.
  Condition de fin du déplacement = libérer le canton 7 et un train détecté sur le canton 15.
  d60  c9-30  c7-40 c15-20     a1.1 a0.1 a9.1 a8.0      start:c9    libe:det_7  fin:det_15          taf1 tsf0 name:C9__C15_M

  Condition de fin du déplacement = libérer le canton 9 et un train détecté par la barrière infra rouge câblée sur l'entrée 49.
  d61  c9+30  c1+15            a2.1 a3.1 a4.0 a5.0      start:c9    libe:det_9  fin:in_49  stop:g0  taf0 tsf0 name:C9__Garage0

  Condition de fin du déplacement = libérer le canton 9 et un train détecté sur le canton n°10, ou arrêt immédiat du train par la barrière infra rouge câblée sur l'entrée 48.
  d54  c9+30 c10+15            a2.0                     start:c9    libe:det_9  fin:det_10 halt:in_48 taf0 tsf0 name:C9__C10

Exemple dans 'config.txt' le déplacement 26 quand il terminé, active à la suite le déplacement 78, pour effectuer d'un seul clic une série de déplacements.
Ceci est particulièrement utile, si un déplacement complexe oblige à changer plusieurs fois le sens de parcours d'un train. Comme ça on pourra garer directement un train dans sa zone de garage.
Ceci permet de sortir une locomotive du dépôt en deux manoeuvres pour la placer automatiquement sur la voie principale.
  d26  c5+20 c11+10    a6.1 a10.1 a11.1     start:c5       libe:det_5  fin:in_42  stop:c11 taf0 tsf1 name:C5__C11_G2      sfin:depl_start_run_78
  d78  c11-10          a11.0 a12.0          start:c11                  fin:in_50  stop:g2  taf0 tsf1 name:C11__Garage2


Remarques :
Si l'on annule un déplacement en cours et que le train n'est plus détecté, le train sera placé par défaut sur le canton d'arrivé.


Les déplacements par simple clic de souris
Il est possible de lancer  un déplacement, en cliquant sur le voyant d'occupation d'un canton occupé, puis sur celui d'un canton libre.
Si ce déplacement est déclaré dans 'config.txt', alors il est lancé. Dans ce cas, les deux cases sont entourées d'un cadre vert clignotant. 
Si le déplacement n'existe pas, ces cadres clignotent en rouge.

Le logiciel parcours les itinéraires à la recherche de 'start:cX' pour le canton de départ et 'fin:det_Y' ou 'stop:cY' pour le canton de fin (Déclarés dans 'config.txt').
Si plusieurs déplacements satisfont à cette condition, le programme choisi le premier dans l'ordre numérique.
Ce système fonctionne aussi avec les garages. Pour un garage, si la condition de fin est le contact d'entrée d'une barrière infrarouge 'fin:in_xx', il faut ajouter une directive 'stop:cY' à ce déplacement.

Exemple, on clic sur le voyant de gauche, le voyant sélectionné clignote en rouge et les autres voyants sélectionnables passent en jaune.
  Il faut que les déplacements demandés soient déjà saisies dans 'config.txt' !

bloc de déplacement

Exemple
#depl
[
d60  c8+30 c9+15   a1.0 a2.0   start:c8  libe:det_8  fin:det_9 halt:in_48 taf0 tsf0 name:C8__C9
]


En situation initiale le train est à droite sur le canton c8.
a

On clique sur le rectangle rouge qui passe au jaune. Tous les blocs d'occupation décrits dans '#depl' et ayant comme origine le canton c8 clignotent, ici le c9 clignote.
a

On clique sur le bloc d'occupation c9.
Les bloc d'occupations sont entourés d'un cadre vert, signalant que ce déplacement est enregistré, sinon le cadre est rouge.
a

Ce déplacement n°60 est ajouté sur le bouton multifonction 'DPL' et le train se déplace.
a

Les profils des trains sont valables pour les déplacements
Dans un déplacement, si l'on indique une vitesse de 'cX+32' ou qu'avec la manette on fixe
u
ne consigne de '+32', la vitesse du train est calculée de la même manière en fonction du profil du train.

Ceci permet de définir des vitesses de canton correctes. Ainsi, si l'on donne sur un canton la vitesse '+32', tous les trains iront à la moitié de leur vitesse maximum.
Le gros avantage est que pour arriver sur un butoir, avec un détecteur de position infrarouge placé juste à la fin de parcours, on peut donner la consigne de vitesse à +10',
tous les trains iront lentement, approximativement tous à la même vitesse, même pour le même déplacement programmé.
 - Si vitesse du canton ou position de la manette = +01,  la vitesse du train = Vminimum.  (La loco doit bouger, mais le plus lentement possible).
 - Si vitesse du canton ou position de la manette = +32,  la vitesse du train = Vminimum + (Vmaximum-Vminimum)/2.
 - Si vitesse du canton ou position de la manette = +64,  la vitesse du train = Vmaximum.  (Vitesse maximum autorisée).


Les déplacements et itinéraires
Les tableaux des déplacements et des itinéraires  (menu : Tables > Déplacements ou Itinéraires) ont un texte de libellé dans leur colonnes 'Etat'.
Quand l'état est inactif, le libellé est remplacé par : "        -  .  -  .  -          ".

Les libellés pour les déplacements :
 - EN ATTENTE RÉSERVE CANT ET AIG
 - POSITIONNE VARIABLES DEBUT_DÉPLACEMENT
 - TEMPO EN COURS AVANT DÉPLACEMENT
 - ÉTABLI POSITIONS D'AIGUILLAGES
 - EN ATTENTE POSITION AIGUILLAGES
 - RÉSERVATION+ALIMENTATION CANTON
 - EN ATTENTE PASSAGE CANTON PASS:
 - EN ATTENTE ARRIVÉE CANTON/GARAGE
 - ÉTABLI LA TEMPO D'ARRÊT TRAIN
 - TEMPO EN COURS ARRÊT DU TRAIN 
 - FIN DÉPLACEMENT,RAZ DES CANTONS
 - ÉTABLI LA TEMPO LIBÉRATION CANTON
 - TEMPO EN COURS LIBÉRATION CANTON
 - POSITIONNE VARIABLES FIN_DEPLACEMENT
 - FIN RÉSERVATION CANTONS,AIG,SRV


Les libellés pour les itinéraires :
 - EN ATTENTE LOCO SUR CANT
 - EN ATTENTE RESERVE AIG
 - EN ATTENTE POSITION AIG
 - EN ATTENTE LOCO CANT FIN
 - EN ATTENTE FIN TEMPO
 - ITINERAIRE  ETABLI
 - LIBERATION



Les aiguillages peuvent être positionnés au lancement d'UTS

Pour positionner un ou plusieurs aiguillages en position '1' au lancement d'UTS, il faut ajouter une directive 'position_depart:' dans la partie '#aig'.
Les aiguillages peuvent être ainsi positionnés par défaut sur la voie principale.
Si dans les paramètres généraux, la directive "memorisation_aig = on" est présente, la directive "position_depart:" sera ignorée et les aiguillages seront remis à leurs positions lors de la dernière mise sous tension.

Exemple pour positionner les aiguillages n° 1, 5 et 14 à '1' :

#aig
[
    @default_tic:préparation0, go0, libération0 ,préparation1, go1, libération1
    default_tic:0,0,1,0,0,1
    position_depart:a1.1 a5.1 a14.1
    repos:out0=0 out1=0 out2=0 out4=0 out5=0 out6=0

    aig0: prep0:    out6=0 out0=1 out1=0 out4=1 out5=1 out2=0
          go0:      out6=1
          prep1:    out6=0 out0=1 out1=0 out4=1 out5=1 out2=1
          go1:      out6=1

Les cantons
Les cantons  (Menu : Débug > Cantons) ont maintenant une colonne supplémentaire libellée 'Vitesse réelle', qui correspond à la tension envoyée sur les rails.
Cette tension prend en compte le profil du train (Vminimum, Vmaximum).

La colonne 'Vitesse' correspond à la vitesse désirée. Si elle est de 10, n'importe quel train doit avancer lentement.
Si une loco demande la moitié de la tension d'alimentation pour commencer à avancer, il faudra que le paramètre 'Vmin' de son profil soit d'environ 20 à 30.



Les actions horodatées

Il est possible de programmer des actions comme des déplacements, éclairage, animation à heure fixe ou par période.
La configuration de la section '#horo'
est décrite dans la documentation d'Ulysse et dans le fichier 'config.txt'.
Il est possible de définir une suite d'actions spécifiques pour déplacer un train de nettoyage.

Il est possible de modifier la configuration de l'horloge. Afficher la page de réglage en passant par le menu : 'Tables > Horloge - Réglage'.
Horo

On peut changer le jour, l'heure et la vitesse de défilement de l'heure UTS.
Si l'on clique sur le bouton [INITIALISATION], on remet l'horloge à l'heure de départ prévue dans config.txt.
Si l'on clique sur le bouton [A l'ARRÊT]/[EN MARCHE], on change l'état de marche de l'horloge.
Si l'on clique sur le bouton [NETTOYAGE OFF]/[NETTOYAGE ON], on change l'état de marche de l'horloge et l'on active les actions de type "j:n" prévues pour le nettoyage du réseau.
Si l'on clique sur le bouton [PAS BLOQUEE]/[BLOQUEE], on affiche la page des actions en cours.
On affiche en dessous les 5 lignes de commentaires décrits dans la section  #horo.


Pour avoir la liste des actions déclenchées par l'horloge, afficher la page des actions en cours en passant par le menu : 'Tables > Horloge - Liste'.
Horo

Si l'on clique sur le bouton [PAS BLOQUEE]/[BLOQUEE], on affiche la page de modification de l'horloge.


Nouveautés  en V7.i :
Amélioration du programme UTS, et passage de 200 à 250 actions d'horodatage.

Nouveautés  en V7.d :

La colonne "Départ" est devenue interactive. Si l'on clique dessus, on position l'horloge à l'heure-1mn, pour démarrer sur ce premier événement.
La codification "Jour de de semaine" ou "Jour de week-end" a changé. Au lieu de 'e' ou 'w', il faut maintenant saisir 's' ou 'w'.
On n'affiche plus les pages vides, quand l'on fait un clic-droit. On revient automatiquement à la première page.
Quand l'heure est dépassée, elle est affichée en rouge dans la colonne départ.
On peut lancer 1 à 6 actions par ligne. Comme les actions sont souvent des déplacements, pour faciliter la lecture,
j'ai remplacé le nom de la variable "depl_srat_run_85.1" par  le nom du déplacement = "Garage_3_ vers_ gare_principale".

Remarques :
Si l'on clique sur une case de la colonne 'Inh', on inhibe l'action passée, présente ou future.
Si l'action bloquait l'horloge, et que cette action est un déplacement, l'inhibition de l'action supprime aussi le déplacement en cours.
Une ligne verte ('At-Bl'=Attente Blocage) signifie qu'une action en cours pourra éventuellement bloquer l'horloge à l'heure prévue (Colonne Blocage).
Une ligne orange signifie qu'une action en cours bloque l'horloge.
Une action sans condition de blocage restera de couleur blanche, même quand l'action est déclenchée.

Horo

Une action inhibée passe en bleu ciel.

Parcours de nettoyage des voies.
Il est parfois utile de faire passer un train de nettoyage sur toutes les voies.
Dans config.txt, on decrit en début ou fin de table, les actions de type "hd  j:n" qui décrit les déplacements pour passer sur tout le réseau :

#horo
[
    hd     08:00  hb +0:10  vf:!depl_start_run_3    s:depl_start_run_3     @  c0  c0 haut +
    hd     08:07  hb +0:15  vf:!depl_start_run_50   s:depl_start_run_50    @  c9  c9 haut -
    hd     08:20  hb +0:08  vf:!depl_start_run_59   s:depl_start_run_59    @  c9 c14 +
    hd     08:21  hb +0:08  vf:!depl_start_run_10   s:depl_start_run_10    @  c0 c15 -
    hd j:2:08:27  hb +0:08  vf:!depl_start_run_85   s:depl_start_run_85    @ c14  c9 +
    hd j:w:08:28  hb +0:08  vf:!depl_start_run_95   s:depl_start_run_95    @ c15  c0 -
    hd j:n:08:00  hb +0:01  vf:!depl_start_run_11   s:depl_start_run_11    @ Nettoyage des voies - Départ en C0
    hd j:n:08:02  hb +0:01  vf:!depl_start_run_104  s:depl_start_run_104   @ Nettoyage des voies -  G0  C8
    hd j:n:08:04  hb +0:01  vf:!depl_start_run_37   s:depl_start_run_37    @ Nettoyage des voies -  C8 C10
    hd j:n:08:08  hb +0:01  vf:!depl_start_run_69   s:depl_start_run_69    @ Nettoyage des voies - C10  G4
    hd j:n:08:10  hb +0:01  vf:!depl_start_run_122  s:depl_start_run_122   @ Nettoyage des voies -  G4  C0

Utilisation et limitation pour le parcours de nettoyage :
   Ne pas utiliser de déplacement qui enchaine à sa fin un autre déplacement (Se terminant par "sfin:depl_start_run_xx").
   Ne pas utiliser d'action avec des paramètres "hi" ou "hf" (horaire intervalle ou de fin).
   Il est pratique de définir les déplacements de nettoyage espacés de 2 mn et de définir le blocage à 1 mn (hb +0:01).
   Ajouter une ligne   commentaire_5 : Train de nettoyage au départ sur le canton n° 0

On place un train de nettoyage sur le canton de départ, en retirant tous les autres trains du réseau.
On clic sur [NETTOYAGE OFF] pour activer les actions de nettoyage. Le train parcours alors toutes les voies.
On clic sur [NETTOYAGE ON] pour clore les actions de nettoyage.

Pour utiliser ensuite les actions habituelles, on clic sur [INITIALISATION] puis sur [A L'ARRET] pour lancer les actions autres que celles en "hd j:n".
En V7.d, nouvelle syntaxe pour les actions horodatées, jour de la semaine = 's', jour du week-end = 'w'.


Le lancement d'actions externes comme les 'Sons'
On vérifie la syntaxe des lignes dans la section '#exe' et l'on affiche un message en cas d'erreur de syntaxe.
On peut configurer au maximum 100 actions, de 200 caractères chacune.

En V3.7e, il est possible d'ajouter des paramètres à une commande, et ainsi de lancer VLC (logiciel gratuit) en arrière plan.
Il faudra placer les paramètres en fin de ligne entre caractères ".
On peut ainsi lancer VLC, pour qu'il ne s'affiche que sur la barre de tâche, avec le paramètre : "--qt-start-minimized"
VLC se fermera automatiquement à la fin de la piste sonore, avec le paramètre : "--play-and-exit"
ou combiner les deux paramètres : "--play-and-exit" "--qt-start-minimized"
Le chemin d'accès de "vlc.exe" varie selon les versions de Windows, il faut alors adapter la chaîne de caractères pour lancer "vlc.exe". Il faut rechercher l'emplacement de "vlc.exe" sur la partition C:.
Cette configuration permet aussi, de jouer plusieurs sons à la fois.

La configuration lue est affichable et activable par le menu : 'Tables > ExeXX'.

La syntaxe dans 'config;txt' est la suivante :
#exe
[
  exe01: "Départ_TER_01.mp3"
  exe02: "E:\projet\dev_c++\projet\train5\sons\arreter_montagne.wav"
  exe10: "C:\Program Files\VideoLAN\VLC\vlc.exe C:\Users\mon_compte\Documents\UTS2000\Sons\Départ_TER_01.mp3"
  exe11: "C:\Program Files\VideoLAN\VLC\vlc.exe C:\Users\mon_compte\Documents\UTS2000\Sons\Départ_TER_02.mp3"
  exe12: "C:\Program Files\VideoLAN\VLC\vlc.exe D:\Users\mon_compte\Documents\UTS2000\Sons\Départ_TER_04.mp3" "--qt-start-minimized"
  exe13: "C:\Program Files\VideoLAN\VLC\vlc.exe D:\Users\mon_compte\Documents\UTS2000\Sons\Départ_TER_05.mp3" "--play-and-exit" "--qt-start-minimized"
  exe14: "C:\APPLI\VLC_PLAYER.020105\vlc.exe"   D:\UTS2000\Sons\Départ_TER_05.mp3" "--play-and-exit" "--qt-start-minimized"
]


La ligne doit commencer par 'exeXX: ', de 'exe00: ' à 'exe99: '.
L'espace entre  exeXX:  et le texte de l'action est obligatoire.
Le dernier caractère doit être un ". Éviter les espaces en fin de ligne.
Le texte de l'action doit être entouré de caractère  ", peut comporter des caractères accentués et des espaces, mais pas de caractères "
La chaîne "C:\Program Files\VideoLAN\VLC\vlc.exe" est à adapter à l'installation locale de "vlc.exe".
La chaîne "D:\Users\mon_compte\Documents..." dépend  de l'installation locale d'UTS et du nom du compte utilisateur courant. D'autres configurations sont possibles.

On peut lancer un message sonore, en choisissant des fichiers de type '.mp3', '.wav', '.wma' ou 'ogg'.
Un seul son peut être joué à la fois par le programme externe, à moins d'affecter les '.mp3' à Winamp, les '.wma' au player de Windows et les 'wav' à VLC.
Dans ce cas on peut jouer simultanément des sons, ayant une extension différentes.
Dans les déplacements, on peut ajouter une temporisation au départ du train, pour qu'une annonce sonore soir lue entièrement avant que la loco ne démarre.


Palette de couleur
Voici la palette de couleur par défaut prévue pour UTS, avec un affichage en relief.
Si l'on a choisi le mode relief, certaines couleurs ne sont pas prises en compte, notamment pour les blocs d'écran de  tco.
D'autre couleurs sont possibles, mais l'effet de relief ne sera peut être pas aussi bien. Cela concerne notamment la couleur grise 'OFF' des voyants et des positions d'aiguillages.

La palette sur le coté droit n'est pas désignable, mais sert de repère dans le défilement des couleurs.  [T] = Couleur du train, [C] = Couleur du canton, [O] = Oui] et [N] = Non,
Pour changer les couleurs, faire un clic-droit ou un clic-gauche sur les rectangles, pour incrémenter ou décrémenter la couleur.
a


La numérotation des variables


Numéro
début
Numéro
fin
carte 0 carte 1 carte 2 carte 3 Nombre
(ou xx)
Raz auto
Valeur

det_

00xx 01xx 02xx 03xx 4x16
0-1 Détections sur n° de cantons
(ex det_0, det_15, det_315)
in_

04xx 05xx 06xx 07xx 4x80
0-1 Entrées matricées  et directes
can_

08xx 09xx 10xx 11xx 4x5
0-255 Valeurs des entrées analogiques
out_

12xx 13xx 14xx 15xx 4x80
0-1 Sorties
led_

16xx 17xx 18xx 19xx 4x48
0-1 Allumage leds
led_cli_

20xx 21xx 22xx 23xx 4x48
0-1 Mode clignotement
led_phase_

24xx 25xx 26xx 27xx 4x48
0-1 Inversion de la phase du clignotement
srv_pos_

280x 290x 300x 310x 4x5
0-1023 Position réel du servomoteur
bal_cant_p_


32xx
33xx
34xx
35xx
4x16

0-1
Bloc automatique - Canton bloqué dans le sens Plus
bal_cant_m_


36xx
37xx
38xx
39xx
4x16

0-1
Bloc automatique - Canton bloqué dans le sens Moins
det2_


4000+xx
4100+xx
4200+xx
4300+xx
4x16

0-1
Canton occupé, détection avec  temporisation
det2p_

4020+xx 4120+xx 4220+xx 4320+xx 4x16
0-1 Canton occupé, détection avec  temporisation et Vitesse > 3
det2m_

4040+xx 4140+xx 4240+xx 4340+xx 4x16
0-1 Canton occupé, détection avec  temporisation et Vitesse < -3



44xx
45xx
46xx
47xx



Libre

4800
4999







Libre
aig_cmd 5000 5063



64   0-1 Commandes des aiguillages
pos0_aig_ 5100 5163



64
0-1 Aiguillages en position 0 et verrouillés (pas en mouvement) 
pos1_aig_ 5200 5263



64
0-1 Aiguillages en position 1 et verrouillés (pas en mouvement)
var_ 5400 5999



600
0-1023 Libre pour l’utilisateur
Iti_start_ 6000 6049



50 Oui 0-1     Z Activation d’un itinéraire
Iti_stop_ 6100 6149



50 Oui 0-1     Z Désactivation d’un itinéraire
Iti_wait_ 6200 6249



50
0-1 Itinéraire en attente
Iti_ok 6300 6349



50
0-1 Itinéraire établit
iti_step_
6350 6499



50


Pas séquence d'itinéraire. (pas encore implanté)
depl_start_run_ 6500 6699



200 Oui 0-1     Z2 Lance un déplacement
depl_stop_ 6700 6899



200 Oui 0-1     Z Arrêt prématuré d’un déplacement
garage_lock_cmd_    6900 6931



32
0-1 Commandes de verrouillage des garages
garage_lock_status_ 6950 6981



32
0-1 Etats de verrouillage des garages
vib_on 7000




1

0-1 Activation de la fonction vibreur
vib_state 7002




1

0-1 Etat du vibreur
screen_mode
7003




1
1-40 Numéro d'écran affiché
arret_urg_on 7004




1
0-1 Activation de l'arrêt d'urgence
arret_urg_state 7005




1
0-1 Etat de l'arrêt d'urgence

7050 7999






Libre
srv_cmd_

800x 810x 820x 830x 4x5
0-1023 Consigne du servomoteur
srv_cmd_

801x 811x 821x 831x 4x5
0-1023 Consigne de vitesse du servo
exe_ 8400 8499



100 Oui 0-1      Z Lance un programme (surtout utile pour des sons)
pulse_cmd_ 8500 8531



32 Oui 0-1      Z Déclenchement d’une impulsion
pb_capt_c_

86xx 87xx 88xx 89xx 4x16
0-1 Problème de captage sur les cantons
pb_capt_t_ 9000 9015



16
0-1 Problème de captage sur les trains
special_var_ 9100 9199



100
0-1023 Variables renseignées par UTS
separe_
9400
9499




100
Oui
0-1
Sépare les trains en locomotives + wagons
regroupe_
9500
9599




100
Oui
0-1
Regroupe les locomotives + wagons en trains


Z = Automatiquement remis à zéro, après prise en compte.
Z2 = Automatiquement remis à zéro, après en fin de déplacement.

La documentation dUlysse explique l'utilisation des équations et tables de vérité en détail. Voir aussi les explications détaillées sur la page décrivant le fichier "Config.txt".

Les variables det2_xxx  =  1, si le canton xxx est occupé avec une petite temporisation, pour la conduite manuelle ou les déplacements automatiques.
Il existe aussi les variables det2p_xxx et det2m_xxx qui sont à 1, si le train a une vitesse positive "(p)lus" ou négative "(m)oins".
Pour palier au manque de numéros libres, la numérotation de ces variables est la suivante : Exemples pour la carte n ° 0 : 
  det2_0  = 4000,  det2_1  = 4001,  det2_2  = 4002,,,  det2_15  = 4015
  det2p_0 = 4020,  det2p_1 = 4021,  det2p_2 = 4022,,,  det2p_15 = 4035
  d
et2m_0 = 4040,  det2m_1 = 4041,  det2m_2 = 4042,,,  det2m_15 = 4055

Pour connaitre l'état de l'horloge, allez voir les variables special_var_xxx.
  special_var_90 = horloge en marche=1
  special_var_91 = horloge bloquée=1

 
La variable screen_mode renvoie la valeur suivante, en fonction de l'écran affiché  :
Aiguillage_1 23
Exécutable_3 48
SERVO 31
Aiguillage_2 24
GARAGE 22
TCO_0 1
AIGAUTO_1 36
HALTE_1 41
TCO_1 2
AIGAUTO_2 37
HALTE_2 42
TCO_2 3
AIGAUTO_3 38
HORO_1 50
TCO_3 4
BALAUTO_1 43
HORO_2 51
TCO_4 5
BALAUTO_2 44
HORO_3 52
TCO_5 6
BALAUTO_3 45
HORO_4 53
TCO_6 7
Canton_1 29
HORO_5 54
TCO_7 8
Canton_2 30
HORO_6 55
TDV_1 32
Déplacement_1 11
HORO_7 56
TDV_2 49
Déplacement_2 12
HORO_Réglage 18
TRAIN_1 9
Déplacement_3 13
Itinéraire_1 20
TRAIN_2 59
Déplacement_4 14
Itinéraire_2 21
Variable_1 26
Déplacement_5 15
POSLOC_1 10
Variable_2 27
Déplacement_6 16
SELECT_1 33
Variable_3 28
Déplacement_7 17
SELECT_2 34
Vibreur 19
Exécutable_1 46
SELECT_3 35
VITMAX_1 39
Exécutable_2 47
SERIAL_Débug 25
VITMAX_2 40
HORO_8 57
POSLOC_2 59
SEPARE1 60


Remarque : Dans la section '#tdv', regrouper les équations 'equ:' au début et les tables 'tdv' en fin de description (C'est plus sûr).


La connexion RS232 vers la carte UTS

Si l'on coupe la liaison série pendant moins de 10 secondes, elle se rétablie toute seule à la reconnexion. Contrairement à la la liaison RS232, la liaison USB ne doit pas être coupée.
Un parasite sur la liaison provoquant la perte d'un octet ou l'arrivée d'un octet supplémentaire peut provoquer un défaut passager, éliminé à la réception de la trame suivante.
Si la liaison est coupée plus de 10 secondes, une fenêtre d'avertissement s'affiche. Si le clic sur 'Oui' ne règle pas le problème, il faut couper l'alimentation de la carte à PIC
pendant 10 secondes pour être sur que la carte à PIC se réinitialise à remise sous tension. Vérifier que la led témoin clignote, puis relancer la connexion en cliquant sur 'Oui'.



---------------

2 - Présentation de la partie programmation en C++

Les sources du programmes sont fournies, mais aussi l'exécutable pour Windows.
Cette page présente le programme du PC sous Projet Visual C++. Windows Visual C++ Express est une version gratuite de Microsoft.
Le programme disponible sur ce site est compilé sous C++ 2013 Express et n'est pas compatible avec Win98 ni avec W2000.
Framework.net doit être présent pour installer, pensez y avant d'essayer d'installer le logiciel.

Source de téléchargement : (3 ans de prison et 150.000 euro d'amende, non je plaisante ça c'est uniquement pour un fichier .mp3)
http://www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-express
http://microsoft-visual-c.softonic.fr/
http://www.clubic.com/telecharger-fiche17875-visual-c-express-edition.html

J'ai la version 2013 libre et gratuite, il faut juste s'enregistrer, disponible ici : http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx
Il y a deux versions, une limitée en fonctionnalité mais gratuite '(express) et une complète d'essais sur 30 jours.

Une fois Visual C++ installé, il faut recopier les fichiers du projet UTS dans le répertoire.
C:\Documents and Settings\.....\Mes documents\Visual Studio\Projects\Train_UTS_V3.7

Pour ouvrir ce projet UTS, il faut lancer "Train_UTS_V3.7.sln".

Liste des fichiers pour UTS, utilisés par Visual C++:

aff_bloc.cpp = Affiche d'un bloc dans un TCO
aig.cpp = Gère les aiguillages
aigauto.h + aigauto.cpp = Gère la commande automatique des aiguillages devant les trains en mouvement.
balauto.h + balauto.cpp = Gère le bloc automatique logiciel.
bmp.cpp = Gère les variables et sous-programmes pour les couleurs
canton.h + canton.cpp = Gère les occupations, réservations, libérations des cantons
conf_gen.cpp = Lecture des variables générales dans le fichier de configuration
debug_RS232.cpp =  Affiche l'écran de debug avec la carte
deplacement.h + deplacement.cpp =  Gère les déplacements programmés des trains
exe.h + exe.cpp = Lecture des variables pour lancer des exécutables dans le fichier de configuration et gestion de ces exécutables
fond.cpp = Affichage d'un fond de plan  - (fonction pas implantée)
garage.h + garage.cpp = Lecture des variables pour les garages dans le fichier de configuration et gestion de ces garages
horo.cpp = Lecture des variables pour la gestion de l'heure dans le fichier de configuration et gestion de l'heure
ir.cpp = Gestion d'une télécommande infrarouge
iti.h + iti.cpp =  Lecture des variables pour la gestion des itinéraires dans le fichier de configuration et gestion de ces itinéraires
pio.cpp = Conversion des noms de variables UTS en n° de variables
posloc.cpp = Positions théorique des locomotives au lancement de UTS
selectif.h + selectif.cpp = Lecture des variables pour la conduite en mode sélectif dans le fichier de configuration et gestion de ce mode
serial_port.h + serial_port.cpp = Gestion du port série et des trames échangées
servo.cpp =  Gestion des servo moteur
ss_pgr.cpp = Divers Sous-Programmes
ss_pgr_aff.cpp = Divers Sous-Programmes pour la partie graphique
tdv.h + tdv.cpp = Lecture des variables pour la table de vérité dans le fichier de configuration et gestion de cette table
train.h + train.cpp = Lecture des variables pour les trains dans le fichier de configuration et gestion de ces trains
Train_UTS.h  + Train_UTS.cpp = Programme principal
var.cpp = Gère les variables utilisateur
vib.cpp = Lecture des variables pour le vibreur dans le fichier de configuration et gestion de ce vibreur

Rsrc.rc = Fichier des menus d'UTS, à modifier avec Wordpad.
Train_UTS.ico = Icone du programme

Train_UTS_V3.7.ncb = Fichier Visual C++
Train_UTS_V3.7.sln = Fichier Visual C++ (C'est le fichier utilisé pour ouvrir le projet)
Train_UTS_V3.7.vcproj = Fichier Visual C++

config.txt = Fichier UTS à placer ici, pour lancer le programme en mode débuggage
config_tco.txt = Fichier UTS à placer ici, pour lancer le programme en mode débuggage

debug_train.txt = Fichier généré quand UTS
fonctionne.
log.txt = Fichier généré quand UTS fonctionne.

Dans le sous répertoire \Debug :
Debug\config.txt = Fichier UTS à placer ici, pour lancer le programme
Debug\config_tco.txt = Fichier UTS à placer ici, pour lancer le programme
Debug\Train_UTS_V3.7.exe = Exécutable généré après la compilation

Paramétrage et compilation du programme (Au 08/09/2024)

Compilation sous Windows Visual C++ Express 2013 (version gratuite)

Attention pour être aussi compatible avec Windows XP dans Visual Studio Express 2013,
menu : PROJET > Propriétés de Train_UTS_V3.7 > Propriétés de Configuration > Générale > Ensemble d'outils de plateforme = "Visual Studio 2013 - Windows XP (v120_xp)".

Paramétrage de Visual C++ Express :
 - Application Console = Application sous interface DOS
 - Application Windows = APIWIN32 avec interface graphique

Le programme fonctionne en mode Windows APIWIN32 Graphique
Pas de prise en charge de MFC (Microsoft class Library) ni ACTL

Configuration spéciale et obligatoire pour accepter le code 'C' d'UTS :

   Menu : Projet > Propriétés 
      Propriétés de configuration > Général
           Paramètres par défaut du projet > Jeu de caractères = Non défini

Par défaut, Visual C++ 2013 linke dynamiquement l'exécutable contre la C Runtime Library
(La bibliothèque C de Visual Studio). Il en résulte que le programme obtenu a besoins des DLL de Visual Studio pour fonctionner.
Vous pouvez configurer votre projet pour que votre exécutable soit linké statiquement contre la C Runtime Library :
 (Project properties -> Configuration -> C/C++ -> Code generation -> Runtime Library -> sélectionner "Multithread (/MT)" au lien de "Multithread DLL (/MD)").

---------------

3 - Utilitaires
Pour visualiser les trames RS323, il faut utiliser le programme Portmon.exe (gratuit) (XP et W7)
Copyright © 1999 Mark Russinovich - Adresse du site :   http://technet.microsoft.com
Cela permet de débugger les échanges entre la carte UTS et le PC.  

UTS2000