Table of Contents
TCO deux boutons et un afficheur
Sommaire → Matériel → Modules TCO → Configuration TCO Rocrail → TCO deux boutons et un afficheur
Cette documentation est basée sur Rocrail Version 2.1.4391 datée du 29.03.2024 .
Comme un WIO un Pico-W est utilisé avec WIO version 850.
Introduction
La Tâche: construire un TCO pour faire fonctionner une locomotive d'un bloc vers le bloc suivant
L'utilisation de cet exemple se fait aux risques et périls de l'utilisateur.
L'environnement de travail Rocrail.
Cet exemple doit démontrer une utilisation du module TCO "Bloc avec deux boutons" (accessory-150).
Les LEDs du Module TCO sont controlées par les sorties Rocrail. Donc durant la simulation les LEDs du Module TCO s'afficheront de couleur noire. Les LEDs réelles changeront de couleur.
Cette exemple utilise un XMLScript.
Cette exemple n'est pas une solution complète; en particulier, il peut rester des erreurs malgré toutes les vérifications d'erreurs.
Le lecteur est invité à compléter cet exemple pour son propre usage.
Cette exemple utilise l'identifiant de nœud WIO 51; l'utilisateur doit remplacer ces valeurs par son propre identifiant de nœud WIO.
Il y aura trois niveaux à surveiller:
niveau | image | description |
---|---|---|
1 | ![]() | le plan Rocrail avec les objets Rocrail |
2 | ![]() | le plan Rocrail avec les objets CTC-Module pour une simulation des objets TCO |
3 | ![]() | Modules TCO réels |
1) Objets Rocrail
Cet exemple réduit ne peut gérer que deux blocs. Cela peut être facilement étendu par le lecteur.
Les identifiants des blocs sont "bk11" et "bk12".
Chacun des blocs a deux retour d'information de détecteurs "fb11+", "fb11-", "fb12+" et "fb12-".
Parce que il y a certains retour d'information optique requis pour les sorties "co_led_bk11_2", "co_led_bk11_5", "co_led_bk12_2" et "co_led_bk12_5" remettront le contrôle aux LED externes du TCO.
De tous les objets voie les deux objets connecteur "tkconnector1a" et "tkconnector1b" et un des objets voie "tk_straight" seront utilisés pour être affichés sur le TCO.
Le contenu de l'affichage TCO est configuré par le bloc Rocrail. Configurez les valeurs de l'onglet "Câblage" comme suit:
La signification du contenu du champ de texte est:
{g1}{E}{R2}{L0} %bkid% {+}%lcbes%{-} {L1}{X0}{+}%lcid%{P}
Code | Signification |
---|---|
{g1} | Règle la géométrie de l'afficheur à 1=128x32 pixel |
{E} | Efface le tampon de l'afficheur. |
{R2} | Règle la rotation de l'afficheur à 2=180° |
{L0} %bkid% {+}%lcbes%{-} | ligne 0: identifiant bloc et un grand bloc entre côté (bes) |
{L1}{X0}{+}%lcid% | ligne 1: grand identifiant de locomotive |
{P} | Copie le tampon vers l'afficheur. |
La description des commandes pour l'afficheur peut être trouvé à Afficheur SSD1306/SH1106 .
Le grand jeu de caractères requis peut être trouvé sur AMP, un autre grand jeu de caractères .
2) Modules TCO
En plus des deux modules TCO "ctc_bk11" et "ctc_bk12" trois modules de voie TCO sont préparés: "tkconnector1a", "ctc_tk_straight" et "tkconnector1b".
Pour mapper les objets TCO aux objets Rocrail
- ouvrir juste les propriétés de l'objet Rocrail
- cliquez sur le bouton "Pixel CTC…"
- et remplissez la boîte de dialogue du module TCO.
Les paramètres peuvent être trouvés dans le tableau suivant:
Module | Objets Rocrail | Identifiant de mappage | Bouton gauche | Bouton droit | LEDs | Accessoire No. | NeoPixel gauche | NeoPixel droit |
---|---|---|---|---|---|---|---|---|
1 | tkconnector1a | ctc_tkconnector1a | - | - | 1,2 | 107 | - | - |
2 | bk11 | ctc_bk11 | T1 = 1 | T2 = 2 | 3,4 | 150 | co_led_bk11+ | co_led_bk11- |
3 | tk_straight | ctc_tk_straight | - | - | 5,6 | 106 | - | - |
4 | bk12 | ctc_bk12 | T1 = 3 | T2 = 4 | 7,8 | 150 | co_led_bk12+ | co_led_bk12- |
5 | tkconnector1b | ctc_tkconnector1b | - | - | 9,10 | 108 | - | - |
L'index du TCO affiche un sommaire de la configuration du module TCO.
Modules de bloc TCO
Les deux boutons n'utilisent pas les LEDs de retour d'information;
- donc les valeurs LED de T1 et T2 sont à zéro.
Le module bloc TCO ne contient aucune pièce de voie;
- donc une sélection "Ignorée" est utilisé pour la LED2 et la LED5; voir https://wiki.rocrail.net/doku.php?id=ctc:ctc-led-en#led1
Les deux LEDs sont utilisées pour afficher l'état des boutons pressés.
- Les LEDs sont contrôlées par les sorties Rocrail "co_led_bk11_2" … (NeoPixel gauche/droit).
- Ces sorties Rocrail seront utilisées par le XMLScript.
Le module bloc TCO ne contient pas une fonction LED;
- donc la valeur de la fonction est à zéro.
Les modules de voie du TCO
Les modules de voie du TCO ne contiennent aucun bouton;
- donc les valeurs LED de T1 et de T2 sont à zéro.
Les modules de voie du TCO contiennent des parties de voie;
- donc une sélection "Utilisée" est utilisée pour la LED1 et la LED5; voir https://wiki.rocrail.net/doku.php?id=ctc:ctc-led-en#led1
Les modules de voie du TCO ne contiennent pas une fonction LED;
- donc la valeur de la fonction est à zéro.
3) Les modules TCO réels
4) Le XMLScript
La structure globale du XMLScript est:
<?xml version="1.0" encoding="UTF-8"?> <xmlscript trace="true"> <!-- set the button LED --> <function id="abo_fct_setLED" param="blockid,lednr,counter" trace="false"> ... </function> <!-- reset all button LEDs --> <function id="abo_fct_resetAllLEDs" trace="false"> ... </function> <!-- +++++ begin of main script +++++ --> <!-- check auto mode --> <!-- check button counter --> <!-- case: button counter = 1; (first button): store source block and button --> <!-- case: button counter = 2; (second button): execute goto destination --> <!-- check for swap --> <!-- set destination and go --> <!-- cleanup --> </xmlscript>
vérification du mode automatique
Le XMLScript ne devrait fonctionner qu'en mode automatique.
Si le Mode Automatique est à OFF réinitialisez simplement toutes les LEDs et quittez le script.
<!-- check auto mode --> <if state="auto auto = off"> <then> <trace text="abo: Automatic is OFF; Exit."/> <call id="abo_fct_resetAllLEDs"/> <exit cmt="Automatik ist AUS; Exit."/> </then> </if>
vérification du compteur du bouton
Un compteur est utilisé pour compter les boutons pressés. La valeur du compteur devrait être 0, 1 ou 2.
<!-- check button counter --> <vr id="vr_abo_button_counter" value="#vr_abo_button_counter"/> <if condition="#vr_abo_button_counter > 1"> <then> <trace text="abo: Button Counter larger than 1; set to 0."/> <vr id="vr_abo_button_counter" value="0"/> </then> </if> <vr id="vr_abo_button_counter" value="#vr_abo_button_counter + 1"/> <trace text="-abo: vr_abo_button_counter = #vr_abo_button_counter"/>
premier bouton
Stockage du bloc et du bouton enfoncé et réglage des LED appropriées.
<!-- case: button counter = 1; (first button): store source block and button --> <if condition="#vr_abo_button_counter = 1"> <then> <vr id="vr_abo_block1" text="%callerid%"/> <vr id="vr_abo_button1" text="%state%"/> <call id="abo_fct_setLED" param="%callerid%,%state%"/> <trace text="abo: (first button): source block= @vr_abo_block1 @vr_abo_button1"/> </then> </if>
deuxième bouton
Stockage du bloc et du bouton enfoncé et réglage des LED appropriées.
Vérification de l'échange et laissez la locomotive passer au bloc suivant.
Faites un peu de ménage.
<!-- case: button counter = 2; (second button): execute goto destination --> <if condition="#vr_abo_button_counter = 2"> <then> <vr id="vr_abo_block2" text="%callerid%"/> <vr id="vr_abo_button2" text="%state%"/> <trace text="abo: (second button): destination block= @vr_abo_block2"/> <call id="abo_fct_setLED" param="%callerid%,%state%,#vr_abo_button_counter"/> <!-- check for swap --> <query vr="vr_abo_locid" table="bklist" id="@vr_abo_block1" get="locid"/> <query vr="vr_abo_blockenterside" table="lclist" id="@vr_abo_locid" get="blockenterside"/> <trace text="abo: vr_abo_blockenterside= @vr_abo_blockenterside"/> <!-- plus: blockenterside = true --> <!-- minus: blockenterside = false --> <if condition="@vr_abo_blockenterside # false|@vr_abo_button1 # button2_on" alltrue="true"> <then> <lc bkid="@vr_abo_block1" cmd="swap"/> <trace text="abo: minus AND button2 = swap"/> </then> </if> <if condition="@vr_abo_blockenterside # true|@vr_abo_button1 # button1_on" alltrue="true"> <then> <lc bkid="@vr_abo_block1" cmd="swap"/> <trace text="abo: plus AND button1 = swap"/> </then> </if> <!-- set destination and go --> <lc bkid="@vr_abo_block1" cmd="gotoblock" blockid="@vr_abo_block2"/> <lc bkid="@vr_abo_block1" cmd="go"/> <!-- cleanup --> <vr id="vr_abo_button_counter" value="0"/> <sleep time="5000"/> <call id="abo_fct_resetAllLEDs"/> </then> </if>
Fonction: réglage du bouton LED
L'identifiant de sortie "co_led_bk11_2" est calculé par des chaînes définies: "co_led_" plus blockid plus "_" plus numéro de led
Les valeurs de la couleur sont réglées sur une couleur cyan et le clignotement est réglé sur ON avec un délai de clignotement de 1:
- rouge = 33
- vert = 255
- bleu = 255
Finalement la sortie est réglée à ON.
<!-- set the button LED --> <function id="abo_fct_setLED" param="blockid,lednr,counter" trace="false"> <trace text="abo_fct_setLED: begin %subparam1% %subparam2% %subparam3%"/> <vr id="vr_abo_fct_blockid" text="%subparam1%"/> <vr id="vr_abo_fct_lednr" text="2"/> <if condition="%subparam2% # button2_on"> <then> <vr id="vr_abo_fct_lednr" text="5"/> </then> </if> <vr id="vr_abo_fct_coid" text="co_led"/> <vr id="vr_abo_fct_coid" format="%s_%s_%s" text="@vr_abo_fct_coid @vr_abo_fct_blockid @vr_abo_fct_lednr"/> <trace text="abo_fct_setLED: @vr_abo_fct_coid @vr_abo_fct_blockid @vr_abo_fct_lednr"/> <!-- second button LED should blink (just in reality - not during simulation) --> <if condition="%subparam3% # 2"> <then> <vr id="vr_abo_fct_true" text="true"/> <vr id="vr_abo_fct_delay" value="1"/> <vr id="vr_abo_fct_color_on" value="255"/> <vr id="vr_abo_fct_color_off" value="33"/> <set vr="vr_abo_fct_true" table="colist" id="@vr_abo_fct_coid" set="blink" setint="false"/> <set vr="vr_abo_fct_delay" table="colist" id="@vr_abo_fct_coid" set="delay" setint="true"/> <set vr="vr_abo_fct_color_off" table="colist" id="@vr_abo_fct_coid" sub="color" subidx="0" set="red" setint="true"/> <set vr="vr_abo_fct_color_on" table="colist" id="@vr_abo_fct_coid" sub="color" subidx="0" set="green" setint="true"/> <set vr="vr_abo_fct_color_on" table="colist" id="@vr_abo_fct_coid" sub="color" subidx="0" set="blue" setint="true"/> <trace text="abo_fct_setLED: @vr_abo_fct_coid with blink @vr_abo_fct_true #vr_abo_fct_delay"/> </then> </if> <co id="@vr_abo_fct_coid" cmd="on"/> <trace text="abo_fct_setLED: end"/> </function>
Fonction: réinitialisation de toutes les LEDs des boutons
Toutes les sorties Rocrail avec leurs identifiants contenant "co_led" sront réinitialiser.
Les valeurs de la couleur restent à la couleur verte et le clignotement est réglé à OFF:
- rouge = 33
- vert = 255
- bleu = 33
Finalement la sortie est réglée à OFF.
<!-- reset all button LEDs --> <function id="abo_fct_resetAllLEDs" trace="false"> <trace text="abo_fct_resetLEDs: begin"/> <vr id="vr_abo_fct_false" text="false"/> <vr id="vr_abo_fct_color_on" value="255"/> <vr id="vr_abo_fct_color_off" value="33"/> <foreach table="colist" condition="%oid% ~ co_led"> <set vr="vr_abo_fct_false" table="colist" id="%oid%" set="blink" setint="false"/> <set vr="vr_abo_fct_color_off" table="colist" id="%oid%" sub="color" subidx="0" set="red" setint="true"/> <set vr="vr_abo_fct_color_on" table="colist" id="%oid%" sub="color" subidx="0" set="green" setint="true"/> <set vr="vr_abo_fct_color_off" table="colist" id="%oid%" sub="color" subidx="0" set="blue" setint="true"/> <co id="%oid%" cmd="off"/> <sleep time="20"/> </foreach>
5) Execution
6) Matériel
Pour construire le matériel les partie suivantes sont requises:
- un Pico-W
- quelques modules TCO avec boutons, afficheur et boîtier (ou LED NeoPixel, un écran OLED et des boutons supplémentaires)
- une alimentation USB (ou n'importe quelle alimentation 5 Volt).
L'image inclut d'autres parties qui ne sont pas requises pour cet exemple.
7) Remarques
Il y a des choses à faire:
- comme une locomotive dans le premier bloc?
– Ceci est utilement géré par Rocrail en n'envoyant pas de commande à une locomotive absente.
- comme le deuxième bouton différent du premier bouton?
– Ceci est utilement géré par Rocrail en n'envoyant pas de commande Go à une locomotive qui a déjà atteint sa destination.
- …