Page d'accueil Vers la page d'accueil       UTS 2000 - CONFIGURATION  (mise à jour au  08/09/2024)       

barre de séparation


<<<----------V3.7i------------------ Mise à jour au 08/09/2024--------------------------------->>>
Amélioration du programme UTS, et passage de 200 à 250 actions d'horodatage.

<<<----------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".

<<<----------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.

<<<--------------------------------- Mise à jour au 12/11/2017---------------------------------------->>>
UTS V3.7d permet d'activer l'arrêt d'urgence depuis un bouton poussoir, en modifiant la nouvelle variable "arret_urg_on".
Voir son utilisation dans la partie "Fonctionnement du logiciel et bouton arrêt d'urgence".
Nouvelles explications détaillées sur l'utilisation des équations et tables de vérité.
Nouvelle syntaxe pour les actions horodatées, maintenant jour de la semaine = 's', jour du week-end = "w".

UTS V7.7c mémorise la position des trains et des aiguillages lorsque l'on quitte le logiciel, pour retrouver les trains et aiguillages déjà en place sur le TCO au démarrage d'UTS.
Pour activer cette option, il faut ajouter dans la section #general, les paramètres  memorisation_train on   et   memorisation_aig   on.
Modifications de la palette des couleurs :
Les deux niveaux de gris en double sont devenus verte fluo et rouge foncé. Ajout de 4 couleurs : magenta, bleu foncé, lilas, cyan foncé.
Pour remettre les rendus des couleurs à l'identique, il faut donc afficher le rendu des couleurs, et mettre à jour les couleurs par comparaison avec une ancienne version.
<<<----------------------------------------------------------------------------------------------------------->>>

Table des matières :

1 - Description du fichier de configuration  "CONFIG.TXT"
2 - Description du fichier de configuration  "CONFIG_TCO.TXT"

1 - Description du fichier de configuration  "CONFIG.TXT"


Description du fichier "config.txt" en version V3.7e

Ce document indique la façon de paramétrer UTS. Pour connaitre l'utilisation détaillée de ces fonctions, consulter la page "Fonctionnement du logiciel".

Liste des sections UTS :
Toutes les sections sont chargées par UTS au démarrage. En cas de rechargement en cours d'utilisation, seule les sections 'Y' seront rechargées.

  #general 

 

 configuration d'ordre général des cartes UTS

  #aig     

 

 configuration (connexions et commandes) des aiguillages

  #selectif

 

 définition du suivit des trains sur les cantons (trains en manuel)

  #train   

 

 définition des trains (nom, vitesses, commande ...) + position au démarrage d'UTS

  #garage  

 

 configuration des voies de garage

  #horo    

Y

 paramétrage de l'horloge + horodateur pour déclencher des équations (exemples les déplacements automatiques)

  #iti     

Y

 itinéraires (commande une suite d'aiguillages)

  #depl    

Y

 définition des déplacements automatique

  #tdv     

Y

 opérations logiques (table de vérité, équations, impulsions)

  #exe     

Y

 fichiers à exécuter

  #vib     

Y

 configuration du vibreur en cas de mauvais contacts

  #aigauto 


 active les prochains aiguillages rencontrés par un train

  #balauto 


 active le système de bloc automatique logiciel



 Syntaxe générale utilisé sur cette page :
 #<nom_section>
 [
     instructions spécifiques à la section (250 caractères maximum par ligne / 70 blocs de texte maximum par ligne)
     @ commentaires dans une section
 ]

 Tout ce qui est hors section ou dans une section non reconnue est ignoré, mais éviter d'écrire dans les commentaires un nom de section valide (avec un #).

 Une aide sous la section détaille généralement les instructions spécifiques à la section. L'aide reprend les notations informatiques, exemples :
   <var> : à remplacer par un nom de variable
   [ ]       : option facultative
   0|1      : à remplacer par 0 ou 1
   0-255 : à remplacer par 0 à 255

#general - Configuration d'ordre général

#general
[
    relief on
    resolution_ecran plein ecran
    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.
      off = Pas d'effet de relief sur les blocs du TCO, comme dans la version originale V2.
      En relief, passe l'écran en nuance de gris. Augmente légèrement le taux d'utilisation du cpu. Par défaut UTS est en relief.

resolution_ecran  <taille_horizontale|plein>  <taille_verticale|ecran<   |   plein ecran
      Dimension de la fenêtre en pixel, ou mode plein écran.
      Si l'on écrit  resolution_ecran  plein ecran, on lance alors UTS en plein écran.
      Taille maximum = 32*25 cases = 1290 x 1050, si l'on dépasse cette taille, le reste sera rempli de gris.
      Minimum utilisable en pratique = 800 x 700. Par défaut UTS est en mode fenêtre 800 x 700.

show_cards_found <on|off>
      off = Au démarrage du programme, affiche une fenêtre avec les numéros des cartes UTS détectées
      on  = Démarre le programme directement, n'affiche pas de fenêtre si l'on trouve des cartes UTS. Par défaut UTS n'affiche pas cette fenêtre.

leds_card_<0-3> <on|off>
      on  = Active les leds. Les leds led_0 à led_47 sont actives, paramètre = n° de carte.
      off = Désactive les leds. Les sorties out_24 à out_39 sont utilisables en tant que sorties.
      Par défaut UTS utilise les leds.

ir_aig_digit <1|2>
      Nombre de chiffre nécessaire pour commander les aiguillages = 1 ou 2.
      Par défaut UTS utilise 2 digits.

inv_canton_<0-315> <on|off>
inv_pot_<0-305> <on|off>
      off = N'inverse pas le sens du canton ou du potentiomètre.
      on  = Inverse le sens du canton ou du potentiomètre.
      Par défaut UTS n'inverse pas le sens des cantons et des potentiomètres.
      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 = Au démarrage du programme, active la configuration de la section "#aigauto", aiguillages automatiques.
      off = Au démarrage du programme, n'active pas la configuration "#aigauto".
      Par défaut UTS active la fonction "#aigauto".

memorisation_train <on|off>
      on = Le programme sauvegarde les positions des 32 trains avant de fermer et les récupèrent au 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 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).

---- exemples ----
    leds_card_0 on
    show_cards_found off
    inv_canton_12 on
    inv_pot_3 on
    ir_aig_digit 2
    resolution_ecran 1024 768
    relief on
    memorisation_train  on
    memorisation_aig    on

#aig - Configuration des aiguillages

#aig
[
    default_tic:0,0,1,0,0,1
    repos:out0=0 out1=0 out2=0 out4=0 out5=0 out6=0
    position_depart:a1.1 a2.1 a5.1 a14.1

    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

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

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


On peut configurer 64 aiguillages au maximum.

default_tic:<0-64>,<0-64>,<0-64>,<0-64>,<0-64>,<0-64>
     default_tic:préparation0, go0, libération0 ,préparation1, go1, libération1
      préparation0 = temps en tic d'attente après la directive prep0
      go0               =                   //                      go0
      libération0     =                   //                      lib0
      idem pour préparation1, go1, libération1
      Configuration préconisée = default_tic:0,0,1,0,0,1

repos:out<0-79>=<0|1>  out<0-79>=<0|1>  out<0-79>=<0|1>  out<0-79>=<0|1>  out<0-79>=<0|1>
      Pour mettre hors tension les relais après une commande d'aiguillage.  repos:out<n°_relais>=<position du relais>.  

position_depart:a<0-63>.1  a<0-63>.1  a<0-63>.1  a<0-63>.1  a<0-63>.1
      Si le paramètre général memorisation_aig = on, cette directive pour positionner les aiguillages n'est pas prise en compte. La ligne "position_depart:" est ignorée.
      Permet de placer les aiguillages en position usuelle.
      Au démarrage d'UTS, par défaut tous les aiguillages sont positionnés à '0'.
      Cette directive permet de positionner certains aiguillages à '1'. Une seule directive. Pas de limite sur le nombre d'aiguillage.


aig<0-63> : prep0:  out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>  
                   go0:      out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>  
                   prep1:   out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>  
                   go1:       out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>   out<0-79>=<0|1>  
      aig<0-63>: Pour commander un aiguillage par son numéro.
      Positionne les relais (8 max à la fois) de la carte de commande des aiguillages. (Voir doc Ulysse et matériel V2).
      prep0: positionne les relais pour sélectionner l'aiguillage aig<0-63> dans une direction.
      go0:    active les relais pour commander l'aiguillage aig<0-63> dans une direction.
      prep1: positionne les relais pour sélectionner l'aiguillage aig<0-63> dans l'autre direction.
      go1:    active les relais pour commander l'aiguillage aig<0-63> dans l'autre direction.


---- exemples ----
    default_tic:0,0,1,0,0,1
    repos:out0=0 out1=0 out2=0 out4=0 out5=0 out6=0
    position_depart:a1.1 a5.1 a14.1

    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


#iti - Itinéraires pour positionner une série d'aiguillages

#iti
[
    iti0:  direct a3.0  a0.0                                          name: voie_0
    iti1:  direct a3.1  a2.1  a1.1  a0.1                              name: voie_9

    iti2:  onoff  a4.1  a6.0  a7.0  a8.1  a9.1                        name: tour_h
    iti3:  onoff  a4.0  a5.1  a13.0 a14.1 a9.0                        name: tour_b1

    separe1:   c0   c1
    separe1:   c1   c2
   
    regroupe0: c0   c1
    regroupe1: c1   c2
]


On peut configurer 50 itinéraires au maximum et 10 aiguillages maximum par itinéraire.
On peut déclarer 100 variables de séparation et regroupement automatique des locos et wagons.

iti<0-49>: <onoff|direct> a<0-63>.<0|1> ... name: <nom_sur_40_caractères_maximum>
    direct Cette directive demande aux aiguillages de se mettre dans la position requise. Les aiguillages réservés ne sont pas sollicités.
               Cet itinéraire se désactive immédiatement après son lancement.
    onoff  Cette directive commence par réserver les aiguillages. Lorsque qu'il n'y a pas d'aiguillages de réservés, ils ont mis en position et réserves jusqu'à la demande d'arrêt de l'itinéraire.
            Les itinéraires 'onoff' doivent être arrêtés manuellement une fois qu'on n'en a plus besoin.
            Ils peuvent également être déclenchés manuellement et attendre une locomotive sur un canton et désactiver l’itinéraire lorsque la locomotive est sur un autre canton spécifié.
    a<0-63>.<0|1>  = Aiguillage à positionner, 10 au maximum.
    start:c<0-315> = Attend une locomotive sur le canton x pour activer l'itinéraire.
    stop:c<0-315>  = Attend une locomotive sur le canton x pour désactiver l'itinéraire.
    name:<texte>   = Nom de l'itinéraire sur 40 caractères maximum, sans espace ni caractères spéciaux, remplacer les espaces par des '_'.

separe<0-99>: c<0-315> c<0-315>
    Décrit les variables de type "separe_xxx".
    Sépare un train en une locomotive sur le premier canton et des wagons sur le deuxième canton. Fonctionne avec des cantons ou des garages.

regroupe<0-99>: c<0-315> c<0-315>
    Décrit les variables de type "regoupe_xxx".
    Regroupe une locomotive et des wagons sur les deux cantons passés en paramètre. Fonctionne avec des cantons ou des garages.


#Selectif - Définition du suivi des trains en manuel sur les cantons

@ # s e l e c t i f sans aiguillages
[
     c0:+ c7+     c0:- c1-
     c1:+ c0+     c1:- c9:+    c1:- c2-    c1:- c13-
     c2:+ c1+     c2:- c3-
     c3:+ c2+     c3:- c4-
]


@ # s e l e c t i f avec aiguillages
#selectif

[
     c0:+ c7+ a0.0          c0:- c1- a3.0
     c1:+ c0+ a3.0          c1:+ c9+ a2.1 a3.1       c1:- c2- a4.1          c1:- c13- a4.0 a5.1
     c2:+ c1+ a4.1          c2:- c3-
     c3:+ c2+               c3:- c4-
]

On peut configurer 100 éléments en tout au maximum, et plusieurs élément par ligne.
On peut créer une section avec les aiguillages et une section sans les aiguillages en supprimant le dièse devant le nom d'une des deux sections. 
Dans l'exemple ci-dessus, on utilise uniquement la deuxième section "#selectif".

c<0-315>:<+|->  c<0-315><+|->  a<0-63>.<0|1>  a<0-63>.<0|1>  a<0-63>.<0|1>
     canton destination:sens    cantons source:sens  position des aiguillages (maximum = 6 aiguillages) (Voir doc Ulysse)
      N'écrire qu'une seule ligne pour un n° de canton donné.
      Donner les directives pour alimenter le canton en fonction du canton précédant.
      cX:+-  cY+-  Le canton cX sera alimenté en "+" ou en "-" si le canton cY est alimenté en "+" ou en "-" et l'aiguillage a.Z est en position Z.
      Faire une configuration avec et sans les aiguillages suivant l'utilisation désirée (Voir doc Ulysse).
      Seule une section "#selectif" est prise en compte. Pour ne pas prendre en compte la seconde, la renommer en "@ # s e l e c t i f".


#aigauto - Active les prochains aiguillages rencontrés par un train en mouvement

Permet de commander automatiquement des aiguillages devant un train en mouvement, quand on conduit un train en manuel.
N'a pas d'influence sur les trains en déplacements automatique.
Facilite le déplacement des trains en conduite manuelle, pour éviter de rencontrer un aiguillage fermé.
Pour activer cette fonction, utiliser la directive "train_aigauto <on|off>" dans la section "#general".
On peut configurer 100 lignes au maximum, composées de 6 cantons libérés par le train au maximum, 6 conditions au maximum, 6 aiguillages au maximum.

#aigauto
[
    cant:  c0:+9    plusur: c7                  condi:  det_1.0                                 actions:  a3.0
    cant:  c0:-10   plusur: c1                  condi:  det_7.0                                 actions:  a0.0
    cant:  c1:-10   plusur: c2  c13             condi:  det_9.0  a3.1                           actions:  a2.1
    cant:  c6:-3    plusur:                     condi:  det_5.0 in_41.1 garage_lock_status_3.0  actions:  a6.0
    cant:  c7:+3    plusur:                     condi:  in_40.1 garage_lock_status_4.0          actions:  a9.0  a14.0
]

c<0-315>:<+|->  plusur:  c<0-315> c<0-315> c<0-315>    condi: <var>.<0|1> <var>.<0|1> <var>.<0|1>    actions: a<0-63>.<0|1> a<0-63>.<0|1> a<0-63>.<0|1>
Exemple :     cant: c1:-10    plusur: c3 c4          condi:  in_49.1  garage_lock_status_0.0       actions: a4.0  a5.0


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

cant: 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 (-64 à -1 ou 1 à +64) .
  Si l'on met vitesse = +30 ou -30, le train devra rouler rapidement pour déclencher les aiguillages. Cela permet de faire des manœuvres au ralenti sans actionner les aiguillages.

plusur: c<0-315>.<0|1> = Cantons devant être libérés par CE train pour déclencher les actions.
  Utilisé pour vérifier que le train a bien quitté tous les cantons précédents possibles.
  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.

condi: <var>.<0|1> = Toutes les conditions doivent être réalisées pour déclencher les actions.
  Utiliser généralement 'det_xx.0' pour vérifier que le train se dirige vers un canton libre.
  Si le terme est 'det_xx.0', on vérifie aussi que le tarin se dirige vers un canton 'xx' non réservé, ni en manuel ni en déplacement automatique.
  Les variables doivent être à l'état indiqué pour déclencher les actions.
  On peut modifier avec un interrupteur, le parcours depuis le TCO, en testant une variable de type 'var_xxx'.

Attention de bien définir les termes 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 le nombre de caractères, on peut écrire 'aX.Y' à la place de 'posY_aig_X.1'.
    on peut donc écrire : 'condi: det_6.0 pos1_aig_8.1 pos0_aig_9.1' ou 'condi: det_6.0 a8.1 a9.0'.

actions: a<0-63>.<0|1> = Aiguillages devant être positionnés lors du déclenchement des actions. (Exemple = a3.1 a12.0)
  Les aiguillages sont positionnés à l'état indiqué, sauf si ils sont réservés.

Quand un train avance sur le canton dans le sens précisé à 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. Pour cette configuration, 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.
Les valeurs des conditions ou actions ne peuvent être égale 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.

---- Exemple ----
   cant:c7:+10    plusur: c4.0 c5.0 c6.0     condi: det_8.0 pos0_aig_8.1     actions: a0.0  a1.1

   Un train avec une vitesse de +10 avance sur le canton n° 7. Les cantons précédent n°4, 5 et 6 ont été libérés par ce train, le canton suivant n° 8 est libre
   et l'aiguillage n° 8 est en position 0, alors on active les aiguillages n° 0 et n° 1 avec les valeurs indiquées.

#balauto -  Système de Bloc Automatique Logiciel


Permet d'espacer automatiquement les trains conduits en manuel.
On peut configurer au maximum :
    30   vitmax:  avec 6 conditions au maximum
    60   halt:  avec 6 conditions au maximum
  100   cant: avec 6 cantons libérés par le train au maximum et 22 conditions au maximum


#balauto
[
  tempo-libe-cant:10

  vitmax:c1:+11     condi: a4.0 a5.0  
  vitmax:c9:-22     condi: a1.0
  vitmax:c10:+11
  vitmax:c11:-22

  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:c11:+  condi:            in_42.1
 
  cant:c0:+   ral:32 dec:11   plusur: c7          blocage: det_1.1 | a3.1
  cant:c1:+   ral:32 dec:11   plusur: c0 c9       blocage: det_2.1 a4.1 | det_13.1 a4.0 a5.1 | a4.0 a5.0 garage_lock_status_0.1
  cant:c9:+   ral:32 dec:11   plusur: c7          blocage: det_1.1 a2.1 a3.1 | det_10.1 a2.0 | a2.1 a3.0
  cant:c11:+  ral:32 dec:11   plusur:             blocage: a12.0 in_51.1 garage_lock_status_1.0 | a12.1 in_50.1 garage_lock_status_2.0

  cant:c0:-   ral:32 dec:11   plusur: c1          blocage: a0.1 | det_7.1
  cant:c1:-   ral:32 dec:11   plusur: c2 c13      blocage: det_0.1 a3.0 | det_9.1 a3.1 a2.1 | a3.1 a2.0
  cant:c7:-   ral:32 dec:11   plusur: c0 c9       blocage: det_6.1 a8.1 a9.1 | a7.1 a8.1 a9.1 | det_15.1 a8.0 a9.1 | det_14.1 a14.1 a9.0 | a9.0 a14.0 garage_lock_status_4.1
  cant:c10:-  ral:32 dec:11   plusur:             blocage: a2.1 | det_9.1
]


tempo-libe-cant:<0-99>
    <0-99> = temporisation en dixièmes de secondes  (0 = pas de temporisation, 10 = 1 seconde, 99 = 10 secondes). Mettre 10 par défaut.
Directive pour temporiser la libération d'un canton quand un train n'est plus détecté.
Si un faux contact fait croire qu'un train a quitté le canton, on attend pour voir si le contact revient.
Sans cette temporisation, un train s'engagerait sur le canton suivant au moindre faux contacts du train devant lui.

vitmax:c:<0-315>:<+-vitesse max>   condi: <var>.<0|1>  <var>.<0|1>
    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>
   Paramètre optionnel. Les conditions doivent être toutes réunies pour limiter la vitesse.
   Les variables doivent être égale à leurs valeurs. 6 conditions maximum.
   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.

halt:c:<0-315>:<+->  condi: <var>.<0|1>  <var>.<0|1>
    c:<0-315> = Canton ou s'applique l'arrêt immédiat.
    :<+-> = Sens de parcours.
   condi: <var>.<0|1>  <var>.<0|1>
   Paramètre obligatoire. Les conditions doivent être toutes réunies pour stopper le train.
   Les variables doivent être égale à leurs valeurs. 6 conditions maximum.
   Il faut interdire au train de rentrer sur un canton occupé, de rencontrer un aiguillage fermé et de rentrer sur un garage occupé.
   Exemple pour stopper net un train en fin de voie, quand il franchi une barrière infra-rouge placé 5 cm devant un heurtoir.
   Pour rechercher des wagons seuls placés devant un heurtoir, cette protection est désactivable avec le bloc 'Fonctions multiples' et 'OPT'=6.

cant:c<0-315>:<+-> [ral:<1-64>]  [dec:<1-28>]
   c<0-315> = Canton que le train n'a pas le droit de quitter.
   <+-> = Sens de parcours du canton.
   ral:<1-64>
   Paramètre optionnel. Consigne de vitesse en cas de ralentissement.
   Si la partie 'plusur:' n'est pas validé, mais si un groupe de condition 'blocage:' est validé, cela signifie que
   le prochain canton est occupé, mais que le train n'est pas encore totalement entré sur le canton en cours.
   Quand tous les wagons seront sur le canton, le train va s'arrêter avec un 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é. Évite de griller le bal des cantons.
   dec:<1-28>
   Valeur d'inertie optionnelle pour tous les déplacements. Voir la correspondance en secondes dans la section 'train'.
   La valeur utilisée est la plus faible entre cette valeur et celle du train. Utile pour les cantons courts.
   plusur:c<0-315>.<0|1> = Cantons devant être libérés par ce train pour vérifier si il peut sortir du canton.
   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.
   blocage: <var>.<0|1> = Conditions devant être réalisées pour bloquer le train sur le canton.
   Toutes les variables doivent être à l'état indiqué pour bloquer le train.
   Directive pour arrêter un train sur son canton, car les conditions ne lui permettent pas de passer au canton suivant. C'est une sorte de BAL.
   Si un n° de canton est sur présent sur plusieurs lignes, il suffit qu'une seule des lignes remplisse les conditions de blocage pour bloquer le train.


#train - Définition des trains et position des trains au démarrage

Cette directive définit la position des trains au lancement d'UTS.
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 ces directives "train<xx>:" seront alors ignorées.
Seul les trains décrits dans la partie "reserve" seront alors pris en compte.

#train
[
    train0 : RAILCHEM c0   color : 2 pot0   06-64-13-13-xx en_auto
    train2 : BB660037 c8   color : 1 clav0  10-64-13-13-xx en_auto
    clav_conf_0  : +a !q -w
    clav_conf_1  : +z !s -x   
    clav_conf_2  : +e !d -c
    acc_progressif : 2 4 6 8 10 12 14 16
    dec_progressif : 5 10 15
    reserve : RAILCHEM 05-64-13-13-xx color :  2 name : Trix_verte_R4C1201
    reserve : DB_VIOLT 05-20-13-05-xx color :  5 name : Roco_rouge_BD_215_083_7
    reserve : BB_67381 09-64-13-11-xx color :  1 name : Trix_diesel_bleu
    reserve : DB_ROUGE 10-37-13-11-xx color :  4 name : Fleishmann_DB_218_407_5_rouge
]

train<0-15>  : <nom_du_train> c<0-315>|g<0-31>    [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
train<n° du train> : <nom_du_train> c<canton>|g<garage>  [color:<color>]  [clav<0-4>/pot<0-304>] [min-max-acc-dec-frein] en_auto
      Si le paramètre général memorisation_train = on, cette directive 'train' pour définir et positionner les trains n'est pas prise en compte.
      train<0-15> :  = n° du train = 0 à 15. 16 trains maximum.
      nom_du_train = Nom du train obligatoirement sur 8 caractères sans espace. Compléter si nécessaire avec des '_'.
      c<canton>|g<garage> = Emplacement du train au lancement d'UTS.
      color : <0-23> = Paramètre optionnel. Couleur du train.
         noir=0, bleu clair=1, vert=2, cyan=3, rouge=4, violet=5, ,jaune=6, blanc=7, vert pâle=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, bleu-vert=23
      clav<0-4>/pot<0-304> = Commandes pour diriger le train. Au clavier du PC ou par potentiomètre.
      Caractéristiques du train [min-max-acc-dec-frein] = valeurs ou mettre 'xx' pour les valeurs par défaut.
      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 à vitsse 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 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.
        Le programme limite aux valeurs suivantes : 64>=VMAX>=6, 50>=VMIN>=1, VMAX>VMIN, 28>=ACC>=1, 28>=DEC>=1, 28>=FREIN>=1.
      inv = Inverse l'alimentation de ce train.
      en_auto = Le train peut être commandé automatiquement par un déplacement.

clav_conf_<0-4> : +<touche_minuscule_sens0+_sens1-> !<touche_minuscule_stop> -<touche_minuscule_sens0-_sens+->
     Description de 5 commandes par clavier au maximum pour commander les trains (Voir doc Ulysse).
     Exemples : clav_conf_0 : +a !q -w,   clav_conf_1 : !s -x +z,   clav_conf_2 : +e !d -c,   clav_conf_3 : +r !f -v,   clav_conf_4 : +t !g -b   

acc_progressif : [<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>]
     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).
     Si l'on indique acc_progressif : 5 10 15  et si la valeur d'inertie d'un train est définie à 11 alors
     si la vitesse du train >   0 et <=   5  alors sa valeur d'inertie = 1 + 1 + 1 + 11 = 3 secondes  
     si la vitesse du train >   5 et <= 10  alors sa valeur d'inertie = 1 + 1 + 11 = 2,7 secondes  
     si la vitesse du train > 10 et <= 15  alors sa valeur d'inertie = 1 + 11 = 2,3 secondes  
     si la vitesse du train > 15                alors sa valeur d'inertie = 11 = 2 secondes
     Essayer les valeurs :   acc_progressif : 2 4 6 8 10 12 14 16

dec_progressif : [<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>-<1-64>]
     En décélération, permet d'ajouter un peu plus de progressivité aux faibles vitesses, car les trains ont tendance à ralentir trop vite.
     Indique la vitesse sous la quelle on change de valeur d'inertie (8 vitesses maximum).
     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-28>-<1-28>-<1-28>-<1-28>-<1-28>]  color:<0-23>  inv  name : <commentaires>
     23 lignes au maximum. Sert à configurer des trains d'avance pour les placer facilement sur le réseau.
     nom_du_train = Nom du train obligatoirement 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 = Numéro de la couleur du train de 0 à 23.
     inv = 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. Utiliser des '_'  à la place des espaces.


#garage - Configuration des voies de garage.

#garage
[
    g0:  c1   out8  pol0
    g1: c11   out9  pol0
]

g<0-32>: c<0-315> out<0-379> pol<0|1>
     g<numéro du garage>: c<numéro du canton relié au garage> out<numéro de sortie du relais> pol<position du relais>
     c<0-135>     = Canton auquel le garage est relié électriquement.
     out<0-379> = Numéro de sortie pour activer le relais qui met en contact les rails du garage et du canton.
     pol<0|1>      = Position du relais pour isoler le garage (sortie à 1 = relais sous tension).


#horo - Paramétrage de l'horloge et horodateur pour déclencher des équations

Syntaxe pour les actions horodatées.
Les repères pour les jours de la semaine = 's', et jour du week-end = 'w'.

#horo
[
    depart j:0 7:55 tic_par_min:50

    commentaire_1 : Un train au départ sur le canton n° 0
    commentaire_2 : Un train au départ sur le canton n° 9

    hd     08:00  hb +0:10  vf:!depl_start_run_3   s:depl_start_run_3    @  c0  c0 haut +
    hd j:2: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:e: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_3   s:depl_start_run_3    @  Nettoyage des voies c0  c0 haut +
    hd j:n:08:01  hb +0:01  vf:!depl_start_run_50  s:depl_start_run_50   @  Nettoyage des voies c9  c9 haut -
    hd j:n:08:02  hb +0:01  vf:!depl_start_run_59  s:depl_start_run_59   @  Nettoyage des voies c9 c14 +

]

depart j:<0-6> <0-23>:<0-59> tic_par_min:<1-240>
      Initialisation de l'horloge au jour et l'heure donné.
      j:<0-6>       = Jour de la semaine au lancement de l'horloge.
      <0-23>:<0-59> = Heure et minute au lancement de l'horloge.
      tic_par_min:<1-240> = Rapidité de l'horloge UTS, = nombre de 'tick' pour une minute d'horloge.
        750 tic/minute =    1 minute     = 1 minute UTS   et     1 heure    = 1  heure UTS. (pour un tic à 80 + 15 msec)
        250 tic/minute =  20 secondes = 1 minute UTS   et   20 minutes = 1  heure UTS.
        125 tic/minute =  10 secondes = 1 minute UTS   et   10 minutes = 1  heure UTS.
         50 tic/minute =     4 secondes = 1 minute UTS   et     4 minutes = 1  heure UTS et 24 heures = 1h36 mn.

commentaire_<1-5>  :
       On peut écrire jusqu'à cinq lignes de commentaires au format libre.
       Ceci permet de se souvenir des conditions initiales comme la position des trains au démarrage de l'horloge.
       Pour afficher ces commentaires dans UTS, passer par le menu : Tables > Horloge - Réglage.

hd <[j:<0-6|w|e|n>:]0-23:0-59> [hb <0-23:0-59>|hb +<0-23:0-59>] [hi <0-23:0-59> hf <0-23:0-59>][ vf:[!] <var> ]    [ <s|c>:<var> ]  
    hd <Heure_de_Départ>          hb <>  hi<période>  hf<heure_de_Fin_d'action_périodique> hb <temps_d'attente_maxi_avant_blocage_par_variable> vf:<variable_bloquant_l'horloge>
      Directive pour modifier des variables ou lancer des déplacements (250 lignes au maximum).
      hd <[j:<0-6|w|s|n>:]0-23:0-59> = Heure de départ = Jour et heure:minute de départ de l'action. j:x = paramètre facultatif, si absent c'est tous les jours.
         j:0 à j:1  j:e  j:w   j:n  0=lundi à 6=dimanche, s=du lundi au vendredi, w=samedi ou dimanche, n= Spécial parcours de nettoyage.
         si  j:n  on défini des actions uniquement pour faire rouler un train de nettoyage des voies. Si l'on active dans UTS le parcours de nettoyage, l'horloge ne fonctionne que pour les lignes "hd j:n".
         si  j:n  Limitations : On ne doit pas utiliser de directives hi ou hf, ni utiliser un déplacement qui une fois fini, enchaine automatiquement vers au autre déplacement.
      Cas d'action périodique : Possibilité de faire des actions répétitives entre hd et hf, toutes les hi.
        hf <0-23:0-59> = Heure de fin = heure:minute de fin d'une action périodique qui commence à 'hd'.
        hi <0-23:0-59> = Heure d'intervalle = heure:minute de période d'une action périodique qui commence à 'hd' et fini à 'hf'.

      En cas d'incident, on peut bloquer l'horloge, le temps de re-enrailler un train. La variable vf: peut bloquer l'horloge sur hb si la condition n'est pas vérifiée.
      Utile lorsqu'un déplacement ne se fait pas (par exemple suite à un pb de captage).
        hb +<0-23:0-59> = Temps maximum autorisé pour faire l'action ou le déplacement, après l'horloge se bloque.
        vf:[!] <var>    = Variable conditionnant le blocage de l'horloge (ex vf:!depl_start_run_xx). Une seule variable maximum.
      Actions à lancer quand l'heure de départ est arrivée, ou si l'heure périodique revient.
       <s|c>:<var> = Positionne la variable 'var' à 1 (s=Set) ou 0 (c=Clear), (6 s/c:variables maximum par ligne).


#depl - Définition des déplacements

On peut configurer 200 déplacements au maximum.
   10  cantons maximum par déplacement + 10 aiguillages maximum par déplacement.
    Nom du déplacement sur 40 caractères maximum.
    Depuis le TCO, pour lancer un déplacement par un clic sur deux voyants d'occupation, si la condition de 'fin:'
    est un contact 'in_xx', il faut ajouter une condition 'stop:cY' pour que ce déplacement puisse être sélectionné.
    Paramètres pour mon réseau avec peu d'inertie sur les trains, et vitesse d'arrivée faible car les cantons sont très courts.
    Vitesse de départ depuis le premier canton = 30, depuis butoir ou zone d'aiguillage = 20.
    Vitesse d'arrivée vers dernier canton = 20, vers canton sans issue =15, vers butoir avec barrière infrarouge = 10.
    Pour faire une annonce sonore, avant que le train se déplace, 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 qui dure 20 secondes, avant de commencer à déplacer le train. Exemple : sdeb:exe_00 tempo:20
    On peut aussi activer une variable 'var_xxx', puis par une équation activer une annonce sonore suivant la valeur d'autres variables.

#depl
[
  acc-dec: 14-14
  d0   c0+30  c1+40  c2-60  c3+60  c4+60  c6+60  c7+20 a3.0  a4.1 a6.0 a7.0 a8.1 a9.1 a0.0     start:c0  pass:det_5  libe:det_7  fin:det_0    taf0 tsf0 name:C0__C0_HAUT_P
  d1   c0-30  c7-40  c6-60  c5-60  c4-60  c2-60  c1-20 a3.0  a4.1 a6.0 a7.0 a8.1 a9.1 a0.0     start:c0  pass:det_5  libe:det_1  fin:det_0    taf0 tsf0 name:C0__C0_HAUT_M
  d3   c0-30  c7-40 c15-60 c13-60  c1-40                     a0.0 a9.1 a8.0 a13.1 a5.1 a4.0    start:c0  pass:det_15 libe:det_1  fin:det_0    taf0 tsf0 name:C0__C0_BAS_M
  d6   c0-30  c1+40  c2+60  c3+60  c4+60  c5+30 c11+10       a3.0 a4.1 a6.1 a10.1 a11.1        start:c0              libe:det_5  fin:in_42  stop:c11 taf0 tsf0 name:C0__C11
  d30  c5+30  c6+40  c7+60  c0+40  c1+10                     a6.0 a7.0 a8.1 a9.1 a0.0 a3.0     start:c5 sdeb:exe_0 tempo:20 libe:det_0  fin:in_49  stop:g0  taf0 tsf1 name:C5__Garage0
  d83 c14+30  c7-40  c0+20                                   a14.1 a9.0 a0.0                   start:c14             libe:det_7  fin:det_0           taf1 tsf0 name:C14__C0_P
]


acc-dec <1-28>-<1-28>
      Valeur d'inertie pour tous les déplacements. Voir la correspondance en secondes dans la section 'train'.
      La valeur utilisée est la plus faible entre cette valeur et celle du train. Essayer  acc-dec: 14-14
      Si on écrit 'acc-dec xx-xx', on utilisera alors la valeurs d'inertie propre à chaque train.

d<0-199> = Numéro de déplacement. 200 déplacements au maximum.

    c<n°canton><+-Vitesse>     = N° des cantons parcourus suivi de la consigne de vitesse =-64 à -1 et +1 à +64. Déclaration de 10 cantons à la suite au maximum. On peut mixer des vitesses (+) et (-) sur un déplacement.
    a<n°aiguillage>.<Position> = N° des aiguillages à manœuvrer avant le départ suivi de leur position. Déclaration de 10 aiguillages à la suite au maximum.

    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, (Facultatif) paramètre facultatif mais obligatoire si le n° du canton de début et de fin de parcours est le même.
    libe:det_<0-15,100-115,200-215,300-315>   = Canton à libérer complètement pour que la condition de fin soit réalisée (Facultatif). Utile et pratique si tous les essieux des wagons sont résistifs.

    fin:<var>  = Généralement 'fin:det_xx' ou 'fin:in_xx' = Condition de fin (Obligatoire) sur détection du train sur le canton de fin de parcours ou sur
                 détection par barrière IR en fin de parcours. Si on utilise 'fin:in_xx' avec un contact d'entrée, il faut ajouter 'stop:<var> sur la ligne.
    stop:<var> = Si la condition de fin est un contact 'fin:in_xx', permet quand même de lancer un déplacement par clic sur deux voyants du TCO (Facultatif),
                 il faut ajouter 'stop:cX' pour que ce déplacement puisse être reconnu et sélectionné depuis le TCO.
    halt:<var> = Condition de fin (Facultatif), arrête immédiatement le train sans inertie, utilisé avec une barrière IR de voie située juste avant un butoir.

    taf<0-999> = Temps en secondes entre la détection de fin et la mise hors tension des cantons.
                 Utilisé si les essieux des wagons ne sont pas résistifs, afin que le train soit entièrement sur le canton de fin.
                 Si les essieux sont résistifs, à la place d'une tempo, il faut mieux utiliser la directive "libe:det_xx".
    tsf<0-999> = Temps en secondes entre la détection de fin de parcours et la libération des cantons.
    name:<nom> = Nom du parcours sur 40 caractères maximum (Pas de "+-" ou d'espace dans le nom, mais le caractère '_' est 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.
    sfin:<var>    = Met la variable à 1 à la fin du déplacement.
    cfin:<var>    = Met la variable à 0 à la fin du déplacement. Exemple "sfin:depl_start_run_137" = Lance un second déplacement après la fin du premier déplacement.
      sc:<var>    = Met la variable à 1 au début du déplacement et à 0 à la fin.

    Pour faire une annonce sonore, avant que le train se déplace, utiliser les deux directives : sdeb:exe_xx   tempo:xxx
    tempo:<0-999> = Attend xxx secondes après avoir activé les variables de début et avant de mettre le train sous tension.

    Possibilité de partir et d'arriver sur une voie de garage. Le garage de départ doit être verrouillé et celui d'arrivé libre pour que le déplacement démarre.
    Après déplacement, le garage de départ est libre et celui d'arrivée est verrouillé. Exemple = start:g3  fin:in_40  stop:g4
    start:g<0-31> = N° du garage de départ.
    fin:<in_xxx>  = Contact d'entrée = Barrière infrarouge placée juste avant le butoir. Faculatif mais fortement recommandé pour se garer sur une voie de garage, surtout si elle est courte.
    stop:g<0-31>  = N° du garage d'arrivée.

    train:<numéro_du_train> = Le déplacement commencera uniquement si le train portant ce numéro se présente sur le canton de départ.

 

#tdv - Opération logiques (table de vérité, équations, impulsions)

Remarques :
 - Pour allumer les leds des feux avec des tdv, utiliser plutôt les variables det2_xxx à la place des det_xxx, pour éviter le clignotement des feux à chaque faux contact des trains.
       On a ajouté ces variables det2_xxx, sinon à chaque mauvais contact du train avec la voie, le feu de protection du canton passe intempestivement du rouge au vert.
       Pour éviter cela, dans les tables de vérité (#tdv), il est conseillé d'utiliser les variables det2_xxx au lieu de det_xxx.
       Cette variable det2_xxx  =  1, si le canton xxx est occupé avec une petite temporisation, pour la conduite manuelle ou des 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" .
 - Une variable est dite logique si elle a comme valeur "0" ou "1". Une variable est dite numérique si elle a comme valeur une nombre entier compris entre -25000 et +25000.

On trouve ici la description des équations, table de vérité et de pulsations.
Les variables en entrées doivent être du type "R" et en sortie du type "W". Voir le tableau des variables, colonne "Read/Write".


Les équationsequ: <opérande1> <var1> <opérande2> <var2> ...
Ces équations commencent par le texte "equ:".

Remarque : Le préfix "n" inverse le résultat du test comme pour "l" et "ln".
Opérandes de tests logiques :
On peut combiner plusieurs tests logiques par ligne  (equ: l var_5 a var_6 o var_7 x var_8...)
      l           => load => charge une variable en mémoire et teste sa valeur par rapport à 0.
      l  ln       LOAD ou LOAD inverse (inverse le résultat du test)  (equ: l var_5 => résultat du test positif si var_5 <> 0, test négatif si var_5 = 0)   (equ: ln var_5 => résultat du test positif si var_5 = 0)

      a           => and => charge une variable en mémoire ou le résultat du dernier test et fait un "et logique" avec la seconde variable.
      a an      AND ou AND inverse (inverse le résultat du test)       (equ: a var_5 var_6 => résultat du test positif si var_5 = 1 et var_6 = 1)  (equ: an var_5 var_6 => résultat du test positif si var_5 = 0 ou var_6 = 0)

      o           => ou => charge une variable en mémoire ou le résultat du dernier test et fait un "ou logique" avec la seconde variable.
      o on      OR ou OR inverse (inverse le résultat du test)            (equ: o var_5 var_6 => résultat du test positif si var_5 = 1 ou var_6 = 1)  (equ: on var_5 var_6 => résultat du test positif si var_5 = 0 et var_6 = 0)

      x           => ou exclusif => charge une variable en mémoire ou le résultat du dernier test et fait un "ou exclusif" avec la seconde variable.
      x xn       XOR ou XOR inverse (inverse le résultat du test)       (equ: x var_5 var_6 => résultat du test positif si var_5 = 1 et  var_6 = 0 ou si var_5 = 0 et  var_6 = 1)
   
Opérande de tests de comparaisons avec une valeur numérique :
Ce test ne peut être présent qu'une seule fois par ligne et situé obligatoirement en début de ligne.
Il n'est pas possible de combiner des tests numériques, à la suite des uns des autres sur la même ligne, comme ici : equ: l var_5==2 a var6==3 =val var_25 5 ne fonctionne pas !
Par contre, ceci fonctionne :  equ: l var_5<=10 a in_1 =val var_25 5  le premier test peut être numérique et les suivants logiques.
     ==         Egalité                     (equ: var_5==52 => résultat du test positif si var_5 = 52)
     <>         Différent                  (equ: var_5<>52 => résultat du test positif si var_5 <> 52)
     >           Supérieur                 (equ: var_5>52  => résultat du test positif si var_5 > 52)
     >=         Supérieur ou égal     (equ: var_5>=52 => résultat du test positif si var_5 >= 52)
     <           Inférieur                   (equ: var_5<52  => résultat du test positif si var_5 < 52)
     <=         Inférieur ou égal       (equ: var_5<=52 => résultat du test positif si var_5 <=52)

Opérandes d'affectations, si le résultat du test est positif :
Après le dernier test, on peut placer un ou plusieurs opérandes d'affectation à la suite (equ: l var_5 = out_42 =set out_43 =clr out_44 =val var_6 18)
      =           Pour affecter le résultat du test (0/1) à une variable        (equ: l var_5 = out_42, si var_5 = 0, met "0" dans out_42, si var_5 <> 0, met "1" dans out_42)
      =set       Pour affecter "1" à une variable (attention coller =set)    (equ: l var_5 =set out_42, si var_5 = 1, met "1" dans out_42)
      =clr        Pour affecter "0" à une variable  (attention coller =clr)   (equ: l var_5 =clr out_42, si var_5 = 1, met "0" dans out_42)
      =val       Pour affecter une valeur numérique à une variable  (attention coller =val)   (equ: l var_5 =val var_6 50, si var_5 = 1, met "50" dans var_6)
      =var       Pour affecter une valeur d'une variable à une autre variable  (attention coller =var)   (equ: l var_5 =var var_6 var_7, si var_5 = 1, met la valeur de var_7 dans var_6)
      =varx4   Pour affecter une valeur d'une variable multipliée par 4 à une autre variable  (attention coller =varx4)   (equ: l var_5 =varx4 var_6 var_7, si var_5 = 1, met la valeur de (4*var_7) dans var_6)
                    Cela sert à commander un servo-moteur qui à une plage de (0-1023), par une entrée CAN qui a une plage (0-255).  (equ: l in_23 =varx4 var_45 can_0).

Remarques :
On peut utiliser comme variables dans ces équations, toutes celles connues d'UTS (voir tableau) =  var_xx, special_var_xx, in_xx, out_xx, det_xx, det2_xx...
La limite du nombre d'équation est dans la place prise en mémoire. Voir le menu : Debug>Tables de vérité 'Tdv', à la ligne nombre de tables et d'équations.
Pour désactiver une équation, la mettre en commentaire avec un "@".
On peut visualiser l'état des variables par le menu : Debug>Variables.
Ne pas oublier la lettre 'l' (minuscule 'L' pour 'load') et de ne pas utiliser '!=' mais '<>'.
Les variables peuvent être positives ou négatives. Pour les valeurs de variables, il est conseillé de rester dans la limite -25000 à +25000.


Exemples :
1 / 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
Il ne faut pas définir ici une équation pour un servo, et des boutons de commandes sur un TCO, pour ce même servo. Cela reviendrait à donner des ordres contradictoires à ce servo.

2 / Feux tricolore du carrefour routier.
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 oranges clignotants de 101 à 199 = (par défaut prendre 105).
Quand l'horloge UTS est entre 23 et 6 heure, les feux passent en orange clignotant.   Var_3=variable intermédiaire = 1 entre 23 heures et minuit.
   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

3 / Eclairage programmé. 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].
Var_3=variable intermédiaire = 1 entre 22 heures et minuit.
   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

4 / Deux vibreurs sont installés. Ils vibrent selon le canton en défaut.
Sortie out_13 = Vibreur n° 1 à l'est     = Problème de captage sur un des cantons n° 0 3 4 6 7 8 9  11 12 14 15.
Sortie out_44 = Vibreur n° 2 à l'ouest = Problème de captage sur un des cantons n° 0 1 2 4 5 9 10 11 12 13.
   equ: l  pb_capt_c_0 o pb_capt_c_3 o pb_capt_c_4 o pb_capt_c_9 o pb_capt_c_11 o pb_capt_c_12 o pb_capt_c_14 o pb_capt_c_15 a vib_state a vib_on = out_13
   equ: l  pb_capt_c_0 o pb_capt_c_1 o pb_capt_c_2 o pb_capt_c_9 o pb_capt_c_10 o pb_capt_c_11 o pb_capt_c_12 o pb_capt_c_13 a vib_state a vib_on = out_44

5 / Pour commander les aiguillages depuis un clavier à touches, branché sur les entrées multiplexées.
Touche n° 0 = aig droit, touche N° 19 + touche n°0 = aig dévié.
   equ: l in_0 an in_19 a pos0_aig_0 =set aig_cmd_0
   equ: l in_0 a  in_19 a pos1_aig_0 =clr aig_cmd_0


Les tables de vérité : tdv:
Table de vérité pour initialiser des variables. Le programme commence par initialiser ces variables.
Ne mettre qu'une ligne 'init:' au maximum par tdv.
Indiquer obligatoirement le terme 'set' ou 'clear' avant chaque variable.
  tdv:
   init:
set led_cli_45  clr led_45

Table de vérité pour renseigner des variables en sortie, en fonction des variables en entrée.
Le caractère "|" sépare les variables en 'entrées, des variables en sortie.
 tdv:
   on: 0                                 (on:0 =
Table inactive. Pour une table active mettre on:1 ou supprimer cette ligne on:0).
   in: det_2 | out: led_cli_45 led_45   
(in:  = Liste des variables en entrée jusqu'au caractère "|".  out: = Liste des variables en sortie).
   eq: 1     |         1      1                    (eq:  = Etat possibles des variables en entrée jusqu'au caractère "|", ensuite état des variables en sortie).
Si det_2 = 1  =>  Les variables de sortie "led_cli_45" et "led_45" = 1.
Si det_2 = 0  =>  On ne modifie pas les variables de sortie.

Table de vérité pour renseigner des variables de sortie en fonction des variables d'entrée, avec états indifférents.
Un état nom pris en compte en entrée est marqué "x".
 tdv:
   in:   led_3 det2_1 pos1_aig_3 | out: led_2 led_14 led_26   @  Out = leds rouge, jaune et verte
   eq:   x      x     1          |       1     0      0
   eq:        1     0          |       1     0      0
   eq:   1      0     0          |       0     1      0
   eq:   0      0     0          |       0     0      1

Remarques :
On peut ajouter une ligne "init:" au début de n'importe quelle table.
On peut visualiser le contenu temps réel des table par le menu : Debug>Tables de vérité 'Tdv'.
Mettre inactive une table évite de la supprimer temporairement.
Le nombre de table de vérité est limité à 50 et aussi de la place prise en mémoire. Voir le menu : Debug>Tables de vérité 'Tdv', à la ligne nombre de tables et d'équations.

Exemples :
Pour l'affichage d'un feu de voie tricolore, suivant l'occupation des cantons et la positions des aiguillages. Out = leds rouge, jaune et verte
 
tdv:
   in:   det2_5 det2_6 det2_13 det2_14 det2_15 pos1_aig_6 pos1_aig_7 pos1_aig_8 pos1_aig_9 pos1_aig_13 pos1_aig_14 | out: led_0 led_12 led_24 

   eq:   x      x      x       x       x       x          x          x          0          x           0           |      0     1      0
   eq:   x      1      x       x       x       x          x          1          1          x           x           |      1     0      0
   eq:   x      x      x       x       x       1          x          1          1          x           x           |      1     0      0
   eq:   x      x      x       x       x       x          1          1          1          x           x           |      1     0      0
   eq:   1      0      x       x       x       0          0          1          1          x           x           |      0     1      0
   eq:   0      0      x       x       x       0          0          1          1          x           x           |      0     0      1
   eq:   x      x      x       x       1       x          x          0          1          x           x           |      1     0      0
   eq:   x      x      x       x       0       x          x          0          1          0           x           |      0     1      0
   eq:   x      x      1       x       0       x          x          0          1          1           x           |      0     1      0
   eq:   x      x      0       x       0       x          x          0          1          1           x           |      0     0      1
   eq:   x      x      x       1       x       x          x          x          0          x           1           |      1     0      0
   eq:   x      x      x       0       x       x          x          x          0          1           1           |      0     1      0
   eq:   x      x      1       0       x       x          x          x          0          0           1           |      0     1      0
   eq:   x      x      0       0       x       x          x          x          0          0           1           |      0     0      1



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élai est égal à N fois la durée en "tics" de 0.095 sec, soit environ N*1/10 de secondes.
La sortie est activée pendant la période "on".
"Tic_on" ou "tic_off" : 10 => 1 seconde, 30 => 3 secondes, 255 => 24 secondes, 1000 => 95 sec, 25000 => 40 mn.
On peut activer une ou deux sorties à la fois, par ligne.

Description de la pulsation n°0 :
  pulse0:10-20-30-40-50 out_22    (off = 1sec, on = 2sec, off = 3sec, on = 4sec, off = 5sec, la sortie activée est out_22).

Exemples :
  pulse0:12-16-2-8-20 out_22
  pulse1:4-16-2-8-20  out_20
  pulse3:4-8-16-8-20  out_22 out_23
  pulse31:4-8-16-8-20 out_22

Remarques :
Ne pas mettre d'espace dans 'pulse0:12-16-2-8-0'.
Écrire toujours 0 avec un seul chiffre et non pas 00 ou 000.
On peut visualiser l'état des pulsations par le menu : Debug>Tables de vérité 'Pulse'.
Le nombre de pulsations est limité à 32.



Tableau du nom des variables UTS

+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
|                      |Numéro|Numéro| carte| carte| carte| carte| Nombre| Raz | Valeur | Read|
|                      | début|  fin |   0  |   1  |   2  |   3  |(ou xx)| auto|        |Write|
+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
|det_xxx               |      |      | 00xx | 01xx | 02xx | 03xx | 4*16  |     | 0-1    |  R  | Détections sur cantons (ex det_0, det_15, det_315)
|in_xxx                |      |      | 04xx | 05xx | 06xx | 07xx | 4*80  |     | 0-1    |  R  | Entrées matricées  et directes
|can_xxx               |      |      | 08xx | 09xx | 10xx | 11xx | 4*5   |     | 0-255  |  R  | Valeurs des entrées analogiques
|out_xxx               |      |      | 12xx | 13xx | 14xx | 15xx | 4*80  |     | 0-1    | R/W | Sorties
|led_xxx               |      |      | 16xx | 17xx | 18xx | 19xx | 4*48  |     | 0-1    | R/W | Allumage leds
|led_cli_xxx           |      |      | 20xx | 21xx | 22xx | 23xx | 4*48  |     | 0-1    | R/W | Leds Mode clignotement
|led_phase_xxx         |      |      | 24xx | 25xx | 26xx | 27xx | 4*48  |     | 0-1    | R/W | leds Inversion de la phase du clignotement
|srv_pos_xxx           |      |      | 280x | 290x | 300x | 310x | 4*5   |     | 0-1023 | R/W | Position réel du servomoteur
|bal_cant_p_           |      |      | 32xx | 33xx | 34xx | 35xx | 4*16  |     | 0-1    |  R  | Bloc automatique - Canton bloqué dans le sens Plus
|bal_cant_m_           |      |      | 36xx | 37xx | 38xx | 39xx | 4*16  |     | 0-1    |  R  | Bloc automatique - Canton bloqué dans le sens Moins
|det2_xxx              |      |      |4000+x|4100+x|4200+x|4300+x| 4*16  |     | 0-1    |  R  | Canton occupé, détection avec temporisation ou canton réservé manuellement (utile pour les feux)
|det2p_xxx             |      |      |4020+x|4120+x|4220+x|4320+x| 4x16  |     | 0-1    |  R  | Canton occupé, idem ci-dessus et Vitesse du train >  3
|det2m_xxx             |      |      |4040+x|4140+x|4240+x|4340+x| 4x16  |     | 0-1    |  R  | Canton occupé, idem ci-dessus et Vitesse du train < -3
|                      |      |      | 4400 | 45xx | 46xx | 47xx | 4*16  |     |        |     | !Libre!
|                      | 4800 | 4999 |      |      |      |      |  200  |     |        |     | !Libre!
+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
|aig_cmd_xxx           | 5000 | 5063 |      |      |      |      |   64  |     | 0-1    |  W  | Commandes des aiguillages
|pos0_aig_xxx          | 5100 | 5163 |      |      |      |      |   64  |     | 0-1    |  R  | Aiguillages en position 0
|pos1_aig_xxx          | 5200 | 5263 |      |      |      |      |   64  |     | 0-1    |  R  | Aiguillages en position 1
|var_xxx               | 5400 | 5999 |      |      |      |      |  600  |     | 0-1023 | R/W | Libre pour l’utilisateur. Si n° > 450 réservées au débug des cantons (voir doc)
|iti_start_xxx         | 6000 | 6049 |      |      |      |      |   50  | Oui | 0-1  Z*|  W  | Activation d’un itinéraire (*automatiquement remis à zéro après prise en compte)
|iti_stop_xxx          | 6100 | 6149 |      |      |      |      |   50  | Oui | 0-1  Z*|  W  | Désactivation d’un itinéraire (*automatiquement remis à zéro après prise en compte)
|iti_wait_xxx          | 6200 | 6249 |      |      |      |      |   50  |     | 0-1    |  R  | Itinéraire en attente
|iti_ok_xxx            | 6300 | 6349 |      |      |      |      |   50  |     | 0-1    |  R  | Itinéraire établit
|                      | 6400 | 6499 |      |      |      |      |   100 |     |        |     | !Libre!
+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
|depl_start_run_xxx    | 6500 | 6699 |      |      |      |      |  200  | Oui | 0-1  Z*| R/W | Lance un déplacement (*automatiquement remis à zéro après en fin de déplacement)
|depl_stop_xxx         | 6700 | 6899 |      |      |      |      |  200  | Oui | 0-1  Z*|  W  | Arrêt prématuré d’un déplacement (*automatiquement remis à zéro après prise en compte)
|garage_lock_cmd_xxx   | 6900 | 6931 |      |      |      |      |   32  |     | 0-1    |  W  | Commandes de verrouillage des garages
|garage_lock_status_xxx| 6950 | 6985 |      |      |      |      |   32  |     | 0-1    |  R  | Etats de verrouillage des garages
|vib_on                | 7000 |      |      |      |      |      |    1  |     | 0-1    |  W  | Activation du vibreur
|vib_state             | 7002 |      |      |      |      |      |    1  |     | 0-1    |  R  | Etat du vibreur
|screen_mode           | 7003 |      |      |      |      |      |    1  |     | 0-255  |  R  | Numéro d'écran affiché (1 à 7 = tco...)
|arret_urg_on          | 7004 |      |      |      |      |      |    1  |     | 0-1    |  W  | Activation de l'arrêt d'urgence sur passage à '1'
|arret_urg_state       | 7005 |      |      |      |      |      |    1  |     | 0-1    |  R  | Etat de l'arrêt d'urgence
+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
|srv_cmd_xxx           |      |      | 800x | 810x | 820x | 830x |  4*5  |     | 0-1023 | R/W | Consigne de position du servomoteur
|srv_cmd_xxx           |      |      | 801x | 811x | 821x | 831x |  4*5  |     | 0-1023 | R/W | Consigne de vitesse du servo (= n° servo + 10).
|exe_xxx               | 8400 | 8499 |      |      |      |      |  100  | Oui | 0-1  Z*|  W  | Lance un programme,utile pour les sons (*automatiquement remis à 0 après prise en compte)
|pulse_cmd_xxx         | 8500 | 8531 |      |      |      |      |   32  | Oui | 0-1  Z*|  W  | Déclenchement d’une impulsion  (*automatiquement remis à zéro après prise en compte)
|pb_capt_c_xxx         |      |      | 86xx | 87xx | 88xx | 89xx |  4*16 |     | 0-1    |  R  | Problème de captage sur les cantons
|pb_capt_t_xxx         | 9000 | 9015 |      |      |      |      |   16  |     | 0-1    |  R  | Problème de captage sur les trains
|special_var_xxx       | 9100 | 9199 |      |      |      |      |  100  |     | 0-1023 | R/W | Variables renseignées par UTS (Certaines variables peuvent être aussi en écriture)
|                      | 9200 | 9399 |      |      |      |      |  200  |     |        |     | !Libre!
|separe_               | 9400 | 9499 |      |      |      |      |  100  | Oui | 0-1  Z*| R/W | Sépare les trains en locomotives-wagons
|regroupe_             | 9500 | 9599 |      |      |      |      |  100  | Oui | 0-1  Z*| R/W | Regroupe les locomotives-wagons en trains
|                      | 9600 | 9799 |      |      |      |      |  200  |     |        |     | !Libre!
|                      | 9800 | 9999 |      |      |      |      |  200  |     |        |     | !Libre!
+----------------------+------+------+------+------+------+------+-------+-----+--------+-----+--------------------------------------------------------------------------------
 

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

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

Le programme UTS 2000 sous WINDOWS La variable 'screen_mode' pour afficher directement un n° écran est utilisable avec les valeurs suivantes :
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 47
POSLOC_2 59
SEPARE_1 60


Remarque : Dans la section '#tdv', regrouper les équations 'equ:' au début

#exe - Fichiers à exécuter

#exe
[
   exe<00-99>: "<X:/répertoire/fichier à éxecuter>"
]


exe<0-99>: <"chemin du fichier à exécuter">
  100 commandes maximum de 200 caractères maximum. Sert la plupart du temps pour diffuser des sons, annonces.

---- exemples ----
  exe00: "E:\projet\dev_c++\projet\train5\sons\sonnerie.wav"
  exe01: "E:\projet\dev_c++\projet\train5\sons\arreter_montagne.mp3"
  exe02: "E:\projet\dev_c++\projet\train5\sons\arreter_vert_de_conte.ogg"
  exe99: "wazzza.wma"

Placer un espace entre exe:XX et la commande.
Mettre la commande entre deux caractères ".
Dans la commande, les accents et espaces sont autorisés, mais le caractère " est interdit.


#vib - Configuration du vibreur en cas de faux contacts

#vib
[
   off
   time_before:15
   time_after:10
]

on|off         Active le vibreur au démarrage. (Il peut être désactivé par la suite avec l’écran du vibreur ou avec off).
Time_before:xx  Indique la durée minimal du problème de détection nécessaire afin d’éviter les déclenchements intempestifs.
Time_after:xx   Indique le temps durant lequel le vibreur doit continuer à fonctionner après contact rétablit. Exemple 10 tics = 10*0.08=0,8s.
[out:var_xx]      Permet d’indiquer la sortie à activer si vous utiliser une sortie.
[out:!var_xx]     Permet d’indiquer la sortie à désactiver si vous utiliser une sortie.

 Il est aussi possible de remplacer la sortie (ou la compléter) en utilisant une sortie 'pwm' de canton inutilisée.
 Dans ce cas, il faut utiliser la directive out_pwm:xx,xx  (out_pwm:<n°canton>,<vitesse>).
 Pour info, si une sortie pwm est utilisée alors l’écran RS232 ne pourra pas modifier cette sortie.
 Cette variable out_pwm:xx,xx  ne peut être utilisée que pour la configuration du vibreur, dans cette section #vib.
   
 Variables du vibreur
    La variable 'vib_on' permet d’activer ou de désactiver le vibreur (1=activation de la fonction).
    La variable 'vib_state' indique l’état du vibreur (1=vibre).

Il est également possible de faire vibrer seulement la partie du réseau incriminé en utilisant les variables 'pb_capt_c'
  Par exemple pour une section comprenant les cantons 8,10,13 et un vibreur sur la sortie 14, dans la section # tdv :
  l pb_capt_c_8 o pb_capt_c_10 o pb_capt_c_13 a vib_state = out_14

---- exemples ----
    on
    off
    time_before:15
    time_after:10
    out:out_21
    out:!out_21
    out_pwm:8,32

2 - Description du fichier de configuration  "CONFIG_TCO.TXT"
Le fichier "config_tco.txt" est reconstruit à chaque fois que l'on quitte UTS.
S'il existe au lancement d'UTS, il est lu, sinon il est reconstruit avec les valeurs par défaut et les tco vides.

Il est possible, en ayant une sauvegarde de ce fichier de coté, de modifier ce fichier dans un éditeur de texte simple comme NotePad ou Wordpad.
Il faut respecter la syntaxe des lignes, les sauts de lignes, les espacements, les plages de valeurs pour que cela fonctionne après ces modifications.

Attention de conserver une sauvegarde du fichier "config_tco.txt" avant toute modification.

Premier exemple, on veut inverser les "TCO_1" et "TCO_0".
Le fichier commence par les lignes :

[TCO_data]

tco=0
x=00 y=00 data:    2    4   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    jlf 2015        "
x=00 y=01 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    TCO 0           "
x=00 y=02 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=00 y=03 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
. . .
x=31 y=21 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=31 y=22 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=31 y=23 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=31 y=24 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "



tco=1
x=00 y=00 data:    2    4   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    jlf 2015        "
x=00 y=01 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    TCO 1           "
x=00 y=02 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=00 y=03 data:    2    2   13   -1   -1 6000 6100 6300 6200   -1   -1   -1   -1    2   -1 string= "    tour_haut       "
. . .
x=31 y=21 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "
x=31 y=22 data:    2    1   -1   -1   -1 6521   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    G9  a   G0      "
x=31 y=23 data:    2    1   -1   -1   -1 6538   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "    g0  a   g9      "
x=31 y=24 data:   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1   -1 string= "                    "



Les lignes qui suivent "tco=0" ne concernent que le TCO n° 0.
Il y a une ligne par case de tco, soit 800 lignes pour un tableau de 32x25 cases => (x = 00 à 31 et y = 00 à 24).
Si l'on échange les toutes les lignes vertes par celle en bleu, on échange les TCO n° 0 et n° 1 de place dans l'affichage.

De la même façon, on peut :
 - recopier un tco vierge, pour effacer complétement un tco.
 - dupliquer un tco, pour en faire ensuite un avec, et un sans bouton de simulation.
 - récupérer un ancien, tco ou une seule page d'une autre personne.


Deuxième exemple, le contenu des cases
Sur les lignes x=00 y=00 data : on trouve une série de nombre, qui signifie pour une ligne :

colonne 1 = Type de cellule :
   RIEN   -1     Bloc vide, pas encore renseigné.
   LINK    0     Bloc de type 'Voie'
   AIG     1     Bloc de type 'Aiguillage'
   CMDVOY  2     Bloc de type 'Commande ou voyant'
   SPE     3     Bloc de type 'Spécial'

colonne 2 = Suivant le type de cellule en colonne 1. Si colonne 1 = 1 :
    CELLS_SUBTYPE_LINK_H       0     Différents Eléments de voies
    CELLS_SUBTYPE_LINK_V       1,     CELLS_SUBTYPE_LINK_SONE    2,     CELLS_SUBTYPE_LINK_NOSE    3,     CELLS_SUBTYPE_LINK_SE      4
    CELLS_SUBTYPE_LINK_OS      5,     CELLS_SUBTYPE_LINK_NE      6,     CELLS_SUBTYPE_LINK_ON      7,     CELLS_SUBTYPE_LINK_SOE     8,
    CELLS_SUBTYPE_LINK_OSE     9,     CELLS_SUBTYPE_LINK_NOE    10,     CELLS_SUBTYPE_LINK_ONE    11,     CELLS_SUBTYPE_LINK_BALA   12,
    CELLS_SUBTYPE_LINK_SON    13,     CELLS_SUBTYPE_LINK_NSE    14,     CELLS_SUBTYPE_LINK_NOS    15,     CELLS_SUBTYPE_LINK_SNE    16
    CELLS_SUBTYPE_LINK_PH     17,     CELLS_SUBTYPE_LINK_PV     18,

colonne 2 = Suivant le type de cellule en colonne 1. Si colonne 1 = 2 :
    CELLS_SUBTYPE_AIG_CH     0   Différents aiguillages
    CELLS_SUBTYPE_AIG_CB     1,     CELLS_SUBTYPE_AIG_CHB    2,     CELLS_SUBTYPE_AIG_HC     3,     CELLS_SUBTYPE_AIG_BC     4
    CELLS_SUBTYPE_AIG_HBC    5,     CELLS_SUBTYPE_AIG_HCV    6,     CELLS_SUBTYPE_AIG_CHV    7,     CELLS_SUBTYPE_AIG_CBV    8
    CELLS_SUBTYPE_AIG_BCV    9

colonne 2 = Suivant le type de cellule en colonne 1. Si colonne 1 = 3 :
    CELLS_SUBTYPE_CMDVOY_POUSS 0     Voyants carré et/ou boutons poussoirs
    CELLS_SUBTYPE_CMDVOY_INT   1     Voyants carré et/ou interrupteurs
    CELLS_SUBTYPE_CMDVOY_ITI   2     Voyants rond à bordure active
    CELLS_SUBTYPE_CMDVOY_VOY4  3     4 voyants carrés
    CELLS_SUBTYPE_CMDVOY_LABEL 4     Bloc de texte (4 lignes de texte)
    CELLS_SUBTYPE_CMDVOY_VOY2  5     2 voyants ronds
    CELLS_SUBTYPE_CMDVOY_VOY1  6     1 voyant rond
    CELLS_SUBTYPE_CMDVOY_GO    7     Bloc pour aller directement à une autre page (horizontal)
    CELLS_SUBTYPE_CMDVOY_SRV   8     Bloc pour comander les servo moteurs
    CELLS_SUBTYPE_CMDVOY_VAL   9     Bloc pour afficher 3 lignes de texte + 1 valeur numérique

colonne 2 = Suivant le type de cellule en colonne 1. Si colonne 1 = 3 :
    CELLS_SUBTYPE_SPE_VOY     0         Voie + état d'occupation du canton (horizontal)
    CELLS_SUBTYPE_SPE_DETEL   1         Voie + affiche un dételeur (pas utilisé)(horizontal)
    CELLS_SUBTYPE_SPE_CANT    2         Voie + affiche les valeurs propre à un canton (horizontal)
    CELLS_SUBTYPE_SPE_IN      3         Voie + contact au passage du train (horizontal)
    CELLS_SUBTYPE_SPE_OUT     4         Voie + signal envoyé par le programme (pas utilisé)(horizontal)
    CELLS_SUBTYPE_SPE_SENS    5         Voie + impose le sens de parcours (horizontal)
    CELLS_SUBTYPE_SPE_CH      6         Voie + butoir (horizontal)
    CELLS_SUBTYPE_SPE_HC      7         Voie + butoir (horizontal)
    CELLS_SUBTYPE_SPE_HOR     8         Bloc d'horloge
    CELLS_SUBTYPE_SPE_FEU     9         Voie + feu tricolore (vertical)
    CELLS_SUBTYPE_SPE_CV     10         Voie + butoir (vertical)
    CELLS_SUBTYPE_SPE_VC     11         Voie + butoir (vertical)
    CELLS_SUBTYPE_SPE_VOYV   12         Voie + état d'occupation du canton (vertical)
    CELLS_SUBTYPE_SPE_CANTV  13         Voie + affiche les valeurs propre à un canton (vertical)
    CELLS_SUBTYPE_SPE_INV    14         Voie + contact au passage du train (vertical)
    CELLS_SUBTYPE_SPE_OUTV   15         Voie + signal envoyé par le programme (pas utilisé)(vertical)
    CELLS_SUBTYPE_SPE_SENSV  16         Voie + impose le sens de parcours (vertical)
    CELLS_SUBTYPE_SPE_FEUV   17         Voie + feu tricolore  (vertical)

colonne  3 = Numéro du canton 000 à 315  (-1 = pas renseigné).

colonne  4 = Variable temporaire propre à un bloc lors de calcul dans le programme.
colonne  5 =
Variable temporaire propre à un bloc lors de calcul dans le programme.

colonne  6 = Variable V1 = Variable n° 1 pour animer le bloc
(-1 = pas renseigné).
colonne  7 = Variable V2
= Variable n° 1 pour animer le bloc (-1 = pas renseigné).
colonne  8 = Variable V3
= Variable n° 1 pour animer le bloc (-1 = pas renseigné).
colonne  9 = Variable V4
= Variable n° 1 pour animer le bloc (-1 = pas renseigné).

colonne 10 = Variable C1 = 0-15 => Couleur propre à un élément de ce bloc (-1 = pas renseigné).
colonne 11 = Variable C2
= 0-15 => Couleur propre à un élément de ce bloc (-1 = pas renseigné).
colonne 12 = Variable C3
= 0-15 => Couleur propre à un élément de ce bloc (-1 = pas renseigné).
colonne 13 = Variable C4
= 0-15 => Couleur propre à un élément de ce bloc (-1 = pas renseigné).

colonne 14 = Variable OPT pour une option sur certains bloc (-1 = pas renseigné).

colonne 15 = 0/1 => Défini le sens du bloc pour afficher des flèches sur les éléments de voie. (-1 = pas renseigné).

colonne 16 = string " " = Texte de commentaire qui s'affiche sur une la case.


On peut ainsi changer le texte des commentaires.
On peut modifier la casse sur les blocs de tco.

Si le fichier "Train_UTS_log.txt", contient des erreurs de type "-Erreur4 : Lecture N° variable interne : Var inconnue = 4316",
on peut repérer dans "config_tco.txt" le tco et le bloc qui contient "4316", qui correspond à une variable hors limite.
Sinon, cela peut aussi venir du fichier "config.txt". Il faut alors chercher "4316" ou ce qui correspond à la variable "det2_16" qui n'existe pas (ok = det2_0 à det2_15).

Dans ce fichier "config_tco.txt", on trouve ensuite le paramètrage du rendu et des couleurs.
On trouve le rendu d'UTS, les couleurs des 4 * 16 cantons et la couleur des 16 trains.
Ces paramètres sont ceux de la fenêtre de rendu. Menu : Modifications > Rendu TCO (ou touche +).

rendu
data:
  0
  7
  0
  4
. . .
 -1
 -1

On peut recopier toute cette section d'un fichier à un autre, pour récupérer ou restaurer le rendu d'UTS (couleur, largeur des traits, aspect des cantons).

Les deux derniers paragraphes permettent de sauvegarder la position des trains et des aiguillages à la fermeture d'UTS.
Ils sont toujours crées à la sortie du programme.
Ils sont exploités au lancement du programme si les variables générales  "memorisation_train on" et "memorisation_aig   on" sont positionnées.
En cas de problème avec ces deux fonctions, il est possible de supprimer entièrement ces deux paragraphes, et de redémarrer UTS.

Exemple de sauvegardes :
[SAUVEGARDE_POSITION_DES_TRAINS]
train00  X73__500  color01  pot  002  ok_auto  pasinv  08 55 11 10 -1  SEL c7
train01  150X____  color06  clav 001  ok_auto  pasinv  10 50 13 11 -1  SEL c5
train02  141P____  color08  clav 001  ok_auto  pasinv  10 50 11 10 -1  SEL c4
. . .
train30
train31
[FIN]


[SAUVEGARDE_POSITION_DES_AIGUILLAGES]
a00.1  a01.1  a02.1  a03.1  a04.1  a05.1  a06.1  a07.1  a08.1  a09.1 
a10.1  a11.1  a12.1  a13.1  a14.1  a15.1  a16.1  a17.1  a18.1  a19.1 
. . .
a60.0  a61.0  a62.0  a63.0 
[FIN]


Attention de conserver une sauvegarde du fichier "config_tco.txt" avant toute modification.
UTS2000