LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: Dominique le janvier 03, 2024, 02:55:42 pm

Titre: Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 03, 2024, 02:55:42 pm
Nous sommes quelques uns à nous intéresser à la réalisation d'un gestionnaire de réseau qui soit capable de détecter les positions des trains qui circulent sur un réseau et qui soit capable de les commander pour respecter les règles de circulation ferroviaire :
- un seul train par canton,
- des signaux positionnés selon ces règles (sémaphores, carrés, avec ralentissement, etc..),
- des commandes des trains pour le respect des ralentissements et arrêts selon la signalisation,
- des détecteurs de présence et/ou d'identification(RFID, RailCom) des trains par canton, zone, aiguille, etc.
- une représentation du réseau sous forme de TCO ou écran graphique,
- une centrale DCC pour commander les trains aussi bien automatiquement (par le gestionnaire) que manuellement (par des manettes, smartphone ou TCO),
- des possibilités de réaliser des itinéraires avec commande des appareils de voie, aussi bien manuels qu'automatiques.
- des animations contextuelles (sons, lumières, etc..)

Le sujet a été très bien expliqué par Pierre59 dans sa série d'articles : Un gestionnaire en C++ pour votre réseau.
https://www.locoduino.org/spip.php?article154 (https://www.locoduino.org/spip.php?article154)
https://www.locoduino.org/spip.php?article167 (https://www.locoduino.org/spip.php?article167)
https://www.locoduino.org/spip.php?article172 (https://www.locoduino.org/spip.php?article172)
https://www.locoduino.org/spip.php?article184 (https://www.locoduino.org/spip.php?article184)
Il offre une boite à outils très complète pour réaliser un gestionnaire, que j'ai eu le plaisir de mettre en oeuvre sur mon réseau.

DDEF a également exposé ses principes dans la série : SGDD : Système de Gestion DD
https://www.locoduino.org/spip.php?article132 (https://www.locoduino.org/spip.php?article132)
https://www.locoduino.org/spip.php?article134 (https://www.locoduino.org/spip.php?article134)
https://www.locoduino.org/spip.php?article151 (https://www.locoduino.org/spip.php?article151)

Des réalisations partielles ont été décrites comme : Gestion d’une gare cachée
https://www.locoduino.org/spip.php?article155 (https://www.locoduino.org/spip.php?article155)
https://www.locoduino.org/spip.php?article156 (https://www.locoduino.org/spip.php?article156)
https://www.locoduino.org/spip.php?article157 (https://www.locoduino.org/spip.php?article157)

Sans oublier les solutions commerciales ou de l'open source comme JMRI, RocRail, iTrain et autres RRTC qui tournent sur PC/MAC et nécessitent des interfaces avec la centrale DCC et la rétrosignatisation, entraînant souvent des coûts importants.

Depuis pas mal de temps, Locoduino recommande le bus CAN pour les communications. entre les diverses entités du réseau. LaBox est l'exemple de centrale DCC pilotable par Bus CAN et en même temps par logiciel JMRI, RocRail via l'USB.

Le but de ce sujet est de recueillir vos souhaits et préférences dans le but de concevoir un système de gestion de réseau architecturé autour d'un bus CAN.

Suite à l'expression des divers desiderata, nous établieront un cahier des charges puis démarrera une réalisation.

Le tracé du réseau à équiper se trouve en page 11 :
https://forum.locoduino.org/index.php?topic=1645.msg17785#msg17785 (https://forum.locoduino.org/index.php?topic=1645.msg17785#msg17785)
A vous maintenant.

Cordialement
Dominique
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 03, 2024, 04:27:31 pm
Pour démarrer, j'appuie la proposition de BobyAndCo qui propose de commencer par résoudre les points les plus généraux pour s’attaquer ensuite au particulier.
 
Parmi les principaux points auxquels il faut trouver des réponses :
 
La Topographie : Décrire précisément toutes les liaisons des cantons entre eux, préciser si ces liaisons sont directes, par l’intermédiaires d’aiguilles (droites ou déviées), de TJD etc… C’est je crois le travail le plus fastidieux et aussi, c’est assez compliqué à modifier quand on fait des modifications sur le réseau. Il n’y a pas qu’un seul procédé pour ce faire. Soit on propose les boutons et les switches sur des satellites, soit un outil graphique. Pourquoi pas ? Si celui-ci peut générer un document formaté ou toutes les liaisons sont décrites et qui pourraient être importé tel quel dans le gestionnaire ; fichier json par exemple.

La sécurité : Lorsque l’on cherche à faire avancer un convoi dans un sens donné, on recherche si le canton suivant, en fonction de la position d’aiguille éventuelle est libre ou occupé. Si libre, la loco peut avancer, doit s'arrêter ou ralentir. Si elle s’engage sur le canton C+1, on cherchera maintenant à connaitre l’état d’occupation de C+2. Si occupé, on donne l’ordre à la loco de ralentir au franchissement du premier capteur et de stopper au franchissement du second capteur.

La gestion d’itinéraire. On a un point A de départ et un point B d’arrivée. On a aussi des options comme je l’ai déjà dit : Itinéraire le plus court en distance, itinéraire où aucun canton n’est occupé au moment du lancement, itinéraire qui se modifie de lui-même en cas de modifications. Mais la recherche automatique d'itinéraire n'est pas souvent nécessaire sauf dans les réseaux compliqués cet les cas d'école. Bien souvent un petit jeu d'itinéraires prévus à l'avance suffira. Il sera capable de tester la non-occupation des éléments de voie à emprunter, positionner les aiguilles nécessaires et libérer tout ou partie du tracé au fur et à mesure de l'avancement du train.

L'architecture matérielle : Il est trop tôt pour la décrire et la limiter tant que les principes ci-dessus ne sont pas clairs.
Mais il apparait tout de même dans cette réflexion qu'il s'agit d'un gestionnaire qui diffère des logiciels existants comme JMRI, RocRail, iTrain ou autres RRTC qui existent déjà et dont la mise en oeuvre et l'utilisation font l'objet d'autres sujets sur ce forum.
Comme dans mon propre réseau, une carte Arduino un peu puissante et connectée au bus CAN peut faire office de gestionnaire avec une interface homme-machine qui peut prendre diverses formes : (écran graphique tactile associé, PC/Mac connecté avec application ad hoc, etc..

Tout autour du bus Can on trouvera des détecteurs et des actionneurs comme la carte Satellite V1 proposée il y a quelques lustres ou les cartes Satellite de BobyAndCo de type "Canton" qui seront décrites dans de prochains articles.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 03, 2024, 05:13:17 pm
Bonjour

Pour le gestionnaire je pense qu'il ne faut pas le limiter au seul bus CAN, mais l'ouvrir à tous les bus possibles : CAN, WIFi, Ethernet, BlueTooth, Série, ... Avec une messagerie qui fonctionne de la même façon sur tous les bus (même API).

On parle toujours de "canton", mais faudrait bien se mettre d'accord sur ce que c'est. Pour moi ce qui est important c'est la zone : une portion de voie avec ou sans appareil de voie sur laquelle il y a une détection de présence de matériel roulant. Un canton c'est une ou plusieurs zones consécutives (pas forcément toujours les mêmes) qui se trouvent entre deux signaux pouvant présenter le sémaphore (sémaphores, carrés, ...). Les cantons servent à l'espacement des trains avec un mécanisme de cantonnement (BAL, BAPR, BMU, ...). Sur un réseau il y a des parties qui ne sont pas cantonnées : dépôts, partie marchandises, petites lignes, ... donc sans cantons mais avec éventuellement des zones.

Les zones sont essentielles dans le gestionnaire, ce sont leur occupations/libérations qui rythment son fonctionnement.

Fondamentalement un gestionnaire peut être centralisé ou repartit (dans les satellites par exemple). Un gestionnaire repartit est beaucoup plus difficile à écrire et à mettre au point qu'un gestionnaire centralisé (j'ai longuement travaillé dans des équipes CNRS de programmation répartie). Le langage à utiliser reste ouvert : Java ou C++ il faudra en discuter.

J'en reste la pour l'instant, dites ce que vous en pensez.

Pierre



Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 03, 2024, 08:24:46 pm
Bonjour à tous,

Le système SGDD était un tout premier essai, vraiment mes tout débuts.
J'ai, depuis développé des programmes en Processing, nettement plus évolués.
Ma dernière contribution pour Locoduino était ce gestionnaire qui sert d'exemple de réalisation.
Il n'est pas parfait, loin de là, mais le but est de donner une idée d'un gestionnaire maison, sur mesure.
https://www.locoduino.org/IMG/zip/train_tco_v1_9_1.zip (https://www.locoduino.org/IMG/zip/train_tco_v1_9_1.zip)

Mode d'emploi :
Après avoir installé la dernière version de Processing, vous pouvez extraire le fichier zip.
Vous lancez n'importe quel programme et quand la fenêtre s'ouvre, vous selectionnez "circuit d'essai.tsv" puis "ouvrir".
S'affiche alors un circuit biscornu qui regroupe quasi tous les pièges dans lesquels on peut tomber sur son réseau.
Pour lancer un train, on doit créer un itinéraire :
Vous sélectionnez (souris vers le bas de l'écran) la "fourche" (icone de l'itinéraire point à point) et vous cliquez avec la flèche verte un point de départ (sur n'importe quel signal), puis un point d'arrivée (là aussi sur un signal).
Le premier itinéraire possible s'affiche en orange.
En cliquant GAUCHE, un autre itinéraire s'affiche, toujours avec les mêmes points de départ et d'arrivée.
En cliquant GAUCHE, on voit donc défiler, à chaque fois un nouvel itinéraire possible, jusqu'à "plus d'itinéraire" (retour à l'afficha des rails en gris)
Si vous recliquez GAUCHE, vous reprenez le cycle.
En cliquant DROIT, vous choisissez cet itinéraire.
Un train apparait au début de l'itinéraire et la souris devient, cette fois, une horloge.
Apparait aussi une manette et, en faisant glisser le curseur, vous décidez du temps d'arrêt au bout de cet itinéraire.
Un clic DROIT met fin aux choix.
Maintenant, en bougeant le curseur, vous faites partir le train qui va jusqu'au bout de l'itinéraire et s'arrête.
Remarque : vous pouvez "chaîner" les itinéraires et décider, pour chaque fin d'itinéraire, du temps d'arrêt (ou non).

Si vous voulez plusieurs trains, il suffit de les programmer à partir d'une zone vide. Il se crée un nouveau train.
Si vous voulez un circuit bouclé, choisissez l'icone en forme d'anneau. Vous chaînez les itinéraires jusqu'à revenir au point de départ.

Bon, je m'arrête là pour aujourd'hui. J'ai présenté UNE possibilité. Il y aura, bien sûr, d'autres propositions.
Pour l'instant, ce ne sont que des trains virtuels. Il y a encore du boulot avant que ça fasse bouger des trains réels. 8)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 03, 2024, 09:42:20 pm
Bonsoir à tous,

@Dominique. Excellente initiative. Je constate avec satisfaction que les réactions et propositions n’ont pas tardées.

Alors quels seraient pour ma part mes souhaits prioritaires ?

Eh bien, avant tout que mes trains puissent rouler en toute sécurité, c’est la base. Je voudrais donc qu’un train qui entre dans un canton dont le canton +1 est occupé soit automatiquement ralenti puis stoppé.

De plus, J’aimerais une simplification maximale du paramétrage et de la description des liaisons entre zones ou cantons. Par exemple, lorsque trois extrémités de cantons convergent en un seul point, l'application devrait automatiquement déduire la présence d'une aiguille et créer l'objet logiciel correspondant. Il est essentiel que toute modification physique du réseau ne devienne pas un casse-tête lors de la mise à jour du gestionnaire. J’aimerais me dispenser de passer de longs moments à saisir les identifiants des cantons, des aiguilles ou des capteurs.

Je remercie Denis pour sa présentation très détaillé mais c’est justement cela que je souhaite éviter, glisser-déposer, clic gauche, clic droit et encore clic droit !!!

Et comme la signalisation ferroviaire française est complexe et que je n’y comprends pas grand-chose, je souhaiterais que le logiciel indique les cibles nécessaires sur le canton et que je n’ai pas à m’en occuper car je vais y passer beaucoup de temps et probablement me tromper.

Je voudrais aussi bien sûr que le gestionnaire sélectionne lui-même les signaux à allumer sans que j’ai besoin de lui préciser au préalable.

En résumé, j'aspire à ce que les trois aspects évoqués par Dominique - topographie, sécurité, et gestion d'itinéraire - deviennent pratiquement transparents pour l'utilisateur.

Enfin, pour faire court, je suis d’accord avec Pierre sur l’ensemble de ce qu’il aborde. Et je suis particulièrement d’accord qu’il vaudrait mieux un gestionnaire répartit qu’un gestionnaire centralisé. Chaque satellite assurant toutes les fonctions d’un gestionnaire mais de manière locale en se « nourrissant » des informations échangées avec tous les autres satellites sur le bus.

Cette architecture offre en premier lieu l’avantage d’être beaucoup moins sollicitée qu’un gestionnaire central. L’évolutivité peut se faire plus facilement sans perturber l'ensemble du réseau.

Mais quand j’ai dit tout cela, je me dis que ce type de gestionnaire existe déjà avec les satellites autonomes.

(https://www.locoduino.org/local/cache-vignettes/L610xH386/_dsc1036-386f0.jpg?1700554652)

Alors je me dis qu’il serait nécessaire de publier au moins les trois premiers articles sur les satellites autonomes pour que cela puisse aussi servir de base de réflexion pour la suite.

Bien amicalement

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 03, 2024, 10:05:57 pm
Pierre a écrit qu’ « Un gestionnaire repartit est beaucoup plus difficile à écrire et à mettre au point qu'un gestionnaire centralisé .

Par contre des éléments répartis par cantons comme le suggère Christophe pourraient-ils être réunis dans un gestionnaire centralisé ? J’imagine que les communications entre objets canton seraient équivalentes aux échanges via Can.

Cela me faciliterait la tâche vu que mon gestionnaire est actuellement centralisé.

Dominique
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 03, 2024, 11:04:40 pm
des éléments répartis par cantons comme le suggère Christophe pourraient-ils être réunis dans un gestionnaire centralisé ?

Oui, en théorie, chaque satellite autonome étant en lui-même un gestionnaire, le code peut assez facilement s’adapter ! Mais l'un des intérêts avec une solution en répartit est que la charge de calcul est  divisée entre les différents microcontrôleurs des satellites.

Les satellites autonomes fonctionnent avec des ESP32, donc assez puissants. J'utilise pleinement les deux cœurs pour répartir les charges et je suis pourtant presque au max sur chaque. Un seul microcontrôleur pour tous le réseau risque de « louper » des étapes !

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 09:20:45 am
Les satellites autonomes fonctionnent avec des ESP32, donc assez puissants. J'utilise pleinement les deux cœurs pour répartir les charges et je suis pourtant presque au max sur chaque. Un seul microcontrôleur pour tous le réseau risque de « louper » des étapes !

C’est étonnant car j’utilise un Due avec un seul cœur ARM Cortex M3 a 84mhz, il affiche le réseau à jour sur un écran 5 pouces en même temps et il ne semble pas perdre de messages !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 09:27:00 am
Ce que vient de dire Christophe m'inquiète aussi quant à la capacité de calcul des ESP32.
Pour moi, ce que fait sa "carte de canton" est très simple : enregistrer qui est le canton suivant dans chaque sens en fonction de la position des aiguilles en utilisant le bus CAN.
J'ai peine à croire que ça suffise à saturer les 2 cœurs d'un ESP32.

Mais si on veut se passer d'un ordinateur, il faut, au moins, un TCO physique avec des LED et des boutons. Donc une carte LED et une carte boutons reliées au bus CAN.

Je pense qu'on devrait parler de cartes de zones et pas de carte de canton. C’est-à-dire des cartes qui ne gèrent pas les signaux. Et avoir des cartes spécifiques pour les signaux.

Il est d'ailleurs intéressant de constater qu'il faut exactement le même nombre de boutons sur le TCO que ceux qui se trouvent sur les cartes de zone : un bouton par sens et par zone.

Au point de se demander si on ne pourrait pas utiliser les boutons du TCO pour décrire le réseau.

Je m'explique :
 
On définit un identifiant pour chaque carte de zone.
Chaque bouton du TCO génère un identifiant, le même que celui de la zone qu'il gère.
A un endroit du TCO, on a un switch (un octet)
A un autre endroit, on a un bouton "programmation"
On appuie sur le bouton de programmation sur le TCO : on entre dans le mode "programmation"
On affiche sur le switch la position des aiguilles entre les 2 cartes de zone à programmer.
On appuie sur le bouton de zone départ sur le TCO : c'est enregistré.
On appuie sur le bouton de la zone arrivée sur le TCO : c'est enregistré.
On appuie sur le bouton de programmation, ce qui envoie dans le bus CAN le message qui va bien vers les 2 cartes de zone.

Dit autrement, je centralise les boutons qui sont sur la carte de zone sur le TCO.

L'avantage, c'est qu'on n'est pas obligé d'avoir accès aux cartes de zone qui peuvent alors être sous le réseau.
Cartes qui peuvent alors être plus petites, débarrassées des boutons et de la signalisation.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 09:33:05 am
Revenons d’abord aux préoccupations principales :
- la topographie : comment obtenir le graphe complet du réseau, par exemple pour l’afficher sur un TCO ?

- comment assurer la sécurité : le suivi des trains, la mise à jour du graphe, de la signalisation et l’application a la conduite des trains.

-les itinéraires : on y reviendra plus tard, l’algorithme de choix étant une option.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: dmskd le janvier 04, 2024, 10:37:45 am
Bonjour à tous,

Je viens de lire avec grand intérêt ce lancement de projet, d'autant plus grand que j'ai en projet un nouveau réseau.
Il y a eu beaucoup de remarques pertinentes et mes connaissances "limitées" dans ce domaine ne me permettent pas de commenter.
Le seul point pour lequel j'interviens est qu'on a parlé de PC et Mac, mais il ne faut pas oublier qu'il y a PC-Windows et PC-Linux (qui est mon cas).
Je pense que s'il y a une interface sur ordinateur, elle doit être "universelle", comme un navigateur web.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 04, 2024, 11:18:44 am
Revenons d’abord aux préoccupations principales :
- la topographie : comment obtenir le graphe complet du réseau, par exemple pour l’afficher sur un TCO ?
Le graphe du réseau (avec beaucoup d'annotations) peut peut être suffire au gestionnaire, mais ne permet pas d'afficher correctement un TCO (ils faut d'autres informations). Ce ne sont pas les mêmes informations qui sont nécessaires dans les deux cas.
Je ne vois que que deux possibilités pour obtenir le graphe, un éditeur graphique ou un codage en mode texte avec un éditeur de texte.
Un éditeur graphique c'est un très gros programme. J'ai fais pas mal d'essais pour un éditeur graphique de TCO, il reste encore pas mal de petits bugs; voir aussi les travaux de Denis.
Un codage en mode texte est peu être plus abordable (json,XML, ...) mais faut pouvoir coder toutes les informations nécessaires.
Il faut remarquer que les classes proposées dans la série d'articles constituent en fait "un" codage du graphe d'un réseau.
- comment assurer la sécurité : le suivi des trains, la mise à jour du graphe, de la signalisation et l’application a la conduite des trains.
La sécurité se fait essentiellement avec les enclenchements (voir l'article 3). La SNCF assure cette sécurité surtout avec des relais (peut être aussi avec des programmes à logique majoritaire), mais il reste encore pas mal d'enclenchements mécaniques. Les relais changent leurs états en fonction des infos d'occupation des zones, des appuis sur des pédales par des essieux et des demandes d'itinéraires.
Clairement cette sécurité sur nos réseaux on la fait avec des programmes qui ont comme données variables des occupations/libérations de zones, des détections de train ponctuelles et demandes de trajets ou itinéraires de trains.
-les itinéraires : on y reviendra plus tard, l’algorithme de choix étant une option.
Je suis tout à fait d'accord avec toi.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 11:24:43 am
Le seul point pour lequel j'interviens est qu'on a parlé de PC et Mac, mais il ne faut pas oublier qu'il y a PC-Windows et PC-Linux (qui est mon cas).
Je pense que s'il y a une interface sur ordinateur, elle doit être "universelle", comme un navigateur web.

Ty as tout à fait raison, il faut être compatible à tous les OS.

Mais pour cela il faut savoir ce que l’on veut faire avec un PC :
- y faire tourner le gestionnaire ? Ça existe déjà avec JMRI et d’autres compatibles linux. Ce n’est pas notre objectif.
- développer une interface avec le gestionnaire : oui bien sûr mais il faut décrire ce qu’elle doit faire.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 11:41:25 am
Ce que vient de dire Christophe m'inquiète aussi quant à la capacité de calcul des ESP32.
Pour moi, ce que fait sa "carte de canton" est très simple : enregistrer qui est le canton suivant dans chaque sens en fonction de la position des aiguilles en utilisant le bus CAN.
J'ai peine à croire que ça suffise à saturer les 2 cœurs d'un ESP32.

Mais non mon cher Denis, le satellite ne fait pas que cela. Par exemple, il émet sur le bus toutes les 100ms un message CAN sur 8 octets dans lequel on trouve l’adresse de la loco (s’il y en a une), et en fonction de la position de ses différentes aiguilles, quel est son C+1 et son C+2 ainsi que son C-1 et son C-2.

Mais surtout, il reçoit de tous les autres satellites ce même message, je rappelle toutes les 100 ms, prend en compte les messages qui le concerne et adapte son comportement en conséquence : Arrêt de sa propre loco, adaptation de signalisation et quelques autres opérations.

Il doit également s’occuper toutes les 100ms de lire l’état de ses différents capteurs et aussi assurer la lecture de Railcom.

Ici un apperçu de la principale méthode qui s’occupe de toutes ces mises à jour : https://github.com/BOBILLEChristophe/Satellites_autonomes_client/blob/main/src/GestionReseau.cpp

Crois moi, répété toutes les 100ms, c'est déjà pas mal.
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 12:09:38 pm
Le graphe du réseau (avec beaucoup d'annotations) peut peut être suffire au gestionnaire, mais ne permet pas d'afficher correctement un TCO (ils faut d'autres informations). Ce ne sont pas les mêmes informations qui sont nécessaires dans les deux cas.

Selon moi, Pierre soulève judicieusement la distinction qu’il faut faire entre gestionnaire et TCO (d’une manière générale) ou tout ce qui permet d’agir sur l’état du réseau ou de visualiser l'état du réseau.

Même si souvent ces deux fonctions sont rassemblées en un seul appareil (logiciel), ce sont pourtant deux choses à bien distinguer au risque de tout mélanger et de n’arriver à rien.

Au risque de se répéter, le gestionnaire doit en priorité assurer la sécurité et afficher la bonne signalisation. Qu’on lui demande de faire de la gestion d’itinéraires n’est finalement qu’une extension des précédentes fonctions.

De fait, le gestionnaire au sens strict n’a pas d’interface graphique, il n’en a pas besoin. Il fonctionne essentiellement en boucle et agit en fonction des informations qu'il reçoit.

C’est pour cela que l’on peut imaginer toutes sortes de périphériques, logiciels (HTML, Processing…) ou simplement matériels, boutons poussoirs, manettes de gaz etc…

Ces périphériques n’ayant même pas de communication avec le gestionnaire ou sans doute très peu. La manette de gaz par exemple agit directement sur la centrale DCC qui en confirmant la réception de la commande, met à jour le gestionnaire.

De même pour les aiguilles, l’ordre est donné par un bouton physique ou logiciel et seul un message informe le gestionnaire du changement. Dans ce cas précis, on voit bien l’intérêt d’un interrupteur en butée de servo d’aiguille qui est le meilleur moyen de s’assurer du changement d’état.

Ainsi, le gestionnaire, développé pour se concentrer sur ses fonctions de base est indépendant de tout autres systèmes de commande.

J’espère que j’explique bien ce point et que ce que je dis est partagé.

Christophe


Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 12:48:04 pm
Les satellites autonomes fonctionnent avec des ESP32, donc assez puissants. J'utilise pleinement les deux cœurs pour répartir les charges et je suis pourtant presque au max sur chaque. Un seul microcontrôleur pour tous le réseau risque de « louper » des étapes !

C’est étonnant car j’utilise un Due avec un seul cœur ARM Cortex M3 a 84mhz, il affiche le réseau à jour sur un écran 5 pouces en même temps et il ne semble pas perdre de messages !

@Dominique. Ce n'est pas la messagerie CAN qui est à taquet. Sur les satellites autonomes, pour 50 satellites sur le bus, à raison d'un message par satellite toutes les 100 ms, à 1Mbps et sur une longueur de bus de 30 mètres, la charge du bus CAN est de 7,15% de sa capacité théorique !!!

Dans la réponse que j'ai faite à Denis, tu constateras que je demande au microcontrolleur de faire beaucoup de choses en 100 ms et que toute la puissance de l'ESP32 n'est pas superflue.

Tu me disais sur ton DUE perdre, non pas des messages mais des trains !!! N'est-ce pas là le problème ?
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 01:51:32 pm

Tu me disais sur ton DUE perdre, non pas des messages mais des trains !!! N'est-ce pas là le problème ?

Non ce n’est pas une question de performance mais d’analyse et de codage : des cas d’erreur mal traités.

C’est pour ça que cette discussion m’intéresse  ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: dmskd le janvier 04, 2024, 02:26:08 pm
Citer
Ces périphériques n’ayant même pas de communication avec le gestionnaire ou sans doute très peu. La manette de gaz par exemple agit directement sur la centrale DCC qui en confirmant la réception de la commande, met à jour le gestionnaire.

De même pour les aiguilles, l’ordre est donné par un bouton physique ou logiciel et seul un message informe le gestionnaire du changement. Dans ce cas précis, on voit bien l’intérêt d’un interrupteur en butée de servo d’aiguille qui est le meilleur moyen de s’assurer du changement d’état.

Si le gestionnaire assure la sécurité, est-ce qu'il ne doit pas filtrer toute commande manuelle, par exemple interdire d'accélérer sur un canton au ralenti, ou interdire d'actionner une aiguille occupée par un train ?
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 03:18:09 pm
Citer
Ces périphériques n’ayant même pas de communication avec le gestionnaire ou sans doute très peu. La manette de gaz par exemple agit directement sur la centrale DCC qui en confirmant la réception de la commande, met à jour le gestionnaire.

De même pour les aiguilles, l’ordre est donné par un bouton physique ou logiciel et seul un message informe le gestionnaire du changement. Dans ce cas précis, on voit bien l’intérêt d’un interrupteur en butée de servo d’aiguille qui est le meilleur moyen de s’assurer du changement d’état.

Si le gestionnaire assure la sécurité, est-ce qu'il ne doit pas filtrer toute commande manuelle, par exemple interdire d'accélérer sur un canton au ralenti, ou interdire d'actionner une aiguille occupée par un train ?

Oui effectivement dans le cas d'un gestionnaire centralisé, c'est la solution "économique". J'ai un peu de mal à me détacher du satellite autonome car je baigne complètement dedans. Pour la commande d'aiguillage sur le satellite autonome, celle-ci est adressée à un satellite X qui connait la présence ou non d'un convoi mais qui devra aussi s'assurer que le convoi n'est pas à cheval sur deux cantons.

Pour la traction, la commande doit en effet "transiter" par le gestionnaire qui la laisse passer, la bloque ou la modifie (limitation de vitesse par exemple) selon la topologie du réseau à l'instant.

Bien vu et merci !

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 03:43:30 pm
@ Christophe
Si tu sais, à tout moment, pour un canton C donné, quel est son C+1 en fonction de la position des aiguilles, tu peux gérer une première information : pas de C+1 => afficher le C (Carré) du canton C.

Si C+1 existe, tu regardes si C+1 est occupé.
Si oui, tu affiche S (Sémaphore), sinon tu ne changes pas le signal.

La question, après, consiste à connaitre quel est le signal affiché au bout de C+1. Il y a plusieurs cas à gérer.
Si le signal de C+1 est S ou C, afficher A (Avertissement) pour le cas le plus simple.

Evidemment, pareil côté C-1. L'identité d'un train n'a aucune incidence sur la signalisation… dans un premier temps.

Connaître C+2 et C-2 est moins utile, bien que je m'en serve dans mon gestionnaire :
J'estime, en ligne droite et avec une bonne visibilité, que le conducteur voyant un signal A sait qu'il va bientôt voir S et devoir s'arrêter et que, dans ces conditions, il ne va pas accélérer à fond pour freiner juste avant le signal A. Et qu'il va maintenir sa vitesse actuelle en espérant que le A devienne VL (Voie Libre) et que, là, il a presque 2 cantons libres devant lui.

Si on n'est pas en ligne droite, si le canton est court, etc… il y a d'autres cas à gérer.

A mon avis, dans un premier temps, sur un circuit sans piège, gérer C+1, C-1 et C, S, A, VL est plausible. Par contre, il est nécessaire qu'un canton connaisse, via le CAN, le signal de C+1 et C-1.
De même, il doit faire respecter les signaux de son canton par "son" train, une fois qu'il a fait les calculs.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 04:45:09 pm
On voit que Denis a décortiqué des tas de choses.

J’en déduit qu’il y a, dans un gestionnaire sérieux, toute une suites de traitements à faire les uns avant ou après les autres et dont l’ordre est très important ,

-1- détections des occupations et libérations zone par zone comme le dit Pierre et mise à jour des signaux

-2- suivi des trains pour identifier a tout moment ceux qui sont détectés, afin d’être capable de leur appliquer :

-3- les consignes de conduite locales : ralentissement (15, 30, 60, 90), arrêt et redémarrage

Sans empêcher toutes sortes de cas particuliers : ralentissement dans les virages et aiguilles déviées par exemple, coup de klaxon avant sortie de tunnel et passages à niveau, ..et un mélange de conduite manuelle et automatique.

La difficulté est l’ordre dans lequel faire ces traitements. Par exemple des qu’un train entre dans un canton C le C-1 est fermé et il ne faut arrêter le train qui y est encore (j’ai eu ce cas avec le Locoduinodrome).

Donc il faut ajouter et manipuler des variables d’état pour conditionner les comportements.

La boîte à outils de Pierre (Un gestionnaire en C++) est très intéressante mais il faut ajouter les traitements ci-dessus.

C’est ça qui est amusant 🤩 et ça plante parfois.

J’espère trouver la potion magique dans ce sujet !
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 04, 2024, 05:00:50 pm
Selon moi, Pierre soulève judicieusement la distinction qu’il faut faire entre gestionnaire et TCO (d’une manière générale) ou tout ce qui permet d’agir sur l’état du réseau ou de visualiser l'état du réseau.

Même si souvent ces deux fonctions sont rassemblées en un seul appareil (logiciel), ce sont pourtant deux choses à bien distinguer au risque de tout mélanger et de n’arriver à rien.

Au risque de se répéter, le gestionnaire doit en priorité assurer la sécurité et afficher la bonne signalisation. Qu’on lui demande de faire de la gestion d’itinéraires n’est finalement qu’une extension des précédentes fonctions.

De fait, le gestionnaire au sens strict n’a pas d’interface graphique, il n’en a pas besoin. Il fonctionne essentiellement en boucle et agit en fonction des informations qu'il reçoit.
@ Christophe
Très bonne analyse, je suis tout à fait d'accord.

@ Tous
Par contre pour les aiguilles, comme d'autres l'on déjà dit, seul le gestionnaire peut manoeuvrer les aiguilles. Sinon risque de manoeuvrer une aiguille avec un train dessus, risque de manoeuver une aiguille d'un itinéraire formé dirigeant un train n'importe où, ...
Pour "l'accélérateur" c'est un peu pareil le gestionnaire doit filtrer les commandes pour traiter les arrêts aux signaux, les limitations de vitesse, ... Je préconise aussi l'usage d'un encodeur en quadrature plutôt qu'un potentiomètre, la position du potentiomètre de reflétant pas toujours la vitesse effective du train et il peut y avoir des mouvements mal controlés du train.

Pierre

Titre: Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 05:32:09 pm
Bon, ça avance bien je trouve.

Je repose une question pour laquelle je n’ai pas eu vos réponses et elle m’intéresse car je trouve qu’elle est à résoudre avant toutes les autres.

Comment faites-vous pour associer une locomotive à un canton-zone à la mise sous tension du réseau ou en posant la locomotive sur les rails ?

Les gestionnaires graphiques le font avec la souris à l’endroit où est la loco, mais si pas d’interface graphique ?

Et pour le suivi des trains d'un canton à l'autre, j’ai bien ma petite idée de l’algorithme de suivi lors du passage d’un canton-zone à un autre, mais j’aimerais savoir comment d’autres voient la chose.

Autre question dans le même registre, comment déterminez-vous qu’un convoi à totalement quitté un canton-zone ?

Cela me conduit à demander à Pierre "quand le gestionnaire sait il qu’il n’y a pas de train qui chevauche ?"

Par contre pour les aiguilles, comme d'autres l'on déjà dit, seul le gestionnaire peut manoeuvrer les aiguilles. Sinon risque de manoeuvrer une aiguille avec un train dessus

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 05:44:35 pm
Je reviens également sur la capacité de calcul pour un gestionnaire centralisé qui serait basé sur un microcontrôleur et qui aurait, disons 20 satellites à superviser.

Est-on d’accord que la fréquence moyenne d’envoi par chaque satellite de ses informations d’états est d’environ 100 ms ?

Partant de là, on est d’accord je pense pour considérer que le gestionnaire centralisé devra recevoir et traiter un message toutes les 5ms et donc avoir fait ce qu’il a à faire pour ce satellite donné dans ce laps de temps : Mise à jour des données variables, capteurs ponctuels, arrêt ou ralentissement de la locomotive au besoin, modification de la signalisation.

Sachant que par ailleurs il doit ponctuellement modifier les aiguilles, assurer le suivi des convois !

Je pose vraiment cette question sans arrière-pensée.

Christophe


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 04, 2024, 06:04:52 pm
Bonsoir

Je suis un peu débordé par toutes les questions, mais je vais répondre, demain vraissemblablement.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 06:40:58 pm
Je peux donner des éléments de réponse

1°) On détecte la présence d'un train par consommation de courant.
C'est évident pour une loco, et pour un wagon ou une voiture isolée, il faut souder une résistance CMS (10 kOhm) entre la roue isolée et l'essieu.
Toute autre méthode n'est pas sûre (en particulier les ILS/ Effet Hall, ... qui sont ponctuels)
Pour être franc, il existe une autre méthode fiable : le comptage d'essieu. Mais, pour la mettre sur un réseau, bonjour...

2°) Le vocabulaire est très clair :
Une ZONE correspond à une détection de présence. Ce peut être un rail avec des coupures, une aiguille seule, plusieurs aiguilles.
Un croisement, une TJS, une TJD sont forcément une zone à eux tout seuls car on ne peut pas les relier à un canton.

Un CANTON, c'est un ensemble de zones avec des signaux à chaque extrémité. Ou à une seule extrémité si c'est une voie à sens unique, évidemment.

Donc, faire une "carte canton" est ambigu : cela correspond à un cas très particulier : une seule zone avec un signal à chaque bout. C'est très réducteur.

Maintenant, c'est clair : un canton est libre quand TOUTES les zones qui le composent sont vides

3°) Personnellement je pense qu'il faut réserver les boutons qui commandent des aiguilles aux cas très simples (une ou 2 aiguilles isolées). Sinon, on passe par un itinéraire.
Dans tous les cas, un bouton ne commande pas directement une aiguille. Un bouton demande au gestionnaire de changer la position de l'aiguille et le gestionnaire le fait quand les conditions de sécurité sont remplies

Comme je l'ai déjà dit, il existe un état "occupé par un itinéraire", complètement distinct d'une occupation physique d'une zone.

A la SNCF, les zones correspondant à un itinéraire sont affichées au TCO (par exemple en blanc clignotant) et l'occupation physique (par exemple en rouge). Pas seulement la position des aiguilles. Et on voit les zones s'effacer derrière le train au fur et à mesure que le train avance sur l'itinéraire.

Il faut pouvoir enregistrer des itinéraires, sans tenir compte des occupations (physiques et par un autre itinéraire).
Après, le gestionnaire libère les trains quand c'est possible en toute sécurité.

Citer
On voit que Denis a décortiqué des tas de choses
Entre autres, j'ai lu la "Bible" de la signalisation : "La signalisation ferroviaire" de Roger Rétiveau (639 pages !!)

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 04, 2024, 06:53:53 pm
l faut souder une résistance CMS (10 kOhm) entre la roue isolée et l'essieu.

Merci pour cette info.

Un croisement, une TJS, une TJD sont forcément une zone à eux tout seuls car on ne peut pas les relier à un canton.

Un CANTON, c'est un ensemble de zones avec des signaux à chaque extrémité.

Je ne te suis pas, tu dis que "Un croisement, une TJS, une TJD sont forcément une zone à eux tout seuls", là je suis OK mais tu dis "on ne peut pas les relier à un canton." alors que tu dis plus loin : Un CANTON, c'est un ensemble de zones

Merci pour la réponse

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 07:12:31 pm
Simplement, dans ta carte, tu englobes jusqu'à 2 aiguilles. Tu peux parce que tu prends les aiguilles "en talon" (pas "en pied", d'ailleurs).
Si un train est en phase de quitter le canton du côté des aiguilles et qu'il soit uniquement sur les aiguilles, le fait que le canton reste occupé n'a pas d'incidence, ça ne gêne pas les autres trains.
Et s'il n'est que sur la partie sans aiguilles, de toutes façons aucun train ne pourrait venir sur les aiguilles. C'est "un tout".

Par contre, un croisement doit être géré tout seul, on ne peut pas le relier à un voisin. Voir le schéma.
J'ai supposé qu'on reliait le croisement au canton 1.
Si un train est sur le canton 1, sans être sur le croisement, même à l'arrêt, on empêche un train qui va du canton 2 au canton 3 de passer à cause de l'occupation du croisement.
Et pareil pour les autres extrémités. Il doit être géré tout seul.

Mais ça n'est pas un canton car il n'y a pas de signaux
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 07:15:17 pm
Quand l'une des zones d'un canton est occupée, TOUT le canton est occupé
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 04, 2024, 08:13:12 pm
Pour info sur les résistances CMS pour détection de présence :
Le "Petit Train du Tertre", le site d'une bande d'amis (dont notre Jean Luc 8) à ses débuts, avec un certain Pierre Molinaro)

https://lestrainsdutertre.redheberg.com/TouteVapeur/Les_trains_du_Tertre/Articles_Trains_du_Tertre/C03_La_detection_de_presence.html (https://lestrainsdutertre.redheberg.com/TouteVapeur/Les_trains_du_Tertre/Articles_Trains_du_Tertre/C03_La_detection_de_presence.html)

Plein d'idées sur plein de sujets
ou

http://rouge-et-creme.over-blog.com/2014/08/detection-facile-de-vos-wagon-et-voitures-en-ho.html (http://rouge-et-creme.over-blog.com/2014/08/detection-facile-de-vos-wagon-et-voitures-en-ho.html)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 04, 2024, 08:16:01 pm
Bonsoir

Je m ajoute aux contributeurs de ce fil

Je voudrais aussi apporter quelques éléments de topographie à intégrer aux réflexions/propositions en cours.

Entre deux cantons ( là où on peut arrêter un train par cantonnement) on rencontre souvent sur nos réseaux des grills d entrées/sorties plus ou moins complexes.( ex double bretelle, TJD,...)
Ce sont des zones à monitorer mais sur lesquelles le cantonnement est "INTERDIT".

On peut associer l'enchainement par construction mais les distances sont parfois de l ordre d un ou deux appareil...

Par ailleurs on peut avoir un enjambement du convoi sur plusieurs zones dont à minima 2 cantons ( car loco en tête assurant une détection, véhicule non consommateur en milieu, et véhicule de fin consommateur)
Autre alternative renseigner les longueurs des convois et zones (cantons, zone grills, ...) et suivre les mappings associés... (nœuds au cerveau garantis!)

Autre cas à considérer:

Circulation en sens inverse des segments de voie parcourus

Circulation en "pousse" ( engin moteur en queue dans le sens de déplacement)

Il n y a surement de solution "toute faite" mais il faudra configurer par un moyen une initialisation avant de pouvoir s'offrir une exploitation.



Laurent
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 04, 2024, 08:47:42 pm
Je reviens également sur la capacité de calcul pour un gestionnaire centralisé qui serait basé sur un microcontrôleur et qui aurait, disons 20 satellites à superviser.

Est-on d’accord que la fréquence moyenne d’envoi par chaque satellite de ses informations d’états est d’environ 100 ms ?

Partant de là, on est d’accord je pense pour considérer que le gestionnaire centralisé devra recevoir et traiter un message toutes les 5ms et donc avoir fait ce qu’il a à faire pour ce satellite donné dans ce laps de temps : Mise à jour des données variables, capteurs ponctuels, arrêt ou ralentissement de la locomotive au besoin, modification de la signalisation.

Sachant que par ailleurs il doit ponctuellement modifier les aiguilles, assurer le suivi des convois !

Je pose vraiment cette question sans arrière-pensée.

Christophe

Tous les messages n’ont pas besoin d’être répétés. Un accusé de réception évite les répétitions (cas des commandes de signaux et aiguilles). Les détections ponctuelles aussi.
100ms est arbitraire . Ça peut se déterminer par calcul des temps dans le programme. J’ai souvent mesuré des traitements compliqués de moins de 5ms.
Je pense que cette question n’est pas primordiale pour le moment. C’est du reglage.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 05, 2024, 10:16:55 am
Bonjour Dominique, bonjour à tous,

Ce n’est pas aux commandes d’aiguilles ni de signaux auxquelles je pense qui doivent effectivement arrêter d’être envoyées dès que l’on a l’accusé de réception.

Par contre, je ne suis pas sûr de bien comprendre pour les détections ponctuelles.
Est-ce que tu veux dire que tu limites la fréquence de messages envoyés par les satellites ?

Personnellement, je ne jouerai pas là mais à la réception dans le gestionnaire, en recherchant si, pour un identifiant donné les datas du message sont différentes du précédent envoi.

Certes 100ms c’est arbitraire, toute autre fréquence aussi d’ailleurs. Mais par expérience, on constate que c’est à peu près ce qui est nécessaire pour détecter des capteurs ponctuels comme des IR ou encore des capteurs RFID.

La question est-elle primordiale ? Oui sans doute car je pense qu’elle doit être omni présente au moment de l’écriture du code pour rechercher tous les mécanismes d’économie de calcul.
Titre: Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 05, 2024, 10:20:12 am
Comment faites-vous pour associer une locomotive à un canton-zone à la mise sous tension du réseau ou en posant la locomotive sur les rails ?

Les gestionnaires graphiques le font avec la souris à l’endroit où est la loco, mais si pas d’interface graphique ?
On aborde ici une question dont on ne parle pas souvent qui est l'initialisation du gestionnaire.
A son initialisation le gestionnaire à besoin de connaitre toutes les zones qui sont réellement occupées ainsi que les références des l'engins moteurs qui sont dessus (nom, adresse DCC,icone, ...). Pour faciliter ceci on peut lors de l'arrêt normal du gestionnaire sauvegarder ces informations dans un fichier (ou autre) pour les reprendre lors de l'initialisation. Mais quelques cas (crash du gestionnaire, déraillement, ajout d'engin moteur, ...) nécessitent un moyen de dialogue avec le gestionnaire (pas forcement par le biais d'un TCO graphique). De toute façon le gestionnaire a besoin de signaler des infos sur son fonctionnement (des anomalies, des erreurs, ...).

A son initialisation le gestionnaire à besoin aussi de connaitre la position de toutes les aiguilles. Soit on peut obtenir ces positions en questionnant les satellites, soit on peut les sauvegarder dans un fichier lors d'un arrêt normal du gestionnaire, sinon (dont le cas du crash) il faut mettre une par une toutes les aiguilles dans une position connue par manoeuvre.

Pour finir sur l'initialisation tous les signaux carrés sont fermés, les sémaphores présentent les feux voulus et aucun itinéraire n'est formé.

Pierre


Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 05, 2024, 10:23:44 am
Quand l'une des zones d'un canton est occupée, TOUT le canton est occupé

Bonjour Denis,

Eh bien oui je suis d’accord avec toi et c’est comme cela que je raisonne pour les satellites autonomes. Certes, je n’ai pas encore voulu inclure le cas de croisement mais comme je te le disais je préfère partir du général et terminer par le particulier qui finira par trouver sa solution.

D’ailleurs, tu prenais aussi le cas de la boucle de retournement. A la réflexion, ce n’est rien d’autres que deux cantons reliés chacun à l’une des extrémités de l’aiguille, non ? 
Titre: Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 05, 2024, 10:48:37 am
Et pour le suivi des trains d'un canton à l'autre, j’ai bien ma petite idée de l’algorithme de suivi lors du passage d’un canton-zone à un autre, mais j’aimerais savoir comment d’autres voient la chose.
C'est un problème épineux et je suis preneur de solutions originales. Quand une zone passe de l'état libre à occupé on a besoin de savoir quel train rentre dessus. Pour cela on examine les deux zones avoisinantes en fonction de la position des aiguilles, il ni en a au maximum que deux car un train ne peut venir sur une zone que si les aiguilles sont bien positionnées. Si une seule de ces zone est occupée on connait le train (il faut vérifier que c'est possible avec son sens, et sa vitesse), sinon il y a ambiguïté on a deux trains candidats et il faut jouer sur le sens des trains, leur vitesse (arrêt) , le sens des zones, l'état des itinéraires ou des autorisations, ...

On peut très bien ne pas trouver quel est le train (aucune des deux zones voisines occupées ou trains des zones voisines ne convenant pas), cela arrive normalement quand on pose un nouvel engin moteur sur le réseau, le gestionnaire signale alors une anomalie et il faut un dialogue pour le renseigner.

Pierre
Titre: Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 05, 2024, 11:24:06 am
Autre question dans le même registre, comment déterminez-vous qu’un convoi à totalement quitté un canton-zone ?
Cela me conduit à demander à Pierre "quand le gestionnaire sait il qu’il n’y a pas de train qui chevauche ?"
Bonjour

On fait habituellement une détection de présence sur une zone par consommation de courant. Les engins moteurs consomment du courant (mais problème avec les engins moteurs à l'arrêt en analogique), les véhicules éclairés ou les fourgons (avec les feux arrières) aussi. Les autres véhicules non, Denis nous a indiqué ci-dessus que l'on peut rendre détectables des véhicules avec une petite résistance sur les essieux. Il existe un autre système équivalent le graphitage, il s'agit mettre une sorte de verni sur les bagues isolantes des essieux, ce verni contient du graphite qui conduit un peu le courant.

Idéalement tous les essieux ne prenant pas le courant devraient êtres traités (resistance ou graphite). Pratiquement si on a beaucoup de véhicules c'est un peu fastidieux. Pour palier cela on peut transformer un peu le gestionnaire, à chaque train est associé une liste de zones, quand le train occupe une nouvelle zone elle est ajoutée en tête de liste, quand le train libère une zone si c'est la dernière de la liste on procède à la libération normale de la zone sinon ou "oublie" cette libération (on ne fait rien).
La taille de cette liste peut être bornée en fonction de la topologie du réseau. Mais attention aux ruptures d'attelages qui peuvent faire exploser la taille, des tests et des messages du gestionnaire sont les bienvenus.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 11:24:45 am
Bonjour

Comme je l'indiquais précédemment tu as aussi le cas ou le convoi et à cheval entre 2 cantons mais avec entre ces 2 éléments principaux une "occupation" d'une zone ( ou plusieurs)  (cas des aiguillages).

Si il y a un élément consommateur sur le segment en question pas de sujet il y a association et application des règles de détection.
Dans le cas contraire je ne vois que 2 solutions
La pré réservation d itinéraire qui n est "détruite" que lors de la libration du canton le plus haut de la liste (ici N+1) ou changement d itinéraire ( par forçage)
ex:  N+1 -- ZONE AIGUILLAGEA -- ZONE AIGUILLAGEB -- N -- N-1
Une comparaison parallèle avec les tailles des convois et celle des cantons et de leur déplacement.

Pour illustration la système Pégase réalisait une pré allocation en cas de succession de zone(s) sans arrêt (zone d aiguillage) et avec arrêt(canton) initialement "enjambement" sur 4 segments contigus.

Ce mécanisme est aussi à la base d autres produits ou de trains réel par verrouillage des itinéraires notamment. Je pense entre autre à RRTC


Laurent
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 03:05:03 pm
@BobynCo

Christophe, je crois me souvenir que dans ton projet de satellites autonomes l'identification est portée par RAILCOM qui une fois établie ( l Identification) va générer les instructions de freinage pour l'engin moteur concerné.

L indentification au démarrage du système en conception peut  s'appuyer sur un mécanisme analogue (AUTO ENROLLING) ( mais il manquera des info sur par exemple le type de convoi, sa longueur…) qui influent sur le bloc, à défaut on fixera a la longueur maxi permise comme taille de convoi sur le réseau.( par ex 3m20)

Je crois qu'il y a une restriction "forte" pour le cas des UM.
En effet en mode "CONSIST MODE" (UM) en principe l'émission RAILCOM du channel1 est désactivée et on se reporte alors à l émission de l adresse active du "couplage" sur le channel2 si la configuration est faite pour cela.
Dans le cas contraire on va avoir deux émissions de la même info ( une par chaque engin moteur) ( avec un risque de parasitage mutuel)( il est peu probable que chacun soit synchro avec son voisin!) soit il faut filtrer pour que par exemple seul l'engin de tête émette et sur le canal 2 dans ce cas. ( je pense mon interprétation conforme)

Chose inédite je n'ai jamais vu de système ayant plusieurs véhicules émetteur en RAILCOM sur une même section. ( plus par restriction que par non réalisation?) Mais peut être y a t il une magie qui le permettrait...

Laurent
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 05, 2024, 03:11:46 pm
Bonjour

Je connais bien le train français et je cherche toujours à rester très proche des techniques utilisée par celui-ci. Je crois que l'on est d'accord sur le fait que le gestionnaire doit assurer la sécurité. La sécurité des vrais trains est assurée par beaucoup de règlements et par la signalisation. Ce qui nous réunit ici c'est plus la signalisation et tout ce qu'il y a derrière. La signalisation est gérée par des postes d'aiguillage et des dispositifs de cantonnement.

Le cantonnement n'assure que l'espacement des trains (anti rattrapage) avec signalisation (BAL,BAPR,BMU, …) ou pas (cantonnement téléphonique, ). Les postes d'aiguillages utilisent des enclenchements (mécaniques ou électriques) pour assurer la sécurité : prise en écharpe, aiguilles mal positionnées, tête à tête, … La signalisation du cantonnement et des postes d'aiguillages peut être commune (BAL,BAPR, …) ou séparée (BMU, …) ce qui complique un peu les choses.

Le cantonnement et les postes d'aiguillages peuvent utiliser des zones pour leurs fonctionnement.

Une zone est un ensemble contigu de voies et d'appareils de voie (aiguille, TJD, TJS, croisement), sur lequel il y a une détection de présence d'un ou plusieurs essieux, par un dispositif électrique ou électronique.

Ces zones sont essentielles dans les cantonnements et les postes d'aiguillages modernes.

Les contraintes sur les zones dépendent un peu de leur utilisation :

- pour les zones dans les bifurcations ou les entrées/sorties de gare on fait en sorte qu'il ne puisse avoir qu'un seul train en circulation dessus, ce qui exclu la présence de plusieurs TJD,TJS ou croisement dans ces zone.

- pour certaines zones, comme celles des voies à quai, on peut avoir plusieurs trains dessus, pour créer des unités multiples ou mettre des motrices en tête. Généralement ces zones n'ont pas ou peu d'appareils de voie.

- pour certaines zones constituant des cantons le cantonnement "permissif" permet à un train d'entrer sur une zone occupé. Généralement ces zones de pleine voie n'ont pas ou peu d'appareils de voie.

Un canton est un ensemble contigu de voies et d'appareils de voie en général plutôt long (quelques kms). L'entrée dans un canton est habituellement protégée par un sémaphore ou un signal pouvant présenter le sémaphore (carré), situé juste avant le début du canton. Si le canton est à double sens il y a un signal des deux côtés. Certains cantonnements utilisent une zone ou plusieurs zones pour assurer le fonctionnement du cantonnement.

Le cantonnement se fait surtout en pleine voie, mais certaines bifurcations et certaines entrées/sorties de gare et leurs voies à quai assurent aussi la continuité du cantonnement. Le sémaphore est alors affiché sur les carrés et les zones servent simultanément au cantonnement et au postes d'aiguillages.

En résumé, on parle trop de canton et pas assez de zone. Une zone peut comporter une TJD ou une TJS ou un croisement ou pas et/ou d'autres aiguilles (ces aiguilles étant disposées de façon à respecter les contraintes précédentes). Il peut y avoir du cantonnement dans une gare.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 05, 2024, 04:06:03 pm
Moi je suis d’accord avec Pierre : il faut s’occuper des zones en premier,  chacune d’elle ayant un capteur de présence qui permet de détecter l’entrée d’une loco en tire (en pousse il faut faire consommer le wagon de tête).
 Chaque zone doit connaître les zones adjacentes pour permettre la propagation du no de train donc le suivi des trains en recopiant son numéro dès le début de la détection. C’est le mécanisme de base à réaliser avant tout.

Lors d'une détection en entrée de zone, un train est toujours à cheval sur 2 zones. Je marque ainsi la tête de train dans la zone nouvelle,t détectée et la queue du trains dans la zone précédente.
Le train contient les zones occupées et lorsque la tête entre dans une nouvelle zone, en général, la queue libère sa zone. Lorsque la zone de queue est une aiguille, la zone avant aiguille est aussi occupée par la queue.
On pourrait aussi connaitre la longueur du train et celle des zones pour marquer les zones effectivement occupées.

La zone peut faire partie d’un canton qui va définir les signaux à fermer juste après la détection en tenant compte des zones incluses dans le canton. La présence d'aiguille(s) complique un peu les règles de marquage des zones.

La libération des zones dépend donc de la composition du canton, donc des signaux concernés

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 05, 2024, 06:17:07 pm
En ce qui concerne l'initialisation du gestionnaire, la position des trains au départ, j'utilise une méthode assez infaillible et amusante au démarrage du réseau :

Comme la centrale peut piloter 12 trains dans mon réseau, tous les trains sont arrêtés et j'en bouge un et un seul uniquement jusqu'à ce que les détections de présence le détectent. Cela se produit à un changement de zone. J'en déduit la position et le sens du train. Puis je le recule à la même vitesse pendant la même durée pour qu'il retrouve sa place initiale.

Ensuite je recommence pour un autre train et ainsi de suite.

S'il ne se passe rien, soit le train n'est pas présent sur le réseau, soit il y a un mauvais contact.
Le risque est que le train percute un autre situé sur la zone adjacente mais ce cas est impossible si l'espacement des trains a été conservé à la session précédente.

J'ai modifié mes détecteurs sur mon réseau pour qu'il ne soient sensibles que lorsque les moteurs tournent. Ainsi il n'est plus nécessaire de rouler jusqu'à la zone suivante, la détection est immédiatement faite et cela ne dure qu'une fraction de seconde.
L'inconvénient est que je gestionnaire ne voit plus les trains à l'arrêt.

En cas d'erreurs dans le gestionnaire, un mode "panique" peut stopper tous les trains et relancer la détection de position.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 08:49:47 pm
Bonsoir

La méthode d indentification via RAILCOM est rapide et efficace mais elle n'est que partielle.

En effet il n'y a que l'engin moteur sans autre forme d'info de donner.

Si dans le gestionnaire un fait un mapping avec une référence de composition connue et que celle ci n a pas changé alors on a un convoi dont on connait les caractéristiques.
Sinon l'info est erronée: ex la loco est "haut le pieds" et donc il faut modifier/actualiser le mapping pour que les caractéristiques jouent à plein ensuite et soient exploitées.

Ltr
Titre: Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 05, 2024, 09:13:06 pm
Bonjour à tous,

Le train miniature est sensé représenter le train réel.

Mais dans le train réel, des ingénieurs ont analysé le réseau pendant longtemps, en implantant les signaux en respectant des règles strictes, en prenant en compte de nombreux paramètres.
Dans les trains, il y a un conducteur qui a été formé, à qui on donne toutes les caractéristiques de son train, qui connait à l'avance les passages dangereux.

Et nous, on voudrait faire pareil avec 2 bouts de ficelle !  :o

On ne peut pas travailler correctement sans connaître la longueur des zones (et donc des cantons), sans connaître la longueur des trains et à suivre cette longueur.
Dans mon système, comme je pose des éléments de réseau (les pavés), je connais exactement leur longueur à l'écran et comme, maintenant, je dessine à l'échelle, je connais la longueur réelle des zones (à environ 1 mm près), y compris avec des rails flexibles.

Par ailleurs, vous vous en souvenez peut-être, dans "Decodunino", je décris les locos, les wagons, … et donc, leur longueur. Là, c'est dans l'autre sens, la longueur réelle donne la longueur à l'écran puisque c'est à l'échelle.
Aussi, le réseau est constellé de "points" équidistants (merci Pierre pour cette idée géniale) et, donc, à tout moment, je connais la longueur des trains (en points), je sais à quelle distance (en points) je suis du signal qui me commande l'arrêt. Avouez que c'est pratique.

Je sais qu'un train a perdu un wagon car sa longueur (la distance entre le point avant et le point arrière) est plus grande que la longueur initiale du train.
Evidemment, on ne perd pas de wagons sur un train virtuel ! ;D

Parce que, finalement, ce que je fais sur mes trains virtuels, on peut évidemment le faire sur les trains réels. Je m'explique :

-> Vous entrez dans une table la longueur de toutes les zones
-> Vous mesurez vos locos et wagons dans une autre table et vous indiquez lesquels vous choisissez lorsque vous posez un train sur le réseau.
-> Vous connaissez la position du train dans un canton car vous connaissez sa vitesse (Voir la vidéo de Renaud Yver et son réseau Luzy avec RRTC pour faire klaxonner un train juste avant un passage à niveau sans mettre d'ILS) et sur quelle zone il est.

Avec la position de l'avant du train et sa longueur, si un wagon reste planté, au bout d'un (court) moment, vous vous rendrez compte que le canton C-1 ne devrait pas être occupé : vous avez perdu un wagon.

J'ai donc un objet "train" qui enregistre tout ça. En particulier la liste des zones occupées, les longueurs, …
Remarque :
Il faut sauvegarder la composition des trains en cas de plantage complet, ainsi que la longueur des zones.

Identification :

Dans ma solution, un train est OBLIGATOIREMENT sur un "itinéraire" qui peut être réduit à un seul canton quand il est arrivé au bout de l'itinéraire.
Donc, quand on pose un train, c'est le seul qui n'est pas sur un itinéraire. Cela l'identifie.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 05, 2024, 09:55:42 pm
Tout ca c’est très intéressant et c’est bon de le savoir : ce sujet est une mine d’information.


Mais j’aime bien des choses faisables : par exemple pour connaître la longueur d’un train, il suffit de le faire traverser une zone de longueur connue et de connaître sa vitesse.

C’est ce que je fais sur une zone de parade. La distance est connue et le temps de traversée du train entre les 2 détecteurs de présence donne la vitesse. Ensuite le temps de présence dans la zone donne la longueur du train !

Ça me sert aussi à étalonner les vitesses des trains.

Simple et pratique

A chaque passage des trains le processus recommence et la perte d’un wagon se détecte 🚂🚉

Après. Il vaut mieux de bons attelages et éviter de perdre des wagons. C’est la qu’on s’aperçoit de la qualité des petits trains réels. En N ce n’est pas si simple !

Denis, combien de locos et de wagons réels as-tu ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 05, 2024, 10:17:16 pm
8 locos et 40 voitures et 8 wagons
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 10:19:50 pm
Bonsoir Denis

Limpide.

L'objet" itinéraire est donc un "LOT CONSOLIDE " de toutes les zones d'une extrémité (entrée) d un canton à un autre (sortie)
Tout ce qui est "entre" ces points distincts doit être associé par logique à cette réservation et rien ne peut y être sécant (sécurité des itinéraires)

En BAL ( Bloc Automatique Lumineux) Les combos de signaux ne sont que 3 états principaux enrichi de contextes spécifiques:
ROUGE = ARRET
JAUNE = RALENTIR
VERT = VOIE LIBRE

On a 3 types de "ROUGE" : carré, sémaphore et carre violet
Au niveau "JAUNE" on a:  le rouge clignotant ( sous réserve de franchissement possible, sinon le remettre au dessus)  Avertissement, Ralentissement 30, Ralentissement 60, Rappel de ralentissement30, rappel de ralentissement 60 et en combo je jaune en sus
On peut y associer le vert clignotant par extension.

en "VERT" Enfin el voie libre et ou le blanc ( départ en Manœuvre) et ou le blanc clignotant ( départ en manœuvre réduite)

Les carrés( rouge et violet) assurent des protections.
Les autres feux hors manœuvre assurent le cantonnement

Quel facteur fait que le "JAUNE" est l'un ou l'autre?
La construction d un arbre de conditions qui conduisent par combinaison(s) à préciser le contexte pour l'affichage de l un des cas si applicable à un cas JAUNE.= principalement des positions d aiguilles, et ou de bloc.

Idem pour différencier vert et blanc.

On peut choisir de faire influer ou pas les vitesses aux états ( en étant K proportionnel) ce n'est pas obligatoire des lors que le rouge est bien un contexte d arrêt absolu;, que le "JAUNE" produit une vitesse inferieure ou égale à la vitesse nominale, le "fine tunning" des vitesses  intermédiaires est affaire de choix.


Pour résumer on a donc besoin de 3 blocs fonctionnelles pour piloter:
un bloc pour les segments de voie et leur caractéristiques (gestion de l infra)
un bloc pour la gestion des matériels et leur association( gestion convoi)
un "hyperbloc" qui établit un mapping entre les deux premiers, interagit et assure les fonctions désirées.

Si on pose une loco inconnue en base alors on actualise des éléments ( a minima) . ( on peut au mieux juste récupérer son adresse DCC via RAILCOM en automatique)
On associe un "convoi" dont on précise les caractéristiques ( longueur, …)
Si le convoi a évolué ou changé( loco sur un autre convoi) on actualise ses caractéristiques. Par défaut on applique une règle de sécurité qui force aux conditions les plus défavorables l'attribution des caractéristiques "max" au nouveau convoi ( ex longueur la plus longue admise sur le réseau avec une marge de sécurité.)

On voit donc que le mode 100/100 autonome exclusif va être contraint de disposer à minima en sus d'une IHM pour traiter les caractéristiques sur les ambitions indiquées.
On passe alors sur une réalisation plus ambitieuse avec des parties bien identifiées.

Laurent


Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 10:25:54 pm


Mais j’aime bien des choses faisables : par exemple pour connaître la longueur d’un train, il suffit de le faire traverser une zone de longueur connue et de connaître sa vitesse.

C’est ce que je fais sur une zone de parade. La distance est connue et le temps de traversée du train entre les 2 détecteurs de présence donne la vitesse. Ensuite le temps de présence dans la zone donne la longueur du train !

Ça me sert aussi à étalonner les vitesses des trains.


Super méthode en effet mais je pense que tu ne peux pas prendre en compte dans ce cas un train qui est plus long que ta section de mesure. Donc cette zone est au plus court la longueur max d un convoi.

On est OK la dessus?

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 05, 2024, 10:37:22 pm
@ Dominique

Ta méthode marche, bien sûr, mais il faut repasser par la zone de test pour identifier un problème.
Avec ma méthode (plus complexe à gérer, bien sûr) on le sait très rapidement après qu'on a perdu un wagon.
Prenons un exemple :
Soit 3 cantons de 10 unités de long C1, C2 et C3 et un train de 8 unités de long
Dès que le train a parcouru 8 unités du canton 2, on ne devrait plus rien avoir sur le canton 1. S'il reste une présence sur C1, c'est un wagon perdu.
Une autre méthode, moins précise :
Si le train est présent sur C1 et C2 et C3, c'est qu'on a perdu quelque chose.

Denis

Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 05, 2024, 11:01:03 pm


Mais j’aime bien des choses faisables : par exemple pour connaître la longueur d’un train, il suffit de le faire traverser une zone de longueur connue et de connaître sa vitesse.

C’est ce que je fais sur une zone de parade. La distance est connue et le temps de traversée du train entre les 2 détecteurs de présence donne la vitesse. Ensuite le temps de présence dans la zone donne la longueur du train !

Ça me sert aussi à étalonner les vitesses des trains.


Super méthode en effet mais je pense que tu ne peux pas prendre en compte dans ce cas un train qui est plus long que ta section de mesure. Donc cette zone est au plus court la longueur max d un convoi.

On est OK la dessus?

Ltr

Tout à fait d’accord. On fait un réseau dans le but que ça marche et on accepte un peu de contraintes. Je ne compose pas de trains avec 12 voitures, d’ailleurs je n’en ai pas tant que ça !
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 05, 2024, 11:17:55 pm
@ Dominique

Ta méthode marche, bien sûr, mais il faut repasser par la zone de test pour identifier un problème.
Avec ma méthode (plus complexe à gérer, bien sûr) on le sait très rapidement après qu'on a perdu un wagon.
Prenons un exemple :
Soit 3 cantons de 10 unités de long C1, C2 et C3 et un train de 8 unités de long
Dès que le train a parcouru 8 unités du canton 2, on ne devrait plus rien avoir sur le canton 1. S'il reste une présence sur C1, c'est un wagon perdu.
Une autre méthode, moins précise :
Si le train est présent sur C1 et C2 et C3, c'est qu'on a perdu quelque chose.

Denis
Je suis aussi d’accord avec toi Denis. J
Je ne recherche pas la perfection maximale mais aussi le plaisir de voir tourner mes trains.
Parfois je dois crapahuter pour récupérer un wagon renversé dans un tunnel inaccessible, mais je m’arrange ensuite pour éviter ça.

On devrait d’abord converger vers un gestionnaire pratique, faisable, compréhensible et fonctionnel dans un grand nombre de cas. Puis le perfectionner ensuite.

Plutôt que se limiter à l’impossible !

Plus concrètement, si le bus Can transmet des messages de détection de présence (donc avec un numéro de zone tout simplement), que doit faire le gestionnaire:
- dans le cas d’un gestionnaire centralisé ?
- dans le cas d’un gestionnaire de canton autonome?

Vous avez 1 heure.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 05, 2024, 11:57:00 pm
@ Dominique

Moi je sais, moi je sais:

Tout bien faire comme il faut!

Fastoche hein ;)! 8)


@Denis

Qui d un convoi qui se "morcèlerait"( rupture d attelage)  il serait pour partie sur des zones non contiguës ce qui génère une "anomalie"/"alerting?
C est bien la libération de la dernière "zone active" ( avec présence détectée)  ( par rapport à la tête et du nombre d unités occupées par un convoi)  qui est à suivre pour actualiser l itinéraire, ce qui est entre les deux dans ce cas reste simplement à surveiller ( sinon morceaux multiples!)

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 06, 2024, 08:38:03 am
@Laurent,

En effet on traite la tête du train avec l’occupation et la queue du train avec la libération.
Puis on compare.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 06, 2024, 09:26:23 am
@BobynCo

Christophe, je crois me souvenir que dans ton projet de satellites autonomes l'identification est portée par RAILCOM qui une fois établie ( l Identification) va générer les instructions de freinage pour l'engin moteur concerné.

L indentification au démarrage du système en conception peut  s'appuyer sur un mécanisme analogue (AUTO ENROLLING) ( mais il manquera des info sur par exemple le type de convoi, sa longueur…) qui influent sur le bloc, à défaut on fixera a la longueur maxi permise comme taille de convoi sur le réseau.( par ex 3m20)

Je crois qu'il y a une restriction "forte" pour le cas des UM.
En effet en mode "CONSIST MODE" (UM) en principe l'émission RAILCOM du channel1 est désactivée et on se reporte alors à l émission de l adresse active du "couplage" sur le channel2 si la configuration est faite pour cela.
Dans le cas contraire on va avoir deux émissions de la même info ( une par chaque engin moteur) ( avec un risque de parasitage mutuel)( il est peu probable que chacun soit synchro avec son voisin!) soit il faut filtrer pour que par exemple seul l'engin de tête émette et sur le canal 2 dans ce cas. ( je pense mon interprétation conforme)

Chose inédite je n'ai jamais vu de système ayant plusieurs véhicules émetteur en RAILCOM sur une même section. ( plus par restriction que par non réalisation?) Mais peut être y a t il une magie qui le permettrait...

Laurent

Bonjour Laurent,

En effet, c'est Railcom qui est utilisé pour la détection sur les satellites autonomes, mais il s'agit dans ce sujet de rechercher des solutions "plus universelle".

Railcom est très intéressant et permet de contourner pas mal de problème pour lesquels on se casse la tête ici mais !!! Mais tout le monde n'est pas équipé en Railcom, et comme tu le soulèves il y a peut être des problèmes non vus encore comme les UM.

Les satellites autonomes sont bien adaptés pour des les petits et moyens réseaux et les dioramas ce qui représente déjà bon nombres de besoins. Mais sur des réseaux complexes comme présente par exemple Denis avec plus de 2 ou 3 aiguilles en successions, des croisements, des TDJ et je ne sais quoi encore ou des UM pourquoi pas comme comme tu le dis il ne seront pas adaptés.

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 06, 2024, 10:16:59 am
Bonjour

@ Laurent

Je ne suis pas trop d'accord avec ton "analyse" des feux des signaux. Si on exclut pour simplifier les feux clignotants, il y a trois sortes de feux : les feux de block, les feux de protection et les feux de limitation de vitesse.

Il y a trois feux de block : voie libre (Vl), avertissement (A) et sémaphore (S).
Pour les feux de protection il y a deux sous-sortes, les feux de manoeuvre carré violet  (Cv) et manoeuvre (M), et les "normaux" carré (C), avertissement (A) et voie libre (Vl).
Les feux de ralentissement sont le ralentissement (R) et le rappel de ralentissement (RR).

En pratique il y a souvent un mélange des trois sortes de feux, exemples un sémaphore avec un feu ralentissement, un carré avec un feu sémaphore, un carré avec un feu manoeuvre, un carré avec un feu rappel de ralentissement, ...

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 06, 2024, 10:23:50 am
Voici comment je raisonne pour mes trains virtuels.
Mais c'est en l'appliquant aux trains réels que ça va devenir intéressant.

(https://www.locoduino.org/local/cache-vignettes/L150xH39/20240106_094237-3fc41-c8e6f.jpg?1704533400)

Sur l'image, on voit 4 cantons à une zone qui se suivent. On est dans un cas hyper simple.

Dans l'étape 1 (1ère ligne) le C1 a 70 points de longueur, C2 a 40 points, C3 a 90 points et C4 a 80 points.
Le train 1 est sur C4. Il est en automatique. Son itinéraire fait 80 points et comme il est arrivé à la fin de son itinéraire, il y a le C (carré). Il est à 30 points du C et finit son arrêt.
Le train 2 est sur C1. C'est moi qui le conduis. Mon itinéraire fait 280 points car je souhaite aussi m'arrêter en gare en C4.
Mon prochain signal est à 20 points et c'est VL que j'affiche sur ma manette.

Dans l'étape 2 (2ème ligne), le train 1 est arrêté à 10 points du C.
Le train 2 a toujours un itinéraire de 280 points, mais mon prochain signal est à 30 points et c'est A (Avertissement) que j'affiche sur ma manette.
Mais ce que je sais, c'est que je suis à 130 points du S (sémaphore) quand j'entre dans le C2. Je vais donc devoir m'arrêter en 130 points.
Pour l'instant, j'ai commencé à freiner et il me reste 120 points pour m'arrêter.

Ce qui me parait intéressant dans cette démarche, c'est que je ne raisonne plus en cantons, mais en longueur à parcourir jusqu'au prochain signal qui va m'obliger à m'arrêter.
Ça prend donc en compte la longueur des cantons, la distance de freinage, de façon tout à fait automatique sur un itinéraire sur lequel je sais tout ce qui va m'arriver.

La signalisation est mise à jour indépendamment des itinéraires, en fonction des positions des aiguilles et des occupations.
Puis, une fois la signalisation mise à jour globalement, on l'intègre dans les itinéraires et ça agit sur les trains.

Dernière remarque :

Mes trains virtuels n'ont pas le DCC, évidemment.
Donc, c'est dans le programme que je calcule le ralentissement, via une courbe de ralentissement (semblable à une décharge de condensateur) que je mets à jour suivant 2 paramètres : la vitesse initiale et la durée de ralentissement (= le nombre de points). Je suis alors CERTAIN que le train s'arrêtera au bon endroit puisque la courbe tient compte de la longueur d'arrêt.
Si on fait confiance au DCC pour gérer le freinage, on prend un risque de ne pas arrêter au bon endroit.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 06, 2024, 10:49:55 am

Bon et si on se mettait au travail, commencer à écrire du programme.

Faut choisir un langage, personnellement le préconiserais d'en utiliser deux C++ et Java (Processing). Les deux langages sont très proches, des grandes parties de la syntaxe son strictement les mêmes, il y a un article sur le site qui explique les petites différences entre les deux. Le programme en C++ est plutôt destiné aux micro-controleurs et le programme en Java plutôt destiné au ordinateurs ou micro-ordinateurs (genre Raspberry).

Celui qui écrit un bout de programme le fait dans son langage préféré et après mise au point on le transcrit facilement dans l'autre langage.

Bien évidemment il faut utiliser la programmation objet. Donc un bout de programme est une classe (un objet).

Personnellement je n'écrirais rien, je ne veux pas orienter vos choix. Mais je peux vous aider pour la programmation objet. Par ailleurs j'ai déjà écrit pour mon propre réseau un très gros gestionnaire.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 06, 2024, 12:07:00 pm
Pour compléter mon message précédent, un bout de code du traitement des messages CAN reçus par le gestionnaire dans le cas des occupations et libération par un détecteurs de présence.

Il y a effectivement des objets zone, et des objets train qu'il faut adresser à travers des tables d'objets renseignées juste après la création des objets. Il faut aussi des objets canton portant la signalisation.
Le structure du message Can sera a adapter à celle qui sera retenue. Ici c'est l'exemple de mon réseau.

// reception d'un message CAN

data = frame.data.bytes[0];  // bit 6 occupation + no de zone
occupation = bitRead(data, 6);    // masque occupation 0x40 = bit 6 : True=occupé, False=libre
nzc = data & 0x3F;           // No de ZONE detectée
zone* zc;                    // = zone ou a lieu la detection
zc = tableZones[nzc];
zone* zp;  // = zone precedente à trouver
train* tt;

switch (frame.id) {  // type de message

  case 0x10:  // OCCUPATION ou LIBERATION de zone zc venant des détecteurs

    if (occupation) {
      zc->occuper();
      zp = zc->provenance();  // zone précédente
      if (zp != NULL) {
        tt = zp->train;
        zc->train = tt;  // marquage du train dans la zone zc de détection
        // ensuite il faut mettre à jour les signaux, celui de zp si c'est une limite de canton
      }
    } else {  // liberation de la zone zc
      zc->liberer();
      zc->train = NULL;
      // et mise a jour ds signaux
    }
    break;

Evidemment c'est le cas le plus simple et la plus grande partie du code sert à traiter les erreurs !

Les détections de présence, d'identité (RFID ou Railcom) et d'arrêt ont des traitement particuliers qui leur sont associés grâce aux identifiants différents des messages Can.
De plus, les changement de régime des locos sous l'action manuelle du conducteur donnent lieu à des messages Can pour enregistrer la consigne voulue par le conducteur dans les objets train, afin qu'il reprenne la vitesse demandée lorsque les contraintes ont disparu.

Dans une autre tâche du processeur, se fait la régulation des trains : Pour chaque train le signal présent à la fin du canton détermine un ralentissement (30, 60..) avec arrêt en fin de zone si c'est un carré ou sémaphore. Le ralentissement se fait par palier de 30 ou 15 km/h (60, puis 30, puis 15 pour un arrêt), j'ai trouvé que ça suffit et qu'il n'est pas nécessaire d'inonder le bus Can de commandes intermédiaires. Par contre c'est la centrale sui gère les vitesses intermédiaires un peu comme le slowmotion servo.
Dans cette tâche, les trains redémarrent quand le signal le libère.

Au sujet des graphiques (représentation de type TCO, faite par le même processeur du DUE) , pour chaque zone il y a une fonction d'affichage, par exemple :
void GA3::tracer(int c) {
  if (etat) {//droit
    myGLCD.setColor(K_ferme);
    geo.drawArc(196, 336, 38, 315, 360, 5); //a3
    myGLCD.setColor(c);
    drawbarreH(196, 298, -27); // z28
  }
  else {     // devié
    myGLCD.setColor(K_ferme);
    drawbarreH(196, 298, -27); // z28
    myGLCD.setColor(c);
    geo.drawArc(196, 336, 38, 315, 360, 5); //a3
  }
}
GAiguille* Ga3 = new GA3( 3,44 ); // a3  est dans la zone z44

Le numéro de zone est le même que celui de sa représentation graphique

J'ajouterai dès que possible une petite vidéo montrant ce qui se passe sur l'écran graphique du gestionnaire.

Plus de détails ici :
https://forum.locoduino.org/index.php?topic=290.120 (https://forum.locoduino.org/index.php?topic=290.120)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 07, 2024, 11:45:24 am
Bonjour

@Denis

Tu peux confier au DCC le freinage. Il te faudra toutefois étalonner ton matériel pour cela.

En effet tu dois garder une vitesse mini avant l'arrêt, cette valeur est propre à chaque matériel avec sa vitesse mini et éventuellement les coef de passage entre les seuils hauts et bas ( décélération) et inversement ( accélération)

Pour confirmer la bonne exécution une détection devant la fin du canton confirme bien l'arrivée de la tête de train dans la zone d'arrêt devant le signal. Si cet éventement ne se produit pas alors le train s'est arrêté "trop tôt". A défaut de cette zone de détection avant le signal on peut avoir quelques surprises. Mais on peut s'en passer des lors que pour chaque entrée dans une nouvelle zone il y a re synchro distance/vitesse/position. ( et donc re calculs)

Tu peux aussi penser à utiliser l'ABC LENZ cote HARD pour générer ce freinage mais il y aura moins de progressivité dans le mouvement.

Ltr
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: dmskd le janvier 07, 2024, 12:42:32 pm
Bonjour,

Une ZONE correspond à une détection de présence. Ce peut être un rail avec des coupures, une aiguille seule, plusieurs aiguilles.

Comment fait-on pour détecter une présence sur une aiguille ?
Faut-il isoler l'aiguille complètement ?
Faut-il un ou deux capteurs ?
...?
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 07, 2024, 01:07:22 pm
Comment fait-on pour détecter une présence sur une aiguille ?
Faut-il isoler l'aiguille complètement ?
Faut-il un ou deux capteurs ?
...?
Oui,
Moi je le relie à un petit coupon de voie qui supporte l’éclisse isolante car l’aiguillage est fragile et il est souvent difficile de mettre une éclisse isolante. C’est plus facile aussi de souder les fils d’alim sur ce bout de voie.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 07, 2024, 03:04:41 pm
Bonjour

Je vais essayer d expliquer le traitement des aiguillages, TJD et croisements.
On en déduira les attributions à faire avec.

Partons d un cas simple: une AIGUILLE A prise en pointe depuis un CANTON N-1 qui va de façon directe sur le CANTON N et en itinéraire dévié sur N bis

L'AIGUILLE A appartient géographiquement à une ZAP ( Zone d appareil(s)/zone d aiguille(s))
 
En mode directe on a
 C N-1 <>ZAP<> C N

En mode dévié on a
 C N-1 <>ZAP <> C N bis

Dans ce cas simple on peut ajouter au canton N l'alimentation et la détection de la ZAP  car tout mouvement de N-1 vers ou depuis ou N ou N Bis transite exclusivement par la ZAP
On devra toutefois arrêter nos trains avant l AIGUILLE A dans le sens N-1 vers N ou N bis.
Attribuer une détection sur une section aussi courte qu'une seule aiguille n'est pas optimum ( en terme de conso de ressources)

Passons au cas ou toujours sur ce modèle nous avons non plus une mais 2 ou plusieurs aiguilles qui adressent les cantons N Ter N Quatro ...

La longueur de la ZAP a augmenté. Tout mouvement de N-1 vers un canton N-x et réciproquement transite par la ZAP.

Il n y a pas de trajet sécant possible traversant la ZAP puis que nous avons une succession simple d aiguillese. Si une aiguille n est pas dans une position qui desserre le canton N-x alors la sécurité verrouille les mouvements.

On peut traiter le cas de deux façons:
Soit comme précédemment ( association à la dernière zone du canton précèdent)
Soit si la longueur est étalée ajouter une détection spécifique.

Cette configuration devient utile et nécessaire dans le cas d itinéraire(s) sécant sur la ZAP ou  d'entrées/sorties multiples
Ex aiguilles montées pointe contre pointe
On vient alors soit de
N-1 ou N-1bis <> ZAP<>N ou N bis ou Nx

La ZAP devient alors une section "autonome". Elle est logiquement la continuité des directions qu'elle relie mais électriquement elle est autonome ( sauf à la basculer d une section vers un autre ce qui complexifie le câblage du fait des combinaisons possibles!)
Cela devient un "cauchemar" si on a un grill d'entrée/sortie de gare qui est complexe et offre de multiples combinaisons

En effet en cas de GRILL il faut en fait pour fluidifier le trafic "paralléliser les ZAP" et les relier entre elles en cas d itinéraire sécant. ( Bretelles, TJD, TJS...)

On voit très vite qu'une ZAP et un objet LOGIQUE et PHYSIQUE
Rm: on ne cantonne pas sur une ZAP ( pas d arrêt commande par le BLOC)

En principe on n'y stationne pas non plus ( sauf si le canton qui reçoit le train est plus court que le train à recevoir)( doit il dans ce cas le recevoir?)  on ne fait qu'y transiter . Pourquoi cette précision? et bien par ce que si notre convoi a une détection en tête et une en queue uniquement alors il est possible que la ZAP ne porte pas de détection ... on pourrait interpréter la ZAP comme libre... ce qui est un erreur de diagnostic. ( le train est a cheval entre N-1 et N et au dessus de la ZAP!

On voit alors que l'objet ITINERAIRE de réservation de ressource et ses conditions de libération sont très importantes.

Le système proposé par Denis couvre ce cas de figure et nous exempte d anomalie à ce niveau.

Le cas des TJD TJS et bretelle est donc la combinaison optimale de découpage des ZAP pour assurer un trafic fluide selon les combinaisons d itinéraires.

Laurent





Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 07, 2024, 04:18:58 pm
Bonjour

Voila ci-dessous un exemple d'une zone complexe tout à fait possible pour un gestionnaire. Elle comporte une TJD et trois aiguilles, c'est une partie d'une image d'un ancien TCO.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 07, 2024, 04:25:43 pm
Je m'inquiete  un peu ! >:(: qui va coder un gestionnaire concret, utilisable dans la plupart des réseaux de nos amis modélistes, si on cherche d'emblée tous les cas difficiles que la plupart d'entre nous n'envisage pas de construire.

Va-t-on faire fuir nos lecteurs qui espèrent trouver un gestionnaire centralisé ou non mais surtout accessible au plus grand nombre  ?  :o

Au contraire, il faudrait plutôt réaliser un noyau simple de gestionnaire, compréhensible, qui puisse être étendu et complexifié par la suite.
Donc procéder par étape. Pierre vient de prouver  :D

Ne serait-il pas raisonnable de partir d'un exemple concret comme un Locoduinodrome (peut-être un peu plus large avec 2 voies en parallèle et en sens contraire) ?

On verrait mieux dès le départ les différents propositions de définition, d'organisation, de spécification et de réalisation avec les pour et les contres.

Je prend l'exemple de mon réseau, le gestionnaire est basé sur les articles de Pierre (un Gestionnaire en C++ pour votre réseau - voir les liens sur la première page).

Tous les objets qui le composent (zones, aiguilles, signaux, itinéraires, ..) sont hérités d'une classe de base qui est personnalisée (réécrite) pour chacun des objets réels afin d'y introduire les propriétés et méthodes réelles qu'elles doivent exposer. La topographie du réseau s'exprime au travers de ces personnalisations des classes.

Le gestionnaire de mon réseau est basé sur le même principe et je n'ai pas particulièrement souffert de ces personnalisations des objets, d'autant qu'il a été trés simple d'écrire des petits programmes de tests pour vérifier les bons enchainements des zones dans les itinéraires en fonction des positions des aiguilles et de tester tous les organes du réseau. De plus, je ne modifie pas mon réseau tous les jours et si c'était le cas, seuls quelques objets sont modifiés/ajoutés/supprimés.

Mais combien en ont fait autant ?

Est-il possible de réitérer un exercice semblable au Locoduinodrome, qui présente des alternatives à la construction de la topographie du réseau pour faire coopérer tous les objets qui le composent ?

Vos propositions seront les points de départ du ou des  projets partagés.


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 07, 2024, 04:50:17 pm
@Dominique

En fait si tu analyses bien un objet ZAP à un instant T 2 éléments clés
 un élément prédécesseur( ZAP ou canton ou zone
 un élément successeur ( zone ou canton ou autre ZAP)

C est la position des aiguilles qui route les combinaisons entée/sortie.

Il faut alors me semble il juste déclarer à quelle zone appartient une aiguille lors de design du reseau.

Pour ce qui est du nouveau LOCODUINODROME je suggere comme tu l indiques
1 double voie
1 boucle de retournement
1 double bretelle
1 croisement( type bif par exemple)
1 aiguille triple ( symétrique ou asymétrique)
1 bretelle  ou tjd
1 voie en impasse
1 évitement ( pourquoi pas faisant la liaison entre 2 boucle et servant de "garage actif")

Ca fait un peu de monde à caser mais la plus grande partie des cas est présente sur un réseau  de circulation

A vos crayon pour assembler le tout.

Et comme dit si bien Dominique vous avez 1 heure!  8)

Ltr


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 07, 2024, 05:09:37 pm
@ Laurent

Le locoduinodrome que tu propose est beaucoup trop compliqué. Le locoduinodrome d'origine est déjà assez compliqué comme ça. L'idée d'un locoduinodrome à double voie de Dominique est séduisante, mais avec une voie d'évitement. Cela fait deux aiguilles et deux TJS (bien lire Traversée Jonction Simple).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 07, 2024, 05:19:12 pm
Je suis d'accord avec Pierre : démarrons simple !

et en HO et Peco, c'est 60 à 70€ !

en N je ne trouve pas grand chose.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 07, 2024, 05:47:51 pm
@ Dominique

Il y a des TJS Peco en N : SL-E380F Crossing, Single Slip

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 07, 2024, 06:38:25 pm
Un tracé dans ce genre là (en mieux) ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 07, 2024, 07:10:17 pm
Je verrai bien quelques chose de ce genre.

Ltr

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 07, 2024, 09:04:07 pm
Un tracé dans ce genre là (en mieux) ?

Ok pour l'exercice mais il faudrait tout de même définir les zones de cantonnement. Je suppose que les deux rails 6001 après les aiguilles 6080 et 6081 et avant le TJS SL80 ne suffisent pas pour cantonner un train.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: msport le janvier 07, 2024, 09:06:56 pm
Bon, voici un réseau qui existe vraiment, il est dans un tiroir sous un lit IKEA.
Aucun cantonnement, il est piloté en manuel.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 08, 2024, 01:57:21 pm
@ Dominique

Je pensais à quelque chose comme cela (image ci-dessous), cela ressemble un peu à une petite gare de double voie.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 02:21:09 pm
@Pierre,

Oui c’est beaucoup mieux, on reste dans l’esprit du premier Locoduinodrome avec une gare entre les aiguilles, une TJS et une aiguille simple de chaque côté.
Cela permet 2 circulations en parallèle avec échange possible.

Ça fait pas mal de signaux et d’itinéraires possibles.
- 3 zones de gare
- 4 zones d’aiguilles
- 2 ou 4 zones de boucle (avec un sémaphore au milieu).

Je propose qu l’on parte sur ce dessin
Je regarde ce que cela fait avec des rails en N.

Maintenant comment modéliser ce tracé ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 08, 2024, 02:48:09 pm
il y a des travaux préparatoires :
- faire le découpage en zones
- choisir des signaux et leurs implantations
- donner des noms à tout

A titre d'exemple le PRS de Méru, structurellement très semblable. Tout est nommé, zones, signaux, voies, aiguilles, origines, destinations, ...

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 08, 2024, 02:58:57 pm
Bonjour

@Dpminique

Ajoute une diagonale pour traiter une boucle de retournement, c est un cas de figure très présent sur de nombreux réseaux et il serait dommage de s'en priver sur ce labo. ( ou pourra toujours ne la traiter que plus tardivement mais elle est déjà dans l équation de départ.)

Laurent
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 08, 2024, 03:06:07 pm
@ Laurent

Les boucles de retournement sont rares dans les réseaux réels. Dans nos réseaux miniature elles sont plus courantes, mais elles posent juste des problèmes électriques, pas spécialement des problèmes de sécurité.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 08, 2024, 03:28:42 pm
@Pierre

L ambition est bien de couvrir  des cas d'exploitation extrapolables au réseau ( avec bloc pour circulation)  de chacun.
On aura bien 2 aspects à traiter derrière: la partie soft et la partie hardware.

Tu peux aussi avoir un cas de figure présent sur nos réseaux: ( et souvent fort peu pris en considération)

Imagine une "antenne" qui desserre une boucle ( ou une gare terminus)  à l une de ses extrémités

Tu ne peux envoyer vers la boucle qu'un nombre de trains limité ( au nombre d évitements/garages max dispo) pour assurer les mouvements sinon tu auras un face à face ( bloc à bloc)  et un carre permanent et donc un "blocage d'exploitation.  ( pas toujours simple à résoudre)
Pour neutraliser ce cas de figure on compte ... et si le nombre max est atteint alors on retient d envoyer vers l'antenne.

C est le cas typique des gares type BOURG St MAURICE ou ST GERVAIS desservies par des lignes en voie unique et en impasse. ( ou boucle dans notre cas c est une problématique analogue)
On ne peut y envoyer plus que le potentiel max de la ligne.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 03:43:29 pm
En essayant le simulateur de la gare de Méru :
 https://www.utc.fr/~wschon/sr06/Simulateur-PRS/index_dev.html (https://www.utc.fr/~wschon/sr06/Simulateur-PRS/index_dev.html),
On se fait une idée des circulations dans la gare et c’est déjà pas mal.

Je vois mal ce qu’apporterai une boucle de retournement.
Je ne comprends pas bien les explications de Laurent, mon grand-père était chef de gare mais ne m’a rien appris, pas comme vous !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 08, 2024, 03:56:34 pm
@ Dominique

Super le simulateur, je ne connaissait que l'image.

@ Laurent

Je connais très bien la ligne de Tarentaise. Avant les TGVs il arrivait une flopée de trains de nuit à Bourg Saint Maurice le matin, ces trains ne repartaient que le soir, bien évidemment la gare n'avait pas assez de voies et on redescendait les trains à Moutiers, Alberville, voire plus loin et on les remontaient le soir. C'est un problème de régulation donc de régulateur.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 04:54:05 pm
Ce simulateur pourrait être un exemple pour faire un TCO de notre Locoduinodrome.
Les grandes boucles de retour ne sont pas forcément à afficher. Une ville à gauche, une vile à droite suffirait!

Un autre exemple ci dessous, marrant mais trop compliqué pour cet exercice !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 05:44:57 pm
J'ai fait un dessin avec RailModeler, pour travailler dessus.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 06:50:41 pm
Voilà ma proposition pour les coupures de zones, les zones, les aiguilles et les signaux.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 08, 2024, 09:56:50 pm
Bonsoir

@Dominique

Pour faciliter le nommage je t'invite à conserver une norme avec par exemple pour la voie intérieure ( disons impaire V1 ) uniquement des nombres impaires pour tout ce qui s y rapporte et réciproquement des nombres paires sur tout ce qui touche a la voie extérieure (V2)

Cela facilite le repérage ensuite ainsi les signaux, zones, aiguilles  paires sont uniquement pour la voie extérieure et réciproquement.
Pour le sens un suffixe en .0 ou .1 pour indiquer l orientation pourra convenir si nécessaire


Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 08, 2024, 10:07:54 pm
Pour les TJD tu vas aussi avoir 2 moteurs donc soit on suffixe .0 .1 voir .2 si aig triple soit on nomme avec itération chaque élément

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 08, 2024, 11:31:02 pm
Merci Laurent,

comment représenterais-tu tout cela ?
(il faut bien que tout le monde travaille un peu !)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 08, 2024, 11:48:43 pm
Je pense que l on peut s accorder sur quelques terminologies communes

Pour la voie:
La "maille" plus petite est la zone. Z
Une zone peut être inclue dans un ensemble "sans zone d arrêt" ( typiquement une zone d aiguillage "ZAP") ou un canton ( banalise ou non qui inclue une ou plusieurs zone d arret).
Si on appel les cantons Cn et Zn les zones, on aura ZAPn pour zone d appareils.
Il faut au minima 1 zone par canton C ou ZAP si les aiguilles ne sont pas des extensions des cantons prédécesseurs ou suiveurs.

Sur le même modèle AIG 1 devient soit AIG1 et AIG3 soit AIG1.0 et AIG 1.1 ce qui identifiera les moteurs lié à la TJD et leur implantation

Dans le decoupage on peu aussi considerer que l AIG4 est une extensnion du futur canton 6 et que AIG4 ( future AIG2) est la fin du canton 2.

Electriquement en tous les cas cela tient la route comem cela.

Laurent





Dans ton exemple on part de la gauche avec C1 puis ZAP1 C3 et C5( en haut voie de biffurcation) avant de revenir vers ZAP3 puis C7
cote sud on a de droite a gauche C2 puisi ZAP 2 puis C4 puis ZAP4 puis C6
SI on prend un signal par exempel celui au dos de l entree dans C4 alors il sera appellé S4.0 et celui au bout avant la ZAP4 sera appelé S4.1 ainsi on sait que ces signaux sont attaches au canton 4 et leur position dans le sens de circulation "habituel" de la voie

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 09, 2024, 04:17:08 am
Bonjour,
J'ai lu vos échanges sur les cantons, zones, N+1, N-2, etc... et vous essayez d'inventer le bogie avant d'avoir inventé la roue.

Il y a deux choses distinctes dans la sécurité des trains : le cantonnement et l'interconnexion (interlocking en anglais)
Et il y a un grand principe : un conducteur ne doit jamais se voir présenter un feu rouge avant d'avoir passé un avertissement.

Pour les signaux de cantonnement pas de souci : on regarde l'occupation de n+1 et le feu n+1 et ça peut se faire localement sans
passer par la centrale.
Mais pour les carrés c'est totalement différent et ça ne peut se faire que par une gestion d'itinéraire.
Un carré ne doit passer au vert (ou jaune) que si un train a demandé le passage vers une destination, que son trajet ne rentre
pas en conflit avec celui d'un autre train et que les aiguilles ont été positionnées pour ce trajet. Et il faut souvent pouvoir gèrer
le feu en avance, alors que le train n'a pas encore passé le signal précédent.
Pourquoi ne pas mettre un carré au vert en l'absence de train si les aiguillages offrent un trajet libre? Parce que si un train arrive
et qu'un autre train demande le passage le feu va passer au rouge devant son nez.
Donc il faut une gestion d'itinéraire qui va gérer des réservations au moins à deux cantons devant un train.
La définition de cantons ne suffit pas pour la gestion des carrés. Il faut définir des trajets constitués de plusieurs cantons,
avec des sens de circulation pour chaque canton avec la possibilité de réserver un trajet pour plusieurs trains si ils vont dans le même sens.
Il faut aussi définir les trajets incompatibles entre eux. Par exemple les trajets utilisant un groupe d'aiguillages ou deux trajets
avec un croisement.
La boucle de retournement pose également un problème particulier (le train en N est aussi en N+2 mais dans l'autre sens!)

La gestion du carré violet impose également le système d'itinéraire car il faut savoir si le train est en manoeuvre ou pas et
ça ne peut pas se faire automatiquement.

Enfin il y a les conflits à longue distance. Par exemple il ne faut peut-être pas engager un train sur une voie unique si il n'y a pas
de voie libre dans la gare suivante.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 07:29:27 am
Bonjour,
J'ai lu vos échanges sur les cantons, zones, N+1, N-2, etc... et vous essayez d'inventer le bogie avant d'avoir inventé la roue.

Il y a deux choses distinctes dans la sécurité des trains : le cantonnement et l'interconnexion (interlocking en anglais)
Et il y a un grand principe : un conducteur ne doit jamais se voir présenter un feu rouge avant d'avoir passé un avertissement.

Pour les signaux de cantonnement pas de souci : on regarde l'occupation de n+1 et le feu n+1 et ça peut se faire localement sans
passer par la centrale.
Mais pour les carrés c'est totalement différent et ça ne peut se faire que par une gestion d'itinéraire.
Un carré ne doit passer au vert (ou jaune) que si un train a demandé le passage vers une destination, que son trajet ne rentre
pas en conflit avec celui d'un autre train et que les aiguilles ont été positionnées pour ce trajet. Et il faut souvent pouvoir gèrer
le feu en avance, alors que le train n'a pas encore passé le signal précédent.
Pourquoi ne pas mettre un carré au vert en l'absence de train si les aiguillages offrent un trajet libre? Parce que si un train arrive
et qu'un autre train demande le passage le feu va passer au rouge devant son nez.
Donc il faut une gestion d'itinéraire qui va gérer des réservations au moins à deux cantons devant un train.
La définition de cantons ne suffit pas pour la gestion des carrés. Il faut définir des trajets constitués de plusieurs cantons,
avec des sens de circulation pour chaque canton avec la possibilité de réserver un trajet pour plusieurs trains si ils vont dans le même sens.
Il faut aussi définir les trajets incompatibles entre eux. Par exemple les trajets utilisant un groupe d'aiguillages ou deux trajets
avec un croisement.
La boucle de retournement pose également un problème particulier (le train en N est aussi en N+2 mais dans l'autre sens!)

La gestion du carré violet impose également le système d'itinéraire car il faut savoir si le train est en manoeuvre ou pas et
ça ne peut pas se faire automatiquement.

Enfin il y a les conflits à longue distance. Par exemple il ne faut peut-être pas engager un train sur une voie unique si il n'y a pas
de voie libre dans la gare suivante.


Bonjour Etienne66

Je suis désolé de te contredire, mais ce que tu affirmes est faux, tout au moins sur nos petits réseaux miniatures. J’ai démontré le contraire avec les satellites autonomes.

Rapidement, je rappelle le concept. Sur chaque canton est disposé un satellite et chaque satellite dispose d’un gestionnaire qui est rigoureusement identique sur chaque satellite. Il n’y a donc aucune gestion centralisée du réseau. C’est ce que Pierre a qualifié de gestion répartie.

Chaque satellite autonome connait ses liaisons avec ses voisins (rien de nouveau), et comme il connait ses voisins, il connait aussi les voisins de ses voisins.

Aussi, le satellite à C0 connait l’état des aiguilles de C+1 et aussi l’état d’occupation de C+1.

Il en est de même pour C+2 et ainsi C0 connait l’état d’occupation C+2 et l'état de ses aiguilles et peut alors afficher un ralentissement ou toute signalisation adéquate comme C+1 sait aussi afficher la bonne signalisation.

On voit donc qu’il n’y a aucune notion d’itinéraire, je ne l’utilise d’ailleurs pas sur mon réseau, tout est simplement déterminé en fonction de l’état du réseau à un instant t, état connu par chacun des satellites qui reçoit des autres ces informations toutes les 100 ms au travers du bus CAN et qui adapte son comportement en fonction des informations reçues.

Vitesse et direction des trains sont aussi des informations connues des satellites.

Je précise cependant que la détection est faite avec Railcom, ce qui permet aussi aux satellites de connaitre en temps réel chaque train, sa position, sa vitesse et sa direction et chaque satellite si nécessaire, sait envoyer une commande à la centrale pour ralentir ou encore arrêter un train.

A ta disposition pour discuter de cela au besoin.

Christophe
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 07:50:51 am
Voilà ma proposition pour les coupures de zones, les zones, les aiguilles et les signaux.

Bon est-ce bien la version définitive pour que l'on puisse commencer à travailler ?

(https://forum.locoduino.org/index.php?action=dlattach;topic=1645.0;attach=5567;image)

Et comme tu n'as pas remis les références des appareils, est-on bien d'accord que AIG1 et AIG2 sont bien ce que tu as présenté précédement :

(https://forum.locoduino.org/index.php?action=dlattach;topic=1645.0;attach=5545;image)

Serait-il possible d'avoir la représentation du réseau dans son ensemble et en haute definition ?

Merci par avance.

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 08:14:42 am
Bonjour Christophe,

La notion d'itinéraire est INDISPENSABLE. Regarde la gare pourtant assez simple de MERU : c'est même un PRS (Poste tout Relais à transit Souple), le top des itinéraires
D'autre part, le Carré est fondamentalement différent des autres signaux car il peut être commandé manuellement, indépendamment des positions des trains et des aiguilles.
C'est l'Aiguilleur, un métier complexe qui décide (ou non) de lancer un train en fonction de tout un tas de critères.
C'est Etienne66 qui a raison.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 08:17:25 am
Bonjour Christophe,

La notion d'itinéraire est INDISPENSABLE. Regarde la gare pourtant assez simple de MERU : c'est même un PRS (Poste tout Relais à transit Souple), le top des itinéraires
D'autre part, le Carré est fondamentalement différent des autres signaux car il peut être commandé manuellement, indépendamment des positions des trains et des aiguilles.
C'est l'Aiguilleur, un métier complexe qui décide (ou non) de lancer un train en fonction de tout un tas de critères.
C'est Etienne66 qui a raison.

Denis

Messieurs, répondez au cahier des charges proposé par Dominique et l'on verra qui a raison !

Sur mon réseau je suis à la fois le conducteur de toutes les locomotives, aiguilleur et aussi celui qui vend les billets.

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 09:16:46 am
Le cahier des charges n’est pas défini tant que tout le monde n’est pas d’accord.

La gestion d’itinéraires me semble essentielle pour commander les aiguilles (enclenchements) et pour le plaisir du modéliste avec un representation active sur un TCO.

Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 09:20:12 am
Sur mon réseau je suis à la fois le conducteur de toutes les locomotives, aiguilleur et aussi celui qui vend les billets.

Un billet n’est-il pas un itinéraire à une heure donnée et à un prix donné ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 09:30:03 am
"Deus ex machina"  :D

Je trouve que la définition des zones et l'implantation des signaux est parfaite.
Il y a bien une voie banalisée dans la gare qui permet à chaque origine - destination d'avoir une voie principale et une voie de déviation.

Ce que j'aimerais bien, c'est qu'il n'y ait pas de définition "en dur" du réseau dans le programme et qu'il soit "neutre".
La définition structurelle du réseau serait externe, via les boutons de Christophe (sur cartes ou au TCO).

Denis
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 09:31:54 am
Bon est-ce bien la version définitive pour que l'on puisse commencer à travailler ?
Non il y a des erreurs et des manques.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 09, 2024, 09:32:39 am
J'avais réalisé un gestionnaire dans TrainZ que j'ai du abandonner car Auran refusait un patch de leur moteur de jeu sans lequel ça ne pouvait pas marcher.

Sans itinéraire le gestionaire ne sait pas où va un train et ne peut donc pas commander les aiguilles.
Si Christophe bouge les aiguilles lui-même c'est que c'est lui le gestionnaire du réseau. Il sait où vont ses trains (donc il connait les itinéraires) et il prend des décisions connaissant ces itinéraires. Et la signalisation est ajustée à ses désirs sans tenir compte de la règle d'or de l'avertissement avant un arrêt.
Et ça peut fonctionner parceque nos trains ont des distances d'arrêt très courtes comparées aux trains réels et n'ont donc pas toujours besoin d'un avertissement.
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 09:34:20 am
Sur mon réseau je suis à la fois le conducteur de toutes les locomotives, aiguilleur et aussi celui qui vend les billets.

Un billet n’est-il pas un itinéraire à une heure donnée et à un prix donné ?

N’inversons pas les choses, j’ai dit que la signalisation et la sécurité totale du réseau était possible sans aucune notion d’itinéraire mais je n’ai pas dit que la gestion d’itinéraire n’était pas possible avec les satellites autonomes.

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 09:36:52 am
J'avais réalisé un gestionnaire dans TrainZ que j'ai du abandonner car Auran refusait un patch de leur moteur de jeu sans lequel ça ne pouvait pas marcher.

Sans itinéraire le gestionaire ne sait pas où va un train et ne peut donc pas commander les aiguilles.
Si Christophe bouge les aiguilles lui-même c'est que c'est lui le gestionnaire du réseau. Il sait où vont ses trains (donc il connait les itinéraires) et il prend des décisions connaissant ces itinéraires. Et la signalisation est ajustée à ses désirs sans tenir compte de la règle d'or de l'avertissement avant un arrêt.
Et ça peut fonctionner parceque nos trains ont des distances d'arrêt très courtes comparées aux trains réels et n'ont donc pas toujours besoin d'un avertissement.

Je pensais que l'on avait été clair, la gestion d'itinéraire est optionnelle. Et je ne vois pas pourquoi tu dis que je n'ai pas d'avertissement ??? J'ai même un avertissement et un rappel  de ralentissement au besoin !
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 09:41:18 am
Bon est-ce bien la version définitive pour que l'on puisse commencer à travailler ?
Non il y a des erreurs et des manques.

Pierre

C'est un peu con, car j'avais commencé à bosser ! Et pourquoi y aurait-il des erreurs et des manques, ne peut-on pas choisir ce que l'on veut ? Mais pourquoi ne pas choisir Méru après tout, moi plus c'est complexe plus ça me va. Et oui d'abord, pourquoi pas Méru ???
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 09, 2024, 09:45:55 am
Je pensais que l'on avait été clair, la gestion d'itinéraire est optionnelle. Et je ne vois pas pourquoi tu dis que je n'ai pas d'avertissement ??? J'ai même un avertissement et un rappel  de ralentissement au besoin !
Si tu as le contrôle manuel des aiguillages tu peux bloquer un train au dernier moment avec un feu qui passe du vert au carré devant son nez. Ce n'est pas sensé arriver.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 09:52:53 am
Bonjour

@Christophe

Le plan a besoin d être actualise au niveau des dénominations des éléments.
Pour le design on est en phase même si on peut ajouter ci ou la une ou deux bricoles pour traiter des cas plus riches ( boucle de retournement, aiguille pointe contre pointe,...)

Ltr
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 09:53:04 am
Je pensais que l'on avait été clair, la gestion d'itinéraire est optionnelle. Et je ne vois pas pourquoi tu dis que je n'ai pas d'avertissement ??? J'ai même un avertissement et un rappel  de ralentissement au besoin !
Si tu as le contrôle manuel des aiguillages tu peux bloquer un train au dernier moment avec un feu qui passe du vert au carré devant son nez. Ce n'est pas sensé arriver.

Redescendez un peu sur terre, on parle de petits trains électriques ! Et dans la vraie vie, ton aiguilleur devenu subitement fou ne peut pas modifier au dernier moment une aiguille ce qui conduira inéluctablement au même résultat.

Je pense que je mettre en pause le temps que vous vous mettiez en phase sur des choses raisonnables et réalistes pour la grande majorité des modélistes qui au fond ne cherchent qu’à se faire plaisir sans se prendre la tête.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 10:09:07 am
Concernant le schéma du Locoduinidrome il y a quelques problèmes :

Je suppose que les trains roulent à gauche, mais ne pas oublier que les trains roulent à droite en Alsace-Lorraine.

Concernant les zones il manque les zones des boucles, du moins c'est flou

Concernant les signaux, je ne vois pas l'utilité de s3, par contre un signal à gauche de Z3 serait bien utile,  il manque aussi les avertissements de s1 et de s4 (cela influe sur les zones)

Je suis d'accord avec Laurent avec les choix de numéros pairs pour un sens et impair pour l'autre (voir Méru)

Je suis aussi d'accord avec Laurent sur le fait qu'il faille deux numéros pour les TJS.

Vous pouvez remarquer que certaines aiguilles de Méru vont par paires n° 103a et 103b elles seront toujours manoeuvrées ensemble pour des soucis de sécurité. La SNCF fait comme cela mais ce n'est pas une obligation pour nous.

Il faut aussi penser que les noms finirons inévitablement comme identificateurs dans les programmes.

Pour répondre à Christophe on fait ce que l'on veut mais si on veut assurer la sécurité il faut que le réseau soit cohérent. Méru est fonctionnellement très proche du Locoduinodrome et pourrait être aussi choisi, mais le trouve un peu moins intéressant car il y est plus difficile de faire des extensions.

Pierre
Titre: Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 09, 2024, 10:38:28 am

Je pense que je mettre en pause le temps que vous vous mettiez en phase sur des choses raisonnables et réalistes pour la grande majorité des modélistes qui au fond ne cherchent qu’à se faire plaisir sans se prendre la tête.

Si on veut un gestionnaire c'est justement pour faire le boulot à la place de l'utilisateur. Ce sont les programmeurs qui vont un peu se prendre la tête.
Le principe d'un gestionnaire pour la gestion des aiguillages est en réalité assez simple :
1- On ne change pas un aiguillage avant d'avoir un train qui demande le passage.
2- On réserve la voie ou le groupe de voies pour ce train si un autre train ne l'a pas déjà réservée.
3- On positionne la ou les aiguilles.
4- On ouvre le carré.
5- Après libération des voies par le train on annule la réservation pour libérer l'aiguille.

Dans le cas des trains gérés par l'IA on le fait en suivant des itinéraires que l'utilisateur aura définis à l'avance.
Dans le cas d'un train piloté en manuel il y a plusieurs solutions :
- On donne un accès indirect aux aiguilles au moyen d'un TCO ou d'une interface graphique en passant par le gestionnaire qui va considèrer l'ordre
  comme une demande de passage de l'aiguillage. Mais c'est difficile à gèrer car on ne connait pas la destination.
- On donne un accès aux itinéraires soit par un menu soit par une sélection de voie dans le TCO
- On définit à l'avance l'itinéraire que devra suivre le train manuel et le pilote devra obéir aux signaux.
- Pour les zones de manoeuvre on peut donner le contrôle direct de certaines aiguilles en réservant d'office ces aiguilles aux seuls trains manuels.

Il n'y a rien de compliqué pour l'utilisateur. La grosse différence va être au niveau du cablage des commandes d'aiguillages :
Au lieu d'avoir un bouton connecté à l'aiguille et l'aiguille qui renvoie sa position à la centrale avec un relais sur le moteur, le bouton est relié à la centrale qui
va positionner l'aiguille après avoir obtenu le permis et qui n'a pas besoin de retour de la part de l'aiguille puisqu'elle garde sa position en mémoire et qu'elle
est la seule à pouvoir la changer.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 11:23:49 am
La notion d'itinéraire est INDISPENSABLE. Regarde la gare pourtant assez simple de MERU : c'est même un PRS (Poste tout Relais à transit Souple), le top des itinéraires
D'autre part, le Carré est fondamentalement différent des autres signaux car il peut être commandé manuellement, indépendamment des positions des trains et des aiguilles.
Il existe encore à la SNCF beaucoup de postes d'aiguillages sans itinéraires, par exemple les MU (Mécaniques Unifiés) et le EMU (ElectroMécaniques Unifiés). Dans ces postes une bonne partie de la sécurité se fait avec des tables d'enclenchements mécaniques, mais il y a aussi des enclenchements électriques. Pour faire passer un train l'aiguilleur manoeuvre les bonnes aiguilles avec des leviers si les enclenchements le permettent, puis  ouvre le bon signal avec un levier si les enclenchements le permettent. Pas besoin d'itinéraires.

L'ouverture d'un carré est toujours soumise aux enclenchements, bonne occupation des zones, bonne position des aiguilles, conflit avec d'autres itinéraires, autorisations, ...

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 11:28:54 am
Je suis d'accord avec Pierre, mais j'aimerais bien qu'il y ait une voie banalisée.

Dans Meru, il y a bien une voie banalisée au milieu, avec un emplacement logique pour qu'elle serve de voie d'évitement dans les 2 sens.
Là, il faudrait qu'il y a ait aussi une voie banalisée (celle du haut), mais c'est plus complexe puisque certains itinéraires se couperaient.

Ok aussi sur le fait qu'il faut des enclenchements, ce qui interdit de commander directement une aiguille avec un bouton.
Faire des itinéraires est quand même une belle chose et quand je vois que Meru a un PRS, je me dis que c'est ça qu'il faut qu'on fasse.

Denis
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 09, 2024, 11:34:33 am

Pas besoin d'itinéraires.

L'ouverture d'un carré est toujours soumise aux enclenchements, bonne occupation des zones, bonne position des aiguilles, conflit avec d'autres itinéraires, autorisations, ...

Pierre

"bonne position des aiguilles" donc connaissance de la destination et donc d'un itinéraire.
Que ce soit en automatique ou en manuel on ne change pas un aiguillage si on n'a pas besoin de le faire par rapport à un itinéraire.
Et pour l'ouverture du carré il faut là encore connaitre l'itinéraire pour savoir si tous les aiguillages concernés sont dans la bonne position.
Titre: Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 11:44:34 am
Redescendez un peu sur terre, on parle de petits trains électriques ! Et dans la vraie vie, ton aiguilleur devenu subitement fou ne peut pas modifier au dernier moment une aiguille ce qui conduira inéluctablement au même résultat.

Je pense que je mettre en pause le temps que vous vous mettiez en phase sur des choses raisonnables et réalistes pour la grande majorité des modélistes qui au fond ne cherchent qu’à se faire plaisir sans se prendre la tête.

@Christophe,

Le mieux serait que tu proposes sur mon plan initial, les zones, signaux, les noms et les circulations que tu envisageraient pour servir de base à tes satellites autonomes.
Je joins le dessin sur lequel tu vas ajouter ces éléments.

Il faut bien que nous partions d'une même référence pour que la discussion soit constructive.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 11:56:57 am
@ Denis

La voie d'évitement (troisième voie) du locoduinodrome doit être banalisée, on est alors dans le même cas que Méru mais effectivement un peu plus compliqué.

@ Etienne

Tu joue un peu sur les mots. Dans un poste sans itinéraires l'aiguilleur sait quelle est la destination du train pour manoeuvrer ses aiguilles. Dans un poste à itinéraire l'aiguilleur sait toujours quelle est la destination du train mais ne manoeuvre qu'un levier ou n'appuie que sur un bouton (voire deux), c'est un mécanisme appelé d'itinéraire qui fait tout le travail et la sécurité. C'est juste du confort et du travail en moins pour l'aiguilleur.

Pierre
Titre: Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 09, 2024, 12:02:01 pm
Redescendez un peu sur terre, on parle de petits trains électriques ! Et dans la vraie vie, ton aiguilleur devenu subitement fou ne peut pas modifier au dernier moment une aiguille ce qui conduira inéluctablement au même résultat.

Je pense que je mettre en pause le temps que vous vous mettiez en phase sur des choses raisonnables et réalistes pour la grande majorité des modélistes qui au fond ne cherchent qu’à se faire plaisir sans se prendre la tête.

@Christophe,

Le mieux serait que tu proposes sur mon plan initial, les zones, signaux, les noms et les circulations que tu envisageraient pour servir de base à tes satellites autonomes.
Je joins le dessin sur lequel tu vas ajouter ces éléments.

Il faut bien que nous partions d'une même référence pour que la discussion soit constructive.

Nono, non, donne le même cahier des charges à tout le monde et quand vous serez d'accord vous me faites signe.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 12:08:41 pm
Hello

Pour la voie banalisée "simple" voir mon dessin initial et la mettre au "nord" du dessin de Dominique me parait simple à faire.

Je pense aussi qu on peut ajouter une voie en impasse. Cela enrichira bien les scenarios d exploitation...

Ltr
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 12:26:59 pm
Pour la voie banalisée "simple" voir mon dessin initial et la mettre au "nord" du dessin de Dominique me parait simple à faire.

Je pense aussi qu on peut ajouter une voie en impasse. Cela enrichira bien les scenarios d exploitation...

Je ne vois pas bien sur ton schéma un peu trop raturé ! Le nord c'est où,  en haut ? Je pensais que l'essentiel est la gare et les boucles servent seulement à faire les retours. Il faut évidemment un sémaphore au milieu des boucles. et comme le sens de circulation peut s'inverser ce sera interessant.

Pour une voie de garage en impasse, à part garer un train, qu'est-ce que ça apporte de plus ?
Titre: Re : Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 12:29:13 pm
Nono, non, donne le même cahier des charges à tout le monde et quand vous serez d'accord vous me faites signe.

Dommage, ce serait interessant de connaitre ta vision
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 12:41:32 pm
@Dominique

Oui le nord c est bien le haut. ( suivre la boussole :) ) Donc une voie banalisée entre la voie extérieure et la voie intérieure accessible par chacune d elle. ( Si on est "riche" ou pourrait même doubler ce nombre) Ce qui aurait aussi un impacte sur les ZAP qui bordent ces voies.

La voie en impasse va enrichir avec les mécanismes d'itinéraire, de réservation de "ressources" les contraintes applicables ( ralentissement forcé par exemple, condition pour le mode Manœuvre (feux  blanc et violet)

De plus cela peut permettre de voir à gérer une séquence autonome de mouvement  entre 2 points dont un en impasse. Si on y adjoint une boucle de retournement cela devient luxueux ;) ! Mais très complet.
Idéalement il ne reste plus que l'aiguille triple pour compléter le tableau de base.

Laurent
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 12:59:43 pm
@Laurent,

Mon point de vue perso est que le nord est une simple bouche de retour non décorée et pas visible du public en expo. Au mieux il pourrait y avoir une gare cachée pour stocker des trains mais je n'en suis pas favorable car devient trop complexe.

Le projet doit rester quand même assez simple pour encourager tout le monde à comprendre un gestionnaire et avoir envie d'en faire un.

Pour la voie en impasse, ça ajoute une aiguille et quelques signaux et il faut que tu expliques les circulations (séquences de mouvement) avec les états des signaux correspondants pour en apprécier l'intérêt.

@tous, j'attends vos corrections à apporter au dessin initial qui n'est pas encore un cahier des charges pour le moment.
Pour être complet, il faudra le compléter par une description des circulations envisagées, les états des zones et des signaux, combien de trains possibles, les itinéraires qui leur sont prévus , etc.. j'en oublie sans doute.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 02:33:58 pm
L intérêt de la voie en impasse va être de traiter selon l endroit choisi pour l implanter un cas d aiguille "pointe contre pointe".
C est un cas ou comme pour les TJD la zone n' appartient pas à un canton "en dure" ( y compris pour la détection ( sauf pontage selon l'itineraire tracé))

Pour la signalisation, tracer l itinéraire vers cette impasse " tiroir" va permettre de gérer la bascule sur la signalisation de manœuvre et remplacer "le vert" par le blanc pour autoriser le mouvement par exemple ou le limiter (cas du blanc clignotant). Cela peut aussi "fermer" toute nouvelle entree sur la zone concernée par la manœuvre en cours.

Ex si tu mets "au sud est" ce tiroir, tu ira vers C6 en nominal ou vers T1 en cas de manœuvre via A8.
La position de A8 peut avoir pour incidence de ne pas laisser entrer sur C2 de nouveaux trains et donc de forcer un "rouge" pour cela ( type carré) sur le signal qui précède A2.


Ltr

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 02:44:07 pm
L intérêt de la voie banalisée de "stockage" au nord va etre de doubler le développé ( c est à dire un enchainement de zones pour un itinéraire à parcourir)  et donc permettre dans un volume compact de réaliser des enchainements qui permettraient d accueillir plus de trains ou d afficher plus d états "cohérant" sur la signalisation.

En effet on peut avec ce mode lancer une séquence "poursuite" de 2 trains l un à la suite de l autre avec un nombre de canton limité mais avec un developpé d un nombre de cantons parcouru toujours identiques par itinéraire.

Cela fonctionne alors bien pour les 2 sens de circulations
Cela permet entre autre de laisser une voie profiter du développé maximal et sur l autre de réaliser des évolutions en manœuvre.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 02:50:20 pm
@ laurent
Je ne comprends pas où tu veux mettre ta voie de stockage.
Explique et je mets à jour si vous êtes d'accord

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 02:55:28 pm
@Denis

Merci

Elle se place "géographiquement" entre les voies de tes signaux S1 et S2 et est desservie pas les Z3 et Z6 a droite (EST) et Z2 Z5 à gauche ( OUEST)


Idem pour l impasse je la vois bien au niveau de l aiguille à gauche de C5.

On pourrait être tenté de mettre une aiguille triple mais en principe il n'y en a pas en "voie principale"
Toutefois par confort on pourra s autoriser cette solution en lieu et place de doubler le tiroir par ajout d une aiguille supplémentaire en enfilade.


Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 03:00:04 pm
@Denis

Idéalement une diagonale entre C1 et la zone devant C1 serait top aussi...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 03:04:38 pm
En gros, tu fais la gare de Meru au Nord et la gare du locoduinodrome au sud.
A mon avis, ça fait beaucoup. C'est quand même une démo, pas un vrai réseau.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 03:06:15 pm
@Denis

Pas trop le choix si tu veux être confronté a des mises en œuvre concrète d implémentation présente sur les réseaux.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 03:09:34 pm
Je suis d'accord avec Denis. Restons simple pour obtenir l'adhésion du plus grand nombre.
Rien n'empêchera d'autres projets plus ambitieux mais après.

J'aimerai l'avis de Pierre, Laurent, Etienne et Christophe pour s'arrêter là.

Le dessin de Denis est à compléter avec les zones, les noms, etc..
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 04:44:18 pm
Je suis d'accord pour l'ovale à double voie avec une voie d'évitement.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 05:40:23 pm
Nouvelle version à partir de mon éditeur ancienne version.
Ce qui est marrant, c'est que les feux ont déjà la bonne couleur  ;D
Cela vous sied-il ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 06:19:25 pm
Voici ma version sur fond clair, normalement identique à celle de Denis.

Nous avons conservé les sémaphores en haut quand le cantonnement sera prévu.
Il manque les trajets possibles au travers des TJS (ce qu'on voit sur le dessin de Denis)

Et une description textuelle pour clarifier le projet sans ambiguïté.

On approche !!
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 09, 2024, 06:22:48 pm
Pas mal du tout

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 06:31:14 pm
V3
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 07:03:09 pm
@Denis, apparemment T3-T4 a l’air d’être une TJD, ce qui n’est pas le cas de T1-T2.

Quels sont les chemins possibles :
Avec T1-T2: Z3 vers V1, Z3 vers VA, V2 vers Z6 et VA vers Z6
Avec T3-T4: Z8 vers V2, V1vers Z5, z8 vers VA et VA vers Z5
Mais pas Z8 vers V1 !?!
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 07:12:54 pm
Oui, pas Z8 vers V1 ni V1 vers Z6
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 07:50:57 pm
SUPER !

On peut partir sur ce plan !

Qui a des questions ?
Bonne soirée ! ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 08:37:20 pm
Hello

Désolé de passer pour un empêcheur de tourner en rond mais il faudrait garder les appellations impaires et paires pour chaque  voie principales et zones reliées sans les mélanger
Idem pour les aiguilles, signaux...

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 09, 2024, 08:42:51 pm
OK : numérote les bien pour que ce soit correct.

Fais à la main, je mettrai en forme. Merci
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 09:19:18 pm
Le voici

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 09:28:57 pm
Avec une chouille d évolution qui permettra de gérer le feu blanc pour des manouvres

la V1.1
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 09:45:22 pm
Enfin la version la plus poussée V1.2

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 10:00:59 pm
Cette dernière version offre plus de possibilités ( trop?)

Elle impacte le découpage électrique de certaines zones (avec aiguillages)

Elle offre la possibilité avec le tiroir d impasse de traiter des départs en manœuvre et des remises en tête sur la voie d évitement banalisée via entre autre la boucle de retournement.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 09, 2024, 10:39:40 pm
@Laurent,

Partant sur le tracé N01 sans diagonale ni impasse, nous pourrons ensuite étudier comment modifier le ou les gestionnaires développés pour juger de la facilité de réaliser ces modifications.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 09, 2024, 11:04:34 pm
Parfait pour débuter.

Y a plus qu'a!

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 10, 2024, 07:35:23 am
Bonjour à tous,

Je suis occupé ce matin.
Je refais au propre le 1er réseau de Laurent cet AM et on part là dessus.

Concernant le langage, est-ce possible d'utiliser Java pour avoir des ArrayList ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 10, 2024, 08:13:54 am
@ Denis Dominique Laurent

Bonjour

Je suis reparti des dessins de Denis et/ou Dominique !!!

On ne peut rien faire de plus avec une TJD en T3-T4, une TJS suffit

Il manque les zones de voies V1 V2 VA

On n'a pas besoin de noms de cantons

Comme le propose Laurent c'est peut être pas mal de d'avoir les noms d'aiguilles de forme Ax et les noms de signaux de forme Sx (pas de . dans les noms)

Comme le dit Laurent c'est mieux de tout numéroter avec de numéros pairs une des boucles et des numéros impairs l'autre (voir Méru), pour la voie d'évitement (VA) pas de contraintes.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 10, 2024, 09:55:32 am
Bonjour

@Pierre
Dans le cas de réseaux plus étendus tu vas avoir un soucis sur les appellations des signaux sur les cantons banalisés car il faut idéalement un moyen pour
identifier le canton d attache du signal
indiquer son orientation ( entrée ou sortie de canton dans le sens nominal de circulation)

Au niveau programmation un bit dédié fera très bien l'affaire...

Il y adonc une astuce à trouver pour garder ces points qui facilitent beaucoup repérage et appels

A vos avis.
Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 10, 2024, 10:03:50 am
@ tout ceux qui ont la connaissance SNCF :

Pourriez-vous expliquer les fonctions des boutons situés en dessous de la représentation graphique de la gare de Méru ?
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 10, 2024, 10:41:50 am
Il manque les manoeuvres sur ligne.
Découpez C4 en deux avec un tableau LM (limite de manoeuvre) entre les deux et le violet pour rebrousser, pour manoeuvres sur ligne sortante.
Découpez C8 en deux avec LM et le carré S8 entre les deux et violet nain devant l'aiguille, pour manoeuvres sur voie entrante.

Dans l'idéal il faudrait une voie unique qui est plus complexe à gérer qu'une double voie.

Et je doublerais la voie C3, avec une voie pour les voyageurs et l'autre pour le fret histoire de gérer les types de trains et les priorités.

Je mettrais également des TJD à la place des TJS et des carrés violets sur C1 à gauche et C2 à droite pour la gestion des voies à sens unique sauf manoeuvres.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 10, 2024, 10:54:38 am
@Etienne

Tu as une autre alternative plus simple:
Mettre voie d évitement entre A2 et A4.

Mais l'ambition V0 initiale étant plus restreinte cela sera pour les evols à venir.

Idéalement les redécoupage pour les feux de manœuvre est valable, la aussi pour de futures evols...

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 10, 2024, 11:08:01 am
En attendant Denis avec son éditeur, voici une nouvelle version avec les noms de zone, les aiguilles. J'ai laissé les noms de signaux comme avant. J'ai ajouté les sens de circulation nominaux.

Autour des TJS les sens de circulation possibles sont :
z5 -> z1
z5 -> z0
z1 -> z6
z0 -> z6

z0 -> z9
z1 -> z9
z10 -> z2
z10 -> z0

@Etienne, oui il sera interessant de tester les facilités d'évolution du réseau et de ses appareils de voie. Ce sera possible dans des sujets séparés comme des fork sous Git
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 10, 2024, 11:33:21 am
Bonjour

@Dominique et Denis

Dans cette version V0 les zones Z4 et Z12 sont non utiles car elles sont a attacher aux zones Z6 et Z10 ( électriquement, fonctionnellement aussi)

Le pourquoi est simple pour déterminer une "indépendance" ou une "dépendance" d une aiguille ou d un groupe d aiguille.

Si un mouvement de circulation ne peut passer que par 1 seul endroit alors il y a dépendance ( et donc enclise), si à l inverse on à une ou plusieurs alternative de passage alors on est indépendant et donc des zones séparées.

Rm si on met des à présent des zones séparées alors on se facilite les évolutions futures... ( dont notamment les sections isolées ( éclisse(s) coupure de rail, ...)

Ltr



Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 10, 2024, 11:43:36 am
Bonjour

@Dominique et Denis

Dans cette version V0 les zones Z4 et Z12 sont non utiles car elles sont a attacher aux zones Z6 et Z10 ( électriquement, fonctionnellement aussi)

Le pourquoi est simple pour déterminer une "indépendance" ou une "dépendance" d une aiguille ou d un groupe d aiguille.

Si un mouvement de circulation ne peut passer que par 1 seul endroit alors il y a dépendance ( et donc enclise), si à l inverse on à une ou plusieurs alternative de passage alors on est indépendant et donc des zones séparées.

Rm si on met des à présent des zones séparées alors on se facilite les évolutions futures... ( dont notamment les sections isolées ( éclisse(s) coupure de rail, ...)

Ltr

J'ai compris: 2 solutions
- suppression des z4 et z12 et renumérotation des z6 et suivantes.
- les garder pour évolution futures mais je ne vois pas bien lesquelles
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 10, 2024, 11:47:44 am
@Dominique

Z4 pour implanter une aiguille et traiter une impasse tiroir. Cas des aiguilles pointe contre pointe qui se gère comme une TJD à peu de chose pret. (et donc autonomie comme zone de détection différenciée

Z12 par analogie si l impasse est de ce coté là sinon suppression pure et simple.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 10, 2024, 01:16:37 pm
@ Laurent

Je suis tout à fait d'accord que les zones z4 et z12 ne sont pas nécessaires, elles sont là pour faciliter des extensions comme des manoeuvres de locomotives sur les voies 1 et 2, avec ou sans tiroir (je vois plus un tiroir coté z12).

La sncf met ces zones assez systématiquement, voir le PRS de Méru, pour bien séparer les zones des postes de celles de pleine voie.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 10, 2024, 01:22:47 pm
Donc on garde z12 et z4 ce qui nécessite les coupures de voies correspondantes.
et le schéma reste inchangé


Chacun maintenant peut proposer son gestionnaire en précisant l'architecture matérielle qui est supportée, les liaisons vers capteurs, actionneurs, signaux, l'unité centrale supportant le gestionnaire (si centralisé) et les éléments d'interface utilisateurs (TCO ou pas, commandes et réglages).

La centrale DCC sera de préférence pilotée par le bus CAN, pour innover avec la centrale LaBox. Sinon, il faudra l'expliquer.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 10, 2024, 01:52:53 pm
Vision type Méru

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 10, 2024, 02:02:22 pm
Hello

Je suggère que l on renomme les Cx en Sx car ces signaux peuvent être des carres mais pas que...

Une appellation "neutre" permettra ensuite de préciser le type désiré

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 10, 2024, 02:07:16 pm
Bon est-il possible de considérer que la version fournie par Denis ci-dessus est définitive ??? Si oui, est-il possible de l'avoir sur fond blanc, c'est plus pratique pour ajouter des infos (graphiques, textes...).

On est bien d'accord que maintenant ce sont des aiguilles entre A, 1, et 2 ???

Cela fait donc 6 aiguilles (bien qu'il n'y ait pas de A6. Je ne me trompe pas ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 10, 2024, 02:18:54 pm
@ Dominique Denis

Il y a des anomalies dans vos dessins

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 10, 2024, 02:46:14 pm
D'autres erreurs ?
Pour passer en fond blanc, il faut changer plein de choses : les noms en blanc, ...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: msport le janvier 10, 2024, 03:45:40 pm
En négatif ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 10, 2024, 03:46:50 pm
Génial !
les couleurs de feux à changer, mais c'est facile
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 10, 2024, 04:25:54 pm
C'est beau et on ne change plus.
C'est le plan officiel pour démarrer votre gestionnaire.

avec cette précision : on ne peut pas passer de la voie intérieure à la voie extérieure (et vice versa) sans passer par la voie de dégagement.


Autour des TJS les circulations possibles sont :
z5 -> z1
z5 -> z0
z1 -> z6
z0 -> z6

z0 -> z9
z1 -> z9
z10 -> z2
z10 -> z0

Hâte de voir vos propositions en commençant pas une schéma d'architecture générale pour comprendre les "où" et "quoi" et comment sont reliés les éléments entre eux (Can avec LaBox par exemple si possible).
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 10, 2024, 05:58:42 pm
Le petit poste PRS de Méru est intéressant, c'est un poste à itinéraires, URL :  https://www.utc.fr/~wschon/sr06/Simulateur-PRS/index_dev.html .

Le TCO affiche les choses classiques : numéros de zones, de signaux, d'aiguilles. Il y a un voyant pour les zones d'approche des carrés (ZAp), des voyants pour l'annonce des trains, …
Il faut remarquer les ronds blancs avec des lettres et des chiffres dedans, ce sont les points d'origine et/ou de destinations d'itinéraires que l'on va retrouver en dessous. :
- AE Arrivée Epinay
- DE Départ Epinay
- AT Arrivée Tréport
- DT Départ Tréport
- 1 2 A Arrivée et/ou Départ des voies correspondantes
Il faut remarquer aussi qu'il n'y a pas de numéros de cantons, bien que le poste fasse effectivement du cantonnement.

Passons au panneau de commande, les deux lignes du haut  comportent des commutateurs de fermeture des signaux (ronds avec une flèche) pour urgence, travaux … ainsi que d'autres dispositifs plus difficiles à expliquer.
Tout le reste en dessous c'est les commandes d'itinéraires. Il y a des repères ce sont les cases noires et des boutons gris ou marron. Les boutons gris sont pour les itinéraires à destruction automatique, les boutons marrons pour les itinéraires permanents. Les boutons sont à juste droite d'un repère pour les itinéraires de gauche à droite et à gauche dans le cas contraire.

Pour faire un itinéraire on commence à rechercher le repère de départ désiré (case noire), en tenant compte du sens désiré (ici il n'y a de choix de sens que pour A) puis on appuie sur le bouton destination voulu. Si l'itinéraire peut s'établir le bouton passe en blanc, l'itinéraire est affiché en jaune en tracé continu sur le TCO, sinon il est mis en mémoire et le bouton passe en blanc clignotant. L'itinéraire est normalement détruit progressivement par le passage d'un train, le TCO mis à jour et bouton s'éteint. On peut détruire manuellement l'itinéraire s'il n'est pas pris par l'enclenchement d'approche (petite lampe témoin sur le TCO).

Si on a choisit un itinéraire permanent le bouton passe en marron pale et l'itinéraire est tracé en vert sur le TCO. Si l'itinéraire ne peut être établit il est mis en mémoire. L'itinéraire n'est pas détruit au passage d'un train, d'autres trains peuvent suivre en étant soumis au cantonnement (ici BAL). Si on ré-appuie sur le bouton l'itinéraire repasse en mode normal (le bouton redevient marron et le bouton à coté devient blanc et le tracé sur le TCO dévient jaune).

Si on clique sur certaines cases noires (AE,AT,DT) une fenêtre popup  apparait pour paramètrer un train qui va effectivement passer en mettant les zones au rouge et détruisant les itinéraires. Remarquer le voyant d'annonce et celui de l'enclenchement d'approche (qui empêche normalement de détruire manuellement un itinéraire quand le conducteur à vu l'avertissement du carré ouvert).

L'itinéraire au départ du repère DT est un itinéraire de manoeuvre associé à l'aiguille marquée 5.

Jouez bien.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 10, 2024, 06:11:24 pm
C'est beau un PRS, hein ? ;D

Moi qui milite depuis des années pour qu'on fasse un PRS (que j'ai dans mon système), je ne peux qu'être ravi.
Et c'est aussi une bonne raison qui valident la création de Z4 et Z12.

Je joins le plan en négatif, mais avec des feux de la bonne couleur.
En particulier C5 est à Carré car aucun itinéraire n'est fait, alors que les aiguilles A4, A5-A7 sont dans une position qui permettrait au train qui viendrait de Z10 d'avancer ... si l'aiguilleur le décidait.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 11, 2024, 11:19:23 am

Bonjour

Je vous propose une possibilité pour les signaux, avec des extensions possibles  :

- s1 et s3 sémaphores (feux Vl, A, S)
- s2 et s4 sémaphores avec ralentissement  (feux Vl, A, S, R)
- c1 et c2 carrés (feux Vl, A, C) ajout possible (feux S, M)
- c3 et c6 carrés (feux Vl, A, C) ajout possible (feux S, M)
- c4 et c5 carrés rappel de ralentissement(feux Vl, A, C,RR) ajout possible (feu S)

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 11, 2024, 11:43:41 am
Bonjour,

Tout à fait d'accord.

Je précise, pour ceux qui ne connaissent pas complètement la signalisation SNCF, c'est que tu n'as pas mis de S (Sémaphore) aux signaux C (carré).
En effet, comme on est en approche d'une gare ou dans une gare, c'est l'aiguilleur qui donne aux trains le signal de départ.

Prenons un exemple : un train est en z6 et s'éloigne de la gare.
Un autre train est en z2 et attend le départ.
Pour l'instant il a le C sur c6 car l'aiguille A2 n'est pas dans la bonne position (pour des raisons historiques le train sur z6 vient de la voie A).
Puis l'aiguilleur met l'aiguille A2 en position tout droit, et on pourrait penser que, cette fois, on va pouvoir mettre le c6 à S.
Mais ça serait une drôle de décision car, en fait, le train ne peut pas avancer à cause du train sur z6.
Donc l'aiguilleur supprimera le C uniquement quand z6 sera libre.
Tout ça pour dire que c6 ne sera jamais à S.
La signalisation (surtout le carré) est faite de subtilités et n'est aussi "automatique" que ça.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 11, 2024, 12:28:46 pm
Je suis aussi d’accord.
J’apprends. Merci pour les explications :D.

On ajoute cela au cahier des charges.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 11, 2024, 12:35:04 pm
Quel type cible faudrait-il pour chaque signal ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 11, 2024, 12:42:20 pm
- s1 et s3 sémaphores (feux Vl, A, S)                                                                 => type A
- s2 et s4 sémaphores avec ralentissement  (feux Vl, A, S, R)                               => type F
- c1 et c2 carrés (feux Vl, A, C) ajout possible (feux S, M)                                    => type C
- c3 et c6 carrés (feux Vl, A, C) ajout possible (feux S, M)                                    => type C
- c4 et c5 carrés rappel de ralentissement(feux Vl, A, C,RR) ajout possible (feu S)  => type H
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 11, 2024, 02:30:54 pm
Chouette ça va être beau 🤩
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 11, 2024, 05:25:08 pm
Bonjour

@ Denis

C'est toi qui as parlé de tables pour décrire un réseau, est ce que l'on peut décrire complètement un réseau pour générer un gestionnaire automatiquement, par le biais par exemple d'un ficher .json. Ce format est pris en charge par l'Arduino et aussi par Java.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 11, 2024, 06:34:52 pm
@ Pierre,

Oui, on peut décrire entièrement un réseau à l'aide de tables. Et heureusement... :D

Dans mon éditeur, je fais un dessin et je sauve dans DES tables.
Cela me permet de mémoriser le dessin du réseau pour pouvoir faire une sauvegarde entre deux séances de dessin dans l'éditeur
Mais ces mêmes tables me permettent de récupérer le parcours du réseau dans mon gestionnaire.

Dans ma première version, je sauvais tous les pavés dans une seule table. Ça marchait, mais l'objet Pave() récupérait des infos un peu partout et avait une liste de variables dingue.

Depuis, je fais plusieurs tables :

1°) Une table pavés, nécessaire, mais plus petite.
2°) Une table par type de forme. J'ai trois formes :
  - Une forme D qui est un segment de droite
  - Une forme C qui est une courbe qui ressemble à un C
  - Une forme S qui est une courbe qui ressemble à un S
Je reviendrais sur les détails
3°) Une table qui me dit ce qu'il y a dans la palette et où dans la palette. Evidemment, elle ne sert que pour l'éditeur puisqu'il n'y a pas de palette dans le gestionnaire.
4°) Une table de tous les connecteurs entre les pavés, nécessaire dans l'éditeur
5°) Je ne l'ai pas encore, mais je pense qu'il faut une table des connecteurs entre les zones. Dans un gestionnaire, on ne s'occupe pas des pavés qui constituent les zones. Ce qui sert, ce sont les connecteurs d'extrémité de zones.

Dans Processing (je ne t'apprends rien, mais c'est pour les autres), on n'a droit qu'à 3 types : Entier (Int), flottant (Float et c'est "nouveau") et Caractères (String). Pas de booléens.
Fort heureusement, le format .tsv (Tabulation Separated Values) et le même que le format natif d'Excel, ce qui fait qu'on peut lire sans problème les .tsv dans Excel. Cela simplifie grandement la mise à jour et les vérifications.

Revenons sur les détails des formes :
Table D :
ID_pave   alpha0   alpha1   baseG0x   baseG0y   baseG0z   baseG1x   baseG1y   baseG1z   cible0   cible1   cib_v0   cib_v1   butoir0   butoir1   meca0   meca1   t_cib0   t_cib1

ID_pave              = identifiant
alpha0 ou 1         = angle de l'extrémité 0 ou 1 du segment de droite
baseG0 x, y ou z = coordonnées absolues de l'extrémité 0 du segment
baseG1 x, y ou z = coordonnées absolues de l'extrémité 1 du segment
cible 0 ou 1         = la valeur donne l'affichage C, S, A, VL...
cib_v0 ou 1         = cible 0 ou 1 visible. Dans un dépôt, on y respecte la sécurité avec des vrais agents. Là, c'est avec une cible invisible.
butoir0 ou 1        = présence d'un butoir à l'extrémité 0 ou 1
meca0 ou 1         = signal mécanique (ou lumineux) à l'extrémité 0 ou 1
t_cib0 ou 1          = type de cible (A, C, F, H, ...) à l'extrémité 0 ou 1

Table C :
Une courbe C peut avoir 2 types :
  - La courbe C "cercle" qui est une courbe en 3 morceaux : un segment de droite, un arc de cercle, un segment de droite. Eventuellement, les segments de droite sont de longueur
    nulle et on a un vrai cercle.
  - La courbe C "parabole" qui est en un seul morceau et qui sert aux raccordement paraboliques, avec affichage simultané de la "parabole" et de "droite + cercle" pour qu'on puisse
    voir ce qu'on choisit

ID_pave   alpha0   alpha1   baseG0x   baseG0y   baseG0z   baseG1x   baseG1y   baseG1z   baseG2x   baseG2y   baseG2z   baseG3x   baseG3y   baseG3z   baseG4x   baseG4y   baseG4z   baseG5x   baseG5y   baseG5z   cercle1   parabo1   rayonc1   ratioc1   centr1x   centr1y   centr1z   cercle2   parabo2   rayonc2   ratioc2   centr2x   centr2y   centr2z   cible0   cible1   cib_v0   cib_v1   butoir0   butoir1   meca0   meca1   t_cib0   t_cib1

Je ne détaille pas tout, simplement qu'il faut 4 paramètres pour dessiner une courbe de Bezier cubique (l'arc de cercle) + 2 points pour les segments de droite, soit 6 points de BaseG0 à baseG5. J'ai aussi l'affichage sur les pupitres des centres des cercles suivant qu'on est coté 1 ou 2 (je ne rentre pas dans les détails).
Mais quand on dessine à l'échelle, il faut tout savoir.

Table S :
Une courbe S est formé de 2 courbes C tête bêche, soit 4 types : cercle - cercle, cercle -parabole, parabole - cercle, parabole - parabole.
Tout est modifiable à la souris : point d'inflexion, centre des cercles.
 
ID_pave   alpha0   alpha1   baseG0x   baseG0y   baseG0z   baseG1x   baseG1y   baseG1z   baseG2x   baseG2y   baseG2z   baseG3x   baseG3y   baseG3z   baseG4x   baseG4y   baseG4z   baseG5x   baseG5y   baseG5z   baseG6x   baseG6y   baseG6z   baseG7x   baseG7y   baseG7z   baseG8x   baseG8y   baseG8z   baseG9x   baseG9y   baseG9z   basG10x   basG10y   basG10z   cercle1   parabo1   rayonc1   ratioc1   centr1x   centr1y   centr1z   cercle2   parabo2   rayonc2   ratioc2   centr2x   centr2y   centr2z   ptBleux   ptBleuy   ptBleuz   cible0   cible1   cib_v0   cib_v1   butoir0   butoir1   meca0   meca1   t_cib0   t_cib1

On voit bien sur ces exemples que, si ces infos sont utiles pour le dessin du TCO dans le gestionnaire, ça ne sert à rien dans le gestionnaire lui-même.

Table des connecteurs :

X0x   X0y   X0z   pave0   cote_p0   form_p0   alpha0   pave1   cote_p1   form_p1   alpha1   atelier   retrait

X0x, y et z = coordonnées absolues du connecteur
pave0        = indice du pavé côté 0
cote0         = côté du pave0 relié au coté 0 du connecteur
forme0       = forme du pave0 reliée au côté 0 du connecteur
alpha0        = angle du côté 0 du pave0 du côté 0 du connecteur (vous suivez  :o)
Pareil pour le côté 1 du connecteur avec le pave1.
atelier         = si ce pavé est dessiné dans l'atelier, sur le TCO ou dans la palette
retrait         = si c'est une coupure de rail

Table Pavé :

ID_pave   X0x   X0y   X0z   v_devie   v_limit   ID_zone   manoeuv   type   poids   ligne00   ligne01   ligne10   ligne11   ligne20   ligne21   ligne30   ligne31   ligne40   ligne41   ligne50   ligne51   ligne60   ligne61   ligne70   ligne71

Les premiers sont évidents, les lignes correspondent aux lignes où on retrouve le pavé dans la table des connecteurs. C'est utile pour "remonter" dans la table des connecteurs quand on construit un itinéraire.

Voilà voilà...

Denis

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 11, 2024, 08:49:51 pm
Chouette ça va être beau 🤩

Oui ça va être beau ! La signalisation lumineuse m'a toujours fasciné sur les réseaux depuis tout gamin.

J'ai hâte de voir comment chacun aura appréhendé le sujet !

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 12, 2024, 07:44:38 am
Bonjour

@ Denis

Ce que l'on cherche à mettre en tables c'est la topologie d'un réseau, pas le dessin de ce réseau.

Par ailleurs Processing a tous les types de Java : boolean, char, byte, short, int, long, float et double.

Amicalement

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 12, 2024, 10:51:27 am
Quels sont les éléments nécessaires qui décrivent la topologie ?
Ces données serait entrées comme paramètres d’initialisation du gestionnaire.

Peut-être qu’un éditeur de topologie simple serait faisable pour fournir ces données dans un fichier json.

Est-ce une bonne approche de la question ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 12, 2024, 04:21:27 pm
j'ai fait un essai à la va-vite avec un fichier JSON pour décrire la topologie d'un réseau. Il y a juste trois zones et trois aiguilles, cela n'a rien à voir avec un réseau réel, c'est juste pour essayer certains mécanismes.

Il y a aussi des essais pour définir les précédents et les suivants des zones. Je n'aime pas trop les termes de précédents et suivants car cela oriente d'une certaine façon les zones et pose des problèmes avec les sens des trains et les boucles de retournement. J'ai utilisé le terme de VOISIN, il n'y a que deux voisins pour une zone (notés voisin1 et voisin2).

{
  "zones": [
    { "nom":"Z1","no":1 },
    { "nom":"Z2","no":2 },
    { "nom":"Z3","no":3 }
  ],
  "aiguilles": [
    { "nom":"A1","no":1 },
    { "nom":"A2","no":2 },
    { "nom":"A3","no":3 }
  ],
  "voisins": [
    { "voisin1": { "zone":"Z1","vois":"Z2"}},
    { "voisin2": { "zone":"Z1","cas": [
        { "vois":"Z2","aigs":[ {"aig":"A1","pos":"gauche"}, {"aig":"A2","pos":"droite"} ]},
        { "vois":"Z3","aigs":[ {"aig":"A1","pos":"droite"}, {"aig":"A2","pos":"gauche"} ]}
      ]
    }}
  ]
}

J'ai écrit à l'arrache un programme Processing qui traite ce fichier json. Ce programme crée les objets (instances) nécessaires pour les aiguilles et les zones automatiquement.

A l'aide de la description des voisins il crée des fonctionnelles qui permet aux zones d'obtenir dynamiquement en fonction de la position des aiguilles les voisin1 et les voisins2. On a donc une topologie dynamique du réseau.

Le fichier json donne pour les zones voisines une liste de position d'aiguilles. Exemple pour aller Z1 vers Z2 il faut que l'aiguille A1 soit à gauche et l'aiguille A2 à droite, pour aller de Z1 vers Z3 il y a d'autres contraintes.

Le fichier json est écrit avec un éditeur de texte et c'est plutôt pénible avec les accolades et les crochets. Je pense que l'on doit pouvoir tout coder ainsi.

Le programme Processing est trop mal écrit pour être publié pour l'instant.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 12, 2024, 05:51:14 pm
Bonjour,
Citer
Par ailleurs Processing a tous les types de Java : boolean, char, byte, short, int, long, float et double.
Bien sûr, Processing possède tous ces types. Mais il n'y a que 3 types pour les Table() : int, float, string.

Je suis d'accord avec le fait que j'ai surtout décrit ce qu'il faut pour dessiner un réseau. D'un autre côté, c'est le cœur de mon système : on dessine et on ne nomme rien.

Je ne suis pas convaincu par la typographie de JSON : c'est lourd et sujet à plein d'erreurs de frappe.

J'arrive, avec Processing aussi, à faire un gestionnaire qui fonctionne à partir d'Excel, qui, à mon avis, est nettement plus souple d'emploi et moins sujet aux fautes de frappe.
Un fichier "zones", un fichier "aiguilles", un fichier "voisins", ...
L'autre avantage pour un utilisateur débutant, c'est qu'il n'y a pas, dans la saisie, à tenir compte d'une structure sous-jacente. Ce sont des données brutes.
Le programme qui va traiter ça va être plus compliqué, évidemment, mais quel plaisir de ne pas avoir à se creuser la tête à la saisie.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 12, 2024, 06:18:27 pm
Je ne suis pas convaincu par la typographie de JSON : c'est lourd et sujet à plein d'erreurs de frappe.

Je suis bien d'accord. Tu pourrais donner des idées de ce qu'on pourrait écrire dans le ou les fichiers pour le gestionnaire.

Pierre.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 12, 2024, 06:35:34 pm
Bonsoir à tous,

Perso, j'utilise un fichier json pour stocker toutes les informations concernant les paramètres de mon réseau car je trouve cela pratique. Mon fichier json est stocké en flash de l'ESP32 et ça aussi c'est vraiment pratique.

Il existe une excellente bibliothèque qui fonctionne sur Arduino et ESP32 et qui simplifie grandement le travail : https://arduinojson.org/ (https://arduinojson.org/)

Très nombreuses méthodes pour convertir à partir de nombreux standards vers json ou vis et versa.

C'est vrai que la syntaxe de json n'est pas très intuitive mais il existe des éditeurs en ligne qui permettent de valider ou qui soulèvent les erreurs.

Attention toute fois avec json à ne pas être trop verbeux car tout ceci est quand même du texte et chaque caractère un byte, ça peut vite donner des fichier d'1 Mo !!!

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 08:56:23 am
Bonjour,

En fait, pour dessiner, j'utilise des formes (c'est d'ailleurs toi qui m'as donné cette brillante idée).

La caractéristique essentielle d'une forme c'est que, quelle qu'elle soit, elle n'a que 2 extrémités. Pas plus, pas moins : pile 2.

Si on raisonne en formes et pas en élément de voie, on est toujours dans la même situation, même dans les appareils de voie.
Autant, pour dessiner, je dois décrire tout un tas de formes dans le détail alors que, là, on peut raisonner par "lignes" qui sera une suite de formes simples.

Les lignes :

Voir le schéma (il vaut mieux l'imprimer pour pouvoir comprendre et vérifier :

Les zones (en dehors de z3, z4, z11 et z12) sont constituées d'une seule ligne.

Je donne comme nom de ligne un entier (ça prend peu de place) qui démarre par 1, non significatif.

Il est composé du numéro de zone, puis du numéro de ligne dans la zone.
soit 100000+10*z+l
La ligne 0 (= z0) s'appelle 100000
La ligne 1 (= z1) s'appelle 100010
La ligne 2 (= z2) s'appelle 100020

La ligne 10 (= z10) s'appelle 100100
Passons maintenant aux appareils de voie :
z3 est composé de 3 lignes :
100031, 100032, 100033
z4 est composé de 2 lignes :
100041, 100042
z11 est composé de 3 lignes :
100111, 100112, 100113
z12 est composé de 2 lignes :
100121, 100122

Comme on le voit, j'ai volontairement mis un 0 comme numéro de ligne quand il n'y avait qu'une ligne dans la zone. Ainsi, quand on lit le nom de la ligne, on sait immédiatement qu'il n'y a pas à chercher d'autre numéro de ligne dans cette zone.

Dans les appareils de voie, les lames donnent une seule direction pour une position donnée.
Donc, la position des lames donne une et une seule ligne.
Le dernier chiffre de la ligne donne donc la position des lames.

Remarque importante :

Les lignes sont orientées et j'ai mis (en rouge sur le schéma) un 0 au début de la ligne et un 1 en fin de ligne.
 
La notion SNCF de pair-impair est difficilement applicable strictement aux réseaux miniatures à cause des boucles de retournement et, dans la pratique, on pourra toujours trouver des cas où ça n'est pas applicable. Il suffit donc de mettre des 0 et des 1 pour le sens de la ligne ET DE S'Y TENIR.

Il va y avoir une table des lignes avec la longueur des lignes comme premier critère.

Les connecteurs :

Un connecteur, c'est un point entre 2 lignes (dans un carré rouge sur le schéma).

Pour construire la table des connecteurs, je procède en 2 étapes :
Dans Excel, pour simplifier la saisie, on a :

(https://www.locoduino.org/local/cache-vignettes/L150xH123/capture_d_ecran_2024-01-13_084434-cebde-8ddb5.png?1705132048)

En gain de place dans la table, on crée le nombre ZLC précédé d'un 1 non significatif.
soit 100000+100*z+10*l+c

(https://www.locoduino.org/local/cache-vignettes/L78xH150/capture_d_ecran_2024-01-13_084616-259bb-85d9e.png?1705132065)

Remarque 1 : un connecteur n'est pas orienté. Vous pouvez choisir de construire la ligne dans le sens qu'on veut. C'est souvent plus simple de partir de l'aiguille en pointe.

Remarque 2 : cette table est statique : l'identifiant d'un connecteur peut générer plusieurs lignes A CE STADE. Ce ne sera plus vrai après, quand on aura la position de toutes les lames.

On a donc atteint 2 objectifs :
1°) Une saisie brute simple dans Excel
2°) Description du réseau économe en place

Dans la description des lignes, il sera utile de savoir à quelle ligne des connecteurs est situé la ligne coté 0 et la ligne côté 1
Pour cela, il faut d'abord connaitre la table des connecteurs dynamique, c’est-à-dire tenant compte de la position des lames. Quand on a la position des lames, on n'a qu'une et une seule ligne côté 0 et côté 1 pour chaque zone.

Connaître la position des lames c'est la toute première chose à faire à chaque tour.

Puis on calcule l'ArrayList des connecteurs dynamiques.
Puis on a une procédure qui cherche pour chaque ligne la ligne suivante côté 0 et côté 1.
On en déduit quelles lignes n'ont pas de suivante et, donc, où il faut afficher le carré.

Remarque :

Un train est toujours sur la dernière zone d'un itinéraire (un itinéraire est orienté) et il s'ensuit que la première zone d'un itinéraire n'a pas de suivante et affiche donc le carré.
Avant que je continue, dites-moi ce que vous pensez de cette première partie.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 13, 2024, 12:04:23 pm
Bonjour

Sur les conseils de Christophe, j'ai regardé les éditeurs de fichiers json. C'est beaucoup plus pratique.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 01:04:12 pm
@Pierre

C'est sûr que, moi, je pars d'un dessin et que je n'ai rien à rentrer pour arriver au même résultat.
D'ailleurs, sur le schéma, j'ai dû tout rentrer à la main sur le dessin issu de mon éditeur (qui ne comporte aucun texte parce que je ne m'en sers pas)
Mais il faut faire le dessin dans un éditeur spécifique...

Ce que je crains, c'est qu'on s'achemine vers une méthode totalement incompatible avec mon gestionnaire, bien qu'elle ait, elle aussi, besoin d'un bus CAN pour passer des trains virtuels aux trains réels.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 02:26:04 pm
@Denis Excuse-moi je ne comprends pas bien ce que tu as voulu dire. Tu dis « je n'ai rien à rentrer pour arriver au même résultat » et tu dis ensuite « j'ai dû tout rentrer à la main ».

Pour moi, quel que soit la méthode initiale utilisée, il faut bien arriver à un fichier de description des liaisons. Très simplement, il faut bien dire par exemple que c1 est relié à c2 quand l’aiguille A1 est droite (ou qu’il n’y a pas d’aiguille) et à c3 quand A1 est déviée. Et ainsi de suite. A vrai dire, on s'en fout que ce soit des droites, courbes ou des virages. Ce sont simplement des liaisons.

Que tu utilises un processus de découverte comme le mien, un graphe comme toi ou toute autre méthode, (pourquoi pas renseigner à la main un fichier, un peu fastidieux mais réaliste), il faut bien que cela soit concrètement traduit dans un fichier, non ? Que ce fichier soit json ou autre ?

L’avantage du fichier json, c’est que l’on a un couple clef/valeur, et que les valeurs d’une clef peuvent aussi tenir dans des tableaux auxquels on peut accéder avec leur index. On est déjà en présence d’une structure de bases de données qui se conjugue bien avec le c++ et aussi le javascript dont on pressent bien qu’ils seront présents dans un gestionnaire et dans sa représentation graphique, le TCO. C’est Etienne je crois qui en a parlé encore récemment. Json est un format de stockage mais aussi et surtout un format d'échange qui est né avec et pour la programmation objet.

Ou alors, dois-je comprendre que ton gestionnaire et ton outil graphique ne font qu'un ?

Sinon, il ne doit pas y avoir de problème à ce que ton outil graphique exporte les liaisons sous forme clefs/valeurs, soit directement en json, soit dans un autre format qui sera alors traduit par programmation en json ! Ca ouvre quand même beaucoup plus d'horizons et de choix possibles pour les gestionnaires et le langage de programmation.

Mais peut-être n'ai-je rien compris à ton projet ?
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 13, 2024, 03:40:01 pm
Ce que je crains, c'est qu'on s'achemine vers une méthode totalement incompatible avec mon gestionnaire, bien qu'elle ait, elle aussi, besoin d'un bus CAN pour passer des trains virtuels aux trains réels.

Mais comme le gestionnaire de Pierre est totalement compatible avec le Can si on l’installe dans une carte LaBox par exemple, qui tourne sur ESP32, une configuration du réseau en utilisant le wifi ou BLE devrait être possible.
Est-il possible de faire un petit éditeur wifi pour générer le json ?
Sans avoir besoin de l’échelle exacte.

Mais je n’irai pas jusqu’à y faire tourner aussi la centrale DCC, ni le TCO sur carte graphique. Avec la Can rien de plus simple que de répartir dans des cartes séparées.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 04:03:59 pm
A tous ceux que réfléchissent à la meilleure façon de réaliser la description du réseau, je propose très humblement de regarder le principe que j’ai adopté pour faire cette description. J’en parle car j’ai moi aussi passé beaucoup, beaucoup de temps là-dessus, j’ai moi aussi passé beaucoup de temps à chercher, à regarder ce qui existait (dont le gestionnaire de Pierre). Et puis, j’ai trouvé une méthode qui est simple et surtout qui fonctionne. Alors, pourquoi ne pas la reprendre.

Je ne parle pas du processus de découverte avec les boutons et les switches dont j’ai parlé dans un autre post mais la méthode et la structure même du fichier de description. Cette structure de description qui a par ailleurs un énorme avantage pour la simplification de la programmation du gestionnaire par la suite.

Il est probable que cette méthode rencontrera un jour des limites (appareils de voies particuliers etc…) mais elle aura fonctionné pour tous les autres cas (nombreux) et je ne doute pas qu’avec de la réflexion, nous arriverons à les résoudre en temps voulu. Comme j’ai pu le dire par avant, commençons par résoudre les cas généraux avant les cas particuliers.

Je précise aussi que ce principe de description vaut tout autant pour des gestionnaires distribués comme j’ai pu le faire que pour des gestionnaires centralisés.

Il faut à la base poser un postulat qui est qu’un canton peut être relié directement à un nombre d’autres cantons que l’on fixe arbitrairement.

Ainsi, pour moi, j’ai fixé à 4 le nombre de cantons auxquels on peut accéder à horaire et le même nombre à anti-horaire. Soit 8 au total. Mais rien n’empêche de dire 10, 12, 16 ou plus. Seules apparaitront sans doute des limites de mémoire du système.

J’ai convenu de préfixer les cantons à horaires avec la lettre « p » pour plus et les cantons à anti horaire avec la lettre « m » pour moins bien sûr.

Voici comment sont nommé donc mes 8 cantons « potentiellement » voisins :

"p00":"null",
"p01":"null",
"p10":"null",
"p11":"null",
"m00":"null",
"m01":"null",
"m10":"null",
"m11":"null",



P00 désigne le canton accessible à horaire s’il n’y a pas d’aiguille ou si la ou les aiguilles sont droites

P01 (lisez cela comme des bits de droite vers la gauche), le canton accessible, 1° aiguille à horaire déviée

P10, canton accessible à horaire 1° aiguille (bit 0 à 0) droite, seconde aiguille déviée (bit 1 à 1)

Enfin P11, canton accessible à horaire 1° aiguille (bit 0 à 1) dévié, seconde aiguille déviée (bit 1 à 1)

Si j’avais choisi 6 aiguilles, j’aurais eu bien sûr une notation de type P010 par exemple qui fonctionne aussi parfaitement.

Alors, on voit écrit NULL dans le petit tableau ci-dessus extrait de mon fichier json de description. C’est parce que j’ai eu la flemme de modifier cela mais que cela va aussi aider à la compréhension de la suite.

TRES IMPORTANT : P00, P01 … P1111 et M00, M01 … M1111 sont toujours créés et « pointent » toujours sur une position constante d’un canton voisin sur le réseau. Ce canton peut exister et auquel cas, dans la programmation, P00 pointera sur une valeur non nulle ou ne pas exister, d’où un pointeur null !

On voit très bien que même si on devait le remplir à la main, il n’est pas très compliqué de renseigner un tel tableau.

Et en procédant ainsi, IL N’Y A RIEN D’AUTRE à renseigner. Les aiguilles sont par exemple créées automatiquement par le logiciel. Si P00 est non nul et P01 est non nul, le logiciel en déduit qu’il y a une aiguille. CQFD mon cher Wattson !

Et il en va de même des signaux et même des cibles à placer.

Et alors, en termes de programmation du gestionnaire maintenant, je peux vous assurer que les économies en temps de programmation et de débug sont considérables.

Les instances de ma classe Node qui représentent les satellites de cantons à l’intérieur du gestionnaire incluent un tableau de pointeurs nodePeriph.

Il s’entent que les instances sont créées elles aussi automatiquement par exemple au moment de l’import du fichier json de description.


class Node
{
private:
  …

public:
  Node();
  Node *nodePeriph [nodePsize];
  Aig *aig[aigSize];
  Loco loco;
  Sensor sensor[sensorSize];
  Signal *signal[signalSize];


}

Et dans le constructeur :

  for (byte i = 0; i < nodePsize; i++)
    this->nodeP[i] = nullptr;


nodePsize, c'est le nombre de canton total (maximum) que l'on souhaite avoir.

C’est ensuite que l’on affecte ou non des valeurs à ces pointeurs selon que l’on ait ou non la présence de cantons.

Pour l’avoir expérimenté avec succès depuis plus de 9 mois maintenant, je vous assure que c’est redoutablement simple et puissant.

A votre disposition si vous souhaitez plus d’informations.

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 04:51:07 pm
@ Christophe
Citer
Ou alors, dois-je comprendre que ton gestionnaire et ton outil graphique ne font qu'un ?
Oui, justement, le gestionnaire et l'outil graphique ne font qu'un.

Je dessine dans un éditeur graphique, ce qui génère un fichier lisible dans Excel qui sert à mémoriser le dessin ET comme entrée au gestionnaire.

A part en développement du programme lui-même, on n'a pas à intervenir dans le fichier. On n'a même pas besoin de regarder quelle tête il a (sauf si on est curieux)

Je ne rentre aucun numéro d'aiguille, je ne nomme aucun signal, je ne décris pas le réseau (à part que je le dessine), ça se fait tout seul et ça abonde un fichier.

Alors, pour apparaitre dans ce fil sur les gestionnaires, j'ai dû mettre du texte partout, remplir moi même avec mes petites mimines un fichier Excel effectivement lourd à rentrer à la main. Mais le vrai fichier que j'utilise avec mon gestionnaire, c'est celui-là. Il n'y a pas de texte, pas parce que je l'ai effacé, mais parce que je ne l'ai jamais rentré.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 05:08:46 pm
Ma méthode est tellement atypique que j'en viens à me demander ce que je fais sur ce fil. :-[
Je ne peux pas vous aider (je me pose des questions que vous ne vous posez pas)
Et vous ne pouvez pas m'aider non plus (vous vous posez des questions que je ne me pose pas)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 05:22:14 pm
Mais ça fonctionne au moins ce que tu as fait ? C'est ça l'essentiel ! Au moins pour toi.

Après, ce serait bien que ça crache un fichier où il n'y aurait que les liaisons et les positions comme je l'explique plus haut P00, P01 etc..., qu'il soit en json ou autres peu importe.

A partir de la description, ça entre dans n'importe quel gestionnaire "maison"
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 05:36:20 pm
Comme je l'ai dit, ça fonctionne avec des trains virtuels ... sur un PC.

Donc, il me faut une interface PC/CAN pour que ça marche avec des trains réels.
Mon (gros) problème sera de les synchroniser en position entre le terrain et l'écran (comme dans CDMRail)
Mais je ne vois pas de solution pour passer d'un texte brut avec un fichier JSON dont vous semblez tous avoir besoin.

D'autre part, vous pensez "gestionnaire pur" qui, c'est vrai, n'a pas besoin de TCO.
Or, pour moi, c'est le TCO sur PC qui commande les trains.
On n'a pas du tout la même façon de voir le problème.

Voilà

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 05:36:48 pm
@Denis,

J'ai regardé ton tableau, il y a moyen de faire quelque chose à partir de cela :

(https://forum.locoduino.org/index.php?action=dlattach;topic=1645.0;attach=5630;image)

je m'y retrouve à peu près sauf, qu'est-ce que tu appelles "ligne" ?

Comment arrives-tu à déterminer pair et impaire (je suppose que c'est ce que ça veut dire dans cote0 ou coté1).
Où est pair (gauche ? droite ?) où est impaire ?



Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 05:45:48 pm
Citer
Les lignes :

Voir le schéma (il vaut mieux l'imprimer pour pouvoir comprendre et vérifier :

Les zones (en dehors de z3, z4, z11 et z12) sont constituées d'une seule ligne.

Je donne comme nom de ligne un entier (ça prend peu de place) qui démarre par 1, non significatif.

Il est composé du numéro de zone, puis du numéro de ligne dans la zone.
soit 100000+10*z+l
La ligne 0 (= z0) s'appelle 100000
La ligne 1 (= z1) s'appelle 100010
La ligne 2 (= z2) s'appelle 100020

La ligne 10 (= z10) s'appelle 100100
Passons maintenant aux appareils de voie :
z3 est composé de 3 lignes :
100031, 100032, 100033
z4 est composé de 2 lignes :
100041, 100042
z11 est composé de 3 lignes :
100111, 100112, 100113
z12 est composé de 2 lignes :
100121, 100122

Comme on le voit, j'ai volontairement mis un 0 comme numéro de ligne quand il n'y avait qu'une ligne dans la zone. Ainsi, quand on lit le nom de la ligne, on sait immédiatement qu'il n'y a pas à chercher d'autre numéro de ligne dans cette zone.

Dans les appareils de voie, les lames donnent une seule direction pour une position donnée.
Donc, la position des lames donne une et une seule ligne.
Le dernier chiffre de la ligne donne donc la position des lames.

Remarque importante :

Les lignes sont orientées et j'ai mis (en rouge sur le schéma) un 0 au début de la ligne et un 1 en fin de ligne.
 
La notion SNCF de pair-impair est difficilement applicable strictement aux réseaux miniatures à cause des boucles de retournement et, dans la pratique, on pourra toujours trouver des cas où ça n'est pas applicable. Il suffit donc de mettre des 0 et des 1 pour le sens de la ligne ET DE S'Y TENIR.

En gérant les "côtés", c'est comme gérer pair/impair.
La problématique, c'est qu'il y a, de façon sous-jacente, une structure dans JSON (et c'est tout l'intérêt, d'ailleurs) et que le fichier Excel n'a aucune structure. C'est du texte brut.

Remarque : dans mon système, c'est le programme qui remplit le fichier Excel. Là, je l'ai fait à la main pour montrer ce qu'on peut obtenir.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 05:47:10 pm
Comme je l'ai dit, ça fonctionne avec des trains virtuels ... sur un PC.

Donc, il me faut une interface PC/CAN pour que ça marche avec des trains réels.
Mon (gros) problème sera de les synchroniser en position entre le terrain et l'écran (comme dans CDMRail)
Mais je ne vois pas de solution pour passer d'un texte brut avec un fichier JSON dont vous semblez tous avoir besoin.

D'autre part, vous pensez "gestionnaire pur" qui, c'est vrai, n'a pas besoin de TCO.
Or, pour moi, c'est le TCO sur PC qui commande les trains.
On n'a pas du tout la même façon de voir le problème.

Voilà

Denis

Bon ça une interface Serial (PC) vers CAN c'est que dalle, j'en ai fait une qui est sur le Git de Locoduino.

Pour passer de texte brut à json, le mieux est encore d'écrire son propre programme en c++ qui ouvre et lit le fichier brut qui sera de toutes façons structuré (séparateur de champs, séparateur de lignes) et d'ajouter par programmation la syntaxe pour json, ça aussi c'est que dalle. Surtout si c'est un fichier comme j'ai mis ci-dessus.

Je préfère aussi quand c'est séparé. Ton éditeur graphique peut être une bonne solution. Export, traitement json, puis import dans un ESP32 par exemple et un gestionnaire en C++ assez universel, où l'on peut travailler à plusieurs et où chacun peut ensuite adapter à sa sauce.

Et puis un TCO, chacun fait comme il veut, physique ou HTML ou autre qui communique lui aussi avec une passerelle CAN.

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 05:50:30 pm
Citer
Les lignes :

Voir le schéma (il vaut mieux l'imprimer pour pouvoir comprendre et vérifier :

Les zones (en dehors de z3, z4, z11 et z12) sont constituées d'une seule ligne.

Je donne comme nom de ligne un entier (ça prend peu de place) qui démarre par 1, non significatif.

Il est composé du numéro de zone, puis du numéro de ligne dans la zone.
soit 100000+10*z+l
La ligne 0 (= z0) s'appelle 100000
La ligne 1 (= z1) s'appelle 100010
La ligne 2 (= z2) s'appelle 100020

La ligne 10 (= z10) s'appelle 100100
Passons maintenant aux appareils de voie :
z3 est composé de 3 lignes :
100031, 100032, 100033
z4 est composé de 2 lignes :
100041, 100042
z11 est composé de 3 lignes :
100111, 100112, 100113
z12 est composé de 2 lignes :
100121, 100122

Comme on le voit, j'ai volontairement mis un 0 comme numéro de ligne quand il n'y avait qu'une ligne dans la zone. Ainsi, quand on lit le nom de la ligne, on sait immédiatement qu'il n'y a pas à chercher d'autre numéro de ligne dans cette zone.

Dans les appareils de voie, les lames donnent une seule direction pour une position donnée.
Donc, la position des lames donne une et une seule ligne.
Le dernier chiffre de la ligne donne donc la position des lames.

Remarque importante :

Les lignes sont orientées et j'ai mis (en rouge sur le schéma) un 0 au début de la ligne et un 1 en fin de ligne.
 
La notion SNCF de pair-impair est difficilement applicable strictement aux réseaux miniatures à cause des boucles de retournement et, dans la pratique, on pourra toujours trouver des cas où ça n'est pas applicable. Il suffit donc de mettre des 0 et des 1 pour le sens de la ligne ET DE S'Y TENIR.

En gérant les "côtés", c'est comme gérer pair/impair.
La problématique, c'est qu'il y a, de façon sous-jacente, une structure dans JSON (et c'est tout l'intérêt, d'ailleurs) et que le fichier Excel n'a aucune structure. C'est du texte brut.

Remarque : dans mon système, c'est le programme qui remplit le fichier Excel. Là, je l'ai fait à la main pour montrer ce qu'on peut obtenir.

Bon je n'ai toujours pas compris l'intérêt de "ligne" mais je vais chercher.

Franchement, "horaire ou anti horaire" n'est il pas plus explicite ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 06:06:27 pm
Je construit des itinéraires (nécessaires, pour moi, dans le fonctionnement de mon gestionnaire).
Un itinéraire est une grande ligne, composée de lignes du réseau aboutées.
On a besoin de connaître l'orientation de chaque ligne, avant de les abouter, pour qu'elles soient toujours orientées dans le bon sens (cas des boucles de retournement, par ex) et je connais l'orientation (locale) de chaque ligne parce qu'elle a un côté 0 et un côté 1.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 06:08:18 pm
Ouais, je pense comprendre à peu près ce que tu veux dire, mais effectivement tu vas finir bien seul !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 06:09:46 pm
C'est dommage car du fichier ci-dessus, il y a moyen de faire quelque chose

(https://forum.locoduino.org/index.php?action=dlattach;topic=1645.0;attach=5630;image)

Mais pour cela il faut que tu me dises ce que tu penses de horaire et anti horaire ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 06:12:49 pm
Je pense par ailleurs que tu abordes trop vite la notion d'itinéraire. Elle est importante mais vient après dans l'analyse
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 13, 2024, 06:16:08 pm
@ Denis

Je suis venu aussi à séparer le gestionnaire du TCO, c'était déjà le cas avec l 'ancien Locoduinodrome.

Un programme pour le gestionnaire et un programme pour le TCO. Cela permet d'avoir le TCO que l'on veut.

Les deux programmes peuvent être sur la même machine en communicant par le réseau (il y a une adresse IP pour cela). Les biens heureux qui sont sous Unix ou un dérivé d'Unix (MacOS, Linux, ...) peuvent utiliser les tubes de communication d'Unix (pipes) très performants.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 13, 2024, 06:31:21 pm
En utilisant un éditeur de fichier json, j'ai saisi toutes les zones, toutes les aiguilles et les suivants et précédents des zones en fonction de la position des aiguilles, nommés "voisins1" et "voisins2".

Je me suis permis de changer A7 en A6. Il doit encore avoir des erreurs dans le fichier. Pour les TJS c'est flou, il faudrait préciser à quelle aiguille (lames, moteur) s'adressent les noms(A1-A3, ...).

Je joint le fichier json pour se faire une idée. Le fichier décrit complètement la topologie du réseau (le graphe des voies).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 06:57:05 pm
@Pierre,

J’aime bien ce fichier et cette présentation. Bien sûr, sur de grands réseaux, il faudra automatiser la génération de ce type de fichier, mais pour des ajustements ou pour de petits réseaux comme ici, c’est tout à fait réaliste d’intervenir dessus à la mano.

Je vais avoir d’autres questions mais dans un premier temps, pourquoi la distinction voisin1, voisin2 ?

PS : Intervenir à la mano dans un fichier reste toujours délicat (ligne 332 drpite au lieu de droite !)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 07:02:08 pm
@ Pierre

C'est sûr qu'il faut détailler la méthode que tu utilises.
D'un autre côté, ça ne parait pas si impossible que ça de partir de mon (vrai) fichier pour arriver à ça en Processing.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 07:02:28 pm
@Pierre, la seconde question ne s'est pas fait attendre.

Je ne vois pas comment se fait le cantonnement, j'entends par là quels sont les zones qui appartiennent au même canton ?

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 07:07:14 pm
Citer
Je suis venu aussi à séparer le gestionnaire du TCO, c'était déjà le cas avec l 'ancien Locoduinodrome.

C'est dur, avec des trains virtuels...

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 13, 2024, 07:08:35 pm
Je vais avoir d’autres questions mais dans un premier temps, pourquoi la distinction voisin1, voisin2 ?
Une zone a deux cotés on entre par un coté et on ressort par l'autre ou inversement. Comme je l'ai déjà dit les appellations précédente et suivante induisent un peu un sens pour la zone, cela me gène avec les zones parcourues dans les deux sens. d'ou mon appellation voisins (1 et 2).

Mais c'est peut être provisoire.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 07:17:00 pm
Oui c'est bien à cela que je pensais mais je crois (je pense !) que c'est dans zones qu'il faut apporter cette information :

"zones" : [
    {
      "nom" : "Z0",
      "sens" : "pairimpair",
      "voisin1" : ZX,
      "voisin2" : ZY
    },
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 07:26:53 pm
quelle que chose dans ce gout là est même mieux : (peut être faux écrit comme cela mais c'est l'idée)

"zones" : [
    {
      "nom" : "Z0",
      "sens" : "pairimpair",
      "aigs" : [
            {
              "id" : "A1",
              "pos" : "droite",
              "vois" : "ZX"
            },
            {
              "id" : "A3",
              "pos" : "gauche",
               "vois" : "ZY"
            }
          ]
    },
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 13, 2024, 07:37:20 pm
@Pierre, la seconde question ne s'est pas fait attendre.

Je ne vois pas comment se fait le cantonnement, j'entends par là quels sont les zones qui appartiennent au même canton ?

Christophe
Il faut deux niveaux de définition :
Les cantons electriques définis par les coupures et les capteurs de courant. Ces cantons peuvent être connectés à plus de 2 autres canton.
Et des blocs logiques qui vont d'un feu à un autre. Ces blocs ont une seule entrée et une seule sortie et sont constitués d'un ou plusieurs cantons qui se suivent.
C'est au niveau des blocs logiques qu'il faut définir les directions.
Le bloc est considéré comme occupé si l'un de ses cantons est occupé ou réservé par un autre train. On n'autorise un train sur un bloc qu'après avoir réservé tous les cantons du bloc et on libère le bloc et ses cantons quand le train quitte le bloc.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 13, 2024, 07:40:32 pm
Zone, Bloc, Canton  8)

Le canton d'Etienne ressemble-t-il à la zone de Pierre ?

Selon Wikipedia : "Le canton est une section de voie, généralement délimitée par des signaux, dont la longueur est fonction de la distance d'arrêt ou de ralentissement d'un train, dans les conditions les plus défavorables sur la portion de ligne considérée."
En plus on lit souvent les zones d'arrêt, zones de ralentissement.


Est-il possible de donner une définition reconnue et acceptée par tous pour la suite des discussions ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 13, 2024, 08:42:55 pm
Dans les vrais trains le canton est défini entre 2 signaux.
Mais dans les nôtres c'est plutôt les découpages électriques avec les capteurs de courant.

Après, peu importe comment on les nomme, le fait est qu'il faut les deux sur nos réseaux.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 13, 2024, 08:51:51 pm
Le problème, c'est qu'à la SNCF, ils doivent gérer TOUS les cas, TOUTES les situations. Et des cas particulier, il y en a plein.
Je propose de considérer les cas les plus fréquents à la SNCF sur nos réseaux. Et ne pas considérer les cas les plus particuliers de la SNCF.

Zone = là où il y a une détection électrique
Canton = constitué d'une ou plusieurs zones, mais qui ont un signal à chaque extrémité (ou à une seule si le canton est unidirectionnel).
Bloc = c'est un système de gestion de l'espacement des trains qui, entre autres, utilise des cantons.

Denis

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 08:59:13 pm
Zone = là où il y a une détection électrique

Je ne comprends pas bien pourquoi parler d'une détection électrique ? Détection de présence ? Détection par consommation de courant ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 09:00:26 pm
Et pourquoi ne serait-ce pas la même détection de présence que sur la voie qui est avant par exemple ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 09:29:25 pm
A la sncf on parle de canton, je ne vois pas de zones ? : https://www.sncf.com/fr/groupe/coulisses/regulation-trafic
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 13, 2024, 10:05:27 pm
On est obligé à cause de la détection par courant. Si tu comptes les essieux au passage des feux et que tu as
des conducteurs qui savent gérer un freinage et un arrêt tu n'as pas besoin des zones.
Avec la détection par courant, quand les feux dans un sens de circulation ne sont pas au même endroit que ceux de l'autre sens tu as
obligatoirement des cantons avec plusieurs zones car tu dois avoir une coupure à chaque feu.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 13, 2024, 10:21:39 pm
Je vais peut-être écrire une c.. Bêtise :

Ne serait-il pas possible d'apprendre à notre gestionnaire toutes les connexions et toutes les possibilités de circulation en faisant simplement rouler un train partout dans le réseau après avoir déclaré toutes les zones et les emplacements des signaux (autour de certaines coupures) de façon banalisée.

Ne sommes nous pas entrés dans l'IA et l'apprentissage ?

Mais pas forcément avec de gros moyens.

Apprendre les connexions me semble assez facile, pour les signaux je pense qu'il faudra l'aider.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 13, 2024, 10:31:42 pm
L'idée est sympathique mais il y a plus efficace et plus simple à mon avis.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 13, 2024, 11:22:25 pm
Bonsoir

1/2 journée en expo et j'arrive lire vos progressions importantes dans le même temps! Ca turbine!!

Je reviens sur quelques info qui ont retenu des questionnement

@Christophe: tu indiquais que si le nombre d éléments augmente ( tu en as retenus 8) on peut s orienter vers des saturation de mémoire. Si je ne me trompe pas les plus gros ESP32 disposent de 16Mo soit 4 fois ceux que tu a retenus pour tes satellites autonomes ( mais peut être pas dispo avec USB etc. en module?) Donc jusqu' à cette saturation on a encore un peu de marge.

Sur les terminologies... il y a aussi des "cantons" sans zone d arrêt. Le terme section serait même plus juste puisque une section aura pour but de relie via des positions d appareil des cantons. Un canton étant une ou un ensemble de zones sur lesquelles entre une entrée et une sortie bordées par un signal on peut circuler ou stationner ce qui par principe ne doit pas exister sur une section sauf de façon transitoire ou par débordement ( un trin plus long qui ne rentre pas en entier dans le canton suivant déborde alors sur la section d appareils qui le précède.

Pour ceux qui ont connu DRIVING RAILWAY ces notions étaient définies comme CANTON ( banalise avec 2 ZA au extrémités ou a sens unique avec 1 ZA en extrémité)
Chaque canton était "fléché" dans sa représentation comme un vecteur.( idem pour les appareils)
Les appareils dans les cas de grill complexes étaient attribués à des cantons sans ZA
La fluidité des trafic s'opérait avec un découpage optimal des différents cantons avec et sans ZA.
Le produit disposait d un éditeur pour réaliser le dessin et de menus dans cet éditeur pour paramétrer les éléments.( Mode conception)
Le mode RUN était dédié aux circulations/exploitations…

Christophe a utilisé une méthode de découpage différente à priori avec ses satellites autonomes ( et semble un des plus avancé avec Pierre sur ces sujets)
L'expérience parle! On le sent bien. C est appréciable.( même si on ne sait pas encore "tout" des arcanes qui sont dessous)

Sur CDM RAIL son concepteur JP PILLOU m'avait expliqué qu'il effectuait une re synchro pour chaque train lorsque celui ci était détecté en entrée dans une zone de détection. Il effectuait alors un comparo entre position réel et théorique et actualisait en conséquence. Je pense qu'on aura possiblement le même genre de mécanisme sous jacent.

Ce mécanisme doit aussi être présent sur plusieurs produits existants.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 07:16:31 am

@Christophe: tu indiquais que si le nombre d éléments augmente ( tu en as retenus 8) on peut s orienter vers des saturation de mémoire. Si je ne me trompe pas les plus gros ESP32 disposent de 16Mo soit 4 fois ceux que tu a retenus pour tes satellites autonomes ( mais peut être pas dispo avec USB etc. en module?) Donc jusqu' à cette saturation on a encore un peu de marge.


@ Laurent

Merci d'aborder ce point. J'ai écrit ceci pour me prémunir des scuds qui ne vont pas tarder à me tomber dessus, aussitôt qu’il y aura (peut-être) un consensus sur la description du réseau.

Je te rassure, en pratique, il n'y a aucune crainte à avoir concernant la mémoire. Je m'explique : Je recommande de modéliser les classes Nodes (ou Cantons, peu importe comment on les appelle à ce stade), avec un nombre de liaisons potentielles (de voisins comme dit Pierre) qui est fixé à l'avance. 4, 6, 8 voisins pour un canton, à chacun de choisir selon l’importance de son réseau.

Cela se traduit dans la classe par un membre qui va avoir cette forme là :  Node * nodePeriph[4]; ou ça Node * nodePeriph[6]; ou encore ça Node * nodePeriph[8];

Je m’attends donc à ce que l'on me dise qu'il est stupide de créer des instances dont beaucoup ne serviront jamais. Après tout, il existe le « new » en c++ qui permet de créer dynamiquement des instances à la demande et selon les besoins. Ce qui est totalement vrai sur le principe.

Mais en pratique, j’expliquerai cela en particulier dans le fil dédié que j’ai ouvert sur les satellites autonomes, nous verrons que ça présente de très nombreux avantages de ne pas, pour cette fois, respecter la règle canonique.

Le seul inconvénient (relatif) de créer des instances qui ne serviront peut-être jamais est que cela consomme de la mémoire !

Mais livrons-nous à un petit calcul, nous parlons ici de pointeur comme nous l’indique l’astérisque ( Node * nodePeriph[4]), un pointeur, quelque soit l’objet sur lequel il pointe, c’est toujours 32 bits en mémoire.

Imaginons que nous ayons que nous ayons 25 cantons avec chacun 4 pointeurs cela donne :
25 x 4 X 32 bits = 3200 bits ou /8 = 400 octets. Bon ça commence à faire mais pas de quoi perturber un ESP32 même à 4Mo de mémoire flash.

L’ambiance quelque peu tendu sur le sujet m’oblige à des circonvolutions très chronophages dont je me dispenserais bien sois en assuré.

Christophe
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 07:29:41 am
Bonjour,

@tous

Je redis ici ce que je dis depuis le début : Il n’y a pas lieu de retenir le concept de zone dans la description du réseau et de ses liaisons. Cela étant même contre-productif.

Il y a des cantons (et il n’y a que des cantons) avec ou non des appareils de voie (aiguilles, croisements etc…) aux extrémités. Ce qui nous amène à établir une liste de liaisons, point barre.

Vous décrivez une zone comme servant à détecter par consommation de courant la présence ou non d’un convoi. Et alors ? Ca ne justifie pas de la distinguer du canton ou de la traiter sur le même pied d’égalité. Ce que vous appelez zone est un outil de détection, comme d’autres, comme Railcom ou des capteurs IR, ou encore des détecteurs par consommation de courant.

Je ne nie pas l’importance de savoir, par détections de courant ou autres procédés, si un convoi ou une partie de convoi est encore présente sur le canton, bien au contraire. Mais c’est un autre sujet qui n’a pas sa place dans la description des liaisons.

Je pense utile de recopier intégralement le post que j’ai publié hier à 16h03 et qui a sans doute été éclipsé par la discussion très intéressante qui a juste suivie sur les fichiers en json.


" A tous ceux que réfléchissent à la meilleure façon de réaliser la description du réseau, je propose très humblement de regarder le principe que j’ai adopté pour faire cette description. J’en parle car j’ai moi aussi passé beaucoup, beaucoup de temps là-dessus, j’ai moi aussi passé beaucoup de temps à chercher, à regarder ce qui existait (dont le gestionnaire de Pierre). Et puis, j’ai trouvé une méthode qui est simple et surtout qui fonctionne. Alors, pourquoi ne pas la reprendre ?

Je ne parle pas du processus de découverte avec les boutons et les switches dont j’ai parlé dans un autre post mais la méthode et la structure même du fichier de description. Cette structure de description qui a par ailleurs un énorme avantage pour la simplification de la programmation du gestionnaire par la suite.

Il est probable que cette méthode rencontrera un jour des limites (appareils de voies particuliers etc…) mais elle aura fonctionné pour tous les autres cas (nombreux) et je ne doute pas qu’avec de la réflexion, nous arriverons à les résoudre en temps voulu. Comme j’ai pu le dire par avant, commençons par résoudre les cas généraux avant les cas particuliers.

Je précise aussi que ce principe de description vaut tout autant pour des gestionnaires distribués comme j’ai pu le faire que pour des gestionnaires centralisés.

Il faut à la base poser un postulat qui est qu’un canton peut être relié directement à un nombre d’autres cantons que l’on fixe arbitrairement.

Ainsi, pour moi, j’ai fixé à 4 le nombre de cantons auxquels on peut accéder à horaire et le même nombre à anti-horaire. Soit 8 au total. Mais rien n’empêche de dire 10, 12, 16 ou plus. Seules apparaitront sans doute des limites de mémoire du système.

J’ai convenu de préfixer les cantons à horaires avec la lettre « p » pour plus et les cantons à anti horaire avec la lettre « m » pour moins bien sûr.

Voici donc comment sont nommés mes 8 cantons « potentiellement » voisins :


"p00":"null",
"p01":"null",
"p10":"null",
"p11":"null",
"m00":"null",
"m01":"null",
"m10":"null",
"m11":"null",

P00 désigne le canton accessible à horaire s’il n’y a pas d’aiguille ou si la ou les aiguilles sont droites

P01 (lisez cela comme des bits de droite vers la gauche), le canton accessible, 1° aiguille à horaire déviée

P10, canton accessible à horaire 1° aiguille droite (bit 0 à 0), seconde aiguille déviée (bit 1 à 1)

Enfin P11, canton accessible à horaire 1° aiguille déviée (bit 0 à 1), seconde aiguille déviée (bit 1 à 1)

Si j’avais choisi 6 aiguilles, j’aurais eu bien sûr une notation de type P010 par exemple qui fonctionne aussi parfaitement.

Alors, on voit écrit NULL dans le petit tableau ci-dessus extrait de mon fichier json de description. C’est parce que j’ai eu la flemme de modifier cela mais aussi parce que cela va aider à la compréhension de la suite.

TRES IMPORTANT : P00, P01 … P1111 et M00, M01 … M1111 sont toujours créés et « pointent » toujours sur une position constante d’un canton voisin sur le réseau. Ce canton peut exister et auquel cas, dans la programmation, P00 pointera sur une valeur non nulle ou ne pas exister, d’où un pointeur null !

On voit très bien que même si on devait le remplir à la main, il n’est pas très compliqué de renseigner un tel tableau.

Et en procédant ainsi, IL N’Y A RIEN D’AUTRE à renseigner. Les aiguilles sont par exemple créées automatiquement par le logiciel. Si P00 est non nul et P01 est non nul, le logiciel en déduit qu’il y a une aiguille. CQFD mon cher Wattson !

Et il en va de même des signaux et même des cibles à placer.

Et alors, en termes de programmation du gestionnaire maintenant, je peux vous assurer que les économies en temps de programmation et de débug sont considérables.

Les instances de ma classe Node qui représentent les satellites de cantons à l’intérieur du gestionnaire incluent un tableau de pointeurs nodePeriph qui sont aussi de type Node.

Il s’entent que les instances des "voisins" (nodePeriph) sont créées elles aussi automatiquement à l'instanciation de Node et renseignées au moment de l’import du fichier json de description.



class Node
{
private:
  …

public:
  Node();
  Node *nodePeriph [nodePsize]; // nodePsize = 4, 6, 8 ...


}

Et dans le constructeur :

  for (byte i = 0; i < nodePsize; i++)
    this->nodePeriph[i] = nullptr;

nodePsize, c'est le nombre de canton total (maximum) que l'on souhaite avoir.

C’est ensuite que l’on affecte ou non des valeurs à ces pointeurs selon que l’on ait ou non la présence de cantons.

Pour l’avoir expérimenté avec succès depuis plus de 9 mois maintenant, je vous assure que c’est redoutablement simple et puissant.

A votre disposition si vous souhaitez plus d’informations.
"

Christophe

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 08:42:58 am
Par ailleurs, et excusez moi d'enfoncer le clou, mais je pense que vous vous trompez sur ce que recouvre exactement cette notion de zone qu'à priori on ne retrouve que dans RRTC. Dans ce gestionnaire, la zone existe bien mais ce n'est en rien un appareil de voie mais bien la zone  (à l'intérieur d'un canton) qui précède un ou des appareils de voie, eux même inclus dans le canton.

Page 14 du document : http://cdmrail.free.fr/Applis_PDF/cantons_min.pdf (http://cdmrail.free.fr/Applis_PDF/cantons_min.pdf)

qui dit d'ailleurs : Il n'est pas recommandé de placer des détecteurs de zones sur les zones d'aiguilles.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 09:00:07 am
Mais livrons-nous à un petit calcul, nous parlons ici de pointeur comme nous l’indique l’astérisque ( Node * nodePeriph[4]), un pointeur, quelque soit l’objet sur lequel il pointe, c’est toujours 16 bits en mémoire.

Imaginons que nous ayons que nous ayons 25 cantons avec chacun 4 pointeurs cela donne :
25 x 4 X 16 bits = 1600 bits ou /8 = 200 octets. Bon ça commence à faire mais pas de quoi perturber un ESP32 même à 4Mo de mémoire flash.

Christophe
Dans un système avec 4Mo de mémoire les pointeurs sont en 32 bits. Tu peux avoir des pointeurs 16bits sur les UNO mais pas sur les esp32.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 09:03:06 am
Alors nous dirons que ça va occuper 400 octets et non 200. Ca ne change pas grand chose à la démonstration mais ça a le mérite de l'exactitude. Merci et je vais corriger ci-dessus.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 09:10:18 am
@ Christophe

Ton raisonnement sur la description du réseau se tient pour le vrai réseau que tu testes.

Mais quid des croisements ?
Comment peux-tu le décrire ? Il n'y a pas de position des lames. D'une carte canton à l'autre, c'est tout droit, tout le temps, dans les 4 cantons qui l'entourent.

Par ailleurs, il faut tenir compte de l'occupation par un itinéraire, même avec rien dessus. Or je ne vois pas de notion d'itinéraire dans ton gestionnaire.
C'est peut être en gestation et tu ne l'as pas encore développé, mais, à un moment, il te faudra des itinéraires.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 09:23:16 am


Et en procédant ainsi, IL N’Y A RIEN D’AUTRE à renseigner. Les aiguilles sont par exemple créées automatiquement par le logiciel. Si P00 est non nul et P01 est non nul, le logiciel en déduit qu’il y a une aiguille. CQFD mon cher Wattson !

Et il en va de même des signaux et même des cibles à placer.

Christophe
Oh que non!

1- Tu ne peux pas en déduire si c'est une aiguille gauche ou droite ce qui est indispensable pour les signaux de ralentissement.
2- Un canton avec 2 entrées et 2 sorties a plusieurs combinaisons possibles d'aiguillages/tjd/tjs
3- Et même si tu arrivais à trouver la bonne combinaison il reste à savoir comment ils sont reliés  à ton module.
4- Idem pour les signaux. Il faut connaitre les sens de circulation autorisés et les voies permettant les manoeuvres.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 09:23:29 am
@ Christophe

Ton raisonnement sur la description du réseau se tient pour le vrai réseau que tu testes.

Mais quid des croisements ?
Comment peux-tu le décrire ? Il n'y a pas de position des lames. D'une carte canton à l'autre, c'est tout droit, tout le temps, dans les 4 cantons qui l'entourent.

Par ailleurs, il faut tenir compte de l'occupation par un itinéraire, même avec rien dessus. Or je ne vois pas de notion d'itinéraire dans ton gestionnaire.
C'est peut être en gestation et tu ne l'as pas encore développé, mais, à un moment, il te faudra des itinéraires.

Denis

Mon cher Denis, tu mets pile le doigt sur une limitation que je connais depuis longtemps : le croisement sans aiguille.

Au stade de la description du réseau, ce n’est pas un problème puisque nous sommes bien en présence de cantons mis en relation.

J’attends que le problème se pose concrètement (ce qui n’est pas le cas du réseau de test) pour cogiter sur la chose et c’est bien pour cela que j’ai anticipé dans un post précédent où je dis qu’il y aura quelques cas où !!!

A mon avis, en temps voulu, ça se traitera de manière logicielle où l’on déterminera qu’une voie est prioritaire sur l’autre. Dit autrement, si deux trains veulent s’engager en même temps, le logiciel en autorisera un, puis attendra que les cantons soient libres pour lancer l’autre. C’est de la machine d’état, pas très compliqué non plus.

Mais il y a sans doute d’autres approches. En tous les cas, ça ne contrarie pas ma démonstration.

Pour les itinéraires, je te l’ai déjà dit, ce n’est pas non plus à ce stade qu’il faut l’appréhender. Il y a d’ailleurs des modélistes (probablement le plus grand nombre) qui pilotent à la mano, dont moi !!!

Que l’on précise au moment de la description qu’une voie ne circule que dans un sens ou dans un autre est nécessaire (Pierre l’a inclus dans son fichier json)  mais les itinéraires, c’est une couche logicielle à venir qui viendra justement s’appuyer sur ce qui a été décrit et donc défini comme possible ou pas.
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 09:36:14 am
Écoute Etienne, tu es dans une entreprise de dénigrement systématique :

Tu affirmes : 1- Tu ne peux pas en déduire si c'est une aiguille gauche ou droite ce qui est indispensable pour les signaux de ralentissement.

Et bien moi je affirme que ça ne change rien et qu'on n'a pas besoin de le connaitre et je le démontre dans l’autre fil que j’ai ouvert.

2- Un canton avec 2 entrées et 2 sorties a plusieurs combinaisons possibles d'aiguillages/tjd/tjs

Et alors ??? Ca se gère de manière logicielle également. Quel est le problème ?

Franchement, je n’ai pas envie de passer plus de temps à répondre à ce type d’entreprise.

Nous avons arreté un réseau de test pour que justement chacun montre ses propositions et ses solutions. Pour l’instant, il me semble que je suis le plus avancé sur ce point et que rien ne cloche dans ce que j’ai présenté jusque là. Alors de grâce, soyons dans la construction et pas dans la démolition de quelque chose qui au bout de 15 pages de forum n’existe pas encore ou si peu.

Donc si ça continue comme cela, je vais quitter définitivement ce fil

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 09:43:37 am
N'y a t'il personne sur ce fil pour faire un peu de modération ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 09:59:33 am
Je pense qu'il faut faire les choses dans l'ordre.

Pour l'instant, on se cadre sur la description du réseau. On n'en est pas encore à la signalisation.
On a juste mis des signaux pour le schéma et pour savoir quel type de signal il fallait et où il fallait en mettre.
On fait une première description du réseau, ne serait-ce que pour savoir si on la rentre sous forme de texte brut ou de texte un peu plus structuré (JSON)
Après, il faudra faire circuler UN train pour voir comment les infos circulent dans le bus CAN (localisation, retour vers le gestionnaire, gestionnaire centralisé ou décentralisé ...)

Il est évident qu'il faudra d'autres infos dans le JSON de la description du réseau, liées à la vitesse maxi, par exemple.

Dernière remarque : on a volontairement écarté la zone de manœuvre dans le Locoduinodrome. Ça ne veut pas dire qu'on n'en parlera jamais, mais pas pour l'instant.
Je pense que la gestion de la zone de manœuvre sera très simple une fois que le système général fonctionnera.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 10:05:12 am
On était parti dans la définition de certains termes.

Je propose qu'on indique dans le cahier des charges qu'on a une signalisation type BAL (Bloc Automatique Lumineux).
Il existe à la SNCF de nombreux types de blocs correspondant à différents types de situations. Mais on se limitera ici au BAL qui est le plus utilisé aujourd'hui.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 10:15:07 am
Bonjour

Bon j'en ai plus qu'assez de cette guéguerre entre cantons et zones qui pollue complètement ce fil. Je propose la solution suivante, on parle de gestionnaires basés sur des cantons dans le fil de Christophe et de gestionnaires basés sur des zones dans ce fil.

Ce qui veut dire que dans ce fil on ne parle plus (ou presque plus de cantons) mais cela viendra comme pour les itinéraires.

Qu'en pensez vous.

Pour les indécis allez trainer dans une gare pour voir comment sont réellement découpées les voies.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: bobyAndCo le janvier 14, 2024, 10:18:58 am
Sans apporter plus d'argumentation, alors ce sera sans moi et je vais effectivement me concentrer sur mon projet.

Bonne chance à vous et l'on se retrouve quand les projets respectifs seront bouclés.

Christophe
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 14, 2024, 10:32:33 am
N'y a t'il personne sur ce fil pour faire un peu de modération ?

Si !

Tu fais partie du staf de Locoduino donc tu as un rôle de modérateur, mais dans ce cas si tu es à la fois juge et partie, c’est compliqué.

1) il n’y a eu AUCUN dénigrement dans ce fil.
Aucun produit ni aucune entreprise n’est dénigré.
Mais la contradiction est permise, surtout si les ouvrages que tu cites sont conformes à ce que le modélisme fait habituellement.

2) ton système est sans doute très différent des concepts de gestionnaire classiques qui se basent sur les pratiques de la sncf et qu’on retrouve dans cdmRail, RRTC, etc.
Je crois comprendre que tu réalises des cantons intelligents mais ce ne sont pas des gestionnaires répartis. La détection globale du canton est Railcom et elle peut être globale (ne pas regarder l’état des aiguilles) car un train et un seul peut occuper le canton. De plus, la conduite à la main ne nécessite pas d’itinéraires (commande manuelle des aiguilles, les enclenchements ne sont que inter-canton.

3) mais je me trompe peut-être tant que tu ne présentes pas ton projet plus globalement.
C’est sans doute la raison pour laquelle tu n’acceptes pas les terminologies et les définitions que nous cherchons à utiliser d’un commun accord.

4) il y a des points de convergence à creuser, comme le fichier de description du réseau et les outils pour le faire et l’exploiter
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 10:53:22 am
Écoute Etienne, tu es dans une entreprise de dénigrement systématique :

Christophe,
J'ai réalisé pour le logitiel TrainZ un gestionnaire complet avec la signalisation SNCF, la circulation automatique des trains avec gestion des priorités,
des voies réservées aux différents types de trains (voyageurs, fret, express, ommnibus...) ainsi que la gestion des manoeuvres avec la possibilité
pour le joueur de contrôler un train en manuel.
Je sais ce qui marche ou peut marcher mais surtout je sais ce qui ne marchera pas pour y avoir passé des mois.

Je comprends ta démarche de vouloir simplifier le système pour l'utilisateur mais plus on veut faire simple pour l'utilisateur et plus c'est
complexe pour le programmeur.
Ton système ne peut pas faire seul la différence entre une TJD et une TJS, c'est un fait. Le logiciel devra demander l'information à l'utilisateur.
De même il devra demander sur quelles broches tu as branché tes aiguilles et tes feux.
Donc tu vas avoir besoin d'une interface utilisateur pour les questions et les réponses.

J'ai suggéré de mettre des voies de manoeuvre et une portion de voie unique sur le réseau de test. Il y a une raison à çà : la gestion de ces
cas de figure demande une autre structure de données, et donc une description différente du réseau.
Par exemple une voie peut être en sens unique pour un train en ligne mais à double sens pour les manoeuvres. Donc ton système horaire/antihoraire
doit être dupliqué.
Je sais aussi par expérience qu'il faut savoir si une manoeuvre est une manoeuvre de couplage, auquel cas il faut savoir quelle est la voie de destination
vu qu'on devra autoriser l'entrée sur cette voie qui est un canton occupé. (et qui dit connaitre la destination dit itinéraires)

Maintenant tu fais ce que tu veux de mes conseils et tu peux tester des solutions par toi-même mais tu gagnerais du temps à m'écouter.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 11:07:30 am
Parmi les innombrables message d'hier, il y a un message de Christophe disant que ce serait bien que les liens entre les zones du fichier json soient dans les zones. Je suis tout à fait d'accord.

Il y a beaucoup de liens croisés entre les zones (une zone A a un lien sur une zone B, et B à un lien sur A). Quand on traite le fichier json on crée des objets (instances) pour chaque zone mais on ne peut traiter les liens (quand on traite une zone A, la zone B peut ne pas encore traitée).

Quand toutes les zones sont crées on peut alors traiter les liens. C'est pour cela que les liens sont sortis des zones dans le fichier json.

Mais on peut les mettre dans les zones, en traitant deux fois la partie zones du fichier json, une fois pour créer les zones et une deuxième fois pour ajouter les liens.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 11:09:56 am
Ok, c'est vrai qu'il faut des choses claires.

Si on revenait au JSON de Pierre ?
Parce que je suis tout à fait novice sur ce format de données qui m'a l'air intéressant.
Qu'est ce qui doit être entre crochets [...] et qu'est ce qui doit être entre accolades ? {...}

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 11:15:59 am
On était parti dans la définition de certains termes.

Je propose qu'on indique dans le cahier des charges qu'on a une signalisation type BAL (Bloc Automatique Lumineux).
Il existe à la SNCF de nombreux types de blocs correspondant à différents types de situations. Mais on se limitera ici au BAL qui est le plus utilisé aujourd'hui.
On n'a pas de permissivité possible vu qu'on n'a aucun moyen de gèrer la présence de 2 trains sur un même canton (ce n'est possible qu'avec un comptage d'essieux)
donc on peut utiliser des cibles BAL,BM ou BAPR pour le réalisme vu qu'en réalité on sera toujours informatiquement sur du BAPR.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 11:19:19 am
Je suis tout à fait d'accord avec Etienne, j'ai aussi déjà beaucoup travaillé sur les gestionnaires et je connais les problèmes des manoeuvres. Il faudra y venir en rajoutant ce qu'il faut (tiroirs, signalisation, ...), j'ai déjà timidement ajouté des "sens" aux zones, mais cela sera insuffisant.

Pierre
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 11:28:02 am
On n'a pas de permissivité possible vu qu'on n'a aucun moyen de gèrer la présence de 2 trains sur un même canton (ce n'est possible qu'avec un comptage d'essieux)
donc on peut utiliser des cibles BAL,BM ou BAPR pour le réalisme vu qu'en réalité on sera toujours informatiquement sur du BAPR.
On a effectivement pas de permissivité possible mais on peut envoyer une machine sur un canton occupé (pour faire une mise en tête par exemple) avec des itinéraires en manoeuvre, signal carré présentant le feu blanc (M), cela se fait à l'a SNCF dans les grandes gares.

Pierre
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 11:33:33 am
Si on revenait au JSON de Pierre ?
Parce que je suis tout à fait novice sur ce format de données qui m'a l'air intéressant.
Qu'est ce qui doit être entre crochets [...] et qu'est ce qui doit être entre accolades ? {...}
En json on regroupe tout avec des accolades et on y accède avec des "clés", sauf les tableaux dont les éléments sont entre crochets et on y accède avec des indices.

Pierre
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 12:20:04 pm
Je pense qu'il faut faire les choses dans l'ordre.

Pour l'instant, on se cadre sur la description du réseau.
Denis
Description minimale :
- Aiguillages :
--- gauche/droite
--- adresse DCC
- Signaux :
--- type de cible
--- adresse DCC
- Blocs de présence (détection par courant) :
--- adresse du détecteur sur le bus de retrosignalisation
--- liste des aiguillages faisant partie du bloc
--- Interconnexions possibles : bloc de début, bloc de fin, position des aiguilles
- Cantons (d'un signal à un autre avec la même direction que les signaux) :
--- Bloc de départ
--- Signal de départ
--- Blocs traversés dans l'ordre
--- Interconnexions utilisées (peut être déduit des interconnexions possibles)
--- Signal de fin
--- Bloc de fin (après le signal)
--- Autorisé normal
--- Autorisé manoeuvres
--- Optionnel : détecteur IR de zone d'arrêt, adresse sur le bus de rétrosignalisation

Tout çà c'est le minimum pour la description du réseau.
Ensuite il faut rajouter des variables :
- aiguilles :
--- position actuelle
- Signaux :
--- aspect
--- canton suivant
--- feu suivant
- blocs :
--- libre/occupé (donné directement par le capteur)
--- réservé par un train (numero du train)
- cantons :
--- réservé
--- occupé
--- numéro du train  (attention : on peut avoir un canton occupé par des wagons mais pas de loco donc pas de numéro de train)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 14, 2024, 12:59:44 pm
Bonjour Etienne

Sur les aiguillages je pense que tu peux ajouter quelques rubriques utiles:


On peut peut être aussi évaluer si cet aiguillage doit être couplé à d autres (cas de "bretelles")

Enfin on peut envisager aussi une vitesse de circulation selon les directions( MAX, 70, 60, 30,...)

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 01:13:08 pm
@ Etienne

Je pense que la distinction des aiguilles gauche/droite n'est pas la bonne. Je préfèrerait TD/DV (Tout Droit/ DeVié) pour voir la distinction de vitesse entre la vitesse en cas de position tout droit et en position déviée. Il y a les aiguilles enroulées, bien sûr  :P
On peut aussi dire autrement en donnant carrément la vitesse pour chaque position (120/30) qui serait plus universelle ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 01:17:34 pm
Ce que j'ai décrit dans mon précédent message c'est le minimum avec un dispatcher humain.
Pour un dispacher automatisé on a besoin d'itinéraires.
3 possibilités :
- On donne juste le point de départ et le point d'arrivée et on laisse l'IA décider. Dans la réalité ça pourrait marcher
mais avec nos circuits qui tournent en boucle avec également des retournements l'IA va rentrer rapidement dans
des boucles sans fin.
- On donne le trajet précis en tant que suite de cantons avec des arrêts éventuels en gare. Le problème c'est que si il y a
un conflit à un moment donné ça va coincer.
- On introduit une couche supplémentaire en définissant des gares avec les trajets possibles pour traverser la gare (ainsi
que des priorités pour l'arrêt, le passage sans arrêt, voyageurs ou fret...) et des lignes pour aller d'une gare à l'autre.
L'itinéraire peut alors comporter une succession de lignes et de gares et l'IA pourra gérer les conflits.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 01:19:49 pm
@ Etienne

Je pense que la distinction des aiguilles gauche/droite n'est pas la bonne. Je préfèrerait TD/DV (Tout Droit/ DeVié) pour voir la distinction de vitesse entre la vitesse en cas de position tout droit et en position déviée. Il y a les aiguilles enroulées, bien sûr  :P
On peut aussi dire autrement en donnant carrément la vitesse pour chaque position (120/30) qui serait plus universelle ?

Denis
Tu as raison.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 01:28:28 pm
Bonjour Etienne

Sur les aiguillages je pense que tu peux ajouter quelques rubriques utiles:

  • position par défaut: droite/déviée
  • type de moteur ( servo; solénoïdes, moteur lent,...)
  • orientation du moteur ( pour les servo)

On peut peut être aussi évaluer si cet aiguillage doit être couplé à d autres (cas de "bretelles")

Enfin on peut envisager aussi une vitesse de circulation selon les directions( MAX, 70, 60, 30,...)

Ltr
D'accord pour la position par défaut et la vitesse.
Pour les moteurs c'est plus un problème à régler au niveau du décodeur. Et il suffit d'une temposisation entre le moment où
on change les aiguilles et l'ouverture du signal pour tenir compte des moteurs lents.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 02:20:14 pm
Je suis d'accord qu'il manque plein de choses dans le fichier, mais il ne faut pas aller trop vite, tout ce qui est matériel sera pris en compte plus tard (mais il faudra prendre en compte tous les cas : analogique ou digital, commande des aiguilles DCC ou autre, ...)

Mon fichier jison n'est qu'une proposition, j'espère que d'autre formats de fichier seront proposés. Mais on peut et même on doit discuter du format du fichier json.

Concernant les positions des aiguilles, on m'a reproché à juste titre (pour les TCOs) que deviée/directe posait des problèmes notamment avec les aiguilles symétriques, et on m'a proposé gauche/droite.

Pour les itinéraires, comme pour le BAL, ou verra plus tard.

Il est vrai qu'à la SNCF les bretelles sont traitées spécialement, les deux aiguilles sont appairées, elles sont nommées Axa et Axb et toujours manoeuvrées ensembles, pour des raisons de sécurité.as t'on besoin de faire pareil.

Pierre

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 02:43:17 pm
Concernant les positions des aiguilles, on m'a reproché à juste titre (pour les TCOs) que deviée/directe posait des problèmes notamment avec les aiguilles symétriques, et on m'a proposé gauche/droite.

Pour les itinéraires, comme pour le BAL, ou verra plus tard.

Il est vrai qu'à la SNCF les bretelles sont traitées spécialement, les deux aiguilles sont appairées, elles sont nommées Axa et Axb et toujours manoeuvrées ensembles, pour des raisons de sécurité.as t'on besoin de faire pareil.

Pierre
Donc pour les aiguillages il faudra gauche/droite/symetrique, et pour le canton on a la position droite ou déviée donc on peut en déduire la direction.
Pour les aiguilles appairées c'est tout simple : un seul décodeur mais 2 aiguilles dans le logiciel avec la même adresse DCC.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 02:54:50 pm


Je voudrais ici faire le point sur la manière d'écrire un gestionnaire.


Deux grandes manières :

- écrire du programme comme dans la série d'articles que j'avais proposés
   • avantages on peut faire absolument tout ce que l'on veut, c'est la solution la plus performante et la plus souple
   • inconvénients c'est généralement un gros programme et il faut avoir de bonnes compétences en programmation (object)

- écrire un fichier qui décrit tout ce qu'il faut, avantages : l'utilisateur n'a pas à écrire de programme juste saisir un fichier, inconvénients : difficultées à saisir le fichier en respectant les règles et limitations à ce qui est prévu. Il faut derrière un programme qui prends en compte ce fichier, plusieurs solutions sont possibles :

   • le programme créée des objects en fonction de modèles préétablis, avantages : bonne efficacité, programme assez facile à écrire, inconvenients : le programme qui crée les objects ne sert qu'une fois mais après encombre la mémoire

   • le programme élabore du code (lignes de programme) qui sera ensuite compilé pour produire le gestionnaire, avantage meilleure efficacité si le programme fait des optimisations et non présence du programme qui élabore le code dans le gestionnaire, inconvénients : programme qui élabore le code beaucoup plus laborieux à écrire

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 14, 2024, 02:58:20 pm
Attention avec ce raccourci

Sauf à avoir un décodeur qui permettra des réglages séparés ( distincts) de chaque moteur( cas de servo notamment mais pas que… !) cette topologie est à rejeter.
1 appareil ( simple)  = 1 moteur = 1 adresse
1 appareil complexe (TJD TJS Triple,..) = 2 moteurs (ou plus)  = n adresses (1 par moteur)

Ce n'est pas économique en adresses j'en convient mais on a une maille unitaire.( surement plus universelle à traiter)

1 commande peut adresser plusieurs adresses ou une seule.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 03:00:34 pm
Dans ma proposition précédente j'avais écrit :
- blocs :
--- libre/occupé (donné directement par le capteur)
--- réservé par un train (numero du train)

En fait il faut autoriser plusieurs trains à réserver un bloc pour pouvoir gérer les voies uniques.
En effet dans le cas d'une voie unique un train doit réserver le dernier canton pour éviter q'un autre train vienne à contresens.
Et si plusieurs trains se suivent sur cette voie unique il faut compter le nombre de trains entrés et sortis avant de libèrer la voie.
Donc on aura le nombre de trains ayant réservé le bloc et non pas un numéro de train.
Et il faut ajouter le dernier bloc de voie unique dans la définition du ou des premier(s) canton(s) de ce sens de circulation
et faire la même chose dans l'autre sens.
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 03:01:54 pm
Donc pour les aiguillages il faudra gauche/droite/symetrique, et pour le canton on a la position droite ou déviée donc on peut en déduire la direction.
Pour les aiguilles appairées c'est tout simple : un seul décodeur mais 2 aiguilles dans le logiciel avec la même adresse DCC.
Non c'est gauche/droite dans tous les cas (même pour les cantons).

Je tiens à signaler que tout le monde ne commande pas ses aiguilles en DCC, et qu'il faudrait mieux ne pas parler, pour l'instant, de matériel ni de canton.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 14, 2024, 03:09:16 pm
@Pierre

Attention pour être efficace si la commande des appareils n'est pas pilotée via DCC ( ce qui respe une implémentation possible)  il faudra à minima que leurs positions soient reçues et connues pour assurer les sécurités.

Sinon... boom!
  8)
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 03:22:58 pm


Je voudrais ici faire le point sur la manière d'écrire un gestionnaire.


Deux grandes manières :

- écrire du programme comme dans la série d'articles que j'avais proposés
   • avantages on peut faire absolument tout ce que l'on veut, c'est la solution la plus performante et la plus souple
   • inconvénients c'est généralement un gros programme et il faut avoir de bonnes compétences en programmation (object)

- écrire un fichier qui décrit tout ce qu'il faut, avantages : l'utilisateur n'a pas à écrire de programme juste saisir un fichier, inconvénients : difficultées à saisir le fichier en respectant les règles et limitations à ce qui est prévu. Il faut derrière un programme qui prends en compte ce fichier, plusieurs solutions sont possibles :

   • le programme créée des objects en fonction de modèles préétablis, avantages : bonne efficacité, programme assez facile à écrire, inconvenients : le programme qui crée les objects ne sert qu'une fois mais après encombre la mémoire

   • le programme élabore du code (lignes de programme) qui sera ensuite compilé pour produire le gestionnaire, avantage meilleure efficacité si le programme fait des optimisations et non présence du programme qui élabore le code dans le gestionnaire, inconvénients : programme qui élabore le code beaucoup plus laborieux à écrire

Pierre
Je verrais plus le json comme intermédiaire entre le PC et l'arduino et un programme à base de menus sur le PC pour créer ce json.
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 14, 2024, 03:35:26 pm
Je verrais plus le json comme intermédiaire entre le PC et l'arduino et un programme à base de menus sur le PC pour créer ce json.
Donc si je te comprend bien on fait un programme sur PC pour aider à la saisie (quel language) du fichier json, puis le fichier json sert pour faire le gestionnaire de l'Arduino, avec quelle méthode  ( il faut sérieusement envisager aussi de prévoir le gestionnaire pour PC ou mini-PC).

Pierre
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 14, 2024, 04:16:19 pm
Je verrais plus le json comme intermédiaire entre le PC et l'arduino et un programme à base de menus sur le PC pour créer ce json.
Donc si je te comprend bien on fait un programme sur PC pour aider à la saisie (quel language) du fichier json, puis le fichier json sert pour faire le gestionnaire de l'Arduino, avec quelle méthode  ( il faut sérieusement envisager aussi de prévoir le gestionnaire pour PC ou mini-PC).

Pierre

Si le gestionnaire est sur PC (ou miniPC) il commande la centrale DCC (trains et accessoires en DCC) comme d'habitude via USB/Ethernet et il récupère la rétrosignalisation comme d'habitude en S88, Loconet, etc. On continue avec JMRI, RocRail, etc.. C'est juste un gestionnaire de plus avec un mode d'emploi comme les autres.

Alors qu'est-ce que ça change de ne pas utiliser le Can ?

Si le gestionnaire est sur une carte Arduino connectée au CAN, comme les aiguilles, détecteurs, signaux avec un satellite V1 ou V2, alors il y a une innovation réelle par rapport aux solutions courantes et des possibilités de modules distribués sur le Can (TCO, manettes, configurateurs).

Je ne cherche pas d'influencer vos choix, mais je préfère la 2ème solution.
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 04:47:16 pm
Je verrais plus le json comme intermédiaire entre le PC et l'arduino et un programme à base de menus sur le PC pour créer ce json.
Donc si je te comprend bien on fait un programme sur PC pour aider à la saisie (quel language) du fichier json, puis le fichier json sert pour faire le gestionnaire de l'Arduino, avec quelle méthode  ( il faut sérieusement envisager aussi de prévoir le gestionnaire pour PC ou mini-PC).

Pierre
Perso je ne vais pas utiliser un gestionnaire sur Arduino.(J'ai choisi JMRI) je suis juste là pour les conseils.
Objectivement, je pense que la décision de chacun dépend de la disponibilité d'un PC dédié au réseau ou pas.
L'avantage du gestionnaire PC c'est l'interface graphique mais les solutions existent déja gratuites ou payantes donc inutile de réinventer la roue.
Par contre le gestionnaire tout arduino on n'a pas. Donc si vous décidez de vous lancer c'est du tout arduino qu'il faut faire.
Celà dit il faut de toute façon un PC (ou MAC) pour charger les sketches donc pourquoi ne pas utiliser ce PC pour la configuration?
Quant au language, il est clair pour moi qu'il faut utiliser le C++. De cette façon tu définis tes structures de données une seule fois pour
le programme de saisie sur PC et leur utilisation sur arduino. Le PC sera donc utilisé pour toutes les saisies y compris les itinéraires et
une fois que les données sont chargées (USB, Ethernet, Wifi) ton arduino devient autonome.
Et si au bout du compte tu te rends compte que ton réseau est trop lourd à gérer pour un arduino tu pourra faire tourner tout ou partie
du même code sur PC sans avoir à tout refaire.
Titre: Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 05:35:50 pm

Si le gestionnaire est sur PC (ou miniPC) il commande la centrale DCC (trains et accessoires en DCC) comme d'habitude via USB/Ethernet et il récupère la rétrosignalisation comme d'habitude en S88, Loconet, etc. On continue avec JMRI, RocRail, etc.. C'est juste un gestionnaire de plus avec un mode d'emploi comme les autres.

Alors qu'est-ce que ça change de ne pas utiliser le Can ?

Si le gestionnaire est sur une carte Arduino connectée au CAN, comme les aiguilles, détecteurs, signaux avec un satellite V1 ou V2, alors il y a une innovation réelle par rapport aux solutions courantes et des possibilités de modules distribués sur le Can (TCO, manettes, configurateurs).

Je ne cherche pas d'influencer vos choix, mais je préfère la 2ème solution.
En fait dans un gestionnaire tout arduino on n'a plus la liaison USB donc il faut un lien bidirectionnel. Avec loconet et autres on n'a que le sens retrosignalisation. L'autre sens doit passer par la voie avec la limite de débit que ça impose.
Le CAN étant bidirectionnel il s'impose comme la solution idéale.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 06:08:07 pm
Je pense que l'utilisation de JSON permet de créer un fichier suffisamment structuré.

Par contre, jamais un novice n'ira là dedans tout seul.
Or c'est le but de ce fil : avoir un gestionnaire puissant sans être au fait de toutes les subtilités de la SNCF.

Donc, le challenge, c'est d'avoir une interface ordinateur (PC/MAC) simple qui génère le JSON.

Dans ce but, je trouve qu'on devrait s'en tenir, dans un premier temps, au stricts cas utiles dans le Locoduinodrome.

Cela me permettra, au passage, de comprendre un peu mieux ce qu'est vraiment un fichier JSON.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 06:21:54 pm
Je pense que l'utilisation de JSON permet de créer un fichier suffisamment structuré.

Par contre, jamais un novice n'ira là dedans tout seul.
Or c'est le but de ce fil : avoir un gestionnaire puissant sans être au fait de toutes les subtilités de la SNCF.

Donc, le challenge, c'est d'avoir une interface ordinateur (PC/MAC) simple qui génère le JSON.

Dans ce but, je trouve qu'on devrait s'en tenir, dans un premier temps, au stricts cas utiles dans le Locoduinodrome.

Cela me permettra, au passage, de comprendre un peu mieux ce qu'est vraiment un fichier JSON.

Denis
Si tu génères la configuration avec le PC en c++ avec la même structure de données que dans l'arduino tu n'as plus
besoin du json et tu dois pouvoir les transfèrer directement en binaire dans le sketch.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 07:01:49 pm
@ Etienne

Tu as parfaitement raison : le plus simple, c'est de rentrer toutes les données qui vont bien directement dans un programme de PC.
C'est économe en place, ça marche parfaitement, mais c'est le même problème qu'avec JSON : il fait bien connaître le langage utilisé.
C'est ce qu'on voudrait éviter et que ce soit via un "éditeur de JSON".
Par ailleurs le passage par JSON permet plus d'universalité : c'est indépendant de ce qu'on a fait avant.

Je m'explique : on part d'un JSON et on fait un gestionnaire Locoduino le plus complet possible (en démarrant par une phase simple)
Après, c'est au programmeur de se débrouiller pour partir de son programme spécifique pour générer le fichier JSON.
Une fois le JSON produit, ça roule.

Pour quelqu'un qui part de zéro, il faut faire un "éditeur de JSON".

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 14, 2024, 07:02:03 pm
Le bus Can est vraiment simple à utiliser (quelques lignes de code en émission) et fiable (je n'ai jamais d'erreurs dans les compteurs).

Voilà un petit exemple de trace dans le moniteur de l'IDE lorsque mon gestionnaire suit un train (le N° 0 en l'occurence)
Toute cette trace se fait dans le décodeur des messages Can reçus par le gestionnaire pour la mise au point.
Il est facile de visualiser (suiffer) les messages Can et de créer des modules séparés comme un écran graphique déporté ou des commandes d'itinéraires. Pour le moment l'écran graphique est intégré au gestionnaire pour visualiser les occupations, itinéraires, positions des aiguilles, suivi des trains...Mais il peut être déporté et alimenté avec des messages Can.

Il commence par détecter la zone où se trouve le train en le faisant bouger ce qui provoque une détection de présence: 0<60 signifie une commande de vitesse du train 0 en marche arrière au cran 60, qui une fois détecté il est stoppé (0>0)
0<60
Train 0 detecte sur z13
 0>0
Puis le train démarre doucement à la manette, le gestionnaire reçoit la commande Can de vitesse
VLoco 0>5
Puis la z13 détecte une présence mais le train 0 y est déjà détecté et le train peut continuer à rouler car voie libre devant
zp est la zone précédente pour la commande du signal (carré)
La zone devant est identifiée et testée pour ralentir ou stopper le train, ou pas.
z13 Occ  zp12 T0 OK  VOIE LIBRE DEVANT 
VLoco 0>7
VLoco 0>20
VLoco 0>18
VLoco 0>12
z13 Occ  zp12 T0 OK  VOIE LIBRE DEVANT 
z15 Occ  zp13 T0 OK  VOIE LIBRE DEVANT 
z16 Occ  zp15 T0 OK  VOIE LIBRE DEVANT 
VLoco 0>23
VLoco 0>30
z17 Occ  zp16 T0 OK  VOIE LIBRE DEVANT 
là il y a une détection RFID du train
EST-ext z16 T0 (BB20158)  Train ok
z5 Occ  zp17 T0 OK  VOIE LIBRE DEVANT 
Une détection de zone d'arrêt est ici, pouvant arrêter le train reconnu
zAR 5 T0
z39 Occ  zp5 T0 OK  VOIE LIBRE DEVANT 


Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 14, 2024, 07:07:05 pm
Pour quelqu'un qui part de zéro, il faut faire un "éditeur de JSON".
Denis

Il y a des tones d'éditeurs Json sur le web, online ou non


Par exemple : https://jsoneditoronline.org (https://jsoneditoronline.org)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 07:15:20 pm
Non, je veux quelque chose qui lui pose des questions.
"Quelle zone voulez vous rentrer ?"
"Dans quel sens voulez vous rouler sur cette zone ?"
etc...

Que l'utilisateur ne soit pas conscient qu'il est en cours d'écriture d'un fichier JSON.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 14, 2024, 07:19:03 pm
il existe une fonction de conversion CSV ->JSON

Il y a peut-être quelque chose à utiliser en partant d'excel ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 07:31:06 pm
Je veux bien essayer de m'occuper de cette phase. (questions -> JSON)
Occupez vous de savoir tout ce qui doit être dans ce fichier pour que le gestionnaire fonctionne

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 14, 2024, 07:33:03 pm
Non, je veux quelque chose qui lui pose des questions.
"Quelle zone voulez vous rentrer ?"
"Dans quel sens voulez vous rouler sur cette zone ?"
etc...

Que l'utilisateur ne soit pas conscient qu'il est en cours d'écriture d'un fichier JSON.

Denis
Et surtout ça élimine les erreurs dans le json et donc du code côté arduino. Le code de validation des données est sur le PC.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 14, 2024, 07:49:42 pm
Validez vous ma vision des choses :

"éditeur de JSON" -> JSON -> Gestionnaire Locoduino
En disant que je m'occupe de la partie "éditeur de JSON", je serai aussi confronté à mon problème : "mon éditeur graphique" -> fichiers textes -> JSON.
Mais c'est mon problème.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 15, 2024, 11:36:55 am
Validez vous ma vision des choses :

"éditeur de JSON" -> JSON -> Gestionnaire Locoduino
En disant que je m'occupe de la partie "éditeur de JSON", je serai aussi confronté à mon problème : "mon éditeur graphique" -> fichiers textes -> JSON.
Mais c'est mon problème.

Denis

Ma réponse est OUI évidemment pour garantir l'absence d'erreurs ou le minimum.

Mais n'étant pas familier du JSON et espérer participer au développement de ce projet, j'aimerai mieux comprendre la structure du fichier JSON (son contenu) a produire et son interface avec le gestionnaire (comment le programme gestionnaire va "digérer" ce fichier JSON pour créer les objets zones, aiguilles, signaux, et paramétrer leurs méthodes .

D'un coté nous avons un prototype de fichier JSON de Pierre dans sa réponse #173 (page 12) et  la proposition d'Etienne dans sa réponse #237 (page 16)
De l'autre coté nous avons les objets zone, aiguilles (https://www.locoduino.org/spip.php?article154 (https://www.locoduino.org/spip.php?article154)) et signaux (https://www.locoduino.org/spip.php?article167 (https://www.locoduino.org/spip.php?article167)) décrits dans le gestionnaire de Pierre.
Et puis, il y a la méthode utilitaire selonAiguille(Aiguille* a,Zone* z1,Zone* z2) qui définit la topologie du réseau donc les connecteurs entre zones. Et j'en passe.

Le programme non paramètré me semble un point de départ nécessaire. Est-ce qu'il est possible d'en avoir une idée ?

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 12:49:30 pm
@ Pierre,

Je décortique ta proposition de JSON.
Si j'ai bien compris, Voisins1, c'est "en reculant" et Voisins2 c'est "en avançant" ?
Par ailleurs, dans une TJS, pour aller vers z1 en venant de z3, il suffit que A1 soit tout droit. A3 indifférent. (voir PJ)

Me trompe-je ?

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 01:00:14 pm
@ Pierre,
Je décortique ta proposition de JSON.
Si j'ai bien compris, Voisins1, c'est "en reculant" et Voisins2 c'est "en avançant" ?
Par ailleurs, dans une TJS, pour aller vers z1 en venant de z3, il suffit que A1 soit tout droit. A3 indifférent. (voir PJ)

Pour l'instant voisin1 c'est d'un côté et voisin2 de l'autre coté d'une zone, les sens est c'est à discuter (j'en ai déjà parlé précédemment). Je vais rentrer les voisins dans les zones pour le fichier json. Pour les TJS il faut que je peaufine, mais j'attends que l'on précise le nommage des "lames" (j'en ai déjà parlé aussi).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 01:20:58 pm
Les lames :

Dans mon éditeur graphique, les lames sont les formes qui composent l'appareil de voie.
lames = 1 = AB
lames = 2 = CD
lames = 3 = AD

L'avantage, c'est que c'est extensible à n'importe quel appareil de voie, de n'importe quelle forme. Je trouve ça plus clair.

On peut très facilement avoir un tout petit fichier qui transforme la position réelle des lames réelles en un numéro de lames.
Dans le commerce, il y a quelques disparités :
Par exemple, pour une TJD en voie M chez Märklin, il n'y a qu'un seul moteur et 2 positions : le croisement droit et les 2 arcs de cercle.
Chez Peco, si on veut aller tout droit, il n'y a effectivement qu'une seule lame qui bouge, l'autre étant dans une position quelconque. C'est juste pour tourner qu'il faut préciser la position des 2 lames. C'est très proche de la SNCF.

Denis

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 15, 2024, 03:01:13 pm
@Denis

Pour la position des lames ce n est pas rigoureusement exact pour la TJD
Il y a toujours à considérer en fonction de l entrée sur la TJD et la sortie de la TJD la position des 2 "moteurs" gérant les groupes de lames.

Sinon tu risques de dérailler car avec des servo ce n est pas talonnable.

Beware donc :)

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 03:04:09 pm
Merci, je vais "bewarer"  ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 03:13:31 pm
Bonjour

Voila une nouvelle version du fichier json, j'ai intégré les voisins dans les zones. Les TJS sont vraisemblablement fausses (toujours besoin de précision de nommage A1 c'est laquelle, A3 c'est laquelle, ...)

@ Dominique

Les choses compliquées dans les voisins sont une interprétation json des méthodes selonAiguille(Aiguille* a,Zone* z1,Zone* z2) du gestionnaire.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 04:20:39 pm
@ Pierre

Je trouve cette version beaucoup plus claire comme ça.
Pour la TJS z3, dans le sens vois1, je comprendrai qu'elle ait comme voisins z0 et z1 et dans le sens vois2 z5 et z4
Pour la TJS z11, dans le sens vois1, je comprendrais qu'elle ait comme voisins z9 et z12 et dans le sens vois2 z0 et z1

Si je réfléchis à partir de la SNCF (et donc comme Peco), je mettrais bien pour z3:
    {
      "nom" : "Z3",
      "sens" : "pairimpair",
      "aiguilles": [
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A3"
            "pos2" : "droite"
            "vois1" : "Z5"
            "vois2" : "Z0"
          }
          {
            "aig1" : "A1"
            "pos1" : "droite"
            "vois1" : "Z5"
            "vois2" : "Z1"
          }
          {
            "aig2" : "A3"
            "pos2" : "gauche"
            "vois1" : "Z4"
            "vois2" : "Z0"
          }
      ]
    },
Mais je ne sais pas si ça a un sens ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 04:27:37 pm
@ Denis

Faut que cela soit décodable. Quid des cas compliqués, voir image.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 04:35:37 pm
@ Pierre,

Pour une zone donnée, je décris les positions des différentes aiguilles de la zone, ce qui me donne, pour une position de chaque aiguille donnée, le vois1 et le vois2 suivant le sens de circulation sur la zone.
Pour une position d'aiguilles donnée d'une zone donnée, il n'y a qu'un seul chemin de vois1 à vois2.

Après, si j'ai ma gare à décrire, il ne faut pas être pressé... mais c'est facile pour une zone donnée.

Est-ce que ce que j'ai écrit est syntaxiquement correct ?

Denis

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 04:45:52 pm
@ Denis

Comment tu écrit un cas compliqué comme celui de l'image que j'ai donné.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 05:43:03 pm
Etudions le cas de la zone z0
Si on l'étudie en PRS, c'est facile, on prend les aiguilles une à une.
Sinon, on retrousse ses manches...

{
      "nom" : "Z0",
      "sens" : "pairimpair",
      "aiguilles": [
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "gauche"
            "aig3" : "A3"
            "pos3" : "gauche"
            "vois1" : "Z2"
            "vois2" : "Z3"
          }
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "gauche"
            "aig3" : "A3"
            "pos3" : "droite"
            "vois1" : "Z2"
            "vois2" : "Z4"
          }
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "gauche"
            "aig5" : "A5"
            "pos5" : "gauche"
            "vois1" : "Z2"
            "vois2" : "Z7"
          }
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "gauche"
            "aig5" : "A5"
            "pos5" : "droite"
            "vois1" : "Z2"
            "vois2" : "Z5"
          }
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "droite"
            "vois1" : "Z2"
            "vois2" : "Z6"
          }
          {
            "aig1" : "A1"
            "pos1" : "droite"
            "aig2" : "A2"
            "pos2" : "gauche"
            "aig3" : "A3"
            "pos3" : "gauche"
            "vois1" : "Z1"
            "vois2" : "Z3"
          }
          {
            "aig1" : "A1"
            "pos1" : "droite"
            "aig2" : "A2"
            "pos2" : "gauche"
            "aig3" : "A3"
            "pos3" : "droite"
            "vois1" : "Z2"
            "vois2" : "Z4"
          }
          {
            "aig1" : "A1"
            "pos1" : "gauche"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "gauche"
            "aig5" : "A5"
            "pos5" : "gauche"
            "vois1" : "Z1"
            "vois2" : "Z7"
          }
          {
            "aig1" : "A1"
            "pos1" : "droite"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "gauche"
            "aig5" : "A5"
            "pos5" : "droite"
            "vois1" : "Z1"
            "vois2" : "Z5"
          }
          {
            "aig1" : "A1"
            "pos1" : "droite"
            "aig2" : "A2"
            "pos2" : "droite"
            "aig4" : "A4"
            "pos4" : "droite"
            "vois1" : "Z1"
            "vois2" : "Z6"
          }
      ]
},
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 06:07:25 pm
@ Denis

Oui cela a l'air équivalent, mais plus difficile à exploiter à cause des numéros, bien penser que c'est un système clé-valeur, dans ton cas il faut fabriquer les clés, on sait pas trop combien il y en a.

Une autre remarque, dans certains cas (aiguille simple par exemple) vois1 peut être simple et vois2 compliqué ou vice versa. Pour une aiguille prise en talon il n'y a qu'un voisin possible.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 06:20:09 pm
@ Pierre

Ce qui m'embête, surtout, c'est qu'il faut décrire TOUS les cas possibles. Avec ma gare et ses 180 itinéraires, 16 TJD, 14 aiguilles, c'est pas possible : on devient fou.
En PRS, ça simplifie puisque chaque appareil de voie est une zone, mais, c'est pas facile quand même.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 15, 2024, 06:24:24 pm
En PRS, ça simplifie puisque chaque appareil de voie est une zone, mais, c'est pas facile quand même.

En PRS, comme tu dis, on peut avoir plusieurs aiguilles dans une zone !!!

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 15, 2024, 06:39:07 pm
Oui, bien sûr, mais plus on met d'appareils de voie dans la zone, plus on attend longtemps sa libération. On gagne des zones, mais on perd en fluidité.
Il faut équilibrer
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 16, 2024, 09:40:04 am
@ Denis

En sur-découpant les zones on ne gagne rien en temps de libération (assez souvent on retarde volontairement la libération pour palier les micro-coupures de prise de courant des engins de traction), et on ne gagne rien en fluidité (le découpage des zones est fait de telle sorte qu'il ne puisse avoir qu'un train sur une zone, si on sur-découpe, cela reste vrai sur l'ensemble des zones issues de la découpe).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 16, 2024, 10:18:36 am
@ Dominique Denis

Voila une exemple restreint  de traitement d'un fichier json, pour générer automatiquement un gestionnaire.

Le programme est écrit en Java (Processing), mais serait très semblable en C++. Le programme traite le fichier json (sans test d'erreur !) et génère des objets "zone" et des objets "aiguilles". Les objets zone contiennent un codage (Java) des liens entre les zones (voisins).

Le programme (voir fichier accompagnant) comporte quatre onglets :
- un onglet qui appelle le traitement et qui affiche la liste des zones (avec le code des liens) et des aiguilles, puis qui affiche pour chaque zone les suivants réels en fonction de la position effectives des aiguilles.
- un onglet comportant deux classes : Zone et Aiguille. Ce sont des "modèles" qui seront instanciées par le traitement.
- un onglet traitement du fichier json. Il y a trois phases : le traitement des zones sans celui des voisins (infaisable pendant la première phase), une instance de "Zone" est crée pour chaque zone. La deuxième phase traite les aiguilles. La troisième phase traite des liens entre les zones. il y a deux cas, un cas simple et un cas compliqué. Le cas simple est quand le voisin ne dépend pas de la position d'aiguilles (zone sans aiguille, aiguille en talon, ...), une fonctionnelle simple est élaborée, un fonctionnelle c'est une méthode que l'on appellera dans le gestionnaire lors de son fonctionnement effectif sur le réseau pour connaitre un voisin d'une zone. Le cas compliqué est quand un voisin dépend de la position d'une ou plusieurs aiguilles, il faut transformer en objets Java la description json de la chose et élaborer une fonctionnelle(comme pour le cas simple), cette fonctionnelle ayant une forme beaucoup plus compliquée.
- le dernier onglet contient les classes Java nécessaires pour coder en Java les descriptions json des voisins dépendants d'aiguilles.

Pierre


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 16, 2024, 11:12:21 am
@ Pierre

Ça avance drôlement  ;D

Je viens de tester. Ça fonctionne, mais je ne retrouve pas tous les voisins (ou je n'ai pas compris)
z3 et z11 ont plus de 2 voisins et je ne les retrouve pas dans le test, vraisemblablement des choses à rajouter dans le JSON ?

Denis

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 16, 2024, 11:16:40 am
Avec quoi tester ? Processing ?

Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 16, 2024, 11:21:03 am
Je viens de tester. Ça fonctionne, mais je ne retrouve pas tous les voisins (ou je n'ai pas compris)
z3 et z11 ont plus de 2 voisins et je ne les retrouve pas dans le test, vraisemblablement des choses à rajouter dans le JSON ?
Z3 a deux voisins1 et deux voisins2, cela fait 2x2 quatre voisins ?, pareil pour Z11.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 16, 2024, 11:26:19 am
@Pierre

Moi, j'ai ça en sortie Je n'ai qu'une ligne pour z3

TEST
zone : Z0 voisin1 : Z3 voisin2 : Z11
zone : Z1 voisin1 : Z3 voisin2 : Z11
zone : Z2 voisin1 : Z12 voisin2 : Z4
zone : Z3 voisin1 : Z4 voisin2 : Z0
zone : Z4 voisin1 : Z3 voisin2 : Z6
zone : Z5 voisin1 : Z7 voisin2 : Z3
zone : Z6 voisin1 : Z4 voisin2 : Z8
zone : Z7 voisin1 : Z9 voisin2 : Z5
zone : Z8 voisin1 : Z5 voisin2 : Z10
zone : Z9 voisin1 : Z11 voisin2 : Z7
zone : Z10 voisin1 : Z8 voisin2 : Z12
zone : Z11 voisin1 : Z9 voisin2 : Z9
zone : Z12 voisin1 : Z10 voisin2 : Z2
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 16, 2024, 11:33:32 am
@ Denis

Ce que tu montre ce sont les voisins en tenant compte de la position des aiguilles (toutes gauches), regarde la liste des zones il y a tous les voisins potentiels.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 16, 2024, 11:38:48 am
@ Pierre

Yeah ! J'ai compris !
On a d'une part tous les cas possibles et d'autre part, les zones connectées pour une position d'aiguilles donnée.

OK, ça me va

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 16, 2024, 11:39:16 am
@Dominique

Oui, c'est du Processing
D'ailleurs, dès que j'aurais bien compris le JSON, je ferai un "éditeur de JSON" en Processing, car je le connais "bien" et qu'on peut y gérer des questions/réponses.
Et, comme mon éditeur graphique est en Processing, je pourrais réutiliser plein de choses pour qu'il génère automatiquement le JSON (dessin -> JSON)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 16, 2024, 12:40:19 pm
@ Pierre

Finalement, je ne comprends pas tout.
Dans tous les cas possibles, je ne vois pas ce que viens faire A4 dans Z3 ?
Par ailleurs, une TJS n'a que 3 formes possibles :
A1 à droite et, à ce moment là, on se moque de A3 = lien entre z5 et z1
A3 à gauche et, à ce moment là, on se moque de A1 = lien entre z0 et z4
A1 à gauche et A3 à droite = lien entre z5 et z0

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 16, 2024, 01:00:10 pm
@ Denis

Faut pas trop s'inquiéter, le fichier json a encore plein d'erreurs (Z3 c'est une erreur) et je n'ai toujours pas eu de réponses sur le nommage des TJS, mais je pense que pour les TJS (comme les TJD) il faut la position des deux aiguilles, à voir.

Faut plus se focaliser sur la forme du fichier json et sur son traitement.

Pierre
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 16, 2024, 03:29:32 pm
@ Denis

Faut pas trop s'inquiéter, le fichier json a encore plein d'erreurs (Z3 c'est une erreur) et je n'ai toujours pas eu de réponses sur le nommage des TJS, mais je pense que pour les TJS (comme les TJD) il faut la position des deux aiguilles, à voir.

Faut plus se focaliser sur la forme du fichier json et sur son traitement.

Pierre

Pour le nommage des TJS, nommons A5 côté z0, A7 côté z12, A3 côté z0 et A1 côté z4.
Au moment du câblage on pourra toujours permuter les fils de commande pour obtenir les chemins souhaités. N’ayant pas de TJS sous la main je propose ça comme convention pour démarrer avec les chemins donnés par Denis ci-dessus. Ce ne sera pas la seule erreur à corriger plus tard si erreur il y a. ???

(http://forum.locoduino.org/index.php?action=dlattach;topic=1645.0;attach=5628;image)

J’ai bien une TJD dans un tiroir à la maison, mais je ne suis pas chez moi .
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le janvier 16, 2024, 11:39:48 pm
Bonsoir

Pour le nommage des aiguilles je recommande cette approche:

Pour préciser qui est A1 et A3 on prend le sens de circulation anti horaire de la "V1" et on incrémente les appareils de numéros impaires au fur et a mesure de leur introduction sur la "voie principale" dans le sens de circulation nominal (le plus souvent utilisé)

Donc A1 est la première lame de la TJS (la plus à gauche) A3 celle placée à droite

L'itinéraire "voie" principale favorise toujours un positionnement des lames en position directe (non déviée) ou par prise en talon d une aiguille ( pour Vmax)

Par principe sur une voie on ne trouve pas:

Si la géométrie des appareils le permet on peut passer une aiguille  "déviée" à une vitesse nominale (celle de la zone traversée  <= vitesse max de la ligne)  sinon réduite. ( et par principe réduite dans les autres cas)
Plusieurs vitesses sont possibles grâce au TIV (tableau indicateur de vitesse ex 70) sinon à la signalisation lumineuse par défaut ( Ralentissement 160, 60, 30,...)


Ici V1 avec une circulation à gauche type SNCF tourne dans le sens anti horaire.
V2 dans le sens horaire.

Certes il y aura parfois des "trous" ( ex A1 A2 A3 A5 et pas de A4) mais c est un choix assumé.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 17, 2024, 08:39:06 am
@ Pierre,

J'essaie toujours de comprendre le fichier JSON.

Heureusement, dans ton programme, on a une vision plus simple du même fichier.

Moyennant une indentation et quelques couleurs je suis arrivé à l'image en PJ.
C'est beaucoup plus lisible que le fichier JSON.

Ce qui me parait étrange, c'est que, dans cette liste, puisqu'il y a des Voisin1 et Voisin2, et, donc, qu'on tient compte du sens de circulation, on devrait y voir 2 fois les zones banalisées.
Par exemple Z0->Z3•Z11 et Z0->Z11•Z3

Et pour Z11, on ne voit que Z9 et Z12 comme voisins, alors que cette zone a aussi Z0 et Z1 comme voisins.
Dans chaque zone, il faut la liste de tous les voisins.

En particulier, il y a 3 positions pour une TJS : (A1 droite), (A3 droite), (A1gauche et A3 gauche)

Le problème ne vient pas de ton programme, qui fonctionne, mais du fichier JSON originel.

Ou alors, il n'y a pas de problème et c'est moi qui n'ai pas compris.
Mais j'ai besoin de bien comprendre le JSON pour pouvoir faire un éditeur

Merci d'avance.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 17, 2024, 09:50:10 am
J'ai la même chose semble-t-il avec Processing4

Aigs [A1, A2, A3, A4, A5, A6]
Zones [
Z0->Z3•Z11,
Z1->Z3•Z11,
Z2->Z12•Z4,
Z3->[Z5_si_[A1=droite, A3=droite],
Z4_si_[A1=gauche, A3=gauche]]•[Z1_si_[A4=droite, A3=droite],
Z0_si_[A1=gauche, A5=gauche]],
Z4->[Z2_si_[A2=droite],
Z3_si_[A2=gauche]]•Z6, Z5->Z7•Z3,
Z6->Z4•Z8,
Z7->Z9•Z5,
Z8->Z5•Z10,
Z9->Z11•Z7,
Z10->Z8•Z12,
Z11->[Z9_si_[A5=gauche, A6=gauche],
Z12_si_[A5=droite, A6=droite]]•[Z9_si_[A5=gauche, A6=gauche],
Z12_si_[A5=droite, A6=droite]],
Z12->Z10•[Z2_si_[A4=gauche], Z11_si_[A4=droite]]]

TEST
zone : Z0 voisin1 : Z3 voisin2 : Z11
zone : Z1 voisin1 : Z3 voisin2 : Z11
zone : Z2 voisin1 : Z12 voisin2 : Z4
zone : Z3 voisin1 : Z4 voisin2 : Z0
zone : Z4 voisin1 : Z3 voisin2 : Z6
zone : Z5 voisin1 : Z7 voisin2 : Z3
zone : Z6 voisin1 : Z4 voisin2 : Z8
zone : Z7 voisin1 : Z9 voisin2 : Z5
zone : Z8 voisin1 : Z5 voisin2 : Z10
zone : Z9 voisin1 : Z11 voisin2 : Z7
zone : Z10 voisin1 : Z8 voisin2 : Z12
zone : Z11 voisin1 : Z9 voisin2 : Z9
zone : Z12 voisin1 : Z10 voisin2 : Z2
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 17, 2024, 09:56:44 am
@ Denis

Le fichier jison c'est juste un exemple, inspiré du locoduinodrome, montrant des possibilités d'écriture. Cela ne présage en rien du format json qui sera adopté, notamment pour les voisins qui ne peuvent pas rester comme cela.
Le fichier est aussi une base pour des essais de transformations vers un gestionnaire.
Les erreurs n'ont pas d'importance, mais j'essaierai de les éliminer peu à peu.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le janvier 17, 2024, 03:43:34 pm
Y'a un problème avec votre définition :
Certes ça décrit le circuit mais c'est inutilisable tel quel par un gestionnaire.
L'important pour le gestionnaire c'est comment aller d'un signal au suivant, c'est à dire la liste des zones
à traverser ainsi que la liste des aiguillages avec leur position droite ou déviée pour ce trajet.
A partir de vos définitions il faut faire une recherche du genre prévoir 5 coups d'avance aux échecs.
D'une part c'est long, surtout sur un grand réseau, et avec nos circuits ça peut virer à la boucle infinie.
Donc la définition des connexions entre zones doit se faire dans la définition des cantons. (un canton étant la voie entre deux signaux consécutifs)
Autrement dit :
-Pour les zones il faut seulement le nom et l'adresse du capteur de courant.
-Pour les aiguilles, il faut le nom, droite/gauche et l'adresse dcc du décodeur.
-Pour les signaux, il faut le type de cible,la zone précédente et suivante et l'adresse dcc du décodeur.
Et enfin il faut définir les cantons :
-nom, zone de départ,signal entrée, signal sortie,zones traversées dans l'ordre, adresse capteur zone d'arrêt, aiguillages avec position déviée ou non,type de canton normal/manoeuvre ou tout,vitesse limite
exemple :
 z3,408
 a2,g,205
 sig1,b,z0,z3,317
 sig5,a,z6,z8,314
 Can1,z0,sig1,sig5,z3,z4,z6,604,a1-,a3-,a2<,n,60

En utilisant la première lettre des noms comme signification du type le gestionnaire s'y retrouve facilement et le fichier texte ou json est assez explicite.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 17, 2024, 04:00:17 pm
Bonjour

J'ai fait une version un peu plus simple du programme qui transforme le fichier json en un gestionnaire, je peux le publier si besoin. cette version utilise des "lambda expression" appelées aussi fermetures ou clôtures.

Plus intéressant j'ai essayé une version complètement différente de la précédente. Le fichier json est lu ce qui donne un objet json recélant toutes les infos pour le gestionnaire. C'est cet objet json qui va mémoriser toutes les constantes : noms des zones et des aiguilles, sens de zones, types de aiguilles ... et les variables : l'état ("libre" ou "occupe") des zones, l'état "("gauche" ou "droite") des aiguilles, ... Les infos fournies par les capteurs pourront mettre à jour ces variables.

L'avantage de cette version est qu'il n'y a plus d'objets à créer, donc plus de programmation objet.

L'inconvénient est que l'exécution est nettement plus lente, Mais elle peut être accélérée en transformant un peu l'objet json issu de la lecture, par exemple en donnant des numéros aux zones et aux aiguilles et en y accédant non plus par leur noms (clés) mais par les numéros (indiçeage des tableaux). D'autre accélérations sont possibles, mais ce sera toujours plus lent que la première version.

Le programme Processing est téléchargeable ci-dessous. Il fait pratiquement la même chose que la première version.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le janvier 17, 2024, 05:03:35 pm
(...)
- un seul train par canton,
- des signaux positionnés selon ces règles (sémaphores, carrés, avec ralentissement, etc..),
- des commandes des trains pour le respect des ralentissements et arrêts selon la signalisation,
- des détecteurs de présence et/ou d'identification(RFID, RailCom) des trains par canton, zone, aiguille, etc.
(...)
Dominique

Bonjour ,
je n'ai encore rien lu , ça viendra , mais je souhaite (re)(re)préciser mon point de vue concernant les signaux :
en modélisme , ils n'ont aucune influence sur la marche des trains , c'est des éléments de décor , que l'on s'efforce d'animer avec réalisme , mais ce n'est absolument pas obligatoire
les trains n'agissent pas selon la signalisation , mais obéissent à l'automate , lui-même en fonction des ordres et de la situation du réseau
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 17, 2024, 07:11:13 pm
@Pierre

J'ai fait un premier essai très simple pour créer les zones simples en JSON à partir de rien.
Pour l'instant on peut rentrer n'importe quoi comme texte. Il faut bien un début.
Il faut ouvrir dans le bloc notes.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 17, 2024, 07:29:45 pm
petit essai :
Colonne
{
    "zones" : [
        {
            "nom" : "Z1",
            "sens" : "Pair",
            "vois1" : "Z2",
            "vois2" : "Z3",
        }
    ]
}

c'est bien parti ! Courage  ::)
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le janvier 17, 2024, 11:58:30 pm
@ Etienne

Je pense que la distinction des aiguilles gauche/droite n'est pas la bonne. Je préfèrerait TD/DV (Tout Droit/ DeVié) pour voir la distinction de vitesse entre la vitesse en cas de position tout droit et en position déviée. Il y a les aiguilles enroulées, bien sûr  :P
On peut aussi dire autrement en donnant carrément la vitesse pour chaque position (120/30) qui serait plus universelle ?

Denis
Tu as raison.

ben non , gauche/droite est clair pour toutes les aiguilles , y compris les symétriques
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le janvier 18, 2024, 12:03:59 am
(...)
Citer
D'accord pour la position par défaut et la vitesse.
Pour les moteurs c'est plus un problème à régler au niveau du décodeur. Et il suffit d'une temposisation entre le moment où
on change les aiguilles et l'ouverture du signal pour tenir compte des moteurs lents.
suffit pas : si tu fais une commande segmentée des moteurs , il faut (tout simplement) attendre le moment où le dernier moteur a terminé sa course
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le janvier 18, 2024, 12:08:18 am
(...)

Il est vrai qu'à la SNCF les bretelles sont traitées spécialement, les deux aiguilles sont appairées, elles sont nommées Axa et Axb et toujours manoeuvrées ensembles, pour des raisons de sécurité.as t'on besoin de faire pareil.

Pierre

amha , on n'est pas obligé ... mois je le fais ... le petit inconvénient , si on a des moteurs lents commandés à tour de rôle , cela rallonge le temps de formation de l'itinéraire ...
Titre: Re : Re : Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le janvier 18, 2024, 12:19:40 am
Avec loconet et autres on n'a que le sens retrosignalisation. L'autre sens doit passer par la voie avec la limite de débit que ça impose.
Le CAN étant bidirectionnel il s'impose comme la solution idéale.
à priori non , les messages de commande transitent par loconet , donc ils peuvent être utilisés par les décodeurs ; cela a d'ailleurs été vendu comme moyen d'alléger le traffic des packets dans le DCC
(en réalité cela passe effectivement , très généralement , dans le DCC , la bande passante n'étant critique que pour les très grands réseaux ... ou pour les réseaux les + automatisés)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 18, 2024, 05:25:26 pm
@ Denis

Je t'ai fabriqué un "dialogue" sur mesure pour les zones. Il permet de saisir les noms de zones, les sens et les voisins. Pour les sens il n'y a que deux choix possibles (pour l'instant), pour le reste on peut saisir un nom de zone ou choisir parmi celles qui sont déjà saisies pour les modifier, les compléter, les supprimer, .... Pour les voisins "cas" devra pouvoir saisir un nom de zone et une liste de paires (aiguille,position).

Pour l'instant les modifications s'affichent dans la console.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 19, 2024, 10:08:08 am
@ Pierre,
Merci pour ce programme bien sympa.

@tous
Je suis en train de développer un petit programme qui doit permettre de rentrer les données JSON sans erreurs, avec vérifications et avec un peu de graphiques très simples qui permettrons d'éviter les erreur de saisie.
Je ne suis pas vraiment dispo avant mardi.

Je propose qu'on arrête (pour un temps) de parler de la phase avant JSON et qu'on s'intéresse à l'après JSON en partant d'un JSON supposé parfait.

Terminologies :

Je propose d'employer TD pour tout droit et DV pour dévié.
Pour les aiguilles enroulées, TD sera la voie à grand rayon et DV celle à petit rayon

J'appelle AB la première diagonale d'une TJD (TJS, croisement) et CD la deuxième diagonale pour les TD
J'appelle AD et CB les deux courbes d'une TJD (en DV)
Pour une aiguille simple, AB pour TD et AC pour DV
Pour un triple, AB pour TD et AC pour la gauche et AD pour la droite

Je ferai le JSON avec, en plus, les données vitesses limites.
Dans les zones, cela correspondra aux TIV, pour les aiguilles, sur voie DV (30, 60 et 160)
Je ne sais pas s'il y a des limites de vitesse en TD sur TJD.

Je propose de mettre "banalise" au lieu de "pairimpair"

Je sortirai deux ArrayList "Zones" et "Aiguilles" et, éventuellement, un 3ème ArrayList pour les connecteurs, si c'est utile.
 
Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 19, 2024, 11:32:53 am
Terminologies :

Je propose d'employer TD pour tout droit et DV pour dévié.
Pour les aiguilles enroulées, TD sera la voie à grand rayon et DV celle à petit rayon
gauche/droite cela marche des tous les cas
Citer
J'appelle AB la première diagonale d'une TJD (TJS, croisement) et CD la deuxième diagonale pour les TD
J'appelle AD et CB les deux courbes d'une TJD (en DV)
Pour une aiguille simple, AB pour TD et AC pour DV
Pour un triple, AB pour TD et AC pour la gauche et AD pour la droite
je vois pas trop l'utilité dans le fichier json
Citer
Je ferai le JSON avec, en plus, les données vitesses limites.
Dans les zones, cela correspondra aux TIV, pour les aiguilles, sur voie DV (30, 60 et 160)
Je ne sais pas s'il y a des limites de vitesse en TD sur TJD.
oui on peut associer des vitesses, mais où les mettre, ce n'est pas urgent
Citer
Je propose de mettre "banalise" au lieu de "pairimpair"
pourquoi pas mais dans mon esprit il pourra avoir des variantes avec les manoeuvres , du
genre pair_et_impair_manoeuvre
Citer
Je sortirai deux ArrayList "Zones" et "Aiguilles" et, éventuellement, un 3ème ArrayList pour les connecteurs, si c'est utile.
dans mon esprit les voisins sont les connecteurs, mais à revoir

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 19, 2024, 04:30:36 pm
@ Pierre,

Ou là... Non, je ne change rien au JSON.
Et je ne connaissais pas pair_et_impair_manoeuvre. On garde donc pairimpair.

Non, ce que je voulais simplement, c'est pour faciliter les posts.
Mais on ne change pas le JSON.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 23, 2024, 12:27:58 pm
Bonjour à tous,

Voici une version plus évoluée de mon éditeur de fichier JSON pour les trains.

Je suis parti de l'idée que plutôt que de rentrer les données très rapidement et de corriger les erreurs après, il valait mieux prendre un peu plus de temps et bien se mettre en situation pour pouvoir valider en ayant une vue claire de ce qu'on fait.
En particulier, je ne rentre pas directement pair ou impair. J'utilise une méthode "visuelle".

Pour l'instant, ça ne rentre que les zones simples, mais je vais m'occuper des aiguilles très rapidement.

Il manque encore la vérification qu'on n'a pas déjà rentré une zone, de vérifier que si voisin1 = voisin2, c'est que c'est une boucle de retournement et deux – trois bricoles.
Dans les data, il y a le JSON, qu'on peut ouvrir simplement avec le bloc note.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 23, 2024, 04:30:41 pm

@ Denis

Je t'avais promis une version, avec des dialogues, plus élaborée. C'est en fait un peu une boite à outils pour faire des dialogues. Il y a deux sortes de champs de saisie, un champ avec des choix multiples prédéfinis et un champ avec en plus une possibilité d'édition (si les choix prédéfinis ne conviennent pas).

Plusieurs dialogues permettent de saisir des zones, des aiguilles ou des signaux avec des paramètres. Ce sont des dialogues dits "modal", un seul dialogue n'est affiché à la fois, mais on pourrait en afficher plusieurs à la fois.

Les dialogues comportent une série de boutons, pour l'instant deux seulement sont actifs, un bouton "X" qui ferme le dialogue, puis le dialogue suivant est affiché, et un bouton "S" qui affiche dans la console le code json fabriqué par le dialogue.

Cela montre juste ce que l'on peut faire avec les dialogues, toute la partie édition globale du fichier json est absente.

Les champs de saisie des voisins (1 et 2) des zones sont assez particuliers, on peut utiliser un nom de zone déjà existante ou saisir un nouveau nom. Mais si le "nom" de la zone est déjà renseigné et que l'on a choisi "cas" pour le voisin, un coup de molette (wheel) sur le champ fait apparaitre un nouveau dialogue pour saisir des voisins conditionnels (suivant la position d'aiguilles).

Le programme ne fonctionne qu'avec Processing 4.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 23, 2024, 05:24:07 pm
@Pierre,

Merci, je vais décortiquer ton programme.

@tous,

J'ai oublié de dire une chose essentielle dans mon programme : il faut décaler la fenêtre qui s'ouvre pour voir les dialogues derrière !
D'habitude, les dialogues sont au premier plan, mais pas là.
Donc, la première fois qu'on lance le programme, il faut décaler la fenêtre qui s'ouvre (par exemple à gauche) et ainsi voir les questions posées qui, elles sont toujours au milieu.
Après, plus besoin de décaler le fenêtre, elle s'ouvre au bon endroit et on voit les dialogues.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 27, 2024, 07:00:09 pm
Bonjour à tous,

J'ai bien avancé sur l'éditeur JSON.
On peut maintenant rentrer tous les segments et les appareils de voie.

C'est à base de schémas qui permettent de se représenter la situation des différents éléments, avec leur orientation.

On évite ainsi de savoir si on est dans le sens "pair" ou "impair" et de se tourdre le cou et de se représenter avec les doigts  ;D pour savoir si c'est "gauche" ou "droite".
Je ferai, évidemment, la modification pour que "0" s'écrive "gauche" et "1" s'écrive "droite".

De même, je n'ai pas (encore) donné de "sens" aux appareils de voie car il y a des situations ambigües (j'ai des exemples).

Ce sera automatique, par consultation des éléments simples voisins, de proche en proche :
Exemple, sur le Locoduinodrome :
Z4 a comme voisins Z6 (pair), Z2 (pair) et Z3 (banalisé, donc, entre autres, pair) => Z4 est pair
Z3 a comme voisins Z5 (impair), Z1 (impair), Z4 qu'on vient de définir pair et Z0 (banalisé) => Z3 banalisé

Par ailleurs, grâce aux schémas, on doit faire moins d'erreurs de saisie et je vais ajouter des couleurs dans les cases des voisins :
Vert : on retrouve bien la zone voisine dans les zones déjà saisies et chacune est voisine de l'autre.
Orange : on ne retrouve pas (encore) la zone saisie comme voisine dans les zones existantes
Rouge : on retrouve bien la zone saisie dans les zones existantes, mais pas avec une parité compatible (pair d'un côté et impair de l'autre)

Par contre, là, j'ai vraiment besoin de savoir comment on rentre une tjd, une tjs et ... un croisement (l'éternel vilain canard  :() dans le JSON. J'ai mis quelque chose, mais je ne suis pas sûr de moi.

Denis
PS : Il faut décaler l'image pour voir les questions. Ça m'embête aussi
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 28, 2024, 04:00:48 pm
Bonjour Denis,

Aurais-tu le mode d'emploi de cet éditeur ?

Merci d'avance

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 28, 2024, 04:58:27 pm
Bonjour à tous,

Voilà le mode d'emploi.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 28, 2024, 06:17:26 pm
Par contre, là, j'ai vraiment besoin de savoir comment on rentre une tjd, une tjs et ... un croisement (l'éternel vilain canard  :() dans le JSON. J'ai mis quelque chose, mais je ne suis pas sûr de moi.
Pour une TJD ou une TJS on met deux aiguilles (il y a deux noms de prévu), pour un croisement je le considère comme une aiguille sans moteur (c'est utile si on veut des tracés d'itinéraires continus).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 28, 2024, 06:25:46 pm
@ Pierre,

Peux-tu me donner un JSON avec juste une TJD et un autre avec juste une TJS ?
Pour la TJS, on n'avait que droite-droite et gauche-gauche, mais pas droite-gauche. Comment tu la rentres ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 29, 2024, 10:11:13 am
@ Denis

Une tjd ou une tjs c'est équivalent à deux aiguilles en pointe, voila pour la tjs A1-A3 :

    {
      "nom" : "A1",
      "type" : "tjs"
    },
    {
      "nom" : "A2",
      "type" : "droite"
    },
    {
      "nom" : "A3",
      "type" : "tjs"
    },

Les "type" sont des commentaires.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 29, 2024, 02:20:16 pm
Bonjour à tous,

Je suis très intéressé de voir le résultat de ces opérations : création/modification du fichier JSON de description du réseau avec une application (Denis offre la première appli sous Processing), puis importation du fichier JSON dans le gestionnaire de référence (non personnalisé que je suppose être celui de Pierre59 décrit dans les articles 154, 167, 172 te 184) pour obtenir un gestionnaire entièrement paramètre dans lequel il faut intégrer la gestion des capteurs et actionneurs.

De mon coté, j'avais fait le paramètrage "à la main" du gestionnaire de mon réseau (avec un peu d'aide de Pierre que je remercie).
J'ai développé et utilisé divers outils de mise au point de ce paramètrage, dont surtout une représentation graphique de mon réseau dans le même Arduino Due équipé d'un écran 5".

Evidemment, je vais faire l'exercice sur mon réseau pour appliquer ce qui sera fait sur le locoduinodrome 2.

Mais en attendant je veux conserver la représentation graphique de mon réseau qui sera déportée cette fois-ci, via le bus Can, sur une carte graphique de 7 pouces équipés d'un Teensy3.6 et du Can. Cette carte est bien plus rapide que le Due.
Vous avez compris que je ne veux pas de PC sur mon réseau et Processing dans un RPi n'est pas aussi cool que mon projet.

Pour ce faire, j'ai dupliqué la liste des objets aiguilles et zones de mon gestionnaire et écrit les méthodes graphiques à partir de simples tracés de rectangles (pour les lignes horizontales et verticales) et d'arcs pour les courbes.

Cela donne les images ci-dessous. Le programme permet aussi de commander les aiguilles et les itinéraires par un simple clic sur celles-ci, avec envoi par Can des commandes au gestionnaire, qui commande les affichages (occupations, libérations, affichage du suivi des trains) sur ce TCO. Il manque encore pas mal de choses à faire comme les signaux et diverses commandes et affichage, façon Méru par exemple.
Mon idée est de rapprocher ce système de ce projet de gestionnaire.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 30, 2024, 10:03:50 am
@ Pierre,

J'ai compris ce qui me chagrinais dans la première version du JSON.
Comme d'habitude, chez moi, c'est en essayant de régler un cas très complexe que j'ai trouvé la solution (je pense)

(https://www.locoduino.org/local/cache-vignettes/L150xH67/zone_multiple-923e5-f08da.png?1706604389)

L'idée c'est d'ajouter une variable "forme" dans la class "Zone"
Là, il y a 10 formes (AC, AD, AE, AF, AG, BC, BD, BE, BF, BG)

Un segment, c'est 1 forme
Un croisement, c'est 2 formes, comme une aiguille, un enroulé
Un triple, c'est 3 formes, comme une TJS
Une TJD, c'est 4 formes.

Par ailleurs, on décrit un voisin1 comme étant l'origine de la description, et voisin2 comme étant l'extrémité de la description.
On décrit donc, dans le sens correspondant à la parité, voisin1 -> la zone -> voisin2
Si c'est une zone banalisée, on décrit dans un sens, mais on indique que ça peut être pris dans les 2 sens lors de la définition de la parité.

On décrit forme par forme.
Il n'y a ainsi aucune ambiguïté pour définir voisin1 et voisin2 et on donne la liste des aiguilles considérées avec leurs positions pour chaque forme.
Et c'est applicable partout.

Je vais adapter mon éditeur JSON à cette nouvelle vision des choses.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 30, 2024, 02:49:35 pm
@ Denis et autres

Plutôt que le terme "forme" je préfèrerais le terme "trajet" (ou autre : parcours, ... idées ???).

Je suis assez d'accord avec toi, j'ai déjà envisagé très sérieusement des demi-trajets (demi-formes), à partir du "centre" de la zone, dans l'exemple complexe du dessin c'est le centre de la tjd. Les demi-trajets simplifient un peu le nombre de cas, les trajets donnent 10 cas, tandis que les demi-trajets donnent 2+5=7 cas (2 pour la partie gauche et 5 pour la partie droite), 2*5 donne bien les dix cas réels. Bon dans les cas les plus courants de zones on n'a pas une telle complexité.


Ce qu'il faut regarder, pour choisir, c'est les appareils de voie à problèmes : tjd, tjs et croisement.

Ce qu'il faut regarder, aussi et surtout, c'est l'usage que l'on fera avec ces trajets : suivi des trains, recherche automatique des suivants et précédents des signaux et j'en oublie certainement.

Il faut aussi trouver un codage json qui soit facilement utilisable par le gestionnaire.

Il faut en discuter, pour choisir le meilleur cas.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 30, 2024, 03:44:43 pm
Voila une base pour vos propositions, les zones voisines sont toutes nommées.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 30, 2024, 04:24:25 pm
@ Pierre,

C'est ce que je proposais dans un post et dans mon programme. Pourquoi "E" pour le triple ?

Je suis OK pour le terme "trajet" car on peut dire "trajets" et "trajet", ce qui n'est pas le cas de "parcours"  ;)

Je propose, pour les trajets de Z3 :

"trajets" : [
    {
        "trajet" : "AB",
        "voisin1" : "Z5",
        "voisin2" : "Z1",
        "aigs" : [
            {
                "aig" : "A1",
                "pos" : "droite"
            },
            {
                "aig" : "A3",
                "pos" : "droite"
            }
        ]
    },
    {
        "trajet" : "AD",
        "voisin1" : "Z5",
        "voisin2" : "Z0",
        "aigs" : [
            {
                "aig" : "A1",
                "pos" : "droite"
            },
            {
                "aig" : "A3",
                "pos" : "gauche"
            }
        ]
    },
    {
        "trajet" : "CD",
        "voisin1" : "Z4",
        "voisin2" : "Z0",
        "aigs" : [
            {
                "aig" : "A1",
                "pos" : "gauche"
            },
            {
                "aig" : "A3",
                "pos" : "gauche"
            }
        ]
    }
]

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 30, 2024, 05:01:43 pm

Voila ma proposition pour des demi-trajets (à mettre dans le json des zones), A0 est l'aiguille simple, A0 et A1 sont les aiguilles doubles :

"vois1":"ZA",
"vois2":[["ZB","A0","gauche"],["ZD","A0","droite"]] // droite pointe

"vois1":[["ZA","A0","droite"],["ZC","A0","gauche"]], // droite talon
"vois2":"ZB"

"vois1":"ZA",
"vois2":[["ZB","A0","gauche","A1","droite"],["ZD","A0","droite"],["ZE","A0","gauche","A1","gauche"]] //  triple modele Peco

"vois1":[["ZA","A1","gauche"],["ZC","A1","droite"]] // tjd
"vois2":[["ZB","A0","gauche"],["ZD","A0","droite"]]

"vois1":[[NULL,"A0","droite","A1","gauche"],["ZA","A1","droite"],["ZC","A1","gauche"]] // tjs
"vois2":[[NULL,"A0","droite","A1","gauche"],["ZB","A0","droite"],["ZD","A0","gauche"]]

"vois1":[["ZA","A0","gauche"],["ZC","A0","droite"]], // croisement (vu comme une aiguille sans moteur)
"vois2":[["ZB","A0","gauche"],["ZD","A0","droite"]]

La tjs est un peu délicate, il faut éliminer un cas.
Pour les tracés continu des itinéraires il est utile de considérer le croisement comme une aiguille (sans moteur)
Il peut rester des erreurs !

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 30, 2024, 05:49:45 pm
@ Pierre,

J'ai beaucoup de mal à comprendre les demi-trajets pour les appareils de voie à base de croisements.
Il faut imaginer un point fictif, partir de ce point et ne parler que d'une aiguille alors qu'il en a deux...
Les trajets complets sont peut-être un peu plus lourds, mais nettement plus simples à imaginer.

Par ailleurs, cette nouvelle notation est beaucoup plus compacte (plus d'accolades), mais j'imagine qu'il faut en mettre, comme avant ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le janvier 30, 2024, 05:59:41 pm
Avec des demi-trajets, j'ai peur que cela devienne plus compliqué que l'avantage à en déduire.

Mais je n'ai sans doute pas encore bien compris pour le moment.

Et l'application éditeur de JSON nécessite un dessin du réseau au préalable.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 30, 2024, 06:06:56 pm
J'ai beaucoup de mal à comprendre les demi-trajets pour les appareils de voie à base de croisements.
Il faut imaginer un point fictif, partir de ce point et ne parler que d'une aiguille alors qu'il en a deux...
Le point fictif c'est le centre du croisement, et l'aiguille fictive sert à sélectionner  les bons demi-trajets
Citer
Les trajets complets sont peut-être un peu plus lourds, mais nettement plus simples à imaginer.
Les trajets sont à mettre dans le json des zones, on ne peut rien faire de clés genre "AB" sauf comme commentaires, il va falloir aussi structurer pour faciliter le traitement par le gestionnaire
Citer
Par ailleurs, cette nouvelle notation est beaucoup plus compacte (plus d'accolades), mais j'imagine qu'il faut en mettre, comme avant ?
Non c'est exactement le json qui est utilisé pour le gestionnaire

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 30, 2024, 07:09:16 pm
@ tous,

Sans faire les modifs du JSON (pour l'instant), j'ai corrigé quelques bugs signalés par Dominique.

Voici la nouvelle version, normalement plus ergonomique. Il reste les bugs avec les fenêtres qui ne sont pas toujours au 1er plan (mais je n'ai pas la solution...)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 30, 2024, 08:16:37 pm
@ Pierre,

Voici une autre proposition, en exemple, pour Z3 et Z4:
"Zone": [
           [
               "nom" : "Z3",
               "sens" : "banalise",
               "trajets" : [["Z5","Z1",["A1","droite","A3","droite"]
                               ["Z5","Z0",["A1","droite","A3","gauche"]
                               ["Z4","Z0",["A1","gauche","A3","gauche"]]
           ]
           [   "nom" : "Z4",
               "sens" : "pair",
               "trajets" : [["Z3","Z6",["A2","gauche"]
                               ["Z2","Z6",["A2","droite"]]
           ]
       ]

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 31, 2024, 09:10:48 am
@ Pierre et autres

L'éditeur JSON qui rentre les segments et les appareils de voie peut permettre de rentrer n'importe quelle zone.

(https://www.locoduino.org/local/cache-vignettes/L150xH67/zone_multiple-2-787ef-fc6a2.png?1706696048)

Si on découpe la zone complexe en morceaux ("pavés"), en utilisant un caractère spécial "/", on a Z1/1, Z1/2, Z1/3, Z1/4, Z1/5.
Chaque zone est décrite comme une autres (les voisins de Z1/3 sont Z1/1 et Z1/4)
Et, à la fin, on regroupe automatiquement tous les morceaux en une seule zone avec les (AC, AD, AE, AF, AG, BC, BD, BE, BF, BG) comme trajets de la zone.

Par ailleurs, dans un trajet, on met ["origine", "extrémité", ["aiguille","position"], ..., ["aiguille","position"] ], avec de zéro (pour les segments et les croisements) à "n" ["aiguille","position"] suivant la complexité de la zone.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 31, 2024, 02:00:26 pm
Bonjour

Depuis quelques temps j'essaie de voir les avantages et les inconvénients des "trajets" et des "demi-trajets". Pour cela je vous joins des extraits json du Locoduinodrome dans les deux cas, c'est une partie caractéristique des zones (la version "trajet" est issue de Denis). Je joins aussi le dessin du Locoduinodrome.

Il faut aussi s'intéresser à la facilité des opérations courantes du gestionnaire :

- obtention de la zone voisine d'une zone donnée (d'un coté ou de l'autre) en fonction de la position réelle des aiguilles

- positionnement des aiguilles pour un itinéraire donné par une liste de zones (traité dans un sens ou dans l'autre), un itinéraire est proposé

- recherche automatique des précédents et suivants des signaux

- obtention de toutes les zones voisines d'une zone donnée (d'un coté ou de l'autre)

- autres ?

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 31, 2024, 05:26:40 pm
Quelques éléments de réflexion :

1°) Quelle que soit la méthode employée, on va devoir afficher des formes (que ce soit pour les segments ou les appareils de voie) pour les itinéraires. J'ai bien dit "formes".

2°) Pour les appareils de voie, une seule et unique forme sera affichée dans un itinéraire.

3°) Il faut donc une fonction qui, pour un appareil de voie donné, affiche une seule forme, fonction de la position des lames.
Z3 :
A2 droit + A3 droit -> forme 0
A2 gauche + A3 gauche -> forme 1
A2 droit + A3 gauche -> forme 2

4°) Je ne veux pas rentrer quelque part la suite de zones des 180 itinéraires de ma gare.
Donc, il faut une fonction qui trouve cette suite toute seule, une fois l'origine et la fin de l'itinéraire donnés.

5°) Pour connaitre la zone suivante, dans les 2 sens, j'utilise la méthode suivante :

Au fur et à mesure de la lecture du fichier JSON, je crée une ArrayList des connecteurs.
Un connecteur c'est un point à la limite de 2 formes et, donc, de 2 zones :

ID, Zx, forme Nx, cote_x de la forme (0 ou 1) , Zy, forme Ny, cote_y de la forme (0 ou 1)

Par ailleurs, au fur et à mesure de la lecture du fichier JSON, je mets à jour, dans Zones,
 une variable ligne_connecteur[a1][b1].
a1 = n° de la forme et b1 = coté de la forme (0 ou 1)

Pour dessiner un itinéraire, on part d'un connecteur, du coté de l'avant du train (la loco ou le dernier wagon). Ça nous donne la zone d'origine et le coté origine.
En balayant l'ArrayList des connecteurs, côté Zx ou Zy, je trouve le connecteur origine.

Si c'est Zx, la zone suivante, c'est Zy, et réciproquement.
Supposons qu'on ait Zx. On va chercher dans la même ligne du connecteur Zy, avec le cote_y de la forme y
On va dans Zone y et on cherche ligne_connecteur[forme y][1-cote_y]
On va dans les connecteurs, directement à la ligne indiquée, et y cherche Zy (à gauche ou à droite).
Et on recommence.

Il n'y a qu'un seul balayage, au début, puis on suit par adressage direct. Et ça marche pour la signalisation et les itinéraires et dans les 2 sens.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le janvier 31, 2024, 05:57:40 pm
@ Denis

Pour les points 1 2 3, je ne comprend pas, je ne vois pas ce que c'est une "forme".

Pour le point 4, pour éviter de coder 180 itinéraires, on sait faire des algos récursifs qui fournissent tous les itinéraires possibles, après faut faire un choix, on a déjà parlé de ces problèmes il y a un bon bout de temps. L'algo a juste besoin de tous les voisins des zones (avec les positions d'aiguilles associées).

Pour le point 5, dans le gestionnaire le fichier json est lu d'un coup pour produire un objet json, il faut donc aller dans cet objet json pour avoir les voisins d'une zone, c'est assez facile.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le janvier 31, 2024, 06:29:47 pm
@ Pierre,

Une forme, c'est le dessin d'un segment de droite, d'un arc de cercle, un arc de parabole (dans mon nouvel éditeur graphique).
Pour dessiner une aiguille, il faut dessiner 2 formes : un segment de droite et arc de cercle.
Toutes les formes sont noires et une seule forme est grise, fonction de la position des lames.

Sur le point 5, je ne demande qu'à voir, ça me parait très intéressant.  ;D

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 01, 2024, 08:30:53 am
@ Pierre

Si je suis les règles que tu as édicté pour les tjs le 30/01, j'obtiens le fichier PierreJson2.xtx joint.
Je me trompe ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le février 01, 2024, 10:18:07 am
@ Denis

La notation   [[NULL,"A3","droite","A1","gauche"],   c'était juste un idée comme cela, pas forcement réaliste.

Dans le cadre du gestionnaire je suis en train de regarder les algos utilisants les voisins.

Pour le suivi des trains on a besoin des deux voisins (en fonction de la position des aiguilles), c'est un cas qui arrive très souvent quand une zone devient occupée.

Pour les itinéraires (prédéfinis ou automatiques) on a besoin des tous les voisins et en plus du "sens" des zones. C'est un cas qui arrive souvent.

Pour trouver automatiquement les précédents et les suivants des signaux, les besoins sont à peu près les mêmes que pour les itinéraires. Ce cas ne se fait qu'une fois (dans le gestionnaire ou dans l'éditeur).

Autres cas ?

Pierre
 
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 01, 2024, 01:29:14 pm
@ Pierre,

OK pour tes remarques, sauf la dernière : pour moi, le "signal suivant" dépend de la position des aiguilles et on ne peut pas le faire dans l'éditeur, sauf en pleine voie.

A part ça, j'ai une notion des itinéraires qui est une version SNCF "élargie", c'est à dire que, quand un train se déplace, il est toujours sur un itinéraire, indépendamment des gares, etc...

Il y a 2 types d'itinéraires :
- les itinéraires "bouclés", c'est à dire qu'ils tournent indéfiniment, jusqu'à ce qu'on les arrête.
- les itinéraires "à la demande" qui vont de la position actuelle du train (connecteur, sens) vers une destination choisie (connecteur, sens). Le train s'arrête quand il a atteint sa destination. On peut (et on doit) alors lui en reprogrammer une autre pour qu'il reparte.

Pour moi, on n'a pas de "bouton" (réel ou virtuel) qui modifie la position d'une aiguille. On n'a donc pas à gérer tout un tas d'enclenchements.

Les itinéraires sont enregistrés, de façon tout à fait indépendante de la position actuelle des aiguilles, des signaux actuels, des occupations actuelles...
On veut aller de là à là, quand ce sera possible, en toute sécurité. Il y a donc des zones "occupées par un itinéraire", mais physiquement vides.
Si le train est arrêté pour des raisons de sécurité, les zones aval ne sont pas (encore) occupées par un itinéraire. Ça se fait au fur et à mesure.

Par ailleurs, un itinéraire est donc une suite orientée de zones, elles aussi orientées une par une.

On peut construire l'itinéraire "par morceaux", c'est à dire qu'on part d'une gare, par exemple, et on demande un itinéraire pour une autre gare, avec une durée d'arrêt choisie dans cette gare intermédiaire. Puis on "ajoute", un autre itinéraire vers une autre gare où, par exemple, on ne s'arrête pas et, enfin, un troisième morceau vers une gare de destination où on s'arrête définitivement. Pour moi, tout ça, c'est UN itinéraire.

Si on entre, pour chaque zone, la longueur de la zone, on peut savoir à quelle distance réelle on est du signal suivant et en tenir compte dans les ralentissements.
En particulier, on peut connaître, pour un itinéraire donné, quel est le prochain feu S ou C et caler le ralentissement non pas sur le A, mais sur le S ou le C, ce que fait un conducteur quand il aperçoit un A.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 03, 2024, 07:31:23 am
Bonjour à tous,

Je procède actuellement à une refonte complète de mon éditeur pour pouvoir ajouter et supprimer des questions facilement. Le fonctionnement global sera identique.
Laissez moi quelques jours  ;)

@Pierre,
J'ai compris la description du réseau par 1/2 trajets. Mais je ne vois pas de gain, pour l'instant, à mon niveau. Mais pourquoi pas ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le février 18, 2024, 11:59:52 am
Bonjour

J'ai fait quelques essais de gestionnaire paramètré complètement par un fichier json, dans une version sans programmation objet.

Pour tester un gestionnaire il faut soit un réseau, genre Locoduinodrome, que je n'ai pas, soit un simulateur de réseau. Pour gagner du temps j'ai réutilisé le programme du TCO de l'ancien Locoduinodrome, ce programme fait le dessin du TCO du réseau avec les mises à jour dues aux circulations de trains virtuels, il comporte aussi deux manettes, avec cabsignal, pour commander les trains.

Le gestionnaire communique avec le TCO avec le protocole réseau TCP/IP. Il faut lancer le TCO avant le gestionnaire. Les deux programmes sur la même machine sinon il faut jouer sur l'adresse IP du gestionnaire.

Comme le TCO est prévu pour l'ancien Locoduinodrome, j'ai du écrire le fichier json le décrivant complètement. Le fichier json ne doit pas être vu comme un modèle, il y des redondances (noms), des infos pour des tests ...

Le fichier json est lu entièrement au début du gestionnaire et les variables nécessaires au fonctionnement du gestionnaire (états des zones, positions d'aiguilles, feu de signaux, ...) sont rajoutées automatiquement dans le json au début du programme. Ce qui veut dire que l'état du réseau est quasiment entièrement codé par le json.

Le gestionnaire est essentiellement composé de fonctions qui traitent les différents cas pouvant arriver sur les différents éléments du réseau (zones, aiguillages, signaux, itinéraires, trains, balises, ...)

Ces fonctions doivent traiter tous les cas possibles, elles sont donc moins performantes que des fonctions spécialisées (écriture à la main et/ou programmation objet).

Le gestionnaire comporte deux fichiers json (onglets Z1 et Z2), celui de l'ancien locoduinodrome et celui du nouveau (incomplet). Les deux onglets me servent d'éditeur pour les fichiers json, pour l'instant.

Le gestionnaire a été écrit à l'arrache, c'est juste pour voir si c'est possible. Quand j'aurais un peu de temps j'essairai d'améliorer le gestionnaire et de corriger des bugs, et quand j'aurais beaucoup de temps je retoucherais le TCO pour utiliser le nouveau locoduinodrome et faire des test plus poussés.

Il y a d'autres façons de faire un gestionnaire paramètré par un fichier json, ne pas hésiter à proposer d'autres solutions. Il faudra aussi porter le gestionnaire en C (C++) sur un gros micro-contrôleur (genre ESP32).

Pierre

PS 

quelques commandes possibles : 

- changement de sens d'un train : clic sur la flèche (si le gestionnaire le veut bien)

- arrêt d'urgence d'un train : clic sur le bouton STOP

- changement de vitesse d'un train : drag dans la bande (si le gestionnaire le veut bien)

- établissement d'itinéraire : clic sur bouton correspondant (le bouton clignote si mise en attente)

- destruction d'itinéraire : re-clic sur bouton correspondant

- passer la souris au pied d'un signal permet de voir le signal avec les bons feux


Ne pas avoir peur de faire rouler les trains en pousse, le sens n'a pas d'importance avec ce type de gestionnaire.

L'enclenchement d'approche n'est pas actif pour le moment
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 19, 2024, 09:14:09 am
Bonjour,

A chaque fois que je vois les programmes de Pierre, je mesure tout l'écart qui peut exister entre mon type de programmation, où je me débrouille avec le peu de fonctions de que j'ai comprises, et les siennes, où tout est objet, compact, avec un "vocabulaire" puissant que je ne connais pas. C'est très intimidant.

Bien sûr, je comprends quand même une bonne partie de ce qui est fait, mais heureusement qu'il y a les commentaires...

Ceci étant, j'ai quasiment fini mon éditeur JSON. Je vois qu'il va falloir y a jouter les types de signaux et les itinéraires (mais, là, ça me chagrine).
Il y génèrera les 2 types de JSON (par trajets et par voisins)

Faire un JSON "à la main", c'est tout à fait faisable, c'est même relativement facile (surtout pour un Locoduinodrome).
Mais on peut très facilement se tromper ou corriger dans un coin et ne pas faire la modification correspondante ailleurs.
Je tiens donc à ce que, grâce à un éditeur, on ne puisse pas laisser d'erreurs et que tout soit cohérent.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le février 19, 2024, 03:23:26 pm
Après une petite semaine de combat contre les virus et microbes je viens de télécharger ce premier gestionnaire paramétré par un fichier Json éditable ici, sous forme d'onglet.

Mes impressions sont le suivantes principalement par rapport à ce que je m'attendais à voir venir.

1) C'est du Processing donc ça ne peut pas tourner dans un Arduino (Due, ArmXX) avec une connexion Can qui permet de récevoir tous les messages des capteurs (occupation, ponctuels, RFID/Railcom) et d'émettre tous les messages vers les actionneurs (aiguilles, signaux et surtout la centrale DCC en l'occurence LaBox).
Bien entendu la connexion existe entre le gestionnaire et le TCO. Mais je n'ai pas pu faire rouler de train virtuel, ce qui n'est pas nécessaire sauf pour tester à fond les paramètres .

2) J'ai eu du mal à retrouver les objets, propriétés et méthodes habituelles du gestionnaire en C++ et comprendre l'intégration des paramètres Json dans ces méthodes (ou fonctions ici, puisque ce n'est pas encore de l'objet)

Mais il ne faut pas voir mes premières impressions comme négatives car je sors d'une période d'invasion microbienne et de grande fatigue dont je ne suis pas rétabli.

Je serais donc très intéressé de savoir un peu à l'avance quel sera le chemin d'évolution et la cible visée du gestionnaire parametrable et je me rend compte du travail important que cela représente.

Actuellement je travaille sur mon nouveau TCO graphique sur bus Can qui est donc maintenant séparé du gestionnaire et je me prépare à tester cette évolution majeure du gestionnaire centralisé.

Bravo à Pierre et Denis pour le travail important déjà fourni .





Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le février 19, 2024, 04:40:51 pm
Mes impressions sont le suivantes principalement par rapport à ce que je m'attendais à voir venir.

1) C'est du Processing donc ça ne peut pas tourner dans un Arduino (Due, ArmXX) avec une connexion Can qui permet de récevoir tous les messages des capteurs (occupation, ponctuels, RFID/Railcom) et d'émettre tous les messages vers les actionneurs (aiguilles, signaux et surtout la centrale DCC en l'occurence LaBox).
Oui c'est du Processing, car pour moi c'est beaucoup plus rapide à écrire et à tester, une version du gestionnaire pourra rester comme cela. Mais une version C/C++ pourra aussi être portée sur Arduino.
Citer
Bien entendu la connexion existe entre le gestionnaire et le TCO. Mais je n'ai pas pu faire rouler de train virtuel, ce qui n'est pas nécessaire sauf pour tester à fond les paramètres .
Tu dois pouvoir faire rouler les trains virtuels, il suffit de faire avec la souris un drag vers le haut (déplacement de la souris avec le bouton enfoncé) dans une des bandes verticales à droite de l'écran. Les trais s'arrêtent automatiquement aux signaux fermés.
Citer
2) J'ai eu du mal à retrouver les objets, propriétés et méthodes habituelles du gestionnaire en C++ et comprendre l'intégration des paramètres Json dans ces méthodes (ou fonctions ici, puisque ce n'est pas encore de l'objet)
Il n'est pas vraiment prévu d'objets. Tout le gestionnaire est écrit avec des fonctions, dans le but de faciliter la réécriture en C/C++.
Citer
Je serais donc très intéressé de savoir un peu à l'avance quel sera le chemin d'évolution et la cible visée du gestionnaire parametrable et je me rend compte du travail important que cela représente.
Petit à petit je vais améliorer le gestionnaire en Processing, et passer au nouveau Locoduinodrome (gros travail avec le tco).
J'ai commencé à regarder le portage en C/C++ sur un ESP32 bi-coeur, mais j'ai plein de problèmes avec IDE Arduino au niveau des cartes et des bibliothèques (json).

Pierre
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le février 19, 2024, 04:54:31 pm
J'ai commencé à regarder le portage en C/C++ sur un ESP32 bi-coeur, mais j'ai plein de problèmes avec IDE Arduino au niveau des cartes et des bibliothèques (json).

Je n’avais pas bien lu le mode d’emploi du TCO, donc je vais y retourner, perturbé par mes microbes !

Pour l’IDE je me demande s’il ne serait pas profitable d’embrayer sur PlatformIO, au moins pour les projets les plus complexes comme celui-là, les dernières versions de l’IDE Arduino se révélant moins stables.
Mais honnêtement il faudra présenter PlateformIO dans un article, ce à quoi je songe actuellement.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 20, 2024, 08:21:34 am
Bonjour,

Je n'arrive pas à faire marcher le programme GestTCO2. Quand j'appuie sur un bouton d'itinéraire, il ne se passe rien.
L'autre programme (GestJ2) plante.
Il faut un mobile ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 20, 2024, 09:05:11 am
Re-bonjour,

Je suis inquiet.

J'étais rentré sur ce fil (et je m'y suis investi) pour trouver une solution à mon problème : trouver une interface Processing-CAN pour faire marcher mon gestionnaire et l'améliorer avec des idées nouvelles qui seraient développées dans ce fil.

J'y ai appris l'existence de fichiers JSON qui, à mon avis, permettent d'unifier le passage de la description de réseau au gestionnaire.

Mais si le but est obligatoirement de porter le gestionnaire sur un ESP32, là, je ne trouverai jamais la solution à mon problème.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le février 20, 2024, 10:34:27 am
Re-bonjour,

Je suis inquiet.

J'étais rentré sur ce fil (et je m'y suis investi) pour trouver une solution à mon problème : trouver une interface Processing-CAN pour faire marcher mon gestionnaire et l'améliorer avec des idées nouvelles qui seraient développées dans ce fil.

J'y ai appris l'existence de fichiers JSON qui, à mon avis, permettent d'unifier le passage de la description de réseau au gestionnaire.

Mais si le but est obligatoirement de porter le gestionnaire sur un ESP32, là, je ne trouverai jamais la solution à mon problème.

Denis

Il ne s’agit pas du tout de cela, le gestionnaire pouvant être soit dans une appli Processing sur PC (qui devra donc s’interfacer avec le réseau réel en Can ou autre) soit dans une carte Arduino (pas forcément un ESP32, elle même interfacer au réseau réel et cette fois en Can qui est la solution la plus simple et flable).
Je pense qu’il y a d’autres possibilités.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le février 20, 2024, 11:08:04 am
Bonjour,

Je n'arrive pas à faire marcher le programme GestTCO2. Quand j'appuie sur un bouton d'itinéraire, il ne se passe rien.
L'autre programme (GestJ2) plante.
Il faut un mobile ?

Denis

Les deux programmes ne peuvent pas marcher l'un sans l'autre. Il faut lancer le TCO en premier, puis le gestionnaire, celui ci se connecte sur le TCO en TCP/IP et les deux programmes fonctionnent alors ensemble.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 20, 2024, 11:56:48 am
Compredo  ;D

Ça marche, effectivement. Merci
Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 25, 2024, 06:02:28 pm
Voici la 3ème version de mon programme Processing : JSON_3

Dans le répertoire "data", il y a le réseau Locoduino2.

J'ai fini la partie ZONES, mais pas la partie JSON car j'ai encore quelques questions à vous poser.

Je suis parti sur la version de Pierre, avec "vois1" et "vois2" qui est effectivement plus simple que la version avec des trajets.
Mais elle suppose qu'on raisonne à partir d'un point virtuel au milieu de la zone, ce qui ne pose pas de problème.

Et que tout "vois1 "voit tout "vois2", ce qui est généralement le cas, sauf des zones où certains "vois1" ne voient pas certains "vois2".
C'est le cas des croisement simples et des TJS.

Il faut donc qu'on se mette d'accord sur la façon dont on doit décrire les croisements et les TJS.

Pour information, pour ceux qui vont aller dans le JSON généré, j'ai généré des TJD pour Z3 et Z11, alors que c'est bien une TJS qui est décrite dans ZONES … et dans le locoduinodrome2.

Par ailleurs, je n'ai pas généré la partie "signaux" car je suis persuadé qu'on peut décrire automatiquement les signaux possibles à partir des seules infos de zone.
Je continue mes recherches. Je pense que c'est assez simple. Au moins une question supplémentaire : la zone est-elle une zone de manœuvre ?
Par ailleurs, j'ai trouvé une méthode pour décrire la "zone complexe" des précédents posts.

Et je n'ai pas généré non plus la partie "itinéraires" car je ne pense pas qu'elle soit nécessaire.
En particulier, je ne me vois pas avoir 180 boutons pour ma gare…

Je suis ouvert à toute question sur ce programme.

Voici le programme et le mode d'emploi :
https://www.locoduino.org/IMG/zip/editeur_json_3.zip (https://www.locoduino.org/IMG/zip/editeur_json_3.zip)

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le février 25, 2024, 07:25:02 pm

Je continue mes recherches. Je pense que c'est assez simple. Au moins une question supplémentaire : la zone est-elle une zone de manœuvre ?

Denis

Pour les manœuvres on n'a pas besoin d'indiquer le sens vu que c'est toujours bidirectionnel.
Par contre il faut ajouter une valeur possible pour le sens des trains normaux : "aucun"
En effet une voie peut être autorisée uniquement pour les manœuvres (tiroir, dépot)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 25, 2024, 08:03:11 pm
Je ne me suis pas fait comprendre. C'est l'inverse :
Dois-je demander si une zone est une zone de manœuvre ?

J'aimerais que tu m'expliques à quoi peut bien servir une voie autorisée dans aucun sens  :D

Sinon, si tu as fait tourner le programme, tu as vu qu'il y a bien la possibilité de n'avoir aucun feu sur un segment.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le février 25, 2024, 08:35:00 pm
Je veux dire qu'une voie peut être autorisée seulement pour les manoeuvres, dans ce cas aucun sens n'est dispo pour une circulation en ligne.
Par contre c'est toujours bidirectionnel pour les manoeuvres.
Donc le sens ne sert que pour les circulations normales.
Avec l'info de sens, l'info de manoeuvre, et les éventuels aiguillages tu peux ensuite déterminer si les feux ont le carré normal et/ou le violet.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le février 26, 2024, 01:55:12 pm
@ Denis

Je pars comme base qu'un itinéraire est une liste de zones, cette liste pouvant être établie manuellement ou automatiquement. Dans les deux cas il faut proscrire les cas inexistants des TJS et les cas impossibles avec les croisements.

Une TJS est alors vue comme une TJD. Le croisement est un petit peu plus délicat, il faut le considérer comme une sorte d'aiguille (sans moteur), par exemple soit A0 son nom cela donne pour les voisins de la zone le contenant quelque chose du genre :
   "vois1":[["ZA","A0","droite"],["ZC","A0","gauche"]]
   "vois2":[["ZB","A0","droite"],["ZD","A0","gauche"]]
si la pseudo aiguille A0 est à droite cela fait ZA<->ZB, sinon ZC<->ZD. De plus le fait de considérer le croisement comme une aiguille facilite grandement les tracés continus sur un TCO.

Pour les itinéraires automatiques, il faut juste une zone de départ et une zone d'arrivée (éventuellement un sens), un algorithme récursif peut produire facilement TOUS les chemins possibles pour aller de la zone de départ à la zone d'arrivée, il conviendra d'éliminer les chemins impossibles à cause des TJD ou des croisements et de faire un choix parmi les cas possibles (le gestionnaire peut fournir tous les voisins d'une zone).

Concernant les signaux leur génération automatique pose pas mal de problèmes :
- il faut trouver où les implanter
- il faut trouver le bon type de signal (un S ou un SR, ...)
- il faut savoir s'il faut des ralentissements RR30 ou RR60 et sur quelles aiguilles ils sont basés (attention aux aiguilles courbes ou symétriques)
- il faut faire la distinction entre les carrés et les carrés violets
- il faut savoir si les carrés supportent le BALs (feu S) ou pas
- il faut savoir si les carrés supportent les manoeuvres (feu M) ou pas
- ...

Concernant les itinéraires je pense qu'il faut mieux les décrire manuellement, s'il y en a beaucoup on peut faire une sélection d'itinéraires par bouton départ, bouton arrivée. Et on peut toujours faire une recherche automatique.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 26, 2024, 02:42:03 pm
@ PIerre,

Citer
Concernant les signaux leur génération automatique pose pas mal de problèmes :
- il faut trouver où les implanter
Je pose la question de l'emplacement dans le programme

Citer
- il faut trouver le bon type de signal (un S ou un SR, ...)
- il faut savoir s'il faut des ralentissements RR30 ou RR60 et sur quelles aiguilles ils sont basés (attention aux aiguilles courbes ou symétriques)
Je demande les vitesses, on doit donc pouvoir en déduire pas mal de choses

Citer
- il faut faire la distinction entre les carrés et les carrés violets
Je vais poser une nouvelle question : zone de gare (pour ne pas afficher S) et zone de manœuvre pour les feux spécifiques.

Mon but est de régler les cas les plus fréquents sans avoir de compétences SNCF pointues.
Je n'ai pas dit que j'y arriverai, mais je vais, au moins, essayer. 8)

Denis


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le février 26, 2024, 02:53:44 pm
Bonjour

Pour le cas du croisement il faut le considérer comme un aiguillage
Il peut être soit autonome et défini la route prioritaire de traversée, soit coupable avec un autre appareil ( ou une série d appareils)

Ex cas d'une BIF (bifurcation) pour savoir si l itinéraire sécant ( passant sur le croisement) est prioritaire sur celui qui est direct ou non.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le février 26, 2024, 02:56:17 pm
@Denis

En fait idéalement il est peut être préférable d avoir une pic liste de signaux possibles que m on affecte manuellement et de disposer des conditions qui activent tel ou tel combinaisons sur le feu est présente.
Si absente alors ces infos ne sont pas exploitées.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le février 26, 2024, 03:15:15 pm
@ Laurent,

Je cherche à faire un programme qui permette de rentrer son réseau quand on n'a pas de connaissances SNCF. Ou vraiment très peu.
La liste existe, Pierre en a fait une avec un magnifique gif pour chaque signal, animé si clignotant.
C'est ce qui va être affiché sur le TCO.
Mais pour faire le JSON, je cherche à déterminer quel type de feu doit être là, quelle cible est nécessaire dans telle situation.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le février 26, 2024, 03:32:55 pm
@Denis

En fait tu peux aussi considérer fonctionner en inverse et ne laisser dispo que ce qui n'est pas "interdit" à sélectionner.

En effet tu ne peux pas forcement toujours transcrire à 100/100 le réel en miniature d'où ces compromis ( ou libertés)
Il faut aussi distinguer dans l'absolu les combinaisons possibles selon l'implantation sur un même signal car tu peux la aussi avoir des différences. (cas des feux clignotant par exemple, cas des manœuvres, ...)
C est un contexte spécifique qui doit alors être paramétré de façon "externe" qui finalisera la cible et les feux affichages/affichés.

Ltr
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le février 26, 2024, 05:51:20 pm
@Laurent : je ne suis pas sûr de te suivre :(
Je fais confiance à Pierre et Denis pour cette phase importante.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 09, 2024, 10:40:27 am
Bonjour à tous,

J'ai avancé sur mon programme d'éditeur de JSON.
Construire un JSON "à la main" est tout à fait faisable, mais il faut bien maîtriser les subtilités de la SNCF et il faut décrire énormément de choses, ce qui est pénible et source d'erreurs.
Grâce à un programme qui automatise un peu les choses, on peut regarder les anomalies, les corriger et minimiser les saisies.

Dans mes premiers jets, les saisies étaient, à mon avis, lourdes.
Quant aux modifications, elles étaient  impossibles : on efface et on réécrit les données de la zone. C'est toujours le cas en ce moment, mais j'ai des pistes prometteuses concernant les modifications. Je verrais bientôt.

La signalisation :

Je m'intéresse à la signalisation depuis des dizaines d'années.
Aussi, automatiser une signalisation pour un réseau est un vrai challenge.
Disons-le tout de suite : on ne peut pas tout automatiser. Il faut quand même donner un minimum d'informations simples qu'un programme ne peut pas deviner tout seul.
Tout le problème consiste à rentrer vraiment très peu d'informations.
A noter que très peu de réseaux ont une signalisation et encore moins une signalisation fonctionnelle. C'est malheureux.
Mais on a aussi des réseaux qui font circuler des locos électriques sans caténaire… ::)

Quelle signalisation ?

Suivant la période et la région concernée, il y a DES signalisations.
Chaque compagnie (avant la SNCF) avait sa signalisation, au départ mécanique puis lumineuse.
En 1934, on passe progressivement au code Verlant.
La création de la SNCF en 1938 entérine cette signalisation.
Je me limiterai donc à la signalisation lumineuse, postérieure à 1936 et antérieure au TGV qui a, lui aussi une signalisation tout à fait spécifique.

En fait, je procède par étapes :
 
Etape 1 : Le Locoduinodrome, même dans sa  version 2, est trop simple.
Je suis passé à un réseau que je connais bien et pour lequel j'ai un plan des zones, avec une signalisation complète, qui plus est, validée par Pierre il y a quelques années : le réseau de Dominique.
C'est d'ailleurs en rentrant toutes les zones dans mon programme que je me suis aperçu de la lourdeur de mon processus initial.
Par exemple, même si, à terme, on a besoin des limites de vitesse de chaque zone, ce n'est pas la peine de les rentrer dès le début. Ce sera donc dans un deuxième temps, en "complément" qu'on rentrera ces infos. Sans compter les incohérences possibles dans la saisie des vitesses.

Etape 2 : Décrire quasi automatiquement ce qu'est une gare et une zone de manœuvres.
C'est absolument nécessaire car il y a dans les gares et le zones de manœuvres une signalisation spécifique. J'en suis à cette étape

Etape 3 : En fait, on ne peut pas trouver quel signal est nécessaire si on n'a pas d'itinéraires.
Et, si on veut trouver les itinéraires dans une gare, il faut définir quels sont les zones qui la composent, avec les zones d'approche et de sortie, bien sûr. Dans un premier temps, on limitera les itinéraires aux gares.

Donc, voici ma démarche globale :

1°) Rentrer toutes les zones d'un réseau (nom des zones et des voisins)
     Dans les segments, donner la position des signaux, ce qui donnera la parité des segments.
     Dans les appareils de voie, pas de signaux et, je pense, pas de parité à rentrer.
          -> Pour les traversées (croisements, TJS et TJD), on met la parité à "pairimpair"
          -> Pour les autres aiguilles, la parité de l'appareil de voie est la parité de son unique point commun avec un segment dont on connait la parité.
Il faudra peut-être pousser un peu plus loin le raisonnement pour la parité des appareils de voie.

2°) Définir comme "gare" quelques zones pour calculer la gare entière.

3°) Définir comme "manœuvres" une zone pour calculer la zone de manœuvres entière.

4°) Trouver tous les itinéraires de chaque gare.

5°) Rentrer les infos complémentaires de vitesse des segments de la gare, ce qui donnera les vitesses des appareils de voie, branche par branche, en évitant les erreurs et les incohérences.
En déduire la signalisation correspondante.

Démarche pour définir une gare (voir le fichier gare) :

J'ouvre une ArrayList : "zones_gare" qui va collecter toutes les zones d'une seule gare, au fur et à mesure que le programme parcourt toutes les zones.

Une fois les zones rentrées, je déclare Z3 "gare", ce qui met "g0" dans le champ "gare" de la zone Z3.
Puis la recherche systématique commence. Elle est détaillée dans le fichier joint.

En ayant rentré une seule zone, on a décrit toute la gare.

Evidemment, cet exemple est très simple.
Il est basé sur le principe suivant : dans une gare, il n'y a jamais deux segments voisins.

Dans cette gare, il permet, à la fois, d'exclure Z0 et Z7 de la gare et de déclarer Z1 zone d'approche et Z6 zone de sortie.

Dans la gare de Dominique, ce seul principe ne suffit pas. Ça serait trop beau ! :P

Il y a 2 gares : g0 au sud et g1 au nord.
On doit rentrer un segment dans g0 : j'ai choisi Z27
On doit rentrer 2 segments dans g1 (un pour le haut de la gare, un pour le bas car il n'y a pas de communication entre le haut et le bas de la gare g1) : j'ai choisi Z4 et Z22.
On n'a pas à s'occuper de la partie droite du schéma car on y trouve 2 segments consécutifs.
Z11 est une zone d'approche de g0, mais pas Z30
Z34 est une zone d'approche de g1, mais pas Z7
Pour la partie gauche, on ne peut pas utiliser le principe puisqu'il n'y a qu'une zone entre les deux gares et on aboutirait à une seule et unique gare.
Il faut donc préciser "à la main" les informations :
Z25 est la zone d'approche de g0 et Z16 est la zone d'approche de g1.
Les infos rentrées à la main sont prioritaires sur les infos crées par le programme.

Les zones de manœuvre :

Dans le réseau de Dominique, il y a aussi des zones de manœuvre. Et, si on n'y prenait pas garde, elles seraient, elles aussi, ajoutées aux gares, ce qui serait une erreur.
Il faut donc bloquer le processus en rentrant "bloque" dans les zones Z36, Z45, Z46 pour g0 et dans Z2 pour g1.

Maintenant, il faut décrire les zones de manœuvre.

A noter une chose importante : sauf cas particulier, on rentre dans la zone de manœuvre en marche arrière et on en sort en marche avant.

C'est le même principe que pour les gares, à ceci près qu'il n'y a pas besoin de bloquer, la gare s'en charge et, aux autres extrémités, tous les butoirs arrêtent le processus de recherche de zones.
On définit donc Z36 et Z37 où on rentre m0 dans le champ "manœuvres" des zones.
La dernière chose à définir, ce sont les zones d'approche des zones de manœuvres.
Là, je ne vois pas d'automatisation possible : il faut les définir à la main dans Z30 et Z16, champ "manœuvre". A noter, peut-être une piste : Z30 et Z16 sont les zones de sortie de la gare et je pense que ça n'est pas un hasard.

Résumé :

En rentrant 13 informations simples, on remplit 37 cases sans erreurs !

Fichiers joints :

https://www.locoduino.org/IMG/zip/editeur_json4.zip (https://www.locoduino.org/IMG/zip/editeur_json4.zip)

Dans le .zip, on a ma dernière version du programme Processing, avec la création des gares et des zones de manœuvre. Mais je n'ai pas fait la partie "entrée des infos gare/manœuvre" : je les rentre directement dans le fichier Excel. C'est la prochaine chose que je vais faire. C'était juste pour tester le fonctionnement.
On ne pose plus de questions pour les vitesses dans la première phase, mais il faudra poser les questions dans les "compléments". A réaliser, donc
Je vais aussi ajouter la possibilité de modifier les informations dans une zone.
Les fichiers Excel décrivant les zones (avant et après) sont dans le .zip

Il y a aussi le fichier détaillé du processus de définition d'une gare.
Et, évidement, le plan du réseau de Dominique (toutes mes excuses pour cet oubli)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 09, 2024, 08:07:16 pm
Bonjour Denis et à tous,

Ce travail d'analyse est très interessant et je suis en train d'analyser la nouvelle application (4) et tes explications.

Il y a maintenant la possibilité d'ouvrir un fichier description existant. Ca c'est super ! Le travail est sauvegardé.

Merci pour les 2 réseaux : le Locoduinodrome 2 et mon réseau de Dominique.

Ca tombe bien, je suis en pleine reconstruction de mon TCO graphique-tactile sur écran 7 pouces. Ce TCO reprend exactement les mêmes objets zone et aiguilles que mon gestionnaire. En particulier les méthodes "suivantePaire" et "suivanteImpaire", avec la méthode inline GZone* GZone::selonAiguille(GAiguille* a,GZone* z1,GZone* z2) { return a->directe()?z1:z2; }
je vais attendre la mise au point avant d'ajouter les signaux.

Toutefois je constate dans mon réseau qu'il y a quelques cas où un voisin passe par les conditions de 3 aiguilles et pas seulement 2  comme dans le fichier JSON :
GZone* GZ6::suivantePaire() {
  return selonAiguille(Ga16, selonAiguille(Ga13, NULL, Gz39), selonAiguille(Ga15, NULL, Gz2));}
ou
GZone* GZ26::suivanteImpaire() {
  return selonAiguille(Ga0, selonAiguille(Ga1, Gz27, selonAiguille(Ga3, NULL, Gz44)), selonAiguille(Ga2, NULL, Gz15));}

Je pense qu'il sera possible d'importer aussi le fichier JSON dans le TCO comme dans le gestionnaire. Cela se fera en C++ avec l'IDE Arduino mais je ne vois pas encore comment l'intégration se fera. Patience !

Cela me permet dors et déjà de voir les chemins possibles en fonction des positions des aiguilles à partir de n'importe quelle zone du réseau.
Je vais écrire aussi les calculs d'itinéraire entre 2 zones départ et arrivée qui définira les position d'aiguilles nécessaires.

Ce sera alors un bel outil de tests du travail que tu fais avec Pierre.

Mais le but du gestionnaire reste le suivi des trains et la sécurité (ralentissements, arrêts avant zone occupée) avec des moyens de pilotage soit manuels soit automatiques. Donc la prise en compte des messages Can des détections (présence par consommation de courant, RFID et RailCom, bien que n'ayant pas de Railcom sur mon réseau). L'intégration des réceptions des messages Can dans le gestionnaire est une des tâches les plus intéressantes et délicate, ainsi que les commandes des trains (ralentissements, arrêts et redémarrages automatiques qui donnent un vrai réalisme au réseau).

Je suis cependant un peu étonné du petit nombre de modélistes qui ont déclaré utiliser le gestionnaire de Pierre.
Si un lecteur de ce sujet se sent visé, ce serait très sympa de nous en toucher quelques mots, simplement.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 19, 2024, 05:16:38 pm
Bonjour,

Voici la version 5 de mon éditeur JSON.
De nombreux changements et l'occasion de faire le point, après 25 pages sur ce fil…

Pourquoi un éditeur JSON ?

Le but de ce programme est de simplifier au maximum la saisie d'informations, d'en vérifier la cohérence et d'automatiser tout ce qui peut l'être.

Le fichier important, c'est le fichier JSON puisqu'il fait le lien avec un futur gestionnaire de réseau.
On doit avoir la séquence suivante :
Editeur JSON --> fichier JSON --> gestionnaire de réseau.

Il est tout à fait possible que d'autres réalisent un éditeur JSON, à condition que le résultat soit un fichier identique, quel que soit l'éditeur. En particulier, mon éditeur graphique (en cours de développement) devra fournir un fichier JSON.
De la même manière, tous les gestionnaires de réseau devraient être compatibles JSON.
On évitera ainsi à celui qui veut faire un gestionnaire toute cette phase rébarbative concernant l'entrée des infos du réseau.

Remarque 1 :
Comme l'éditeur et le gestionnaire ne sont pas complets, la version que je vais présenter est encore susceptible d'évolutions.

Remarque 2 :
Ce programme qui décrit un réseau est sensé ne servir qu'une fois… ;D

Un deuxième fichier est généré par le programme, le fichier "Zones". C'est juste en phase de développement, je pense qu'il n'a pas d'avenir. C'est juste un "fourre-tout" qui permet de conserver des infos pendant le déroulement du programme.

Signalisation :

La signalisation SNCF, même réduite aux cas les plus fréquents, reste une partie complexe puisqu'une fois compris le cas de la pleine voie, on doit tenir compte de la position des aiguilles , des vitesses sur les appareils de voie et même de la longueur des zones pour prévenir que le canton suivant est plus court que d'habitude et qu'il faudra en tenir compte pour freiner.
Il s'ensuit que pour calculer tout ce que peut afficher un signal, il faut d'abord avoir défini les itinéraires possibles.

J'en suis donc actuellement à cette étape dans laquelle je vais pouvoir "récupérer" ce que j'avais fait pour mon gestionnaire.

Itinéraires :

En phase de développement, donc, et je propose de n'indiquer dans le JSON que les itinéraires des gares. C'est d'ailleurs pour ça que j'ai passé du temps à définir quelles zones sont des zones de gare. Idem pour les zones de manœuvre.

Les itinéraires vont aussi servir dans le gestionnaire, évidemment, mais avec une contrainte de temps, ce qui n'est pas le cas ici.

Il y a deux fonctions chronophages dans la gestion des itinéraires :
1°) quelle est la zone suivante ?
2°) par quel côté j'aborde la zone suivante ?

J'ai décidé de répondre à ces questions directement dans le JSON.
J'ai adapté mon programme pour qu'on ait un traitement unique de tous les éléments de voie.

De la "même" façon que la Marine a pris la règle de "tribord, bâbord" pour qu'il n'y ait pas d'ambiguïté entre la gauche et la droite sur un bateau, la SNCF parle de "pair" et "impair", ce qui permet de gérer "gauche, droite, haut, bas, …" dans les dessins et le sens de circulation.

Pour indiquer les voisins, les "côtés" d'une zone, j'utilise des règles suivantes :

Cas des segments :

Je décrète que l'on parcoure l'octogone au départ (qui permet de définir l'orientation du segment à afficher) dans le sens des aiguilles d'une montre quand on est dans le sens "pair". Et, par conséquent, on est dans le sens impair dans l'autre sens.
Dans les dessins, comme il y a des lettres (A, B), on parcoure toujours un segment en allant de A vers B, de l'origine à l'extrémité.
Quand il n'y a un signal qu'à un bout, il est toujours du côté extrémité, c’est-à-dire B. Dans les boucles, on préfèrera les chiffres : on va de 0 à 1, mais ça, ça n'apparait pas sur le dessin.
Par ailleurs, l'origine est toujours du côté "voisin1" "côté0" du segment et l'extrémité est toujours du côté "voisin2" "cote1" du segment.

Cas des appareils de voie :

Il y a 2 types d'appareils de voie :

1°) ceux où il y a une extrémité commune à tous les trajets :
On part toujours de A, l'extrémité commune, et on va vers B, C, D.
A est côté "voisin1" "cote0" de l'appareil.
B, C et D sont, respectivement côté "voisin2", "cote1", "cote2" et "cote3"

2°) ceux qui sont des traversées (croisement, TJD, TJS)
A est côté "voisin1" "cote0",
B est côté "voisin2" "cote1",
C est côté "voisin1" "cote2",
D est côté "voisin2" "cote3".

L'intérêt de cette notation est que quand on rentre dans une zone du côté "voisin1", on en ressort du côté "voisin2". Et réciproquement. Et on peut facilement tester toutes les extrémités en allant de 0 à 4.
Pour être précis, de 0 à "zone.nb_voisins" :
3 pour les aiguilles et les enroulés,
4 pour les croisements, TJD, TJS et triples.

Exemple pour la zone 15 du plan de Dominique :

Je vous conseille d'imprimer le fichier "Z26 et ses voisins" pour mieux suivre.
 
Z26 est impair car Z25 est impair
vois1 est le voisin du côté A du triple. Donc, le vois1 est Z25.
Et, vu de Z25, Z26 est du côté B du segment. Donc vois2, côté 1.
C'est plus compliqué pour vois2 puisque ça dépend de la position des lames :
Côté B, le voisin est Z27, si a0 est à gauche et a1 est à droite
Et, vu de Z27, Z26 est du côté A du segment, soit vois1 côté 0.
Côté C, le voisin est Z15, si a0 est à droite.
Et, vu de Z15, Z26 est côté A de la TJD, soit vois1 côté 0.
Côté D, le voisin est Z44, si a0 est à gauche et a1 à gauche.
Et, vu de Z44, Z26 est du côté C de l'aiguille, soit vois2 cote 2.

Pour la suite, les itinéraires n'étant pas faits, les signaux ne sont pas remplis.

A suivre.
Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 19, 2024, 06:24:23 pm
Merci Denis, gros travail !

Je vais essayer de comprendre mon réseau et rapprocher le JSON des suivantesPaire et suivanteImpair du programme.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 20, 2024, 03:35:22 pm
@Denis,
Tu dis :
     Dans les segments, donner la position des signaux, ce qui donnera la parité des segments.
     Dans les appareils de voie, pas de signaux et, je pense, pas de parité à rentrer.

Tu te trompes sur la position des signaux. Un signal n'est pas sur un bloc, qu'il soit segment ou appareil de voie, mais à la jonction de deux blocs.

Il faut décrire ce qui est utile pour le gestionnaire.
Le gestionnaire a besoin d'avoir :
- la liste des blocs avec l'adresse du détecteur de courant.
- la liste des aiguillages avec l'adresse du décodeur et/ou de la rétrosignalisation de position
- la liste des signaux avec le type de cible, la direction pair/impair, le bloc en amont, le bloc en aval, et la ou les adresses de décodeurs

Jusque là c'est une description très simple.
La partie plus complexe ce sont les cantons. Un canton c'est une série ordonnée de 1 ou plusieurs blocs entre un feu de départ et un feu d'arrivée.
Il peut contenir une série ordonnée de un ou plusieurs appareils de voie dont on précisera la position directe ou déviée, et convergente/divergente.

Pour une gestion simplifiée des feux  avec uniquement des feux de type BAL ou des carrés géré comme des BAL on n'a pas besoin de plus d'informations.

Pour une gestion prototypique des feux on a besoin des itinéraires des trains.
En effet dans ce cas on ne doit ouvrir un carré que si on a réservé le canton pour un train, ce qui suppose qu'on sait où il va.

Pour les manoeuvres c'est plus complexe. L'idée qui vient à l'esprit en premier, c'est de définir un canton comme zone de manoeuvre.
Le problème c'est que ça marche pour un tiroir ou toute autre voie sans issue mais pas pour une sortie de gare jusqu'au tableau LM.
Dans ce cas il faudrait définir la marche en manoeuvre dans l'itinéraire d'un train et changer le type de canton à la volée.
Mais on peut utiliser une astuce (géniale 8) ) pour contourner le problème :
Il suffit de définir un tiroir virtuel (donc un nouveau bloc) avec un aiguillage virtuel et le bloc virtuel utilisant le même détecteur de courant que le bloc réel.
Et on rajoute un (ou plusieurs) canton de manoeuvre qui va vers le tiroir virtuel.
On rajoute un carré violet virtuel à chaque butoir et la logique des feux devient simple : si le feu suivant est un violet on ouvre le blanc, sinon c'est vert ou jaune.
Le tiroir virtuel va également résoudre le problème du carré nain de retour qui doit être ignoré par les trains en ligne. Le carré est simplement mis sur le tiroir virtuel.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 20, 2024, 05:41:12 pm
Merci Etienne,

Je reconnais que l'idée du tiroir virtuel me plait, en particulier pour gérer le feu nain et la vitesse à 15 km/h maxi pendant toute la manœuvre.

Je n'en suis pas encore là. Je cherche à calculer les itinéraires car il est hors de question d'en donner la liste à la main.
Je sais le faire dans mon gestionnaire, mais, là, il faut que j'adapte.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mars 20, 2024, 10:35:09 pm
Bonjour,
Denis , il y a peut-être une chose qu'il convient également de prendre en considération , suffisamment en amont , c'est les voyants du TCO , je pense notamment à ceux qui montrent l'itinéraire , et l'occupation des zones (il me semble que tu sais bien ce que c'est) : pourquoi ?
je finalise actuellement le 4ème poste d'aiguillage analogique & TCO pour le club ; sur le TCO il y a des boutons poussoirs et des LEDs ; pour simplifier le travail de l'arduino (PRO MICRO = uno , faible puissance) , tout est fait par des tableaux , saisis manuellement ;
il y a 16 boutons et 18 aiguillages , (TCO de taille moyenne) , cela fait quand-même 35 itinéraires , dont certains peuvent comporter jusqu'à 14 LEDs , parmi les 72 LEDs des voies du TCO ; cela oblige à saisir un tableau de 35 * 14 =  490 items , qui sont soit 0 , soit une des 72 LEDs : c'est fastidieux , donc je pense qu'il serait bien que cette tâche puisse également être automatisée , si tu vois ce que je veux dire ...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 21, 2024, 08:32:30 am
@trimarco232,

Quand on me pose une telle question, c'est un réflexe : peux-tu donner le plan de ta gare ?

Bon, quand le programme calcule les itinéraires, il fournit évidemment la liste des zones concernées et la position des aiguilles.
La mettre sous forme d'un tableau est tout à fait envisageable, ça n'est pas le plus dur, et de loin.

Cela dit, il va bien falloir rentrer toutes les zones dans mon programme : c'est un peu fastidieux aussi  :)
Pour information, rentrer le Locoduinodrome 2 me prenait 4 minutes (je l'ai fait plein de fois, pour le développement)
Pour la gare de Dominique, ça m'a pris un peu moins d'une heure.
L'intérêt d'un programme, c'est d'automatiser certaines choses et, surtout, de vérifier les incohérences.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mars 21, 2024, 09:39:34 am
pour illustrer , le tableau des LEDs en fonction de l'itinéraire :
#define leds_iti  (1 + 14)// 1 + nombre max de leds dans l'itinéraire
// la 1ère colonne donne le nombre de leds dans le chenillard
// les leds hors chenillard (aiguilles protégeante) sont à ajouter à la fin
const uint8_t led_iti[itis * leds_iti] PROGMEM = { /// protégeantes à revoir /// problématique du sas ?
  // ↓ iti       ↓nb   1       2       3       4       5       6       7       8       9       /*-*/   10      11      12      13      14 <- led
  /*  h6_sa  */  5,  d_h6,    d_h6a,   d_h5r,  d_h4r,  d_s_n,  /*-*/   d_h3n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  0
  /*  h5_sa  */  5,  d_h5,    d_h5a,   d_h5n,  d_h4r,  d_s_n,  /*-*/   d_h3n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  1
  /*  h4_sa  */  4,  d_h4,    d_h4a,   d_h4n,  d_s_n,  /*-*/   d_h3n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  2
  /*  sa_th  */  3,  d_s_n,   d_t_n,   d_th,   /*-*/   d_s2n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  3
  /*  h6_th  */  9,  d_h6,    d_h6a,   d_h5r,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2r,  d_th,   /*-*/   d_h3n,  d_s3n,  d_e1n,  o_,     o_,     //  4
  /*  h5_th  */  9,  d_h5,    d_h5a,   d_h5n,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2r,  d_th,   /*-*/   d_h3n,  d_s3n,  d_e1n,  o_,     o_,     //  5
  /*  h4_th  */  8,  d_h4,    d_h4a,   d_h4n,  d_s_r,  d_h3b,  d_e2n,  d_s2r,  d_th,   /*-*/   d_h3n,  d_s3n,  d_e1n,  o_,     o_,     o_,     //  6
  /*  h3_th  */  8,  d_h3,    d_b3n,   d_h3a,  d_h3n,  d_h3b,  d_e2n,  d_s2r,  d_th,   /*-*/   d_b2n,  d_s_n,  d_s3n,  d_e1n,  o_,     o_,     //  7
  /*  h2_th  */  7,  d_h2,    d_b2n,   d_h2a,  d_h2r,  d_s3r,  d_s2r,  d_th,   /*-*/   d_b3n,  d_p_r,  o_,     o_,     o_,     o_,     o_,     //  8
  /*  h1_th  */  8,  d_h1,    d_h1a,   d_h1b,  d_h1r,  d_h2n,  d_s3r,  d_s2r,  d_th,   /*-*/   d_p_r,  o_,     o_,     o_,     o_,     o_,     //  9
  /*  tp_th  */  8,  d_tp,    d_tp1,   d_tp2,  d_p_n,  d_h2n,  d_s3r,  d_s2r,  d_th,   /*-*/   o_,     o_,     o_,     o_,     o_,     o_,     //  10
  /*  h6_hd  */ 10,  d_h6,    d_h6a,   d_h5r,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_t_n,  d_s3n,  d_e1n,  o_,     //  11
  /*  h5_hd  */ 10,  d_h5,    d_h5a,   d_h5n,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_t_n,  d_s3n,  d_e1n,  o_,     //  12
  /*  h4_hd  */  9,  d_h4,    d_h4a,   d_h4n,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_t_n,  d_s3n,  d_e1n,  o_,     o_,     //  13
  /*  h3_hd  */  9,  d_h3,    d_b3n,   d_h3a,  d_h3n,  d_h3b,  d_e2n,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_b2n,  d_s_n,  d_t_n,  d_s3n,  d_e1n,  //  14
  /*  h2_hd  */  8,  d_h2,    d_b2n,   d_h2a,  d_h2r,  d_s3r,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_b3n,  d_p_r,  d_t_n,  o_,     o_,     o_,     //  15
  /*  h1_hd  */  9,  d_h1,    d_h1a,   d_h1b,  d_h1r,  d_h2n,  d_s3r,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_p_r,  d_t_n,  o_,     o_,     o_,     //  16
  /*  tp_hd  */  9,  d_tp,    d_tp1,   d_tp2,  d_p_n,  d_h2n,  d_s3r,  d_s2n,  d_s1n,  d_hd,   /*-*/   d_t_n,  o_,     o_,     o_,     o_,     //  17
  /*  h6_hm  */ 10,  d_h6,    d_h6a,   d_h5r,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1r,  d_hm,  /*-*/    d_p_r,  d_t_n,  o_,     o_,     //  18
  /*  h5_hm  */ 10,  d_h5,    d_h5a,   d_h5n,  d_h4r,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1r,  d_hm,  /*-*/    d_p_r,  d_t_n,  o_,     o_,     //  19
  /*  h4_hm  */ 10,  d_h4,    d_h4a,   d_h4n,  d_s_r,  d_s_r,  d_h3b,  d_e2n,  d_s2n,  d_s1r,  d_hm,  /*-*/    d_p_r,  d_t_n,  o_,     o_,     //  20
  /*  h3_hm  */  9,  d_h3,    d_b3n,   d_h3a,  d_h3n,  d_h3b,  d_e2n,  d_s2n,  d_s1r,  d_hm,   /*-*/   d_b2n,  d_s_n,  d_p_r,  d_t_n,  o_,     //  21
  /*  h2_hm  */  8,  d_h2,    d_b2n,   d_h2a,  d_h2r,  d_s3r,  d_s2n,  d_s1r,  d_hm,   /*-*/   d_b3n,  d_p_r,  d_e2n,  d_s1n,  o_,     o_,     //  22
  /*  h1_hm  */  9,  d_h1,    d_h1a,   d_h1b,  d_h1r,  d_h2n,  d_s3r,  d_s2n,  d_s1r,  d_hm,   /*-*/   d_p_r,  d_e2n,  d_s1n,  o_,     o_,     //  23

  /*  tp_hm  */  9,  d_tp,    d_tp1,   d_tp2,  d_p_n,  d_h2n,  d_s3r,  d_s2n,  d_s1r,  d_hm,   /*-*/   d_e2n,  d_s1n,  o_,     o_,     o_,     //  24
  /*  h3_se  */  5,  d_h3,    d_b3r,   d_h2a,  d_h2r,  d_s3n,  /*-*/   d_p_r,  d_e2n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  25
  /*  h2_se  */  5,  d_h2,    d_b2n,   d_h2a,  d_h2r,  d_s3n,  /*-*/   d_p_r,  d_e2n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  26
  /*  h1_se  */  6,  d_h1,    d_h1a,   d_h1b,  d_h1r,  d_h2n,  d_s3n,  /*-*/   d_p_r,  d_e2n,  o_,     o_,     o_,     o_,     o_,     o_,     //  27
  /*  tp_se  */  6,  d_tp,    d_tp1,   d_tp2,  d_p_n,  d_h2n,  d_s3n,  /*-*/   d_e2n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  28
  /*  se_hm  */  2,  d_e1n,   d_hm,    /*-*/   d_s1n,  o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     //  29

  /*  tp_p1  */  7,  d_tp,    d_tp1,   d_tp2,  d_p_r,  d_p1n,  d_p1a,  d_p1,   /*-*/   d_h1r,  o_,     o_,     o_,     o_,     o_,     o_,     //  30
  /*  tp_p2  */  8,  d_tp,    d_tp1,   d_tp2,  d_p_r,  d_p1r,  d_p2a,  d_p2r,  d_p2,   /*-*/   d_h1r,  o_,     o_,     o_,     o_,     o_,     //  31
  /*  tp_p3  */  8,  d_tp,    d_tp1,   d_tp2,  d_p_r,  d_p1r,  d_p2a,  d_p4n,  d_p3,   /*-*/   d_h1r,  o_,     o_,     o_,     o_,     o_,     //  32
  /*  tp_p4  */  8,  d_tp,    d_tp1,   d_tp2,  d_p_r,  d_p1r,  d_p2a,  d_p4r,  d_p4,   /*-*/   d_h1r,  o_,     o_,     o_,     o_,     o_,     //  33
  /*  h3_h2  */  3,  d_h3,    d_b3r,   d_h2a,  /*-*/   o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_,     o_      //  34

} ;

et le dessin :
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 21, 2024, 10:04:03 am
Waouhh !
Voilà une gare comme je les aime : commandée de façon "géographique", avec quelques itinéraires compatibles.

J'en suis à refaire marcher mes itinéraires dans le nouveau contexte. Chaque chose en son temps. Mais je testerai ta gare, c'est sûr.
C'est une gare terminus, apparemment ?

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mars 21, 2024, 05:00:07 pm
oui , c'est une gare terminus , mais c'est en analogique , donc à priori , il n'y a pas d'itinéraires compatibles , sauf cas particuliers : par exemple la voie TEP est commutable par relais , soit sur l'alim analogique du reste de la gare , soit sur l'alim des voies EP1 à EP4 ; c'est en fonction des itinéraires formés que l'arduino commute par relais , les alims analogiques , et également coupe l'alim des voies non prises dans un itinéraire ; ce dernier point permet de garer des trains sans avoir à utiliser d'interrupteur
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 21, 2024, 05:21:49 pm
@trimarco232

La gestion d'itinéraire n'a aucun a priori sur le fait qu'on soit en analogique ou DCC.
Personnellement, je ne suis pas un fan absolu du DCC, étant en N. Le DCC a des avantages, c'est certain, dont le son, mais c'est hors de prix.

Ce que j'appelle "itinéraires compatibles", c'est, par exemple :
(TH - H5) et (H3 - D) et (M - H1) et (Ep4 - Tep) qui peuvent très bien être simultanés.
L'autre chose que j'aime bien dans les gares terminus c'est que toutes les voies sont banalisées.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: CATPLUS le mars 21, 2024, 07:43:47 pm
Bonsoir,

Ci-joint une photo de mon TCO (juste pour le fun) aucun rapport avec votre sujet  :D
A droite j'ai fait un affichage (avec un UNO) via un écran tactile avec les directions (rien d'automatique sur les voies)
Face 1 affichage des directions, après le choix, sur la face 2 affichage des inters à bouger (voir photo)
J'ai affiché une lettre sur le TCO, je clique sur la direction choisie de l'afficheur, ensuite je bouge les interrupteurs (c'est ma façon de m'amuser)

Cordialement
Marcel
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 21, 2024, 09:57:08 pm
Merci Marcel,

Il est clair que tu aimes les trains américains : ton TCO est vraiment typique des USA.
On s'éloigne un peu du sujet, mais on pourra y revenir un peu plus tard.

Denis
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mars 22, 2024, 06:18:55 pm
@trimarco232

La gestion d'itinéraire n'a aucun a priori sur le fait qu'on soit en analogique ou DCC.
certes , mais en analogique , il faut une alim traction dédiée à chaque itinéraire compatible , j'ai restreint pour éviter ça
Personnellement, je ne suis pas un fan absolu du DCC, étant en N. Le DCC a des avantages, c'est certain, dont le son, mais c'est hors de prix.
c'est pour cela que je planche sur ça https://forum.locoduino.org/index.php?topic=1601.0 (https://forum.locoduino.org/index.php?topic=1601.0)
et donc pour ça que je suis ce que tu fais , car il me faudra quelque chose pour le piloter , tout en haut

Ce que j'appelle "itinéraires compatibles", c'est, par exemple :
(TH - H5) et (H3 - D) et (M - H1) et (Ep4 - Tep) qui peuvent très bien être simultanés.
L'autre chose que j'aime bien dans les gares terminus c'est que toutes les voies sont banalisées.
mon principe perso , c'est de banaliser tout le réseau , et d'ailleurs d'avoir tout en VU , pour économiser de la place

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 25, 2024, 10:39:31 am
Après quelques semaines consacrées à la Savoie, je me remets au train. J'ai lu tous les post en retard. Je vais commencer par refaire une petite mise au point, dans ce fil on s'intéresse aux gestionnaires basés sur les ZONES, les cantons sont marginaux dans ce type de gestionnaire, ils ne servent qu'a l'espacement des trains. Pour les amateurs de cantons il y a d'autres fils sur ce forum.

Mon séjour en Savoie a du priver mon cerveau d'oxygène, car en lisant les post je suis tombé sur des mots et des idées que je ne comprends pas : segments, blocs, cantons virtuels et j'en passe.

Le but n'est pas de mettre dans le fichier JSON tout et n'importe quoi pour se faire plaisir, mais de mettre ce qui est nécessaire au gestionnaire pour faire son job efficacement, c'est à dire la sécurité, puis les améliorations : itinéraires, cantonnement, manoeuvres, conduite automatique, … . Tout ceci en essayant de rester le plus général possible : support de l'analogique et du digital, support de différents modes de rétro-signalisation, support de différents modes de commande des aiguilles et de signaux, … .

Il va falloir discuter séparément sur plusieurs sujets : les manoeuvres, les itinéraires, les sens des zones et voies, analogique/numérique, … .
Je vais aussi publier une nouvelle proposition de gestionnaire, cette version corrige quelques bugs, introduit des itinéraires permanents, mais surtout facilite la transition vers le C/C++ et l'Arduino qui impliqueront un changement inéluctable de la bibliothèque JSON.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 25, 2024, 10:46:02 am
Pour commencer la discussion sur les manoeuvres, quelques précisions :


Concernant les manoeuvres certaines gares, généralement moyennes ou grandes, ont de voies spécialisées appelées "tiroir", ce sont souvent des voies courtes destinées à accueillir une locomotive pour des mises en tête de train ou des retraits. Une signalisation particulière est utilisée avec des carrés violets, mais aussi des feux blanc (M) sur des carrés normaux.

Dans certaines gares les manoeuvres se font sur voie principale, une pancarte LM (Limite de Manoeuvre)
indique jusqu'où la locomotive peut aller en manoeuvre, il y a généralement la place pour manoeuvrer un train complet. La signalisation est la même que pour les tiroirs (carrés violets). Dans les gares sur des  doubles voies les manoeuvres se font toujours sur la voie "sortante", cela implique que le conducteur d'un train en ligne (pas en manoeuvre) ne rencontre pas de carrés violets (sauf IPCS). Bien souvent il n'y a pas de place pour implanter un carré violet "haut" dans l'entrevoie, un carré violet bas est alors implanté. Il n'y a pas de différences entre les carrés violets haut et bas. Par contre dans les gares sur voie unique les trains en ligne peuvent rencontrer des carrés violets, ceux-ci présentent alors un feu blanc (M).

Dans les grandes gares il y a souvent un mélange de manoeuvres avec des tiroirs et des manoeuvres sur voie principales.

Pierre
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 25, 2024, 06:19:06 pm
Pour commencer la discussion sur les manoeuvres, quelques précisions :

Il n'y a pas de différences entre les carrés violets haut et bas.
Pierre

Au contraire, il y a une grosse différence : le violet bas ne concerne que les trains en marche à vue.
Un train en marche normale qui franchit un carré violet bas ouvert reste en marche normale.
Un train en marche normale qui franchit un carré violet haut ouvert passe en marche à vue. (par exemple vers un dépot)

Dans le cas des manoeuvres jusqu'au tableau LM sur voie unique on utilisera un violet bas pour le retour en gare des trains en manoeuvre
qui sera ignoré par les trains en marche normale.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 25, 2024, 06:39:31 pm
@ Etienne

OK après vérification dans les doc SNCF, il y a bien une différence (petite) entre les carrés violets hauts et bas.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 26, 2024, 01:11:24 am
Cette (petite) différence complique sensiblement les gestionnaires.
Dans la logique de BAL un signal fixe son aspect ouvert d'après le signal suivant, mais il faut qu'il ignore le cv bas.
Et pour le train il faut savoir si il est en marche à vue.
Les cibles C, F, G, H peuvent afficher le vert ou le blanc et doivent donc savoir si c'est pour une manoeuvre.
Il y a 2 solutions :
- soit on a une variable booléenne associée au train gèrée par le gestionnaire et une fonction permettant au signal d'y accèder.
- soit on marque la voie comme voie de manoeuvre de manière fixe (pour un tiroir par exemple) ou dynamique aussi gèrée par le gestionnaire.

Si on utilise un gestionnaire existant (comme JMRI) qui ne gère ni l'un ni l'autre on a besoin d'une autre solution.
Cette solution c'est mon idée du tiroir virtuel:
Physiquement il y a une voie qui sort jusqu'au tableau LM et continue plus loin, mais logiquement il y a deux voies superposées avec une seule
détection de présence. Le violet bas se trouve sur la voie déviée et cette voie s'arrête au niveau du tableau LM.
Sur une cible C, F, G, H on affichera le blanc si l'aiguille virtuelle est déviée.
(Je suis en train de modifier le système de signalisation SNCF2015 dans JMRI pour obtenir ce résultat.)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 26, 2024, 09:24:43 am
Bonjour,

Moi, je veux bien qu'on ait ce genre de discussion, mais je pense qu'on a perdu tout le monde.

La signalisation SNCF est très complexe, elle permet de résoudre tous les cas, c'est vrai. Mais, là, je pense qu'on va trop loin dans le détail.

Je vais bientôt fêter l'anniversaire des 50 ans que je lis Loco-Revue. J'ai tous les numéros depuis le numéro 338, en 1974. Je lis aussi d'autres revues, y compris étrangères.
Eh bien, on ne voit quasiment jamais de signalisation sur les réseaux. Et le peu qu'on voit, c'est de la décoration, la signalisation n'est pas fonctionnelle.
Il y a de magnifiques contre-exemples (Soumagnac, Luzy, …), mais ils sont rares.
La plupart des gens utilisent le DCC, justement pour pouvoir arrêter un train sans avoir à gérer cette signalisation.
DRIM3D a fermé, faute de débouchés. Ils faisaient pourtant de magnifiques signaux.

Donc, il faut que les gens ne craignent plus d'avoir une signalisation fonctionnelle.
Mais il faut qu'on les aide et qu'UN PROGRAMME leur dise quel signal il faut mettre et où.
C’est-à-dire utiliser des règles simples, poser des questions dans un langage accessible pour qu'on puisse avoir une signalisation la plus complète possible sans connaissances pointues de la SNCF. Les situations rencontrées sur un réseau sont nettement plus simples.

Concernant la zone de manœuvre, je n'ai jamais vu sur un réseau de modéliste qui ait un signal blanc ou violet sur un mat dans la direction de la zone.
C'est déjà un grand pas si on a le signal au sol.

Pour moi, si les aiguilles sont tournées vers la zone de manœuvre, on tient compte du signal bas, sinon, on n'en tient pas compte.
Il y a des Cv en sortie de zone, la vitesse en zone de manœuvre est limitée à 15 km/h et on considère le panneau LM comme non franchissable.
L'itinéraire qui sort de la zone de manœuvre a un "carré virtuel" à l'emplacement du panneau LM et il s'arrête donc à ce point.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 26, 2024, 10:52:25 am
Pour que les gens sachent comment implanter les signaux, ce n'est pas un programme qu'il faut.
Il faut un forum ou un sous-forum dédié à la signalisation.

Si tu cherches sur internet ou sur les revues tu trouveras 1000 explications sur le principe d'un BAL,
150 explications pour l'implanter sur ton réseau et une grosse poignée de logiciels qui le gèrent (y compris gratuits).
Tu trouveras aussi des jolis dessins des différentes cibles sans savoir quoi en faire.

Mais comment créer le plan d'une gare en fonction de ce qu'on veut y faire, comment y implanter les signaux,
comment les relier électriquement et comment utiliser un logiciel pour les faire fonctionner?
 ZERO résultats!

Les anciens sont restés sur le système tricolore de leur enfance et ont rarement les connaissances en électronique et informatique
pour aller plus loin.

Les jeunes sont plus ouverts à l'informatique mais ils n'ont pas le niveau d'éducation leur permettant de créer quoi que ce soit
sans suivre à la lettre (ou plutôt au son pour les 90% d'illettrés) un tutoriel sur youtube.

Si tu cherches à faire un gestionnaire simplifié tu perds ton temps : on en a déjà plein.

Il existe un logiciel qui peut être modifié pour la gestion prototypique des signaux SNCF : c'est JMRI parce qu'il est ouvert.
J'y travaille.

Mais pour que ça marche il faura un forum où les gens qui veulent faire un réseau puissent rencontrer des gens connaissant
la signalisation et d'autres connaissant l'électronique et/ou l'informatique.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 26, 2024, 11:41:49 am
@Etienne66

Je te propose de créer le sujet ad hoc que tu voudrais animer dans la catégorie Projets.
Tu pourrais décrire les principes et les réalisations, notamment avec JMRI.

Si le projet est assez abouti, tu peux aussi publier un article sur le site éditorial : on t'aidera  ;D

Moi je pense que le gestionnaire de Pierre est assez complet pour ce que je veux faire. J'ai bien des cv mais en conduite manuelle devant la gare.

Je suis même peiné d'apprendre la disparition de Drim3D. Je suis en N et je ne trouve pas de signaux pas trop chers à installer sur mon réseau (j'ai quelques trucs moches et chinois).
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 26, 2024, 12:29:24 pm
Je posterai sur mon projet en temps voulu.
Pour l'instant j'ai la centrale multisecteurs qui fonctionne bien.
La partie détection de courant fonctionne en utilisant les 16 entrées analogiques d'un ou plusieurs mega2560.
Chaque mega va aussi gèrer 52 I/O digitales comprenant des nombres variables de servos, aiguillages, feux, accessoires et capteurs digitaux (infrarouge).
Le UNO de la centrale et les megas sont branchès au travers d'un hub USB.
L'interface avec JMRI (en direct USB, sans can ni c-mri ni autres bus préhistoriques) va générer automatiquement les objets avec des noms parlants.
Le sketch du mega et le script python pour JMRI sont inspirés des scripts de Geoff Bunza mais fortement améliorés.
J'en suis au test des feux et aiguillages.
Je vais ensuite faire une modification du système SNCF2015 de JMRI en ajoutant les cibles manquantes et en ajustant leur fonctionnement.
Après il faudra des tutos et ça risque d'être long.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 26, 2024, 01:13:44 pm
Je posterai sur mon projet en temps voulu.

Après il faudra des tutos et ça risque d'être long.

C’est la bonne méthode : realiser d’abord et mettre au point et publier ensuite.

Notre patience sera récompensée par ce projet très intéressant.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: nopxor le mars 26, 2024, 01:38:16 pm
Bonjour,


L'interface avec JMRI (en direct USB, sans can ni c-mri ni autres bus préhistoriques) va générer automatiquement les objets avec des noms parlants.


Peux-tu nous en dire plus ?
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 26, 2024, 02:09:26 pm
Bonjour,


L'interface avec JMRI (en direct USB, sans can ni c-mri ni autres bus préhistoriques) va générer automatiquement les objets avec des noms parlants.


Peux-tu nous en dire plus ?

Dans un autre sujet svp !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 26, 2024, 02:46:27 pm
Ok, j'ouvre un sujet dans la section dédiée à JMRI.

https://forum.locoduino.org/index.php?topic=1691.msg18820#msg18820 (https://forum.locoduino.org/index.php?topic=1691.msg18820#msg18820)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 27, 2024, 08:32:06 am
@Pierre,

Ma recherche d'itinéraires marche. ;D

Je n'ai plus besoin de "polluer" la partie "zones" du JSON avec des zones suivantes et côté suivant.
Je reviens donc à la partie "zones" originale.

En revanche, pour les itinéraires, je crée une partie "connecteurs" indépendante.

Donc, en indiquant (manuellement) dans les appareils de voie des vitesses à voie déviée, en ayant défini les zones de gare et de manœuvre, je peux CALCULER les cibles des signaux pour C, S, A, VL, R30, RR30, R60, RR60, Cv au sol.

Je remplirai donc la partie "signaux", "aiguilles" et "itinéraires" (uniquement pour les gares)

J'ai encore besoin d'un peu de temps pour faire tout ça, mais je vois le bout du tunnel.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 27, 2024, 11:46:37 am
Voici où j'en suis concernant les itinéraires dans le gestionnaire, il va peut être falloir harmoniser les choses :

Le gestionnaire a besoin pour un itinéraire d'une liste de zones, à partir de cette liste il peut positionner les aiguilles et gérer les signaux. Il peut aussi être nécessaire d'avoir une autorisation pour partager des voies entre postes d'aiguillage.

La liste de zones commence à la zone de départ, celle qui contient le signal de départ, puis toutes les zones d'aiguilles, pour finir sur la zone d'arrivée. Un signal doit être rattaché à une zone, dans la réalité le signal est implanté juste avant le changement de zone, avant la coupure physique des rails (si elle existe).

Au niveau du fichier JSON pour chaque itinéraire il faudra une liste de zones et éventuellement une autorisation. Pour les gares comportant beaucoup d'itinéraires cela peut devenir fastidieux à saisir. Dans ce cas on peut envisager de fonctionner avec un point de départ et un point d'arrivée. Il faudra alors, peut être, dans le fichier JSON coder ces points de départ et d'arrivée avec des sens, vraisemblablement dans les zones.

Avec une zone de départ et une zone d'arrivée (et des sens) le gestionnaire peut calculer tout seul la liste des zones. On utilise pour cela un algorithme récursif assez simple. Mais cet algorithme a quelques défauts, il peut boucler indéfiniment, on peut palier ce problème par marquage des zones ou en limitant la taille de la liste de zones, il peut aussi produire plusieurs listes de zones, il faut alors choisir la "bonne" liste, pas si évident que cela. Il y a aussi le problème des autorisations.

Quelque soit la version des itinéraires, il va falloir spécifier les itinéraires de manoeuvre. Les itinéraires de manoeuvre ouvrent les signaux avec un feu blanc (carrées ou carrés violet), et il permettent d'envoyer une locomotive sur une zone d'arrivée occupée, ce qui implique un traitement spécifique dans le gestionnaire.

Plus généralement il va falloir dans le fichier JSON une partie "paramètres", par exemple : pour dire quelle version des itinéraires on utilise, pour dire si on alimente en analogique ou en numérique, … .

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: laurentr le mars 27, 2024, 10:29:36 pm
Bonsoir


Pierre dans ce que tu définis comme une "zone de manœuvre" sur laquelle entrer avec une occupation cela me semble aussi ressembler aussi à une option de "forçage" du bloc.

Les cas d'usage sont multiples indépendant du concept de manœuvre pure:

mise en tête/queue d une loco sur une rame assurant une détection de présence sur la zone
cas des UM /couplages
refouler /avancer une loco qui "aurait fait des petits" pour raccrocher

Pour toute ces raison le mode manœuvre ouvre une sorte de dérogation permanente sur des section bien précises
Dans le cas du forçage c est une condition externe à caractère "spécifique et temporaire".

La facilite c est aussi de tout déclarer possiblement en manœuvre... mais la sécu du bloc va en prendre un coup!...


Ltr
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 28, 2024, 07:16:44 am

La liste de zones commence à la zone de départ, celle qui contient le signal de départ, puis toutes les zones d'aiguilles, pour finir sur la zone d'arrivée. Un signal doit être rattaché à une zone, dans la réalité le signal est implanté juste avant le changement de zone, avant la coupure physique des rails (si elle existe).

Pierre

Un signal ne doit pas être attaché àune zone. Il doit être à la jonction de 2 zones.
Et comme il a un sens il a une zone amont et une zone aval.

Physiquement il sera généralement un peu avant la coupure.
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 28, 2024, 07:58:20 am
Bonsoir


Pierre dans ce que tu définis comme une "zone de manœuvre" sur laquelle entrer avec une occupation cela me semble aussi ressembler aussi à une option de "forçage" du bloc.

Les cas d'usage sont multiples indépendant du concept de manœuvre pure:

mise en tête/queue d une loco sur une rame assurant une détection de présence sur la zone
cas des UM /couplages
refouler /avancer une loco qui "aurait fait des petits" pour raccrocher

Pour toute ces raison le mode manœuvre ouvre une sorte de dérogation permanente sur des section bien précises
Dans le cas du forçage c est une condition externe à caractère "spécifique et temporaire".

La facilite c est aussi de tout déclarer possiblement en manœuvre... mais la sécu du bloc va en prendre un coup!...


Ltr

C'est plus complexe que çà.

Quand tu as un simple Cv tu peux définir les blocs permissifs pour pouvoir ouvrir au blanc sur voie occupée.
Mais sur une voie principale avec un signal qui peut afficher vert ou blanc il te faut savoir si le train
manoeuvre pour prendre la décision. (d'où mon idée de voie virtuelle)

Au passage : seul un segment peut être permissif, une zone avec aiguillages ne doit pas l'être.
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 28, 2024, 10:31:19 am
Un signal ne doit pas être attaché àune zone. Il doit être à la jonction de 2 zones.

Dans le programme du gestionnaire il y a des objets informatique zones, entre les zones (jonction de 2 zones) il n'y a rien, aucun objet informatique pour attacher un signal. Il faut bien attacher le signal à quelque chose.

Pierre
Titre: Re : Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 29, 2024, 09:50:11 am
Un signal ne doit pas être attaché àune zone. Il doit être à la jonction de 2 zones.

Dans le programme du gestionnaire il y a des objets informatique zones, entre les zones (jonction de 2 zones) il n'y a rien, aucun objet informatique pour attacher un signal. Il faut bien attacher le signal à quelque chose.

Pierre
Oui : Une zone amont et une zone aval.
Et ça te donne automatiquement le sens du signal.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Etienne66 le mars 30, 2024, 04:58:30 pm
J'ai trouvé un truc pour les signaux de manoeuvre :

Pour les signaux qui peuvent afficher blanc et vert/jaune, on met au blanc si le signal suivant est un carré violet fermé
et au vert/jaune si c'est un autre feu.
Et on place un carré violet virtuel à chaque butoir.

Pour info, je viens de tester le coup du tiroir virtuel avec JMRI et ça fonctionne.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le avril 06, 2024, 11:01:04 am
Voici une nouvelle version expérimentale d'un gestionnaire paramètré par un fichier JSON. Par rapport à la version précédente plusieurs choses ont changé :

- des itinéraires permanents ont étés ajoutés, deux conséquences, sur le TCO les boutons d'itinéraires ont étés changés pour ressembler à des vrais boutons d'itinéraires de PRS (voir le PRS de Méru pour les explications de fonctionnement post #160 du 10 janvier 10 2024 sur ce fil), dans le gestionnaire certains carrés peuvent servir de sémaphores pour assurer la continuité du cantonnement. Ces itinéraires permanents permettent de faire rouler un ou deux trains sur la boucle.

- en vue du passage au C/C++, impliquant un changement de bibliothèque JSON, tous les accès au JSON ont étés regroupés dans un seul onglet ("Json"), il reste dans les autres onglets un type (JSONArray) qu'il est difficile d'éliminer Java n'ayant pas de "typedef".

- pour accélérer le programme un certain nombre de valeurs de type chaine de caractères ("String") sont substituées par des valeurs numériques ("int") juste après la lecture du fichier JSON. Ces valeurs sont : "gauche", "droite", "pair", "impair", "pairOUimpair", "pairETimpair".

J'ai fait aussi des essais d'itinéraires spécifiés par une origine et une destination, genre PRG et successeurs.

Pour le fonctionnement du gestionnaire avec le TCO voir la précédente version post #339 du 18 février 2024 sur ce fil.

Il reste encore des bugs dans le gestionnaire, notamment pour les itinéraires. Il faut aussi implémenter une circulation automatique des trains et prendre en compte le nouveau Locoduinodrome (donc modification du TCO, déja bien avancée). Puis envisager des manoeuvres.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le avril 06, 2024, 02:26:49 pm
Super  ;D
Merci Pierre,

J'ai tout juste fait un petit essai du Locoduinodrome 1 où j'ai lancé le TCO en premier et le gestionnaire en 2ème, puis démarré le train rose en cliquant sur l'itinéraire BX et c'est joli ! Le train fait le tour du circuit et s'arrête au signal à l'entrée de gare en venant de Y. Son curseur de vitesse passe à 0 et il faut le remonter pour redémarrer.

J'avoue que j'ai fait tout cela au pif en me souvenant du précédant Locoduinodrome. J'ai cliqué un peu partout sur les boutons d'itinéraires mais sans succès, faute de mode d'emploi.

J'ai jeté un coup d'oeil au code du gestionnaire et c'est du Java, je ne m'y retrouve pas mais je peux apprécier déjà que ce gestionnaire est plus complet que la version C++, il me semble, notamment sur le suivi des trains.
Ce qui me perturbe le plus c'est l'absence de définition des objets zones, trains, etc par comparaison avec celle du C++.
Mais là encore je ne connais pas le Java.

J'attend donc gentiment la version C++.
Je vais donc me plonger dans l'éditeur de Json en essayant de l'appliquer à mon réseau (en passant pas le Locoduinodrome 2 pour me faire la main).

C'est un travail énorme, bravo !

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le avril 07, 2024, 11:08:07 am
@ Dominique

Concernant les modes d'emploi il y a deux références à des posts précédents, une pour le fonctionnement général et une pour les boutons d'itinéraires qui sont expliqués sur le simulateur du PRS de Méru.

Comme je l'ai déja signalé le gestionnaire n'est pas écrit en programmation objet, mais sous forme de fonctions. Pour chaque message reçu par le gestionnaire il y a une fonction spécifique (voire deux pour les zones) qui traite le message avec l'aide de plein de fonctions annexes. Les variables du gestionnaire (zones, aiguilles signaux, …) sont dans le JSON. Cela devrait permettre de comprendre plus facilement le fonctionnement, plutôt que les objets et l'héritage, mais aussi de faciliter le passage au C/C++. Ce qui est écrit dans le gestionnaire c'est certes du Java, mais c'est quasiment du C/C++, la syntaxe du Java a repris en grande partie celle du C/C++ (il y a un article sur ce sujet : "Processing pour nos trains").

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le avril 11, 2024, 11:30:59 am
Bonjour,

J'ai été pas mal occupé à d'autres tâches récemment et je n'ai pas beaucoup pu programmer.
Désolé de n'avoir pas suivi le fil...

Depuis la dernière fois, la partie itinéraire s'est étoffée :

Je ne trouvais, au début qu'un seul itinéraire, le plus court et ça s'arrêtait là…

Maintenant, je trouve tous les itinéraires techniquement possibles entre n'importe quel point A et n'importe quel point B.
J'ai adapté la partie "itinéraires" de mon programme de gestionnaire existant pour que ça marche ici aussi.

Plusieurs questions se posent :

1°) Le programme trouve tous les itinéraires possibles, sans tenir compte de la parité des voies.
Cela peut paraître une aberration, mais il ne faut pas oublier qu'il y a, même à la SNCF, toujours des "solutions de secours" en cas de dérangements.
Bien sûr, dans ces cas extrêmes, il y a des procédures de sécurité spécifiques, des signalisations provisoires, tout ce qu'il faut pour rétablir une circulation normale.

2°) Le temps de calcul d'un itinéraire est minuscule. Doit-on garder les itinéraires en mémoire, par exemple dans le JSON ?
On pourrait très bien envisager de les calculer "à la volée" dans le gestionnaire.

3°) Si on ne garde que certains itinéraires, sur quels critères ?

Dans mon programme JSON, j'ai un bouton "itinéraires" qui demande le nom de la zone de départ, le coté du départ, le nom de la zone d'arrivée, le côté de la zone d'arrivée.
Exemple dans le réseau de Dominique : Z25, côté 1, Z30, côté 1.

Premier problème, très simple :
Le "côté 0", c'est le côté du "voisin1", le "côté 1", c'est le côté du "voisin2". On voit tout de suite où est le problème…
Soit j'appelle "côte 1" et "côté 2", en ajoutant simplement 1, soit on appelle les voisins "vois0" et "vois1". Il faut juste se mettre d'accords.

Voilà le résultat littéral (il trouve 4 itinéraires) :
Z25 segment
signal1 signal
Z26 triple droit : a0 à gauche + a1 à droite
Z27 segment
signal1 signal
Z29 triple gauche : a11 à droite + a9 à gauche
Z30 segment
signal1 signal
 ------------------------------------- FIN DE L'ITINERAIRE -----------------------------------
Z25 segment
signal1 signal
Z26 triple droit : a0 à droite
Z15 TJD : a2 à droite + a4 à droite
Z42 aiguille droite : a5 à droite
Z14 segment
signal0 -
Z43 aiguille gauche : a6 à gauche
Z12 TJD : a7 à gauche + a8 à gauche
Z29 triple gauche : a11 à gauche
Z30 segment
signal1 signal
 ------------------------------------- FIN DE L'ITINERAIRE -----------------------------------
Z25 segment
signal1 signal
Z26 triple droit : a0 à droite
Z15 TJD : a2 à droite + a4 à gauche
Z13 segment
signal0 -
Z12 TJD : a7 à droite + a8 à gauche
Z29 triple gauche : a11 à gauche
Z30 segment
signal1 signal
 ------------------------------------- FIN DE L'ITINERAIRE -----------------------------------
Z25 segment
signal1 signal
Z26 triple droit : a0 à gauche + a1 à gauche
Z44 aiguille gauche : a3 à gauche
Z28 segment
signal1 signal
Z29 triple gauche : a11 à droite + a9 à droite
Z30 segment
signal1 signal
 ------------------------------------- FIN DE L'ITINERAIRE -----------------------------------

On note :
- que les signaux ne sont pas (encore) calculés
- que on prend bien Z13 et Z14 "à rebrousse-poil" en regardant quel signal (0 ou 1) voit le conducteur
- que si on trouve une appellation meilleure que "segment", je suis preneur ("tronçon" ?)

Je pars en vacances une semaine et je ne pourrais pas programmer.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le avril 12, 2024, 10:38:21 am

@ Denis

Trouver tous les itinéraires possibles entre n'importe quel point A et n'importe quel point B, n'a pas grande utilité, je pense qu'il faut plutôt définir des points d'origine d'itinéraires avec un sens et des points de destination d'itinéraires, ces points pouvant de façon plus générale être des zones.

Normalement les points d'origine sont devant un signal (ou sont des zones avec un signal) et il n'y a qu'un signal par itinéraire (sauf Cv bas).

Dans les grandes gares il peut y avoir plusieurs itinéraires possibles, mais en pratique en respectant les contraintes précédents je n'ai pas de souvenir d'avoir rencontré de problème avec des sens des voies (pair/impair). Par contre quand il y a plusieurs itinéraires possibles il faut absolument choisir, on a déja évoqué ce problème jadis et j'avais proposé de choisir l'itinéraire avec le moins de zones, tu n'étais pas d'accord alors, as tu un meilleur critère à proposer (faut que cela reste réaliste).

Le gestionnaire peut très bien rechercher les itinéraires à partir d'un point d'origine et d'un point de destination. Dans le gestionnaire JSON publié, il y a depuis le début dans l'onglet "Zones" deux fonctions "voiss1(String z)" et "voiss2(String z)" qui donnent tous les voisins (1 et 2) d'une zone, ces fonctions étant prévues pour la recherche automatique des itinéraires. Dans la dernière version publiée il y a dans l'onglet "Itineraires" une fonction expérimentale "itineraire(String zo,int c,String zd)" qui recherche un itinéraire d'origine "zo" en partant du coté "c" avec pour destination "zd" (le résultat est une liste de zones). Cette fonction est bridée pour s'arrêter au premier itinéraire trouvé, mais elle peut tous les trouver (reste à trouver un moyen de choisir).

Concernant les appellations des cotés (1/2, 0/1, pair/impair, … ), le problème est plus vaste que cela et je compte lancer une discussion sur le sujet (les "sens" en général).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le avril 12, 2024, 11:25:50 am
Je suis aussi bien occupé avec la famille/amis (ce sont les vacances des enfants)  ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le avril 16, 2024, 04:45:10 pm
Je me remets dans le bain après une longue interruption et je vois le fichier JSON d'entrée du gestionnaire 2.2 de Pierre.
Il concerne le locoduinodrome 1 et contient les zones Z0 à Z6, les aiguilles A0 et A1, les signaux S1 à C6, les itinéraires XA à YB et une autorisation.

Je ne retrouve pas tout cela dans l'éditeur de Denis, version 5 qui concerne le locoduinodrome 2 et n'inclut pour le moment que les zones Z1 à Z7.

Est-ce que je me trompe ? Ai-je oublié une version ?

Donc, si je ne me trompe pas, le fichier JSON du gestionnaire de Pierre doit être la cible à atteindre pour l'éditeur de Denis et les deux cotés concerneront le locoduinodrome 2.

Cela permettra de passer au Locoduinodrome 2 coté gestionnaire, ce qui entrainera une évolution du TCO chez Pierre.

De mon coté je n'ai pas prévu de m'engager dans un TCO en Processing, restant en C/C++ pour le gestionnaire et un TCO graphique adressé en CAN.

En regardant le code du gestionnaire, j'ai un peu peur que le passage en C/C++ soit un énorme travail !

Bon courage à vous deux. ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le avril 29, 2024, 10:44:25 am
Je voudrais discuter des "sens" dans un gestionnaire. Je sais, par expérience, que les sens dans un gestionnaire posent des problèmes. C'est pour cela que dans le gestionnaire JSON expérimental j'ai essayé de ne pas expliciter dans le fichier JSON, les sens des voisins, des signaux et des balises avec des pair/impair, mais avec quelque chose de plus neutre, des nombres 1 ou 2.

Pour le gestionnaire appliqué à l'ancien Locoduinodrome cela n'a pas posé trop de problèmes. Mais pour le nouveau Locoduinodrome c'est plus compliqué, car plus de mal à retrouver le sens des signaux et des balises entre autre. J'ai donc remplacé les sens neutres (1 ou 2) par des sens plus explicites (pair/impair) et conformes à la circulation des trains, en fait dans le fichier JSON les 1 ou 2 sont replacés par P (pair) ou I (impair). Cela implique qu'il faille soigneusement déterminer les sens de circulation des trains sur chaque zone.
 
Les sens concernent beaucoup de choses dans un gestionnaire :

- les sens des trains, c'est ce qui est le plus consensuel, on a naturellement de trains pairs et des trains impairs (éventuellement on pourrait avoir des train sans sens);

- les sens des signaux, les trains pairs voient les signaux pairs et trains impairs voient les signaux impairs, ce qui induit le sens des signaux, sur voie double les train roulent à gauche, sauf en Alsace-Lorraine;

- les sens des balises, elles sont liés aux signaux, donc à leurs sens (mais d'autres balises que celles des signaux peuvent exister);

- les sens possibles de parcours des zones par les trains, c'est plus compliqué on peut avoir par exemple des sens pair, impair, pair-ou-impair (sans changement de sens possible), pair-et-impair (avec changement de sens possible), … ; on peut envisager aussi des manoeuvres avec ou sans sens (genre : "pair-ou-impair-manoeuvre" ). Ces informations servent pour le suivi des trains, pour contrôler les changements de sens des trains, … ;

- les sens liés à la désignation des voisins des zones, par homogénéité avec les cas précédents pair/impair convient bien;

- les sens de zones, est ce que l'on peut donner un sens aux zones et est ce que cela peut servir au gestionnaire.     


Il n'y a pas de problème de sens avec les boucles de retournement à double voie, mais il y a problème avec les boucles de retournement à voie unique, appelées raquettes, un train arrive sur une raquette avec un sens disons pair et en ressort avec un sens impair et vice versa. Il faut que le gestionnaire soit prévenu, par exemple avec une ou des balises dédiées (de toute façon il faut faire quelque chose au niveau alimentation électrique). Même problème avec les triangles de retournement et les plaques tournantes.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le avril 30, 2024, 11:58:47 am
Bonjour,

Post intéressant sur les sens. Cela pourrait paraitre ésotérique, mais c'est fondamental et pas aussi évident qu'on pourrait le croire.

Pour moi, il y a le sens lorsqu'on dessine le réseau :

Quand on trace un trait, on va de l'origine à l'extrémité, ce qui, chez moi, se traduit par aller du "côté 0" au "côté 1". Une fois dessiné, le "côté" est définitif.
Il s'ensuit que, pour les voisins, je verrais mieux "voisin 0" et "voisin 1", d'ailleurs.
Une fois décidé lors de la création du plan du réseau, c'est, là aussi, définitif.

Après, la notion de "pair/impair" me parait s'imposer.

Sur un réseau miniature, on est très souvent confronté à un ovale de voie, ce qui n'est quasiment jamais le cas dans la réalité.

Je propose de définir le sens "pair" pour le sens des aiguilles d'une montre et le sens "impair" pour l'autre sens, mais c'est parfaitement arbitraire.
 
Il en découlera des signaux "pairs" ou "impairs", des noms de voies "pairs" ou "impairs", des trains "pairs" ou "impairs".
Les zones qui pourront être parcourues dans les 2 sens seront "pairimpair".

Il faudra bien dessiner les signaux au bon endroit et ils seront "côté 0" ou "côté 1" de la zone, quelle que soit sa parité.
 
Dans le cas général, les signaux seront donc à l'extrémité de la zone, dans le sens normal de circulation, donc du "côté 1".

Après, il y a le sens de circulation. Là, on est dans le gestionnaire.

On se déplace sur des zones qu'on aborde en général par le "côté 0", mais qu'on peut aborder du "côté 1" suivant l'itinéraire, en particulier dans les zones "pairimpair". Le sens de circulation est donné par l'ordre des zones dans le déplacement.

Dans le JSON, on ne fera apparaitre que les itinéraires qui sont dans les gares et uniquement ceux qui ne vont jamais à contre-sens.

J'entend par "contre-sens" les déplacements de trains lors d'un accident, par exemple, et qui nécessitent une signalisation temporaire.
Les IPCS seront traitées comme "pairimpair", même si un sens est prioritaire.

Pour moi, un itinéraire en gare est constitué de 2 choses : une liste de zones et une liste de position d'aiguilles pour aller d'une zone à l'autre.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le avril 30, 2024, 01:29:57 pm
il y a différentes approches
dans le réseau analogique que j'ai câblé , dans la partie basse de l'ovale , le sens impair (tu commences par le sens pair , je commence par le sens impair ..) , est de la gauche vers la droite , comme pour ta proposition
mais dans la partie haute de l'ovale aussi ! ceci pour s'éviter des nœuds dans le cerveau , cad. s'obliger à raisonner et dessiner tantôt de la gauche vers la droite , tantôt l'inverse
bien entendu , chaque principe a ses inconvénients : cela m'a obligé , aux extrémités gauche et droite de l'ovale , de définir le nez-à-nez comme étant accepté , et donc d'interdire le passage dans le même sens ; mais cela s'est avéré globalement plus logique , simple , et conforme la réalité
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le avril 30, 2024, 02:02:33 pm
@trimarco232,

Tu comprends mieux, maintenant, pourquoi je fais cet éditeur de JSON.

La notion d'aiguille "à gauche"/"à droite", pourtant très simple, comme notion, peut faire faire des nœuds au cerveau, de même que la notion de voisin "côté 0" et "côté 1".
On se tord le coup, on regarde ses doigts en se mettant à la place de l'objet...

Avec mon éditeur, c'est dessiné, à chaque fois, dans le bon sens, et c'est le programme qui gère les "à gauche"/"à droite"...
On a nettement moins d'erreurs.

J'ai un bouton appelé "analyse" qui complète les infos de façon cohérente.
Je suis en train de calculer la signalisation : dire, pour chaque signal, quels feux il est susceptible d'afficher, de façon à prévoir la bonne cible et la bonne appellation.
Et c'est là que connaitre tous les itinéraires possibles va me servir, en retirant ceux qui, bien que techniquement valables, ne sont pas validés (zones à contre-sens).
Je mettrais, après, dans le JSON ceux qui ne concernent que la gare, la zone de manœuvre et les zones d'approche correspondantes.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le avril 30, 2024, 02:48:26 pm
merci André ,
as-tu édicté des règles , pour la conception d'un réseau susceptible d'être animé par ton gestionnaire ?
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le avril 30, 2024, 02:56:32 pm
André ??

Non, pas encore, j'en suis à l'éditeur de JSON. Et c'est déjà du boulot.
Par contre, Pierre en a proposé un en processing (post #396 du 06/04/24)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 04, 2024, 06:27:04 pm
Après quelque temps occupé par divers travaux et événements familiaux, de retour à la montagne, je plonge dans les derniers programmes Processing de Pierre : GestJ2 et GestTCO2.

Celui qui m'intéresse le plus est GestJ2 car c'est le gestionnaire pur et dur. Il est écrit en Java (ou Processing, c'est pareil ?) et j'arrive a faire des analogies avec les objets C++ comme dans la version C++ que j'utilise.

Les grandes différences avec mon gestionnaire C++ sont :
- la description des objets (zones, aiguilles, signaux, trains, ..) est issue d'un fichier JSON qui serait préalablement construit avec l'éditeur de Denis (je vais en reparler plus loin).
- les événements de rétrosignalisation (occupations, libérations, commandes des trains et des itinéraires, ..) sont générés sous forme de messages TCP en provenance de GestTCO2 : c'est donc de la simulation et non du réel, mais j'imagine bien qu'on pourrait détacher ce TCO et le remplacer par les événements réels d'un réseau.

Première remarque : le but est théoriquement bien atteint pour le gestionnaire paramètrable qui est le point de départ de ce fil du forum. Bravo !

Un tel gestionnaire pourrait donc être réalisé sous forme d'une carte Arduino "connectée". En gros, on aurait ainsi l'équivalent d'un JMRI, RocRail ou CDMRail sans PC !!

- connectée à un éditeur de réseau JSON qui servirait à paramétrer le gestionnaire en fonction du réseau du modélistes.

- connectée aux capteurs d'occupation/libération et autres capteurs (ponctuels, RFID, RailCom, etc..) du réseau réel.

- connectée à la centrale DCC pour les commandes des trains (régulation, automatismes, ..) et récupérer les états de mouvement des trains (direction, vitesse), ainsi que les incidents éventuels.

- connectée à un TCO graphique qui permet de visualiser ce qui se passe sur le réseau réel (ou simulé) - dans ce cas la description du réseau JSON du gestionnaire est à dupliquer en liaison avec des rendus graphiques pour une interface humaine sympathique.
Dans l'exemple GestTCO2, le TCO permet de commander les trains, les itinéraires, voire les aiguillages. Ce TCO simule les déplacements des trains et génère automatiquement,ent les occupation et libération. Il fait tout ce qui est décrit plus haut, sauf l'éditeur de fichier JSON qui est développé séparément par Denis.

Si on met tous ces éléments bout à bout, on obtient un gestionnaire complet comme JMRI, RocRail ou etc. qui ne tourne que sur PC/Mac, voire Rpi (mais ça rame peut-être)

Deuxième remarque : ce TCO GestTCO2 est beaucoup plus compliqué que le gestionnaire GestJ2

Mais on en a besoin pour voir et commander les trains et le réseau. Du moins en mode simulation.

Troisième remarque : si je dois appliquer tout ce travail à mon réseau Dominique, que dois-je faire ?


C'est mon avis évidemment et je peux me tromper :

1) traduire en C++ le gestionnaire GestJ2 pour l'installer dans un Arduino (Due en ce moment ou à base d'ARM, avec assez de mémoire et de CPU, mais cela ne semble pas critique)
2) la description en fichier JSON n'a besoin d'être faite qu'une seule fois donc inutile de construire un éditeur connecté au gestionnaire, l'intégration à la compilation est suffisante.
3) connecter toute la rétrosignalisation via un bus CAN ce qui est déjà fait ou très simple à faire la plupart des microcontrôleurs sont capables de communiquer en CAN : libérations, occupations, signalisation, aiguillages, et bien plus si affinité.
Toutefois, passer du mode simulation au mode réel en remplaçant les messages "parfaits" du TCO GestTCO2 par des messages Can qui ne seront pas forcément parfaits, nécessitera (comme actuellement) des travaux de mise au point et du monitoring des événements et états pour la mise au point.
Sans oublier la centrale DCC déjà reliée au CAN (Mega+DCCpp ou LaBox).
4) connecter un TCO graphique pour visualiser ce qui se passe, ce que j'ai déjà en chantier sur un écran 7" piloté par un Teensy3.6 (en passant, je regarde le développement des tableaux de bord de voitures qui ont des écran superbes dont les prix finiront par devenir abordables, mais seront-il accessibles aux programmeurs ferroviaires ??).
5) connecter éventuellement des organes de commandes des trains (les applications smartphone comme Z21 font l'affaire), des itinéraires et horaires, etc.. sur le TCO graphique en principe.

En ce qui concerne l'éditeur de Denis, pour obtenir le fichier JSON de description du réseau pour le gestionnaire, cela représente un développement important qui serait mieux valorisé s'il faisait partie d'un éditeur de réseau : pour le gestionnaire ET pour le TCO.
Je sais que ce n'est pas l'objectif initial de ce projet mais Denis a déjà plus ou moins cela dans son PC.
Donc l'avenir va être interessant !!

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mai 04, 2024, 07:08:45 pm
Merci Dominique !

J'admire ton optimisme ... mais ton expérience est biaisée.

Ton réseau a été présenté dans Locoduino et a servi de modèle.
A l'époque, Pierre, qui maîtrise parfaitement les subtilités de la signalisation de la SNCF, a réalisé des articles très complets sur ce que doit être un gestionnaire.
Ces articles sont toujours d'actualité, d'ailleurs.
Puis tu lui a demandé de t'expliquer où mettre des signaux et de quels signaux il s'agissait sur ton réseau, ce qu'il a fait.
Dans son programme, la description des signaux (et du réseau) est intégrée et ça fonctionne chez toi parfaitement.
En lisant le programme, tu as compris comment cela avait été fait. Mais aurais tu pu le trouver tout seul ? On ne le saura jamais...

En refaisant ce nouveau fil de discussion, on a décidé d'extraire les infos descriptives du réseau dans un fichier JSON.
L'idée était que l'on puisse avoir un point de passage clair, précis, adapté à n'importe quel réseau SANS CONNAISSANCES SNCF.
Donc, lorsque ce fichier aura subi tous les tests, il sera labellisé Locoduino.

A ce moment, n'importe qui pourra faire un éditeur dont le fichier de sortie sera le JSON Locoduino et il pourra dès lors utiliser le gestionnaire que Pierre est en train tel quel pour commander ses trains.
Le gestionnaire doit être "neutre", c'est à dire qu'il doit fonctionner à partir du fichier JSON (et rien d'autre).
De la même façon, si quelqu'un sait faire un gestionnaire qui fonctionne à partir du fichier JSON Locoduino de son réseau, il pourra utiliser mon éditeur pour générer le fichier JSON.

J'ai fini la partie "générer tous les itinéraires possibles d'un réseau", itinéraires qui contiennent la position des signaux.
Moyennant une partie de programme à faire, je vais calculer quel signaux doivent être affichés pour un signal donné, ce qui permettra de définir la cible (A,B...H) à acheter pour ce signal.
Les itinéraires de la gare seront extraits de la liste complète et intégrés dans le JSON, de façon à ne plus avoir à les calculer dans le gestionnaire.

Donc : je ne connais pas la signalisation SNCF, je sais juste qu'il doit y avoir un signal là, là et là. J'appuie sur un bouton et le programme me dit:
Là, il doit y avoir VL, A, S et RR, là C, A, R, etc...

Pour info (c'est totalement anecdotique) mon programme trouve et affiche en détail en 2 secondes la liste des 2288 itinéraires possibles de ton réseau, parmi 3720 couples départ/arrivée testés  :P

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 05, 2024, 11:20:54 am
Bonjour

Je suis tombé récemment sur un petit problème avec le gestionnaire json, ce gestionnaire utilise un transit souple. Dans un transit souple dès qu'une zone d'un itinéraire est libéré après le passage d'un train, elle peut être utilisée par un nouvel itinéraire.

Prenons un cas concret, illustré par le bout de tco ci dessous, le train bleu parcours l'itinéraire de A vers X, le train rose est en attente de l'itinéraire de X vers 1 qui est en mémoire. Dès que le dernier essieu du train bleu libère la zone de la tjs, l'itinéraire en attente se forme et le train rose peut passer sur la tjs. Cela parait tout à fait normal et cela l'est.

Mais en pratique avec un réseau réel, sncf ou miniature (j'ai fait des essais sur mon réseau HO), quand le dernier essieu du train bleu quitte la zone de la tjs, le bout de la caisse du dernier véhicule engage encore le gabarit de la zone tjs et se ferait percuter par le train rose si le train bleu s'arrêtait.

Ce problème est assez général et peut se produire avec toutes les traversées entre deux voies à l'entrevoie minimum.

Des idées, des solutions ?

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 05, 2024, 02:25:18 pm
Ne serait-il pas opportun d’inscrire et d’utiliser la longueur des trains dans leur objet et la comparer à celle des zones traversées et l’outil “provenance” ?

Évidemment cela ne nous met pas à l’abri d’une perte de wagon mais la détection de présence dudit wagon peut générer une erreur par rapport au passage du train complet.

Il faudrait donc compléter l’initialisation des trains avec des données plus larges, ce qui implique de préparer des compositions de trains à l’avance. Il y a longtemps que je ne suis rendu compte qu’on ne peut pas mettre n’importe quel wagon derrière une machine ou un wagon, à cause de la fiabilité aléatoire des attelages dans les courbes et les zones d’aiguille, surtout en N.

Quand les enfants viennent jouer, des trains non initialisés fichent la pagaille et je ne demande si on peut réduire cet inconvénient (zones pas libérées entre autres).
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 05, 2024, 05:12:19 pm
Le gestionnaire json comporte déjà un compteur du nombre de zones occupées par un train, une borne max permettrait de détecter les ruptures d'attelage.

On peut aussi, lors d'une libération d'une zone par un train vérifier que la (ou les) précédente(s) ne contient plus ce train, ce doit être la dernière zone du train.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mai 05, 2024, 07:08:45 pm
Bonjour,
subordonner , dans ce cas , la libération de la tjd. à celle de l'aiguille du bas ...
ou ne pas faire de transit souple , c'est pas indispensable en MF ...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 06, 2024, 06:58:18 pm
@pierre,

J’ai cherché l’équivalent des initializations des objets zone, aiguille, signaux, trains, etc à partir du fichier JSON (Z1.osé) en C++ pour Arduino.
Mais je n’ai rien trouvé de simple et compréhensible même dans les projets Arduinojson de Blachon et d’Arduino.
En Java, l'objet "doc" peut être décomposé simplement en objets "zone", "aigullle", etc.. directement utilisables ensuite par le programme.

En C++ ça semble bien plus compliqué.

J’ai peur que la version C++ du gestionnaire représente un gros boulot !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 07, 2024, 11:29:32 am
@ Dominique

Pas d'inquiétude, la bibliothèque "Arduinojson" a tout ce qu'il faut. C'est un peu déconcertant car l'opérateur [] du C++ est redéfini pour accéder aux éléments du fichier json, mais en définitive l'écriture est plus compacte et plus lisible. J'ai déjà fait des essais.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 07, 2024, 05:00:16 pm
Merci Pierre, mon optimisme se confirme donc.

Je vais pouvoir refaire complètement mon gestionnaire sur cette nouvelle mouture, même si la configuration est déjà faite sans le json car la version actuelle a été tellement modifiée qu’il vaut mieux repartir sur un bon pied.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mai 09, 2024, 02:48:12 pm
Bonjour Pierre,

Le problème que tu poses n'est pas lié au PRS, il est, en effet beaucoup plus général.

Comme tu le sais déjà, il s'appelle à la SNCF la "limite de zone de garage franc", symbolisée, à la SNCF, par une marque blanche qui indique l'endroit à partir duquel un véhicule (loco ou wagon, voiture, ...) engage le gabarit d'une voie voisine.
C'est même en vente chez Décapod, pour info (voir fichier joint).

Concernant le matériel en miniature, comme la détection se fait par détection de courant, c'est donc au niveau des roues que l'on détecte une présence.
Et, particulièrement pour les voitures (ou tout matériel à bogies), il y a un bon écart entre le tampon et la roue... ce qui n'arrange rien.

Ce qui m'embête aussi, c'est que je n'ai aucune idée de la façon dont la SNCF gère le problème que tu soulèves.
Parce que mettre un repère blanc, c'est bien, mais ça ne résout pas le problème.

A mon avis, en gérant les longueurs de train (en comptant les "points" dans l'image à l'écran, par exemple), on devrait pouvoir s'en sortir.
Mais un train virtuel ne perd jamais ses wagons...
Je pense que le vrai problème se pose quand les wagons se décrochent.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Brunotoutsimple le mai 09, 2024, 03:47:31 pm
Bonjour à tous
je suis nouveau. je suis ni informaticien, ni électronicien, mais je suis tous les forums. Je vous avoue que je suis perdu. Mais pour votre problème, le comptage des roues en entrée et en sortie ne serait-il pas la solution.

Bruno
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 09, 2024, 11:08:45 pm
Bonjour Bruno,

Nous avons évoqué quelque part ce comptage d’essieux pour détecter une éventuelle perte de wagon.

Mais cela ne résoud pas le problème du décalage entre le 1er essieu et les tampons avant.

D’autre part avez-vous une solution de comptage des essieux ?

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Brunotoutsimple le mai 10, 2024, 08:30:46 am
Bonjour Dominique

Comme je vous l'ai dit je suis juste un électricien du bâtiment, je suis vraiment novice et je suis en pleine découverte. mais pour le comptage de roue je suis abonné à ce monsieur sur YouTube (https://www.youtube.com/@Modellbahn-Achszaehler/videos)  qui fait quelque chose de sympa. Je vous laisserai voir si cela est possible et l'intégrer dans le réseau can afin que chaque satellite puisse savoir si le canton est occupé ou pas.
je donne juste mon avis.
Mais je tiens à vous remercier de tous le travail fourni sur Locoduino. Bravo à vous, Christophe, laurent, Vous, et bien d'autres qui contribue à ce magnifique Projet exceptionnel.

Bruno 
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 10, 2024, 10:53:44 am
Bonjour

Concernant les bretelles avec entrevoie courte (ou pas), la sncf couple souvent les deux aiguilles, cela se voit sur les TCOs avec les numéros d'aiguille (genre 123a et 123b), les deux aiguilles sont manoeuvrées ensembles. Voir par exemple sur le TCO de Méru https://www.utc.fr/~wschon/sr06/Simulateur-PRS/index_dev.html (https://www.utc.fr/~wschon/sr06/Simulateur-PRS/index_dev.html) les aiguilles 103a et 103b ainsi que 109a et 109b.

Cette disposition évite les problèmes avec les caisses de véhicules débordant des essieux, elle évite aussi des dérives de trains pouvant conduire à des accidents.

J'ai fait des essais avec le gestionnaire json.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mai 21, 2024, 05:07:32 pm
Bonjour,

Depuis des années, je suis persuadé qu'on peut calculer les signaux à partir du dessin du réseau et quelques infos simples.

La vraie question qui se posait, c'était de savoir quelles infos étaient absolument indispensables.
Je viens de franchir une étape que je vais vous détailler.

Je vais le faire sous forme d'une série de posts. Le programme sera proposé dans le dernier post.

Pour l'instant, il sort plusieurs fichiers complets, faciles à lire (et à comprendre, j'espère), mais il faudra en extraire les infos utiles au fichier JSON en ce qui concerne les signaux et les itinéraires.
En gros, il y a "trop" d'informations et il ne faudra garder que celles absolument nécessaires au gestionnaire. Par exemple, quand il y a plusieurs itinéraires entre un point A et un point B, lequel choisir ?

Infos minimales :

Je prends comme exemple le réseau de Dominique qui est assez représentatif des difficultés rencontrées par de nombreux modélistes.

(https://www.locoduino.org/IMG/png/reseaudb-f8-simplifie_reduite.png)
 
Sur ce dessin, sont représentés les infos qui doivent être rentrées dans mon programme pour que tous les calculs soient faits.
Il faut faire ce dessin, avant de rentrer les infos.
 
Dès le dessin, il faut prendre des décisions : sens de circulation des zones, leur nom, la position des signaux.
 
A noter que j'ai retiré les numéros de voie et je n'ai gardé que les noms de zone.
On pourra, par la suite, donner des numéros de voie, mais ils ne serviront pas dans un gestionnaire.

Sont représentés :

1°) Le dessin du réseau :

En rose, les "appareils de voie" (aiguilles, TJD, croisements, …).
En bleu, les "sections", c’est-à-dire tout ce qui n'est pas un appareil de voie (rails droits, courbes, flexibles)

Exemple : Z17 est un appareil de voie (une aiguille) et Z16 est une section.

Je fais la distinction car j'impose aux signaux de n'être que sur des sections.

Une première difficulté apparait sur la Z46 qui est, pour moi, une "zone complexe". Elle est composée de l'aiguille a20, d'une section de longueur nulle qui supportera le signal et de l'aiguille a10.
Dans le programme actuel, la Z46 est une TJD sans signal.
C'est une erreur, mais je réserve pour la suite le traitement des zones complexes. J'ai une idée assez précise de ce que je vais faire, mais on en parlera plus tard. Il y a déjà assez de questions à se poser avant.

Sur le dessin, la zone de manœuvres est identifiée en étant en blanc. Elle a un traitement particulier.

Je considère qu'il y a 2 gares : la gare g0 en bas (hors zone de manœuvres) et la gare g1 en haut.

Par ailleurs, une navette se promène sur les zones vertes (de Z40 à Z41).
 
Je n'ai pas considéré que Z40+Z0 et Z41+Z3 soient des gares, mais on aurait pu le faire car, dans la réalité, ce serait le cas.
Mais l'intérêt de déclarer un ensemble de zones comme étant une gare, c'est qu'on peut attribuer des itinéraires à cette gare. Et là, … les itinéraires…

2°) L'orientation des zones (les flèches rouges) :

Toute zone a un sens privilégié, ne serait-ce que pour la dessiner.
Je préfère raisonner par "côtés" (voir un précédent post à ce sujet).
Le sens privilégié (la grosse flèche) va du "cote0" au "cote1" (de A à B). Donc, quand vous sélectionnerez une section, vérifiez bien que le sens que vous avez choisi correspond bien à celui du dessin du réseau.
Pour les appareils de voie, j'ai fait un récapitulatif des différents cas :

(https://www.locoduino.org/IMG/png/les_zones.png)
 
Le point rouge correspond au cote0, les autres extrémités étant cote1. Je reviendrais sur ce schéma dans les itinéraires.

Le point bleu sur le dessin du réseau correspond à la présence d'un signal.
Pour les zones n'ayant qu'un seul sens de circulation, le signal est toujours "cote1".
Pour les zones ayant les deux sens de circulation (les zones "banalisées"), on a une deuxième flèche, plus petite.
Pour moi, les zones banalisées "ont un sens". Pensez-y en choisissant où vous mettez les feux (côté A ou côté B dans le programme) : il y a un signal "cote0" (= A) et un signal"cote1" (=B).

3°) La parité :

On n'a pas à rentrer spécifiquement la parité d'une zone.
Rien qu'en choisissant une section sur l'octogone de départ, vous définissez la parité de la zone. Puis, par itération successives, le programme calcule la parité des appareils de voie.
Par exemple, la zone 24 est déclarée "sens impair" par le fait que les zones Z22, Z23 et Z25 sont impaires.
La parité d'une zone est donc calculée et entrée directement dans le fichier JSON pour usage ultérieur dans un gestionnaire. Les zones banalisées sont dites "pairimpair".

4°) Zones complexes :

Pour l'instant, chaque appareil de voie est une zone à lui tout seul. Ce n'est pas toujours le cas dans la réalité.
On regroupe souvent des appareils en une seule zone ou une zone peut être constituée d'une section et d'un appareil de voie. C'est ce que j'appellerai une "zone complexe", pour l'instant non gérée par le programme actuel. A suivre, donc.

5°) Les vitesses limites :

J'ai défini (arbitrairement) la vitesse maxi à 160 km/h.
Il y a deux types de limitation de vitesse.
 
- Les limites pour les sections, par TIV (Tableau Indicateur de Vitesse).
On la rentre simplement dans la section en cliquant sur le point blanc sur le tracé de la zone. On affiche alors la vitesse qui apparait dans un losange sur le dessin de la zone.
Dans les fichiers d'itinéraires, la vitesse limite sera alors suivie de "TIV".

- Les limites liées à une position déviée d'aiguille.
On la rentre de la même façon sur la branche concernée du dessin de l'appareil de voie.
Elle est également affichée dans un losange sur la branche concernée.
Dans les fichiers d'itinéraires, la vitesse limite sera alors suivie de "RR".
On verra dans le calcul des signaux que cette info est cruciale.

A noter que la vitesse limite dans la position "tout droit" est une limite de type TIV.

6°) Le calcul des zones de gare :

Les gares sont parfois importantes et, même si on peut rentrer ces infos à la main, zone par zone, cela peut être très fastidieux. J'ai donc développé un programme qui complète automatiquement les infos rentrées.
Dans une première version, j'arrivais à définir les gares en ne définissant qu'une seule zone. Mais il fallait des gares vraiment particulières.
Dans cette version, il faut rentrer les infos de zone d'approche et de zone de sortie, le programme ne pouvant pas toujours les définir automatiquement.

Dans le cas de la gare0 du réseau de Dominique, on rentre :
En zone 11 : "ap_g0" dans le champ "gare". C'est la zone d'approche de la gare0.
En zone 16 : "so_g0" dans le champ "gare". C'est la zone de sortie de la gare0.
En zone 25 : "ap_g0" dans le champ "gare". C'est la zone d'approche de la gare0.
En zone 30 : "so_g0" dans le champ "gare". C'est la zone de sortie de la gare0.
Et on rentre "g0" dans la zone 27, ce qui devrait permettre de calculer la gare.
Malheureusement, ça "bave" sur la zone de manœuvres qui se trouve ainsi déclarée "gare", ce que je ne veux pas.
Il faut donc, en plus rentrer "bloque" en zones Z36, Z45 et Z46. Et là, tout est OK.

7°) Le calcul des zones de manœuvres :

C'est un calcul similaire au calcul d'une gare, mais il n'y a pas besoin de bloquer puisque la gare est déjà définie et elle va bloquer l'expansion de la zone de manœuvres.
Il faut juste entrer :
En zone 16 : "ap_m0" dans le champ "manœuvres". C'est la zone d'approche de la zone de manœuvres 0.
En zone 30 : "ap_m0" dans le champ "manœuvres". C'est la zone d'approche de la zone de manœuvres 0.
Puis Z36 et Z37 définies comme "m0".

A noter une chose importante : on entre dans une zone de manœuvres en marche arrière pour pouvoir en ressortir en marche avant. Les zone Z16 et Z30 sont donc banalisées.

Une zone de manœuvres est toujours banalisée.
 
Il s'ensuit que la zone de gare Z14 est forcément banalisée à cause de Z45 et Z46 banalisées, ainsi que la zone de gare Z28 à cause de Z36.

Voilà, on a fait le tour de toutes les infos nécessaires au fonctionnement du programme.

On voit qu'elles sont chacune assez simple à déterminer et que les connaissances de la SNCF sont très minces pour mener à bien cette mission.
Tout le reste est automatique.

En PJ, le réseau en plus grand, plus lisible, les appareils de voie, imprimables et le fichier "Zones" initial en .tsv (à ouvrir dans Excel) dans lequel on voit qu'il y a plein de cases vides...
On y voit aussi les cases remplies via les dessins de zones. On ne rentre rien directement dans le fichier sous peine d'erreurs et d'incohérences.

A suivre : les itinéraires

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 21, 2024, 05:54:23 pm
Merci Denis,
Cela va me replonger efficacement dans mon réseau.
Après le retour de la montagne hier, la pelouse ayant pris la liberté de monter de 20 cm au moins, il faut tondre entre les averses.

Je me donne 2 jours pour me remettre dans le bain et on en discute jeudi  !

Amitiés
Dominique
Titre: Re : Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mai 22, 2024, 10:06:42 am
(...) au moins, il faut tondre
(...)
et tant pis pour la biodiversité  ;)

Il en reste pas mal : 1500 m2 en permaculture quand même !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mai 23, 2024, 10:25:33 am
Bonjour,

Aujourd'hui : les itinéraires.

Il existe dans le programme un bouton "Itinéraires" qui donne tous les itinéraires entre un point A et un point B quelconque sur le réseau. C'est anecdotique.
C'est juste pour voir ce que ça donne. Je supprimerai certainement ce bouton par la suite.

En revanche, il y a un autre bouton, le bouton "Analyse", qui, lui, donne 3 tables qu'on peut lire par la suite dans Excel :
_TOUS_ITI____.tsv qui liste tous les itinéraires possibles du réseau
_TOUS_ITI_G__.tsv qui ne liste que ceux des gares
_TOUS_ITI_M__.tsv qui ne liste que ceux concernés par les zones de manœuvres.

Le fait que ce soit sous forme de tables est, là aussi, anecdotique.
Mais c'est utile en phase de développement.
C'est, comme le nom de la variable le dit bien : "littéral", c’est-à-dire lisible par un humain et il faudra qu'on décide ce qu'on garde pour le fichier JSON et sous quelle forme plus compacte.

Comment se calcule un itinéraire ?

Voici un exemple très simple :

(https://www.locoduino.org/IMG/png/exemple_itineraire_1.png)
 
En bleu, comme précédemment, les signaux, en rouge le "cote0" et, en "non rouge", le "cote1".

Je ne raisonne pas en aiguille à gauche/à droite, mais je considère les "lames" d'un appareil de voie.
Pour l'aiguille en Z5, quand les lames sont à 0 (= "L0"), on est "tout droit", de A à B.
Pour l'aiguille en Z5, quand les lames sont à 1 (= "L1"), on est "dévié", de A à C.
Pour la TJD Z2, quand les lames sont à 0, on va de A à B, en 1, on va de C à D, en 2, on va de A à D et en 3, on va de C à B.
Je n'ai ainsi qu'une seule variable à suivre pour connaitre la position des lames dans n'importe quel appareil de voie.

Evidemment, une section a les "lames" à 0…

Je veux aller de Z1, cote1 vers Z6, cote0.

J'ai 2 procédures dont le nom dit bien ce qu'elles font :
- connecteur_mitoyen(zone, connecteur)
- connecteur_suivant(zone, connecteur)

On démarre par connecteur_mitoyen(Z1, 1).

Les connecteurs d'une zone sont repérés par 2 variables : zone.connecteur[cote][lames]

Donc, on part de Z1.connecteur[1][0] et, en raisonnant sur les voisins, on trouve que le connecteur mitoyen est Z2.connecteur[0][0] (on démarre par lames à 0), c’est-à-dire A.
Puis on passe au connecteur suivant qui est le Z2.connecteur[1][0], c’est-à-dire B.
Connecteur mitoyen = Z3.connecteur[0][0]
Connecteur suivant = Z3.connecteur[1][0] qui est un butoir. Le mitoyen d'un butoir, c'est lui-même et on est dans le sens retour.
Connecteur suivant = Z3.connecteur[0][0] sens retour
Connecteur mitoyen = Z2.connecteur[1][0] sens retour, c’est-à-dire B
Connecteur suivant = Z2.connecteur[0][0] sens retour et comme on a mémorisé la première entrée dans Z2 dans une variable indépendante, on repart dans le sens aller, mais on avance les lames, ce qui fait qu'on repart de Z2.connecteur[0][2], c’est-à-dire A
Connecteur suivant = Z2.connecteur[1][2], c’est-à-dire D
Connecteur mitoyen = Z5.connecteur[2][1], c’est-à-dire C
Connecteur suivant = Z5.connecteur[0][1], c’est-à-dire A
Connecteur mitoyen = Z6.connecteur[1][0]
Connecteur suivant = Z6.connecteur[0][0] qui est le connecteur final.

Le Diable se cachant dans les détails, c'est, évidemment, plus compliqué que ça, mais on a là une bonne idée de ce qui se passe.

Calculer tous les itinéraires d'un réseau :

Avant de se lancer dans des boucles imbriquées, on va calculer combien de recherches d'itinéraires on va avoir.
Le réseau de Dominique comporte 47 zones.
A priori, on a 47 zones x 2 cotes x 47 zones x 2 cotes = 8 836 itinéraires.
C'est beaucoup, mais c'est gérable.
Première simplification : on part et on arrive sur une section. Il y en a 31.
Deuxième simplification : on n'arrive pas sur la même zone que celle du départ.
Donc 31 x 2 x 30 x 2 = 3 720 itinéraires.
On a gagné 60% des tests !
for (Zone zone0 : toutes_zones) {
    //-------------------------------- on balaie toutes les zone0----------------------------------------
    if (zone0.type == 99) {
        //---------------------------- on part obligatoirement d'une section ----------------------------
        for (int cote0 = 0; cote0 < 2; cote0++) {
            //------------------------ on teste les 2 cotés de la zone0 ---------------------------------
            for (Zone zone1 : toutes_zones) {
                //-------------------- on balaie toutes les zone1 ---------------------------------------
                if ( zone1.type == 99) {
                    //---------------- on part obligatoirement d'une section ----------------------------
                    if (zone1 != zone0) {
                        //------------ on ne peut pas avoir zone0 = zone1 -------------------------------
                        for (int cote1 = 0; cote1 < 2; cote1++) {
                           compte_ori_ext++;
                           zone_depart  = zone0;
                           cote_depart  = cote0;
                           zone_arrivee = zone1;
                           recherche_itineraires(zone0.connecteur[cote0][0], zone1.connecteur[cote1][0]);
                        }
                    }
                }
            }
        }
    }
}

Dans la pratique, on n'a que 579 itinéraires possibles et le calcul ne prend qu'une seule seconde. Et on ne fait pas que ça.

Je calcule également les itinéraires des gares, c’est-à-dire que je limite les sections de départ et d'arrivée : on part d'une zone en ap_g0 vers une zone en g0 (champ gare) ou on part de g0 vers so_g0. Et pareil pour g1.
On trouve 18 itinéraires sur 128 testés.

Enfin, on calcule aussi les itinéraires de la zone de manœuvres.
On trouve 30 itinéraires sur 288 testés.

A chaque fois, on obtient une table qui donne, en littéral, les itinéraires trouvés.

Maintenant, je pose deux questions :
- Ai-je bien trouvé tous les itinéraires possibles (surtout en gare et en manœuvres) ?
- Sous quelle forme doit-on les rentrer dans le JSON ?

Une autre question se pose :
A quoi cela peut-il servir de calculer TOUS les itinéraires d'un réseau ?

Cela sert à calculer où on doit implanter des RR (Rappel de Ralentissement) et, par la suite les R (Ralentissement).
On a vu dans mon précédent post que les limites de vitesse sont distinguées en "RR" et "TIV".
Donc, si, dans la liste de l'itinéraire, on a une vitesse "en RR", on remonte dans l'itinéraire jusqu'à arriver sur une section qui aura donc un signal RR.

Remarque :
Cela ne veut pas dire que, dans le même itinéraire, on pourra remonter jusqu'à trouver la section précédente.

Exemple : on est dans l'itinéraire Z25 -> Z28.
Aussi bien dans Z44 que dans Z26 en position déviées, on a une limite à 30 km/h.
Donc, il y a bien un RR affiché dans le signal de Z25.
Mais l'itinéraire n'est pas assez long pour qu'on puisse aller jusqu'à Z22 ou Z23 qui, eux, auront un R qui justifiera du RR en Z25.
Donc, dès qu'on sait que le signal de Z25 peut afficher RR, on sort de la boucle.
Et, à la fin de ces boucles, on a tous les signaux susceptibles d'afficher RR.
Et il faut repartir dans les d'autres boucles pour déterminer les R dans la section précédant la section ayant un RR.
Et c'est là que Z22 et Z23 auront un signal susceptible d'afficher R.

Remarque :
Il existe 2 types de R/RR : le R/RR30 et le R/RR60. Ils se gèrent de la même façon.

Auparavant, on a permis l'affichage de S, A, VL (Sémaphore, Avertissement, Voie Libre) sur tous les signaux. Puis on s'attaque aux C (Carrés).

On a deux types de C :

1°) Le C "d'impossibilité de continuer", lié au fait que les lames des appareils de voie sont dans une position qui ne vous permet pas d'avancer. Exemple : vous arrivez par la voie déviée d'une aiguille et les lames sont en position "tout droit".
Remarque : il existe à la SNCF une possibilité technique de continuer quand même si c'est prévu et que cette aiguille est "talonnable".
Je pense que ce n'est pas une bonne idée en miniature. Il y a déjà tellement de possibilités de dérailler que ce n'est pas la peine d'en rajouter…

2°) Le deuxième type de C est complètement différent : c'est l'aiguilleur qui gère la gare qui l'affiche ou le retire quand toutes les conditions (sécurité, horaires, …) sont remplies.
Exemple : Le train que vous prenez est déjà là, 20 minutes avant le départ. Il y a peu de trafic et e l'itinéraire est déjà "formé". Si le train avançait, il n'y aurait aucune impossibilité technique, toutes les aiguilles étant déjà "en position". Mais il n'est pas l'heure, ou d'autres raison peuvent être évoquées, et l'aiguilleur fait afficher le C au signal devant le train.
Quand il le décidera, il éteindra le C et le train pourra partir.

Remarque : (on l'a déjà dit dans un précédent post) un signal de gare gérée par itinéraires n'affiche pas le S. Donc, quand je donnerai à toutes les voies de gare la possibilité d'afficher le C, il faudra effacer le S. Cela vaut aussi pour les zones d'approche.

Signaux de manœuvres :

Il n'y a qu'un signal de manœuvre : le Cv (Carré Violet). C'est le seul qui ne soit pas un signal de cantonnement.

Dans la pratique, il y a moins de signaux que sur les voies principales car les trais roulent "à vue", à 15 km/h maxi.
Ils sont indispensables aux frontières zone de manœuvre/voies principales et pour les zones d'approche de la zone de manœuvre. Après, les règles sont floues…

Signaux au-dessus des butoirs :

Il s'agit obligatoirement de carrés ayant la particularité de n'avoir qu'un feu, au milieu du butoir.
En zone de manœuvre, ce sont des Cv (et donc violets) (Z18, Z19, Z20 et Z21) et des C (et donc rouges) sur voies principales (Z40 et Z41)


Voilà donc comment, en appuyant simplement sur le bouton "Analyse", on calcule tous les itinéraires et les signaux d'un réseau. Le tout en une seconde chrono !

Denis  :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 23, 2024, 12:03:27 pm
@ Denis

Au sujet de ton premier post.

Citer
Je fais la distinction car j'impose aux signaux de n'être que sur des sections

Ce n'est pas toujours possible. Tu parles de la Z46, en fait la Z46 ne comporte qu'une aiguille (a20) et c'est la Z38 comporte l'aiguille a10 et le carré violet, carré violet qui est sur une zone avec aiguille. Juste après un signal il faut un changement de zone pour aubiner le signal, sinon il faut une pédale (ou balise) pour le faire.

Citer
Sur le dessin, la zone de manœuvres est identifiée en étant en blanc. Elle a un traitement particulier.
Les zones Z16 et Z30 sont aussi des zones de manoeuvres, mais ne sont pas en blanc ! en fait ce sont des zones hybrides ligne/manoeuvre.

Concernant les paritées, j'ai abandonné, dans le gestionnaire, les cotés 0/1 ou 1/2 pour des cotés pair/impair, c'est beaucoup plus simple. Et ceci pour toutes les zones. Cela implique aux changements de zone des transitions pair vers impair ou impair vers pair.

Pierre


Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 23, 2024, 01:51:29 pm
@ Denis

Citer
Il y a deux types de limitation de vitesse.
- Les limites pour les sections, par TIV (Tableau Indicateur de Vitesse).
- Les limites liées à une position déviée d'aiguille.
Les TIV sont surtout utilisés en ligne, même en présence d'aiguilles  (en talon). En présence d'aiguilles en pointe, si la vitesse est limitée à 30 ou 60 on utilise de RR30 ou RR60, sinon un TIV est utilisé. Il y a même des cas ou un RRxx et un TIV sont utilisés pour deux vitesses différentes suivant la position d'aiguilles.
Citer
A noter une chose importante : on entre dans une zone de manœuvres en marche arrière pour pouvoir en ressortir en marche avant.
C'est quoi une marche avant ou une marche arrière (par rapport à quoi).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mai 23, 2024, 04:24:15 pm
@ Denis

Quelques remarques sur ton deuxième post

Citer
Auparavant, on a permis l'affichage de S, A, VL (Sémaphore, Avertissement, Voie Libre) sur tous les signaux.
- a propos de Vl, les carrées d'entrée des gares terminus n'affichent jamais Vl
- a propos de S, ce feu n'est utilisé que pour le cantonnement (BMU,BAL,BAPR, ...), sur un réseau il peut avoir de parties sans cantonnement (donc avec des signaux sans S)

Citer
Remarque : (on l'a déjà dit dans un précédent post) un signal de gare gérée par itinéraires n'affiche pas le S. Donc, quand je donnerai à toutes les voies de gare la possibilité d'afficher le C, il faudra effacer le S.
- dans les postes avec des itinéraires permanent, s'il y a du cantonnement, certains carrés peuvent présenter le S, pour assurer la continuité du cantonnement à la traversée d'un gare, d'une bifurcation , ...
- dans les postes avec du transit souple, s'il y a du cantonnement, les carrés peuvent s'ouvrir au sémaphore (S)

Citer
Il n'y a qu'un signal de manœuvre : le Cv (Carré Violet). C'est le seul qui ne soit pas un signal de cantonnement.
- il peut avoir d'autres signaux qui ne soient pas des signaux de cantonnement (avertissement, carré, ...)
- il y a un autre signal de manoeuvre, dans les grandes gares un feu de manoeuvre (M : blanc) peut être utilisé pour les départs en manoeuvre sur les carrés (compter les feux des signaux de grande gares : 5 feux (A, S, Vl, M, C)

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mai 24, 2024, 04:21:37 pm
@Pierre,

Merci pour toutes ces remarques, fort intéressantes.

Tout d'abord, je voudrais préciser ce que j'entends par "zone multiple" (que je préfère à "zones complexes").

C'est par exemple une section + une aiguille que nous appellerons Z38.
Dans ce cas, je propose de créer dans mon programme une zone qui est une section Z38/0 et une zone qui est une aiguille Z38/1.
Dans mon programme, ce seront 2 zones, mais avec des noms particuliers avec un caractère réservé : "/", plus un numéro d'ordre.
Mais comme ce n'est, sur le réseau, qu'une seule zone (une seule détection de présence), dans le JSON, on ne fera écho que d'une seule zone : Z38.

L'intérêt, pour moi, est de garder une cohérence complète et de ne gérer des signaux que sur des sections. Je ne change rien au programme, les affichages sont identiques, sauf que la section Z38/0 est de longueur nulle.
Pour le JSON, ça ne change rien, on n'a bien qu'une seule Z38.

Pour ta zone multiple :

(https://www.locoduino.org/IMG/png/zone_multiple-3.png)
 
On a 5 parties dans la zone Z1.
Cela répond à ta première remarque.

Citer
Sur le dessin, la zone de manœuvres est identifiée en étant en blanc. Elle a un traitement particulier.
Les zones Z16 et Z30 sont aussi des zones de manœuvres, mais ne sont pas en blanc ! en fait ce sont des zones hybrides ligne/manœuvre.

Je suis entièrement d'accord.

Citer
Concernant les parités, j'ai abandonné, dans le gestionnaire, les cotés 0/1 ou 1/2 pour des cotés pair/impair, c'est beaucoup plus simple. Et ceci pour toutes les zones. Cela implique aux changements de zone des transitions pair vers impair ou impair vers pair.

La raison pour laquelle j'utilise des numéros, c'est que je m'en sers dans des Arrays (par exemple pour les connecteurs[coté][lames]). Il me faut des "int".

Citer
Il y a deux types de limitation de vitesse.
- Les limites pour les sections, par TIV (Tableau Indicateur de Vitesse).
- Les limites liées à une position déviée d'aiguille.
Les TIV sont surtout utilisés en ligne, même en présence d'aiguilles  (en talon). En présence d'aiguilles en pointe, si la vitesse est limitée à 30 ou 60 on utilise de RR30 ou RR60, sinon un TIV est utilisé. Il y a même des cas ou un RRxx et un TIV sont utilisés pour deux vitesses différentes suivant la position d'aiguilles.

Tout à fait d'accord.
Dans mon programme, s'il y a une limitation de vitesse en position "tout droit", je la tague "TIV".

Citer
A noter une chose importante : on entre dans une zone de manœuvres en marche arrière pour pouvoir en ressortir en marche avant.
C'est quoi une marche avant ou une marche arrière (par rapport à quoi).

Les zones Z16 et Z30 sont, normalement des zones unidirectionnelles. Elles deviennent banalisées uniquement pour aller dans la zone de manœuvres en reculant.

Citer
- à propos de VL, les carrés d'entrée des gares terminus n'affichent jamais VL

C'est vrai, j'avais oublié ce cas, pourtant très logique...
Mais c'est aussi vrai hors des gares terminus.
Je vais lire tous les itinéraires et trouver ceux qui se terminent par une voie de garage. Comme un butoir est un C, le signal précédent est, au mieux, un A. Donc, lors de cette recherche, je vais pouvoir faire une liste des sections précédant un butoir et, donc, susceptibles de ne pas afficher VL.
Dans une deuxième phase, je testerai si les sections de cette liste peuvent avoir autre chose qu'un butoir comme zone suivante. Si une zone ne peut avoir qu'un butoir comme suivant, je supprime VL.

Sur le réseau de Dominique, Z28 sera dans la liste puisqu'elle peut déboucher sur Z36.
L'autre issue possible pour Z28 cote0 serait Z25, mais Z25 n'est pas banalisée et uniquement en sens contraire de Z28. Donc, le signal coté0 de Z28 ne pourra jamais être VL.

Citer
- a propos de S, ce feu n'est utilisé que pour le cantonnement (BMU,BAL,BAPR, ...), sur un réseau il peut avoir de parties sans cantonnement (donc avec des signaux sans S)

Là aussi, je suis d'accord. Pour l'instant, je me limite au BAL et je n'ai jamais vu ce cas sur un réseau miniature, alors que ce serait possible.

Citer
- dans les postes avec des itinéraires permanent, s'il y a du cantonnement, certains carrés peuvent présenter le S, pour assurer la continuité du cantonnement à la traversée d'une gare, d'une bifurcation , ...
- dans les postes avec du transit souple, s'il y a du cantonnement, les carrés peuvent s'ouvrir au sémaphore (S)

Je suis d'accord avec toi, c'est possible, mais pour qu'il y ait du cantonnement DANS la gare, il fait qu'elle soit vraiment grande. Je n'ai pas d'exemple de réseau miniature qui ait eu besoin de ça. Ceci dit, c'est simple à faire : je vais garder le S pour les cas où, DANS une gare, il y a 2 sections qui se suivent.

Mais à partir du moment où il y a des itinéraires, je vois mal l'aiguilleur donner le S. Ou il donne le C, ou il donne au train la possibilité de partir.

Citer
- il peut avoir d'autres signaux qui ne soient pas des signaux de cantonnement (avertissement, carré, ...)

OK, c'est vrai.

Citer
- il y a un autre signal de manœuvre, dans les grandes gares un feu de manœuvre (M : blanc) peut être utilisé pour les départs en manœuvre sur les carrés (compter les feux des signaux de grande gares : 5 feux (A, S, Vl, M, C)

Effectivement, il faut penser à cette possibilité. A développer.
Dans la pratique du réseau miniature, je préfèrerai utiliser des signaux au ras du sol pour aller vers les zones de manœuvre depuis les voies principales et ne pas avoir de signal combinant les signaux de voie principale et des signaux de manœuvre. Mais je suis d'accord que ça existe.

Enfin, il existe affectivement des BMU, des BAPR, … et, effectivement, certains réseaux simples auraient besoin de ce type de signalisation allégée, justement parce qu'ils sont simples. Pour l'instant, je n'ai pas d'idée pour intégrer ça et je me cantonne (ah ah) au BAL.
L'autre problème, dans les cas simples, justement, c'est le signal qui sert à 2 voies en sortie de gare. Je cherche une idée.

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le mai 25, 2024, 01:30:22 pm
Citer
- dans les postes avec des itinéraires permanent, s'il y a du cantonnement, certains carrés peuvent présenter le S, pour assurer la continuité du cantonnement à la traversée d'une gare, d'une bifurcation , ...
- dans les postes avec du transit souple, s'il y a du cantonnement, les carrés peuvent s'ouvrir au sémaphore (S)
Je suis d'accord avec toi, c'est possible, mais pour qu'il y ait du cantonnement DANS la gare, il fait qu'elle soit vraiment grande. Je n'ai pas d'exemple de réseau miniature qui ait eu besoin de ça. Ceci dit, c'est simple à faire : je vais garder le S pour les cas où, DANS une gare, il y a 2 sections qui se suivent.
Mais à partir du moment où il y a des itinéraires, je vois mal l'aiguilleur donner le S. Ou il donne le C, ou il donne au train la possibilité de partir.
Bonjour ,
en cas de tracé permanent , la gare devient un canton vis à vis du BAL , cad. que si un train y circule devant un autre , l'autre observera des indications S , A , ou ou Vl , selon le nombre de cantons libres devant lui , comme s'il était en pleine voie
(toutefois (pour ne pas me dédire) je suggère de simplifier les choses au maximum  : pas de transit souple , pas de tracé permanent , pas de BAL (le réseau entier étant géré comme une gare unique) : intuitivement , je pense que vous aurez suffisamment de mal sans ça

Citer
Citer
- il y a un autre signal de manœuvre, dans les grandes gares un feu de manœuvre (M : blanc) peut être utilisé pour les départs en manœuvre sur les carrés (compter les feux des signaux de grande gares : 5 feux (A, S, Vl, M, C)
Effectivement, il faut penser à cette possibilité. A développer.
Dans la pratique du réseau miniature, je préfèrerais utiliser des signaux au ras du sol pour aller vers les zones de manœuvre depuis les voies principales et ne pas avoir de signal combinant les signaux de voie principale et des signaux de manœuvre. Mais je suis d'accord que ça existe.
il n'est pas logique (voire interdit à la sncf ?) , de présenter une indication M au sol , alors que celle-ci peut être , tout simplement , présente sur le panneau
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 05, 2024, 09:44:17 am
Bonjour,

Voici la version 7 de mon éditeur JSON.
 
J'ai beaucoup d'occupations par ailleurs et peu de temps pour développer. Mais je suis impatient de vous présenter ces améliorations.
C'est sur le fichier "zones" que se voient les changements, mais je vais les traduire en modifications du fichier JSON.

Deux pistes :

1°) Suppression des feux VL sur les cibles qui ne peuvent pas l'afficher. Merci à Pierre d'avoir mis le doigt sur ce problème.

2°) Amélioration de l'ergonomie d'affichage des zones :
- On a le menu "afficher" directement dans le menu général (c'était facile)
- On a maintenant des flèches sur l'affichage d'une zone permettant de se promener de voisin en voisin sur tout le réseau. Merci à Dominique pour avoir proposé cette idée.

Point 1 :

Il est évident que le feu "cote0" de Z0 ne peut pas afficher VL puisque Z40 est une zone avec butoir.
Donc, lorsque je fais le tour des zones pour détecter les sones avec butoir, j'en profite pour enregistrer la liste de ces zones dans une ArrayList. On trouve : Z40, Z41, Z36, Z18, Z19, Z20, Z21. On trouverait aussi toutes les voies d'une gare terminus.
Puis je fais le tour des itinéraires pour détecter les zones "précédant un butoir", ce qui donne Z0, Z3, Z28, Z14 et Z37 et on les enregistre dans une ArrayList.
Puis je teste s'il existerait une autre possibilité que d'aller vers un butoir depuis ces zones. C'est faux pour toutes les zones, sauf Z14 qui permet, des deux côtés, d'aller voir ailleurs.
Donc Z14 aura la possibilité d'afficher VL et pas les autres qui auront un côté "sans VL".
Finalement, c'est assez simple.

Point 2 :

L'utilisation des flèches est effectivement une grosse amélioration de l'ergonomie.
Je réfléchirai plus tard à la possibilité d'afficher ce qui "ressemblerait à un TCO" en mettant chaque carré (zone) dans une grille.

Je vais maintenant m'attaquer aux zones multiples.

A suivre
Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 06, 2024, 11:30:32 am
Nouvelle version du gestionnaire expérimental json.

Dans le fichier json une partie paramètres ("params") a été ajoutée. Pour l'instant il y a trois paramètres, le choix du transit (souple ou rigide), le nombre maximum de zones entre deux signaux et la présence d'itinéraires permanents ou pas. L'appairage des aiguilles d'une bretelle a aussi été rajoutée (pour le transit souple).

Le TCO a été revu pour utiliser le nouveau locoduinodrome et le gestionnaire utilise en conséquence le fichier json de l'onglet "Z2".

Il a été discuté dans des posts précédents du problème que posent certaines bretelle en transit souple. En pratique le gestionnaire a besoin d'informations complémentaires dans certains itinéraires pour gérer. Ces informations sont rajoutées automatiquement par le gestionnaire, lors de son initialisation, elles sont calculées à partir des informations d'appairage des aiguilles des bretelles qui se trouvent dans le fichier json. En pratique les deux aiguilles d'une bretelle sont toujours manoeuvrées simultanément.

Le fonctionnement des deux applications est toujours le même, lancer le tco PUIS le gestionnaire sur la même machine. L'enclenchement d'approche est toujours désactivé et il y a encore des bugs dans les itinéraires.

En vue de faire des essais en C/C++ du gestionnaire, un mode de communication entre le TCO et le gestionnaire a été ajouté avec utilisation des tubes de communication Unix comme alternative au réseau TCP/IP. Ces tubes de communication existent dans tous les systèmes basés sur Unix (MacOsX, Linux, Ubuntu, ...). Je vais continuer les essais en C/C++ sur Mac pour bénéficier du TCO existant en Processing, je ne peut pas utiliser la bibliothèque réseau Arduino, par contre la bibliothèque ArduinoJson va très bien.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 06, 2024, 06:03:52 pm
Bonjour Pierre,

Je décortique ton fichier JSON et je me pose des questions :

1°) Il y a un fichier JSON indépendant qui ne sert pas ?
2°) Tu as 2 onglets Z1 et Z2 j'imagine que Z1 est une ancienne version et que tu utilises Z2 ?
3°) Tu utilises maintenant pairETImpair, pairOUImpair. C'est quoi la nuance ?
4°) Comment tu coderais une zone sans feux (dans une zone de manœuvres, par exemple) ?
5°) Plutôt que des 0/1, tu utilises exclusivement les notions de pair/impair, partout ?
6°) C'est quoi, les balises ?
7°) J'ai un peu de mal avec tes aiguilles : tu as 2 aiguilles dans une bretelle, ce qui est logique, mais je ne vois pas de bretelle, vu que ce sont des TJS.
Et je ne vois qu'une aiguille dans les TJS ?
8°) Je vois la valeur des ralentissements dans les signaux (en donnant la position de l'aiguille qui nécessite ce ralentissement). Je trouve ça bizarre. Je pense que ce serait plus logique dans l'aiguille
9°) Dans les itinéraires, il n'y a qu'une liste de zones. Mais j'aurais tendance à y mettre aussi la position des aiguilles, de façon à ne pas avoir à la recalculer quand on appuie sur un bouton.
10°) C'est quoi "auts" ?

Je devrai être capable de traduire mon fichier Zones en un JSON de ton type, mais il faut que je comprenne tout.
Je joins ma version 8 où on trouve un fichier JSON du réseau de Dominique, pas complètement en phase avec le tien...

Par ailleurs, ça n'a rien à voir avec ce post : un PRS expliqué :
https://roverch.net/modelisme/PostePRS.htm (https://roverch.net/modelisme/PostePRS.htm)

Denis :P
 
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 07, 2024, 09:54:25 am
@ Denis

Quelques réponses à tes questions :

Citer
1°) Il y a un fichier JSON indépendant qui ne sert pas ?
2°) Tu as 2 onglets Z1 et Z2 j'imagine que Z1 est une ancienne version et que tu utilises Z2 ?
L'onglet Z1 est le json pour l'ancien Locoduinodrome (voie unique en boucle avec évitement), l'onglet Z2 est le json pour le nouveau Locoduinodrome  (voie double en boucle avec évitement)
Citer
3°) Tu utilises maintenant pairETImpair, pairOUImpair. C'est quoi la nuance ?
Pour l'instant il y a quatre cas :
- pair
- impair
- pairOUImpair : pas de changement de sens possible (zones d'aiguilles)
- pairETImpair : changement de sens possible (zones à quai, zones de manoeuvres, ...)
Citer
4°) Comment tu coderais une zone sans feux (dans une zone de manœuvres, par exemple) ?
Comme les autres mais sans signaux
Citer
5°) Plutôt que des 0/1, tu utilises exclusivement les notions de pair/impair, partout ?
Oui c'est beaucoup plus simple pour le gestionnaire
Citer
6°) C'est quoi, les balises ?
Le but ultime c'est d'arrêter les trains, même en pousse, juste devant un signal fermé. Pour cela le gestionnaire pourra mettre en oeuvre une odométrie pour localiser les trains. Les balises sont juste une détection ponctuelle des trains un peu avant le signal, cela permet de corriger les erreurs de l'odométrie. En attendant cela sert à arrêter les trains, même un peu brutalement, pour assurer la sécurité, en évitant les zones d'arrêt avec tous les problèmes que cela pose
Citer
7°) J'ai un peu de mal avec tes aiguilles : tu as 2 aiguilles dans une bretelle, ce qui est logique, mais je ne vois pas de bretelle, vu que ce sont des TJS. Et je ne vois qu'une aiguille dans les TJS ?
Une TJD ou TJS a deux aiguilles indépendantes, on peut avoir une bretelle avec une des aiguille d'une TJD/TJS et une autre aiguille, voire avec une aiguille d'une autre TJD/TJS
Citer
8°) Je vois la valeur des ralentissements dans les signaux (en donnant la position de l'aiguille qui nécessite ce ralentissement). Je trouve ça bizarre. Je pense que ce serait plus logique dans l'aiguille
Un ralentissement peut dépendre de la position de plusieurs aiguilles. De plus c'est plus pratique pour le gestionnaire de traiter cela au niveau du signal
Citer
9°) Dans les itinéraires, il n'y a qu'une liste de zones. Mais j'aurais tendance à y mettre aussi la position des aiguilles, de façon à ne pas avoir à la recalculer quand on appuie sur un bouton.
Oui c'est vrai, mais cela allège le fichier json (pour le nouveau Locoduinodrome il fait déjà plus de 4000 octets)
Citer
10°) C'est quoi "auts" ?
C'est des autorisations. Quand deux postes d'aiguillages partagent des voies sur lesquelles ils peuvent envoyer des trains, voies uniques, voies à quai, ... il faut se prémunir contre les nez à nez. Pour cela on utilise des autorisations, celui qui a l'autorisation peut envoyer un train l'autre pas (exclusivité). Ce mécanisme n'est utilisé que pour l'ancien Locoduinodrome, pour gérer le partage de la voie unique

Concernant les voisins d'une zone, pour l'instant je simplifie des écriture json genre : [[Zx]] assez courantes en Zx, la aussi pour réduire la taille du fichier json. De plus quand il n'y a pas de signaux je met rien toujours pour les mêmes raisons.

Concernant le lien sur le site, je le connais depuis pas mal de temps, c'est très intéressant.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juin 08, 2024, 06:23:10 pm
Aux vues du fichier Json de Denis, concernant mon réseau, j'ai quelques question préliminaires dont les réponses sont sans doute dans les posts précédents :

z40 et Z41  (zones avec butoir)ont-ils comme voisin eux-même ou rien " "
concernant pair / impair = est-ce le sens de la marche ?
vois1 est-il coté pair ou impair ?
vois2 idem ?
sign1 idem ?
sign2 idem ?

aiguille droite=droite, et gauche=déviée ? ou
aiguille droite=à droite vu de la pointe vers un talon ?
aiguille gauche=à gauche vu de la pointe vers un talon ?
dans les 2 derniers cas, cela ne renseigne pas le gestionnaire sur le coté "dévié" qui peut entrainer un ralentissement.

Je continue à explorer !
merci à tous les deux : on est pas loin du but !
Dominque
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 08, 2024, 07:12:48 pm
@ Dominique,

Le fichier JSON va évoluer, suite au dernier post de Pierre.
 
En effet, comme son gestionnaire évolue, il a besoin d'informations supplémentaires et de simplifications.
En particulier, il doit être aussi petit que possible, si on veut le charger dans un processeur avant de lancer le gestionnaire.
Je suis en train de l'adapter pour qu'il réponde aux nouveaux enjeux.

Pour répondre à tes questions :

1°) Oui, le voisin d'une zone avec butoir, c'est elle-même. Et ça fonctionne très bien dans la recherche d'itinéraires.

2°) Pair/impair, c'est le sens de circulation principal d'une zone. C'est une donnée du réseau. Et ça suppose que le train roule à sens unique.
Sauf accident ou problème technique, un train pair roule dans le sens pair et voit les signaux de sens pair.

3°) Concernant les voisins, justement ça va changer : voisP pour voisin pair, voisI pour voisin Impair, pareil pour les signaux. Il va falloir que je change.

4°) Pour moi, il faut que le type des appareils de voie soit clair : une aiguille droite a la voie déviée à droite et une aiguille gauche la voie déviée à gauche.

5°) Je construit le fichier JSON à partir du fichier Zones. Pour l'instant, je sauve le fichier Zones, mais quand on sera d'accords sur le JSON, je ne le sauverai plus.
De la même façon, je sauve les fichiers d'itinéraires, très complets, mais, comme ça finira aussi dans le JSON (en résumé), ils disparaîtrons aussi.
Il y a dans le fichier Zones toutes les infos nécessaires pour construire le JSON.

Le fait de raisonner exclusivement en pair/impair va me poser quelques soucis, car c'est très différent de mon raisonnement, mais j'ai bon espoir  ;)

Denis  :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 10, 2024, 11:20:29 am
@ Dominique & Denis

Concernant les notations pair/impair pour les zones :

Les zones ont toutes deux cotés, il faut nommer ces cotés, après avoir fait des essais avec 1/2, je suis (re)venu aux pair/impair, c'est plus cohérent avec les sens des trains, les signaux, … et plus simple pour le gestionnaire.

Pour que ce soit cohérent le choix du coté pair et du coté impair ne peut pas se faire n'importe comment. On choisit une zone quelconque et on décide arbitrairement quel est le coté pair et le coté impair, les cotés de toutes les autres zones sont alors déterminés par la règle suivante : à tous les changements de zones on passe d'un coté pair à un coté impair ou d'un coté impair à un coté pair.
Il y a deux cas où ce n'est pas possible, la raquette et le triangle de retournement (j'en ai déjà parlé dans un post précédent).

Un train qui se déplace vers le coté pair d'une zone est un train pair, un train qui se déplace vers le coté impair d'une zone est un train impair.
Un signal qui est près du coté pair d'une zone est un signal pair et inversement. Donc un train pair ne voit que les signaux pairs et inversement.
Cela permet aussi de donner une sens aux itinéraires, aux balises, …

Concernant les aiguilles :

On m'a déjà reproché, a juste titre, l'appellation directe/déviée pour la position des aiguilles qui est ambiguë notamment pour les aiguilles symétriques. J'ai donc adopté l'appellation droite/gauche (c'est la direction en regardant l'aiguille en pointe). Certes cela ne permet plus de prévoir un ralentissement quand l'aiguille est déviée (et quelle est prise en pointe), mais je pense que le problème des ralentissements est plus complexe et peut dépendre de la position de plusieurs aiguilles et de leur sens de parcours (pointe ou talon); pour le gestionnaire il est pratique d'avoir l'information liée au signal, pour cela j'ajoute (pour l'instant) aux signaux, dans le fichier json, une vitesse et des positions d'aiguilles, genre "ral": [30,"A1","gauche","A2","gauche"], on pourrait même envisager des vitesses multiples genre "ral": [[30,"A1","gauche","A2","gauche"],[60,"A1","droite"]]

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 10, 2024, 01:12:47 pm
J'ai oublié de parler des butoirs.

Les voisins d'une zone sont normalement des zones, éventuellement conditionnées par la position d'aiguilles. Quand il y a un butoir il n'y a pas de zone voisine, il n'y a rien. En informatique rien peut se coder par null ou l'absence d'information, je préfère la deuxième solution, on ne met rien dans le fichier json.
Le fait de mettre la zone elle même comme voisin me semble plutôt absurde.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 10, 2024, 04:08:29 pm
@Pierre,

Pour répondre à ta dernière remarque sur les butoirs.
C'est une chose de ne rien mettre dans le JSON. Ça gagne de la place et c'est logique. OK.
Mais pour gérer les itinéraires, il faut que toutes les zones aient un voisin et le plus facile, comme il faut bien mettre quelque chose, j'ai pris le parti de mettre le nom de la zone.
En plus, quand on recherche des itinéraires, on change de sens de parcours aux butoirs. Il n'y a même pas besoin d'avoir un cas particulier, l'inversion se fait d'elle même.

Par ailleurs, j'ai beaucoup de mal à dire qu'une zone est paire ou impaire. Je conçois, par contre, très bien qu'une zone ait un côté pair et un côté impair. Ça me va parfaitement.

Je supprimerai bien l'info "sens" dans le JSON :

Une zone a un feu (coté pair ou impair), deux feux ou pas de feux.
Si une zone a un feu "signP", elle est "paire" et l'info "sens" est redondante. Si une zone a un feu signI, elle est "impaire" et l'info "sens" est redondante.
Si une zone a deux feux, elle est banalisée et n'a donc pas vraiment de sens.
Si elle n'a pas de feu, elle est aussi banalisée et n'a donc pas vraiment de sens.

Dans les itinéraires, on a une liste de zones. L'ordre de cette liste donne le sens de parcours. Là encore, l'info "sens" est redondante.

Concernant les ralentissements, je propose que cette info soit au niveau des feux R et pas de feux RR, comme ça le train a directement l'info quand il en a besoin.

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juin 10, 2024, 04:39:59 pm
Mais le fait de ne mettre "rien" soit " ", un blanc, ce n'est pas rien comme dirait Raymond Devos !
Donc "un blanc" peut signifier un butoir !
Logique ?

..et s'il n'y a pas de butoir, le trains continue sur le ballast !
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 10, 2024, 04:59:41 pm

@ Denis

J'ai mis un post il y a quelques temps pour discuter de tous les problèmes de sens.

Citer
Mais pour gérer les itinéraires, il faut que toutes les zones aient un voisin et le plus facile, comme il faut bien mettre quelque chose, j'ai pris le parti de mettre le nom de la zone.
En plus, quand on recherche des itinéraires, on change de sens de parcours aux butoirs. Il n'y a même pas besoin d'avoir un cas particulier, l'inversion se fait d'elle même.
Tu peux aussi mettre null, mais tant que cela reste dans ton éditeur cela n'a pas d'importance.
Citer
Par ailleurs, j'ai beaucoup de mal à dire qu'une zone est paire ou impaire. Je conçois, par contre, très bien qu'une zone ait un côté pair et un côté impair. Ça me va parfaitement.
Il n'y a pas de sens des zones dans le fichier json, les "sens" c'est des sens de parcours autorisés pour les trains
Citer
Dans les itinéraires, on a une liste de zones. L'ordre de cette liste donne le sens de parcours. Là encore, l'info "sens" est redondante.
C'est vrai, mais le sens est dur à extraire de la liste des zones de l'itinéraire.
Citer
Concernant les ralentissements, je propose que cette info soit au niveau des feux R et pas de feux RR, comme ça le train a directement l'info quand il en a besoin.
Les trains n'ont pas besoin des infos de ralentissement issues du json, c'est le gestionnaire qui gère.
Les infos de ralentissement sont utilisées dans le calcul des feux d'un signal lors de son ouverture, pour faire ce calcul on a besoin du feu du signal suivant, à la fin du calcul le nouveau feu du signal est transmis au signal précédent pour une éventuelle mise à jour. Ce qui implique que les infos de ralentissement soient avec le signal de RR.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 10, 2024, 05:05:32 pm
@ Dominique

Citer
Mais le fait de ne mettre "rien" soit " ", un blanc…
Donc "un blanc" peut signifier un butoir !
Rien c'est rien, même pas un blanc, pour le fichier json.
Le butoir c'est juste de la décoration !

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 19, 2024, 10:02:34 am
@ Dominique

Voila, j'ai réussi à faire tourner une première version (alpha) du gestionnaire json en C/C++. Je suis parti de la version 3 du gestionnaire en Processing et je l'ai traduite en C/C++.

Comme je l'ai dit précédemment elle tourne sur ordinateur (basé sur Unix : MacOs, Linux, ...) pour pouvoir faire des tests avec le TCO en Processing (la communication des messages se faisant par des tubes de communication Unix).

J'ai fait le maximum pour que cette version (et les suivantes) puisse tourner sur Arduino, pour cela j'utilise comme bibliothèque json : "AduinoJson".

J'ai transformé les onglets un à un, en commençant pas l'onglet "json". La transformation des onglets  été faite à coup de substitutions globales et d'adaptations. Le plus dur a été de trouver un remplaçant pour les "Strings" de Processing, j'ai essayé "string" de C/C++ mais j'ai eu du mal avec les pointeurs, finalement je suis parti sur des "const char *" qui conviennent bien et qui sont des pointeurs.

Le plus dur a été l'onglet "json", il a fallu presque tout réécrire et tester à cause du changement de bibliothèque json.

L'organisation générale du programme C/C++ n'est pas très jolie, il n'y a que des ".h". Mais devant le tas de problèmes j'ai fait au plus facile.

Le programme C/C++ n'est qu'une version "alpha", il y plein de bugs, mais cela ne se plante pas, et j'ai réussi à faire correctement certains itinéraires et même à envoyer un train en ligne avec des signaux corrects ainsi que le cabsignal.

Quand il y aura moins de bug je publierai une version pouvant être essayée.


Il va aussi falloir commencer à réfléchir à une version sur Arduino. Je verrai bien un micro-contrôleur bi-coeur plutôt costaud (avec éventuellement du calcul flottant pour l'odométrie), un coeur pour le gestionnaire et un coeur pour les communications.

Il y a aussi le problème du fichier json, il y a trois solutions :
- une carte SD
- une constante (const char* Z2=…;), c'est le cas ici pour le gestionnaire C/C++ (mais plus de 4000 octets pour le json du nouveau Locoduinodrome)
- une constante dans la partie mémoire flash (PROGMEM).

Le fichier accompagné contient un sketch Arduino avec tous les fichiers du gestionnaire en C/C++, mais ce n'est pas (encore) un vrai sketch Arduino compilable et flashable, c'est juste un moyen de visualiser les fichiers avec un IDE connu.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juin 19, 2024, 05:53:06 pm
@pierre59

Merci Pierre 🙏, pour ce gros travail d’adaptation : on rentre dans but visé et je vais m’empresser de regarder tout cela de très près, demain .

Je viens de récupérer cette version que je découvre dans cette réponse :

Je suis conscient que c'est un premier jet d'une conversion du programme Processing (Java) en C/C++ et, par conséquent tout ce qui suit N'EST PAS une critique.

1) A première vue, je cherche où est le programme principal qui n'est pas dans GestJC.ino (qui est vide). Je cherche donc le Setup() (que je n'ai pas trouvé, et la Loop() qui semble être dans GestJC.cpp (qui contient un main).

Peut-être faut-il tout simplement recopier le main() du cpp dans la loop() du ino ?
Je vais essayer.
Pour le moment en choisissant mon Arduino Due habituel, la compilation échoue et fournit une longue lecture !

2) L'onglet ArduinoJson-v7.0.3.h n'est peut-être pas nécessaire puisque la bibliothèque ArduinoJson-v7.0.4 est disponible sur IDE 2.3.2
Il y a une document très exhaustive sur https://arduinojson.org/?utm_source=meta&utm_medium=library.properties (https://arduinojson.org/?utm_source=meta&utm_medium=library.properties)

3) En ce qui concerne l'emplacement du fichier Json, il est possible en effet de le stocker sur une carte SD, comme l'illustre l'exemple JsonConfigFile. La carte SD permet de faire le lien facile avec l'éditeur de Denis.

Il peut-être aussi enregistré en mémoire flash (progmem) selon le processeur choisi (ESP32 par exemple) avec un téléchargement sans fil.

Je continuerai ma découverte un peu plus tard...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 21, 2024, 08:57:58 am
@ Dominique

C'est juste une traduction en C/C++ du gestionnaire json, pas encore adaptée à Arduino, mais cela viendra.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 23, 2024, 11:44:50 am
@Pierre,

Bravo pour tes efforts pour faire entrer un gestionnaire dans un microcontrôleur. 8)

@ tous,

J'ai bien avancé sur mon éditeur, bien clarifié certains points et corrigé quelques bugs. :P

Voyons dans le détail :

1°) La parité :

Quand on trace un trait sur une feuille, on a une origine et une extrémité.
Cette information ne doit jamais être perdue.

Quand un train va de l'origine vers l'extrémité, je décrète arbitrairement qu'il va dans le sens pair.
Comme, par ailleurs, on circule à gauche à la SNCF (hors AL pour des raisons historiques), il s'ensuit que les trains pairs vont dans le sens des aiguilles d'une montre. C'est une conséquence du choix précédent.

Un train pair voit des signaux pairs à l'extrémité d'une zone paire.
Un train impair voit des signaux impairs à l'extrémité d'une zone impaire.

Si une zone paire peut être parcourue dans les 2 sens, les trains pairs voient les signaux pairs à l'extrémité et les trains impairs des signaux impairs à l'origine de la zone.
Si une zone impaire peut être parcourue dans les 2 sens, les trains impairs voient les signaux impairs à l'extrémité et les trains pairs des signaux pairs à l'origine de la zone.

Donc, dans la ligne "sens" de la zone, je ne peux avoir que "pair" ou "impair".

Le voisin pair d'une zone paire est à l'extrémité et le voisin impair d'une zone paire est à l'origine.
Le voisin impair d'une zone impaire est à l'extrémité et le voisin pair d'une zone impaire est à l'origine.

Par ailleurs, il peut y avoir 0, 1 ou 2 signaux pour une zone.
On traitera plus tard le cas de 0 signaux, en particulier dans les zones multiples.
Pour 1 signal, si la zone est paire, il y aura un seul signal pair et un seul signal impair si la zone est impaire.
Pour 2 signaux, il y aura un signal pair et un signal impair. Et la parité nous dira à quel bout il est.
Si on veut garder à la fois l'information de parité et l'information du nombre de signaux dans la ligne "sens", je propose de mettre "pair0"/"impair0", "pair1"/"impair1" ou "pair2"/"impair2"

Pour les appareils de voie, je ne m'occupe pas de la parité. L'origine est toujours du côté de la pointe et l'extrémité côté talon.

Pour les traversées (croisement, TJS, TJD), je définis arbitrairement un sens puisque tout est symétrique.

Enfin, pour les zones qui ont un butoir, celui-ci est toujours à l'extrémité. La parité de la zone désignant cette extrémité.

J'ai abandonné la notion de "pairimpair" car elle fait perdre la notion d'origine/extrémité.

2°) Pierre a eu l'excellente idée d'ajouter des balises dans les zones, paires ou impaires évidemment, ce qui permet de récupérer plus souvent une information de position du train réel (odométrie) et de s'assurer d'un arrêt au pied du signal.
On évite ainsi de découper les rails pour des "zones d'arrêt" dans les zones et un seul capteur à effet hall suffit pour détecter le train à l'endroit d'une balise.

Pour l'instant j'ai défini 2 types de balises :
- avant un signal
- avant un butoir
Mais on pourrait définir d'autres types. Par exemple une balise quand un train doit siffler (entrée de tunnel, passage à niveau, …).

3°) Autre excellente idée de Pierre : les bretelles.

Effectivement, la position de certains appareils de voie implique la position d'un autre appareil sous peine de déraillement.
Dans une bretelle, il y a deux positions :

L'une ou les tracés sont parallèles où il ne peut rien se passer du point de vue du gestionnaire (pas de rattrapage, de face à face, …) et l'autre position où des zones sont dans la continuité l'une de l'autre. C'est pour ça que j'ai ajouté à la ligne "bretelles" du JSON la position des 2 appareils de voie qui amène un problème à gérer au gestionnaire.

On remarque, au passage, que les 2 appareils de voie sont soit tous les 2 à droite ou tous les 2 à gauche dans une bretelle.
Il ne peut y avoir de bretelles qu'entre 2 appareils de voie ayant des lames mobiles. Donc, on serait tenté d'exclure, à priori, les sections et les croisements.
En fait c'est plus compliqué :

Cas de la section :

Il peut très bien y avoir une section entre les 2 appareils de voie et cela constituera quand même une bretelle si cette section est "courte".
Si une section est suffisamment courte pour qu'on ne puisse pas y mettre un wagon, cela ne pose pas de problème.
Si la section est plus longue, il faut pouvoir détecter un wagon sur cette section.
Si la section est suffisamment longue pour contenir un train complet, est-ce encore une bretelle ?

Cas du croisement :

Il est très fréquent qu'un petit croisement soit associé à 2 bretelles successives, permettant ainsi de passer d'une voie à l'autre dans les 2 sens.
La difficulté, en recherche automatique, c'est que, là, il faut chercher le voisin du voisin.
C'est une récursivité à un seul étage.
4°) Pour la partie aiguilles, j'ai précisé quelle était l'aiguille concernée dans les appareils ayant 2 aiguilles (TJS, TJD, triples).
"TJDa" et "TJDb" pour une TJD. "TJSa" et "TJSb" pour une TJS
"TripleGa" et "TripleGb" et "TripleDa" et "Tripleb" pour les triples.

5°) Pour la partie signaux, j'ai ajouté la liste des signaux affichables par un signal donné.
J'ai ajouté, pour ceux susceptibles d'afficher "RR", la liste et la position des aiguilles concernées dans ce cas.

Quant à la numérotation des signaux, il y a une lettre et un nombre.
- La lettre correspond au nom du signal hiérarchiquement le plus élevé (C, Cv, S)
- Le nombre est un incrément. Il y a 2 incréments : un pair et un impair.
Suivant la parité de la zone, on incrémente de 2 le bon incrément.

Au passage, comme un signal ne peut afficher C et Cv en même temps du fait que la deuxième ampoule du carré est l'ampoule du Cv (voir ci-dessous), j'ai tenu compte de cette particularité.

(https://www.locoduino.org/IMG/jpg/cibles_signaux_tous.jpg)

Dans le gestionnaire, il faudra également gérer le feu blanc (M) qui peut être clignotant.
Le feu M à l'origine de Z28 ne peut être que clignotant, de même que les deux feux de Z37.

(https://www.locoduino.org/IMG/png/reseaudb-f8-simplifie.png)

Je terminerai sur les signaux en disant qu'ils peuvent être visibles ou invisibles.
Un signal invisible est un signal qui est nécessaire au fonctionnement du gestionnaire, mais qui n'est pas forcément implanté sur le terrain, en particulier en zone de manœuvre où ce sont souvent des hommes qui, sur place, manipulent des drapeaux ou des lanternes.

J'ai mis un cercle vide pour les signaux qui, à mon avis, sont invisibles.
Le feu visible en Z46 sera traité avec les zones multiples, encore à faire.

6°) Je n'ai pas mis les trains dans le JSON. Pour l'instant, je ne sais pas quoi mettre.

7°) Concernant les itinéraires, c'est tellement rapide à calculer que je ne suis pas absolument convaincu que ce soit nécessaire de les calculer d'avance.
Il faut trouver une méthode qui permette de choisir un seul itinéraire quand il y en a plusieurs d'un point A à un point B.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 23, 2024, 06:34:53 pm
@ Denis

Tu fais des choix, de parité entre autre, avec une arrière pensée dessin du réseau. Je suis pas sur que cela soit la bonne façon.

Pour l'instant les zones du gestionnaire n'ont pas de sens, la clé "sens" qui apparait dans les zones  ne sert qu'a contrôler les changements de sens des trains sur la zone, c'est tout.

Les zones ont deux cotés, un coté pair et un coté impair. La seule contrainte est que lors d'un changement de zone, on passe d'un coté pair à un coté impair ou d'un coté impair à un coté pair. Ce nommage des cotés induit le nommage (pair/impair) des voisins, des signaux, des balises, … .

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 24, 2024, 10:05:05 am
@ Denis

Concernant les "parités", j'en ai parlé dans le post précédent.

Concernant les balises, oui il faut ajouter un type ("signal", "butoir", …).

Concernant les bretelles, les deux aiguilles d'une bretelle sont forcément dans deux zones distinctes, et ces deux zones sont contigues. La distance entre les deux aiguilles n'est pas trop grande. Le gestionnaire a besoin de savoir quelles sont les deux aiguilles d'une bretelle, et la position des aiguilles quand elles sont en continuité (ou l'inverse), dans la dernière version du gestionnaire (en Processing) c'est calculé automatiquement à l'initialisation du gestionnaire (mais c'est un peu compliqué).

Concernant les trains on ne devrait rien mettre dans le fichier json (j'en ai juste besoin pour les essais), cela doit se faire à l'initialisation du gestionnaire, comment? le problème reste ouvert.

Concernant les itinéraires, le calcul automatique des itinéraires à partir du point de départ et du point d'arrivé est tout à fait envisageable, mais cela nécessite des ressources (par exemple des structures de données) pas toujours facile à mettre en oeuvre sur un micro-contrôleur et il reste le choix à faire quand il y a plusieurs itinéraires possibles (un algorithme à proposer?).

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 24, 2024, 10:58:06 am
@ Pierre,

Sur le réseau de Dominique, j'ai bien respecté le fait que les zones impaires se suivent et les zones paires se suivent.
Donc, quand on suit un circuit, on change bien de parité du cote à chaque changement de zone, ce qui est ta condition à laquelle je souscrit parfaitement.
Il ne faut pas dessiner n'importe quoi et, là aussi, je suis bien d'accord.
En fait, nos points de vue sont parfaitement compatibles.

Bretelles : c'est dans le JSON que sont calculées les positions où elles sont en continuité. On n'a donc plus à le faire dans le gestionnaire.
Exemple :

    "a13" : {
        "type" : "aiguilleD",
        "bretelle" : ["droite", "a16"],
        "no" : 13
    }

A vérifier sur le réseau de Dominique : L'aiguille a13 à droite fait face à l'aiguille a16 à droite.

Il est certain que faire marcher un gestionnaire sur un microcontrôleur est extrêmement complexe car ça ajoute de contraintes de place et de temps de calcul. A ma connaissance, ce serait une première.

Choix des itinéraires :

Evidemment, à chaque fois qu'on va choisir deux points, le programme va nous sortir plusieurs itinéraires possibles techniquement.
1°) Il faut d'abord éliminer ceux qui font parcourir une zone paire dans le sens impair (et réciproquement), sauf si c'est une zone à 2 sens.
2°) Il faut éliminer les itinéraires qui font tout le tour du réseau
3°) Il est tentant de calculer le nombre de zones parcourues par chaque itinéraire et de prendre l'itinéraire qui a le plus petit nombre de zones. Mais je crains que cela nuise à la fluidité.
4°) Quand on demande à un programme deux fois le même calcul, il va fournir à chaque fois les même solutions dans le même ordre.
On peut alors numéroter les itinéraires, ce qui évite d'avoir à les décrire et remplacer une liste de zones par un "int".
Et regarder, "à la main" quel itinéraire on veut garder en fonction de l'origine et l'extrémité sélectionnés.

Exemple sur le réseau de Dominique :
Je veux aller de Z25 à Z30 :

Z25 (section) signal1 signal1
Z26 (triple droit) L0 a0 a gauche + a1 a droite TIV
Z27 (section) signal1 signal1 vitesse maxi 60 km/h TIV
Z29 (triple gauche) L0 a11 a droite + a9 a gauche TIV
Z30 (section) signal1 signal1
------------------------------------- FIN DE L'ITINERAIRE ---------------------------------------------------------- 3720 292
Z25 (section) signal1 signal1
Z26 (triple droit) L1 a0 a droite vitesse maxi 60 km/h RR
Z15 (TJD) L0 a2 a droite + a4 a droite vitesse maxi 30 km/h TIV
Z42 (aiguille droite) L1 a5 a droite vitesse maxi 30 km/h RR
Z14 (section) signal0 signal0 vitesse maxi 30 km/h TIV
Z43 (aiguille gauche) L1 a6 a gauche vitesse maxi 30 km/h RR
Z12 (TJD) L1 a7 a gauche + a8 a gauche vitesse maxi 30 km/h TIV
Z29 (triple gauche) L1 a11 a gauche vitesse maxi 60 km/h RR
Z30 (section) signal1 signal1
------------------------------------- FIN DE L'ITINERAIRE ---------------------------------------------------------- 3720 293
Z25 (section) signal1 signal1
Z26 (triple droit) L2 a0 a gauche + a1 a gauche vitesse maxi 60 km/h RR
Z44 (aiguille gauche) L1 a3 a gauche RR
Z28 (section) signal1 signal1 vitesse maxi 30 km/h TIV
Z29 (triple gauche) L2 a11 a droite + a9 a droite vitesse maxi 60 km/h RR
Z30 (section) signal1 signal1
------------------------------------- FIN DE L'ITINERAIRE ---------------------------------------------------------- 3720 294

Il trouve 3 itinéraires qui se trouvent avoir les numéros 292, 293 et 294 dans "_TOUS_ITI____.tsv"
Je décide (au pif, ici) de retenir l'ordre suivant, dans le JSON :
"itinéraires" : ["Z25", "Z30", 2, 1, 3]
Ce qui, dans mon esprit, veut dire :
Quand on demande Z25-Z30, on choisit l'itinéraire n°2. Si c'est incompatible avec un autre itinéraire existant à cet instant ou si une zone de cet itinéraire est occupée, on choisit ensuite le n°1. Et si c'est encore impossible on choisit n°3.

Cette notation est compacte, peut être taillée sur mesure. Si le programme sort 10 itinéraires, on peut n'en garder que 3, ...
A ce moment, on utilise dans mon éditeur JSON le bouton itinéraire qui ne donne que les itinéraires d'un point choisi et un autre point choisi.

La seule contrainte est qu'il faut le même programme de recherche d'itinéraires dans l'éditeur JSON et le gestionnaire.

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 25, 2024, 10:55:14 am
@ Pierre,

Pour pouvoir faire tourner une recherche d'itinéraires, il faut des connecteurs.
Dans mon éditeur graphique de TCO, je les repère par leur coordonnées X, Y.
Là, n'ayant pas de X, Y, je me suis rendu compte qu'il suffit que chaque connecteur ait un ID.
Le connecteur étant le point unique entre 2 zones mitoyennes, je mets cet ID dans les voisins, par un "int" en premier.

Exemple des zones Z22, Z23, Z24 et Z25 dans le réseau de Dominique :

            "Z22" : {
                    "nom" : "Z22",
                    "sens" : "impair",
                    "signI" : "C1",
                    "balI" : "B17",
                    "voisP" : [36,"Z35"],
                    "voisI" : [37,"Z24"],
                    "no" : 15
            },
            "Z23" : {
                    "nom" : "Z23",
                    "sens" : "impair",
                    "signI" : "C3",
                    "balI" : "B19",
                    "voisP" : [38,"Z35"],
                    "voisI" : [39,"Z24"],
                    "no" : 16
            },
            "Z24" : {
                    "nom" : "Z24",
                    "voisP" : [40,"Z25"],
                    "voisI" : [[37,"Z22","a18","gauche"],[39,"Z23","a18","droite"]],
                    "no" : 17
            },
            "Z25" : {
                    "nom" : "Z25",
                    "sens" : "impair",
                    "signI" : "C5",
                    "balI" : "B21",
                    "voisP" : [40,"Z24"],
                    "voisI" : [44,"Z26"],
                    "no" : 18
            },

Le voisI de Z22 a le connecteur 37 et on retrouve le connecteur 37 dans Z24 quand l'aiguille est à gauche.
Le voisP de Z25 a le connecteur 40 et on retrouve le connecteur 40 dans Z24 à la pointe de l'aiguille

Voilà
Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juin 25, 2024, 01:34:53 pm
@ Denis

Vous prendrez bien un "connecteur", non merci. Le gestionnaire json n'a pas besoin de connecteurs pour faire des recherches d'itinéraires, les informations présentes dans les voisins sont amplement suffisantes.

Accessoirement les noms des zones, des aiguilles, signaux, … ne sont pas utiles, c'était juste pour des mises au point et des essais.

Pierre
Titre: Re : Re : Projet partagé d'un gestionnaire de réseau
Posté par: trimarco232 le juin 25, 2024, 09:50:40 pm
(...)
3°) Il est tentant de calculer le nombre de zones parcourues par chaque itinéraire et de prendre l'itinéraire qui a le plus petit nombre de zones. Mais je crains que cela nuise à la fluidité.
Denis :P
bonjour , cette solution me va bien , et je pense que nos figurines , bien que toujours terriblement pressées , peuvent bien s’accommoder d'une milliseconde de traitement supplémentaire
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juin 26, 2024, 09:05:13 am
@ Pierre,

Quand on cherche des itinéraires, on parcourt un graphe et on va d'un nœud à un autre. Qu'on appelle les nœuds "connecteurs" ou autrement, cela ne change rien.
Après, que tu me dises que ça n'a rien à faire dans le JSON parce qu'on peut les calculer dans le gestionnaire, je l'entend parfaitement.
C'est d'ailleurs aussi le cas des bretelles, facilement calculables à partir des voisins dans le gestionnaire.

Il y a un problème de vases communicants : plus le JSON est petit, plus le setup grossit pour calculer les infos nécessaires au gestionnaire. Et, globalement, la place nécessaire à la description du réseau dans le gestionnaire est la même.

@ Marc,

A la SNCF, il y a une analyse des possibilités d'un grill de voie d'une gare bien en amont et certains sont choisis et pas d'autres.
En plus, il y a une priorisation dans le cas où plusieurs itinéraires sont possibles d'un point à un autre.

Je distinguerai 2 types de gares :

1°) Les gares "biceps", c'est à dire les gares qui ressemblent à un biceps (par exemple celle de Dominique, voir schéma dans les posts précédents) où les itinéraires sont TOUS INCOMPATIBLES 2 à 2. C'est le cas le plus fréquent sur nos réseaux. C'est très simple à gérer puisqu'il n'y a pas de choix.
Il n'y a qu'une seule façon d'aller de Z25 à Z28. Et c'est pareil pour chaque grill d'entrée.
Ta gare est aussi dans ce cas (c'est un 1/2 biceps).

2°) Les gares qui possèdent plusieurs diagonales et, là, la question se pose de choisir tel itinéraire ou tel autre en priorité. Ma gare est dans ce cas. J'ai une vision particulière de ce cas en mettant des "poids" aux appareils de voie. Je ne souhaite pas développer ici. Je l'ai déjà fait il y a quelques années. J'y reviendrai le moment venu.

Après, on peut parler "d'itinéraires" qui vont d'un point A à un point B quelconques et, en particulier ceux qui traversent des gares.
Mon gestionnaire sera dans ce cas. Mais j'ai bien conscience que ça ne correspond à rien dans la réalité. C'est une extension de la notion d'itinéraire.
Et, là, évidement, il y a plein de priorisations à faire.

@ tous,

Je me pose des questions sur la numérotation des signaux.

Suivant l'auteur, j'ai 2 versions :
1°) les signaux pairs ont un numéro pair et les signaux impairs des numéros impairs.
2°) Les signaux de voies paires ont des numéros pairs et les signaux de voies impaires on des numéros impairs.
La notion de "voie" n'est, pour l'instant, pas dans le JSON.

Le 1°) est très facile à programmer.
La notion de "voie" ne sert pas dans le gestionnaire (à mon avis). Mais chaque signal a un nom (et donc un numéro) et s'il faut connaitre le nom de la voie pour attribuer un nom au signal, ça se complique... :o

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juillet 01, 2024, 11:59:54 am
@Denis,
Je suis en train de parcourir l'ensemble de mon réseau avec ton éditeur.
D'abord il est facile de passer d'une zone aux voisines en cliquant sur la flèche à une extrémité : c'est un gros progrès de l'interface. Bravo !

J'ai "chargé" le fichier JSON du dossier d'entrée de Dominique (ou fallait-il charger le fichier de sortie ?)

J'ai quelques questions que je pose ci-dessous (si d'autres arrivent, je les ajouterai dans cette même réponse en mode correction):

1) les butoirs ne sont pas matérialisés sauf par le même numéro de zone que la zone concernée. On s'en rend compte en cliquant sur la flèche : ça ce fait rien. Ce qui fait que la flèche représentée à la place du butoir (et le champ de saisie de la zone voisine) ne servent à rien et pourraient être remplacés par un symbole de butoir.

2) la zone Z26 ne semble pas conforme à la réalité, l'aiguille a0 n'est pas représentée entre A et C (en fait elle coïncide avec le point A). Je comprend qu'on est pas dans une forme similaire à une TJD mais là c'est bizarre. Peut-être aurait-il fallu faire partir la pointe un petit peu plus loin du point À ? La matérialisation du “Y” aurait été plus claire.

Les méthodes dans mon gestionnaire sont actuellement :
Zone* Z26::suivantePaire() { return z25; }
Zone* Z26::suivanteImpaire() { return selonAiguille(a0,selonAiguille(a1,z27,selonAiguille(a3,NULL,z44)),selonAiguille(a2,NULL,z15)); }
à comparer avec :
"vois1" : [["Z25"]],
"vois2" : [["Z27","a0","gauche","a1","droite"],["Z15","a0","droite"],["Z44","a0","gauche","a1","gauche"],
Mais cette notation semble plus intuitive car elle décrit pour chaque voisin la combinaison d'aiguilles à traverser et leur orientation.

... je continue mes explorations...et je vais comparer avec les propriétés des zones codées en C++ dans mon code.
C'est très lent à cause de multiples sollicitations toutes prioritaires, mais je vais y arriver !
Bon courage
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juillet 02, 2024, 11:08:12 am
@ Dominique,

Je viens de sortir la V10 de mon programme qui tient compte des remarques de Pierre et les tiennes.
Il y a des points à éclaircir, visiblement.

Le but de ce programme est de créer un fichier JSON le plus petit possible tout en recueillant toutes les infos nécessaires à un gestionnaire. D'où quelques aller-retour avec Pierre sur les infos vraiment nécessaires et celle qui ne le sont pas.
Donc, le JSON qui était dans "Fichiers d'entrée Dominique" n'est pas le bon et, logiquement, je l'ai carrément supprimé.

Etape 1 : on fait un plan de réseau à la main avec des flèches pour connaitre le sens principal de circulation d'une section de voie.
Ton réseau a déjà été publié et je n'y reviens pas.
A ce moment, on n'a rien, aucun fichier, juste un dessin.

Etape 2 : on utilise mon éditeur graphique pour rentrer les infos descriptives du réseau en se conformant au dessin.
Petit à petit, un objet "Zone" se remplit avec toutes les infos qu'on a rentré.
En phase de développement, je sauve toutes les zones dans une table "Zones", mais elle disparaitra quand j'aurais terminé.
Il est quand même intéressant de comparer la table "Zones" dans les fichiers d'entrée et celle dans les fichiers de sortie.
On voit clairement que la table initiale est quasi vide car elle ne contient que les informations réellement rentrées par l'utilisateur.

Etape 3 : une fois que les infos manuelles sont rentrées, on appuie sur le bouton "Analyse" et, un peu plus d'une seconde après, toutes les cases nécessaires sont automatiquement remplies. La différence est assez impressionnante.

Etape 4 : En appuyant sur le bouton "Sauve", on sauve la table "Zones", celles des itinéraires, toutes choses nécessaires au développement, mais sans intérêt par la suite.
Et c'est aussi à cette étape qu'est généré le fichier JSON qui est, fondamentalement, un fichier texte, mais structuré.

Voyons maintenant tes questions :

J'ai fait un symbole "Butoir" à la place d'une flèche.

La Z26 n'est pas une TJD, mais est dessinée comme 2 aiguilles qui se suivent (il y a 2 moteurs). Il y a 2 versions : tripleG où la première aiguille est à gauche (Z29) et tripleD où la première aiguille est à droite (Z26)

Mais, effectivement, tu es en Fleischmann Picollo et ton aiguille triple est parfaitement symétrique, avec les 2 aiguilles l'une au dessus de l'autre.
Comme il y a 2 moteurs, on va dire que le premier moteur s'appelle a0 et il a 2 positions (gauche et droite) et le deuxième moteur s'appelle a1 et il a, lui aussi, 2 positions (gauche et droite).

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juillet 02, 2024, 04:49:06 pm
@Denis,
J'ai chargé cette fois le fichier de sortie "_JSON________.tsv" là je dois dire que j'ai parcouru tout le réseau conformément à ma représentation (image). Les zones s'affichent dans avec la bonne orientation (gauche/droite oui haut/bas). C'est très pratique à suivre.

Je t'envoie des remarques (que j'espère constructives) par mail.

Amitiés
Dominique

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juillet 10, 2024, 04:40:51 pm
Voilà la V11

@ Dominique,

J'ai tenu compte de tes remarques :

1°) Quand on modifie quelque chose, l'analyse est plus précise, propose plus de choix, eux-mêmes plus faciles.

2°) Le bouton "Annule" est maintenant efficace et on a plus de 'x' pour sortir.

3°) La recherche d'itinéraires donne les résultats dans une fenêtre (ou plusieurs, si c'est long) et on a plus les cote 0 et 1, mais A et B, comme sur les dessins des sections.
A est l'origine et B l'extrémité. C'est pareil que sur le schéma initial.

Il reste 2 choses importantes à faire :


1°) Gérer les zones multiples

2°) Ne plus sauver le fichier Zones, ce qui impose de récupérer les infos directement dans le JSON, comme Pierre le fait depuis longtemps. Et ça resservira dans le gestionnaire.

@ Pierre,

Si j'ai bien compris, tu vas mettre le gestionnaire sur un processeur en C++ et continuer à gérer le TCO en Processing.
Et échange des infos via un "tuyau" ?

A suivre
Denis  :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juillet 10, 2024, 05:14:33 pm
@ Denis
Citer
Si j'ai bien compris, tu vas mettre le gestionnaire sur un processeur en C++ et continuer à gérer le TCO en Processing.
Et échange des infos via un "tuyau" ?
Je préfère, et de loin, écrire et tester le gestionnaire en Processing.
De temps en temps il y aura une version en C++. Pour cette version j'utilise des tubes de communication juste pour communiquer avec le TCO en Processing. Ces tubes seront remplacés à terme par un ou des bus (CAN, …) pour une version sur micro-processeur.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juillet 10, 2024, 06:47:34 pm
@ Pierre

Citer
Je préfère, et de loin, écrire et tester le gestionnaire en Processing.
Ah oui !!  ;D
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le juillet 21, 2024, 06:30:21 pm
Dans les versions actuelles du gestionnaire json, lors de son initialisation le gestionnaire envoie un message approprié au TCO et d'un "coup de baguette magique" les aiguilles se retrouvent dans la bonne position et les trains dans leur positions initiales.

Bien évidemment avec un réseau réel cela ne peut pas se passer comme cela. Lors de son initialisation le gestionnaire à besoin de plusieurs informations :
- la position de toutes les aiguilles
- la connaissance de toutes les zones occupées, avec des infos sur les trains dedans
- éventuellement l'état des balises

Concernant la position des aiguilles, pour le gestionnaire, la solution idéale est de pouvoir obtenir leurs positions mais cela nécessite un dispositif approprié sur les moteurs d'aiguille, alternativement le gestionnaire peut positionner systématiquement toutes les aiguilles, mais cela pose problème pour les aiguilles des zones occupées où il y a normalement des trains.

Concernant les zones il est assez facile d'obtenir leurs états (libre ou occupé), mais quasiment impossible d'obtenir des infos sur les trains qui les occupent.

Pour les balises c'est un peu comme les zones.

Une solution partielle à tous ces problèmes consiste à sauvegarder les informations lors de l'arrêt "normal" du gestionnaire et de les reprendre lors de son redémarrage. Il reste quand même quelques problèmes :
- lors d'un arrêt "anormal" du gestionnaire (plantage, coupure de courant, …) les infos sauvegardées ne sont pas à jour
- des trains ont pu êtres enlevés ou ajoutés au réseau entre l'arrêt et le redémarrage du gestionnaire
- il faut pouvoir enlever ou ajouter un train pendant le fonctionnement normal du gestionnaire

Les sauvegardes peuvent se faire de différentes façons :
- avec un ordinateur ou un mini-ordinateur sur un fichier
- avec un micro-contrôleur sur carte SD ou en mémoire non volatile (eeprom) ou autre

Un dispositif de dialogue doit être mis en place pour les cas ne relevant pas des sauvegardes (ajouts de trains, …).

J'attends vos commentaires et vos suggestions.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juillet 22, 2024, 09:41:15 am
Bonjour Pierre59,

Voilà un sujet fort intéressant 🤔 que je vais développer ci-dessous en ce qui me concerne.

Juste le temps de trouver le temps avec les petits enfants à la maison …

Donc me revoilà !

Citer
Concernant la position des aiguilles, pour le gestionnaire, la solution idéale est de pouvoir obtenir leurs positions mais cela nécessite un dispositif approprié sur les moteurs d'aiguille, alternativement le gestionnaire peut positionner systématiquement toutes les aiguilles, mais cela pose problème pour les aiguilles des zones occupées où il y a normalement des trains.
J'ai essayé ces deux méthodes :
1) mon circuit de commandes d'aiguilles reçoit les commandes du gestionnaire et envoie les positions des aiguilles  au gestionnaire du réseau via le bus Can. Il représente une seule entité sur le bus Can (une carte Mega). Au démarrage il peut envoyer toutes des positions des aiguilles qui correspondent alors aux positions des boutons de commande sur le TCO car il ne connait pas les positions réelles des aiguilles. Le TCO positionne alors toutes les aiguilles conformément aux positions des boutons à son initialisation. L’inconvénient comme le dit Pierre est qu’un train peut occuper une aiguilles à ce moment là et provoquer un court-circuit ou une déraillement. J’ai donc abandonné cette méthode.
2) mon gestionnaire de réseau définit une position de départ de toutes les aiguilles selon un état de départ du réseau idéal (les trains bien arrêtés dans les gares ou les voies de garage). Et il commande les aiguilles en conséquence via le bus Can et le Mega de commande d’aiguilles. En général ça correspond à la position des trains et des aiguilles quand on arrête le réseau, mais rien n’est garanti. En général les petits enfants aiment bien cette rêgle.

Citer
Concernant les zones il est assez facile d'obtenir leurs états (libre ou occupé), mais quasiment impossible d'obtenir des infos sur les trains qui les occupent.
En effet mon TCO manuel (leds d'occupations et de positions d'aiguilles) reflète les états des zones et transmet ces états au gestionnaire via Can.
Pour les identifications des trains c'est plus délicat.
Avec le recul et sachant maintenant qu'il est facile d'utiliser Railcom avec Labox (grâce à Lebelge2 et nous allons tester et valider cela), à condition de posséder des décodeurs compatibles ce qui devient le cas général, et de capteurs Railcom dans les zones les plus importantes (gares et certains zones importantes), la solution Railcom est la meilleure solution pour identifier les trains en association avec une description des trains (type, longueur, etc..).

En ce qui me concerne, n'ayant pas d'équipements Railcom, j'ai placé quelques détecteurs RFID dans les zones proches des gares et les trains équipés d'un timbre RFID (tous) sont détectés à leur passage.
Mais ce n'est pas aussi universel que Railcom car le RFID est un peu plus lent et certains trains ne sont pas détectés au démarrage du réseau.
J'avais essayé une technique de détection automatique des trains au démarrage qui reposait sur des détecteurs de présence peu sensibles (de telle sorte qu'un train à l'arrêt ne soit plus détecté, seuls les trains en mouvement étant vus). Cette technique consistait à faire bouger chaque trains, l'un après l'autre, en envoyant une commande de vitesse en avant ou plutôt en arrière, le temps de récupérer la détection de zone où il est, puis de l'arrêter, voire le faire repartir en sens inverse avec la même vitesse et le même temps de roulement.
En fait ça marche bien mais cela change beaucoup la gestion des occupations dans le gestionnaire et le suivi des trains.

En définitive, je me contente maintenant de faire rouler mes trains en mode manuel jusqu'à ce qu'ils soient détectés par une capteur RFID, ce qui initialise ou réinitialise le suivi du train. Je le vois lorsque le train s'arrête bien en gare ! Sinon je le laisse rouler encore un peu, il finit par être bien suivi. Mais mon algorithme de suivi des trains est plus compliqué.
Cette méthode s'applique aussi à la pose d'un nouveau trains. Le problème dans ce cas est que le nouveau train n'a pas de suivi correct avant son identification et son initialisation, ce qui perturbe un peu le reste du réseau. Je laisse les trains arrêtés en gare en attente par sécurité.
Pour le retrait, je n'ai pas de solution. Sauf a prévoir une interface quelque part.

Citer
Les sauvegardes peuvent se faire de différentes façons :
- avec un ordinateur ou un mini-ordinateur sur un fichier
- avec un micro-contrôleur sur carte SD ou en mémoire non volatile (eeprom) ou autre
En ce qui me concerne, j'ai banni l'ordinateur et je n'ai que des modules sur le bus Can.
Le plus simple serait l'enregistrement sur carte SD (quand elle est usée on en met une autre !).
Dans la foulée il est possible d'enregistrer d'autres données de suivi, de statistiques, de débugging qui peuvent être exploitées sur ordinateur par la suite.
Avec le bus Can, il y a plein d'autres possibilités.

Enfin, il reste le cas des itinéraires qu'il faut commander quelque part, sur le TCO en principe. Ces commandes peuvent résoudre quelques un des problèmes cités au dessus (pose et retrait de trains).

J'aurai d'autres commentaires plus tard...
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juillet 22, 2024, 11:28:47 am
@Pierre,

Beaucoup de questions très intéressantes.

Je distinguerai le cas normal du cas "plantage".

Il faut mettre en place une procédure simple de description d'un train :
- quelle loco (son ID dans une base locale) et son CV3 si on utilise le DCC.
- quels wagons/voitures. Un ID aussi qui, entre autres, donne la longueur qui sera nécessaire si on utilise des trains virtuels.
- La ou les zones occupées quand on pose un train.

On doit pouvoir mémoriser cette composition dans une base locale. C'est utile si on utilise souvent la même composition ou suite à un plantage.
En particulier, dans ce dernier cas, on doit pouvoir simplement dire "Composition ID xx sur les zones Zxx et Zyy".

Je pense qu'il n'est pas nécessaire de mémoriser sur un support externe la position des trains, ni en temps réel, ni à la fin d'une session où on retire les trains pour ne pas qu'ils se couvrent de poussière.

Concernant la position des aiguilles, il peut être utile de la mémoriser, à la fin d'une session, sur un support externe. Mais pas en temps réel.
On a ainsi, à l'allumage d'une nouvelle session, une position "plausible" des aiguilles au TCO.

Si on commande les aiguilles avec un moteur et une vis sans fin, la position reste stable et ne va pas bouger "toute seule". C'est aussi vrai pour une commande par servo.
Mais avec une commande par solénoïde, on n'a aucune garantie que la position mémorisée sera vraiment celle du terrain.

Dans mon gestionnaire, je raisonne comme dans les vrais trains, c’est-à-dire que le conducteur monte dans son train avec une feuille de route : il a toutes les étapes et sa destination.
J'impose à chaque train de choisir un parcours précis qu'il choisit au départ. Il y a donc la position de toutes les aiguilles.
Donc, soit au démarrage, soit suite à une panne, il faudra choisir un itinéraire, ce qui mettra les aiguilles dans la bonne position, même si elle est fausse au départ au TCO. On commencera évidemment, suite à une panne, par le train qui est à cheval sur des aiguilles.

En fait, ce qui pose problème, c'est de lancer un train sans destination précise et de modifier les aiguilles "à la volée". En effet, on se fie alors à la position affichée au TCO qui peut être fausse.
Et comme le gestionnaire raisonne sur la position au TCO, on ne peut pas éviter les accidents.

Denis  :P
PS : j'ai trouvé une solution pour le problème que tu as soulevé concernant les limites de garage franc.
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le juillet 22, 2024, 12:20:12 pm
au cas où vous ne l'ayez pas vue, j'ai complété ma réponse plus haut !

J'ajouterai simplement que j'ai toujours privilégié les conduites manuelle en priorité sur les conduites automatiques :
- les commandes manuelles des aiguilles vs les commandes via les itinéraires
- les commandes individuelles des trains par potentiomètre vs les commandes d'arrêt et de ralentissements par le gestionnaire (le fait de toucher le potentiomètre relance le train à la consigne du potentiomètre - mais cela peut changer grâce à un paramètre de configuration).

rappel de mes modules :
Centrale DCC :
(http://www.locoduino.org/IMG/jpg/face_avant-traction.jpg)
Commandes aiguilles et états zones et aiguilles :
(http://www.locoduino.org/IMG/png/montcoendur.png)
Gestionnaire réseau : une simple carte DUE avec interface Can et le TCO graphique est encore en chantier (suite à la panne de l'écran graphique 5", l'occasion de passer en 7" - mais je rêve de trouver un superbe et grand écran OLED, provenant d'un tableau de bord de voiture).


En ce qui concerne la poussière, j'utilise du papier de soie (comme celui qui sert aux bouquets de fleurs) qui est très léger, pour couvrir mon réseau pendant les arrêts prolongés.
Une partie de mon réseau (devant la gare) se trouve au dessous d’un velux qui génère un grand nombre de cadavres d’insectes volants. L’aspirateur sert souvent.

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le juillet 23, 2024, 07:47:51 am
@ Pierre,

Dans ton post #411 du 05/05/24, tu soulèves l'intéressant problème du garage franc.

J'avoue qu'à la SNCF, je ne sais pas comment c'est géré électriquement.
La seule chose visible, c'est une marque blanche au sol (une traverse peinte en blanc, un bloc béton peint en blanc, …). Avec du personnel sur le terrain, c'est jouable. On voit si on dépasse ou pas.
Mais nos petits trains n'ont pas de personnel au sol…

Je propose donc de faire la coupure plus loin, suivant le schéma  :

(https://www.locoduino.org/IMG/jpg/zone_de_garage_franc.jpg)

Les véhicules dessinés sont à bogie car c'est ceux-là qui "dépassent" le plus.
J'entends par "dépassement" la distance entre le bogie côté tampon et le bout du tampon. En gros, 3 cm, à vue de nez.
Donc, on ne fait pas la coupure à l'extrémité de l'aiguille, mais 3 cm plus loin.

Ainsi, si le véhicule avance un peu, il se trouve électriquement sur la zone de l'aiguille et empêche la création d'un itinéraire sur l'autre voie ou empêchant la destruction de l'itinéraire si on ne va pas assez loin sur la zone hors aiguille.

Jusque-là, c'était évident.

Mais on ne peut pas raisonner ainsi si plusieurs aiguilles se suivent.
La dernière zone d'un itinéraire est à la fois occupée électriquement et occupée par l'itinéraire.
Lorsque le train avance, elle devient à la fois inoccupée électriquement et disparait de la liste des zones de l'itinéraire.

Ce que je propose, c'est d'agir en 2 temps :

La zone devient inoccupée électriquement, tout en restant occupée par l'itinéraire.
Elle ne quittera la liste des zones de l'itinéraire que quand on aura 2 zones d'appareils de voie consécutives inoccupées électriquement.
On a ainsi un décalage d'une aiguille entre l'occupation électrique et l'occupation par un itinéraire. Comme l'occupation par un itinéraire bloque la création d'un autre itinéraire utilisant cette aiguille, on a bien une distance supérieure à 3 cm tout le temps, même si on perd un wagon.

Denis :P
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le septembre 19, 2024, 10:44:52 am
Voici une nouvelle version du gestionnaire expérimental json en C/C++. Beaucoup de bugs ont étés éliminés, mais il en reste encore. Comme la précédente version, cette version est prévue pour tourner sur un ORDINATEUR, elle fonctionne comme la version en Processing (Java) en utilisant un TCO en Processing pour faire les tests.

La version Processing et cette version C/C++ sont quasiment équivalentes, mais il y a quelques différences entre la version Processing et la version C/C++ (dans le but de préparer la version tournant sur Arduino), voici les changements de la version C/C++ :

- le transit souple n'est pas encore mis en oeuvre (il faut juste traduire le code de Java vers C/C++ et tester)

- des "bus" ont étés introduits, le gestionnaire communique avec le réseau, le TCO, les manettes, la centrale (box), … par un ou plusieurs "bus", ces bus peuvent êtres très variés : ethernet, wifi, I2C, USB/série, CAN, … . Pour l'instant les messages comportent tous trois octets et ne sont pas répétés (on peut envisager des codes de détection d'erreurs comme un CRC, voire un numéro de message).

Pour passer à une version Arduino il va falloir faire quelques adaptations :

- la bibliothèque json utilisée existe sur Arduino (c'est pour cela quelle a été choisie) on pourra supprimer l'onglet et utiliser un "include" à la place (le changement de bibliothèque a représenté le plus gros du travail pour passer de Processing à C/C++)

- remplacer les structures de données, genre "vector", par des versions adaptée à l'Arduino et faire attention à la gestion mémoire

- choisir le ou les bus et les implémenter

- régler les problèmes d'initialisation du gestionnaire comme il a été discuté dans le post n° #461 et les suivants de ce fil

- prévoir un moyen de dialogue avec le gestionnaire pour l'affichage de ses messages et l'obtention des informations sur les trains, voir aussi le post n° #461 à ce sujet

- choisir où mettre le "fichier" json, sur carte SD ou en mémoire RAM ou FLASH (PROGMEM)


Les fichiers joints sont tout à fait fonctionnels, mais assez difficiles à mettre en oeuvre, c'est juste une version avant de passer à l'Arduino.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Thierry33 le mars 07, 2025, 05:32:50 pm
Bonjour,

J’ai presque tout lu, pas tout compris, mais très intéressé par le sujet.
Et puis pouf, 19 septembre 2024, plus rien.
Trop compliqué, peu d’intérêt, en cours de finition?

Thierry 33
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 07, 2025, 06:22:03 pm
Bonjour,

Et encore, tu es gentil, moi, je n'ai plus écrit depuis le 23 juillet... ;)

Je n'ai pas abandonné, loin de là.
 
Depuis le mois d'août, j'ai développé, quand j'avais le temps, testé, re-testé, modifié, simplifié, dans le but de générer un fichier JSON et un TCO avec le minimum d'information au départ.
J'estime avoir passé 4 mois de temps plein sur ce programme depuis le mois d'août.
Aujourd'hui, j'ai encore supprimé un bug qui m'avait échappé.
Je préfère n'écrire que quand je n'en trouverais plus.
Après, il faudra qu'on se mette d'accord avec Pierre sur le contenu définitif du JSON qui deviendra le JSON Locoduino.

Pierre, de son côté, s'est occupé de "l'autre côté du JSON", c'est à dire du gestionnaire.

J'ai quasiment fini le topo qui présentera ça.

Pour faire patienter, voici le TCO que mon programme calcule tout seul à partir de, finalement, très peu d'infos demandées au modéliste.
En PJ :
1°) le TCO avec toutes la signalisation calculées en fonction du réseau
2°) le fichier de départ, celui qui recense la totalité des infos que le programme ne peut pas deviner (le nom des zones, des aiguilles, de la présence ou non d'un signal, ...) 6 Ko !
Pour info, il faut l'ouvrir avec Excel (ou un tableur), comme tout fichier .tsv (Tabulation Separated Variables)

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 10, 2025, 05:02:29 pm
POST DU 10/03/25 PARTIE 1/2

Bonjour à tous,

Je reprends le fil après 4 mois de travail. Mon programme est passé de la version 9 à la version 20 !
De très nombreuses choses ont évolué et le JSON est complet, zones multiples comprises. C'est cette dernière fonction qui a été la plus complexe.
Il y a même un TCO à partir des éléments actuels. C’est nécessaire pour passer au gestionnaire.
C'est un TCO schématique, type TCO physique avec des boutons et on ne sera pas obligé de représenter tout le réseau à l’échelle, comme avec mon précédent TCO. On pourra mettre les éléments où on veut.
Mes recherches ont porté sur les infos minimales nécessaires pour décrire un réseau. Tout ce qu'un programme ne peut pas deviner seul. Pour le reste, c'est à lui de compléter…
Pour l’instant, ce qui fonctionne, c’est une description du réseau à partir de dessins schématiques et quelques infos demandées à l’utilisateur (le nom de la zone, de ses voisins, de la présence ou non de signaux, de ralentissements, de longueurs, …).
On rentre ces quelques infos, on appuie sur "Sauve" et le JSON est automatiquement créé !!

LEXIQUE :

En informatique, on doit être extrêmement précis dans les libellés et je vais commencer par un lexique, de difficulté croissante, pour qu’on soit sûrs qu’on parle tous de la même chose.
Et ça donnera aussi une idée de tout ce qu'on doit prendre en compte pour créer un gestionnaire.

ELEMENT :

Un élément, c'est ce qu'on achète dans le commerce : un rail, un aiguillage, …

ZONE :

Une zone, c'est le plus petit ensemble d'éléments avec une détection de présence par consommation de courant. Il y a 2 types de zones : les sections et les appareils de voie.

SECTION :

Une section est une zone composée uniquement des éléments suivants : rail droit, rail courbe, rail flexible.
La section est le seul type de zone à pouvoir posséder et gérer des signaux.
APPAREIL DE VOIE :
Un appareil de voie, c'est tout ce qui n'est pas dans une section : aiguillage, TJD, …
Un appareil de voie ne peut pas posséder de signaux.
Mais on verra dans les "zones multiples" une méthode pour leur en affecter quand même.
Les appareils de voie sont à la SNCF de 2 types : les traversées et les branchements.
Pour nommer un appareil de voie, on est libres, mais avec 2 contraintes :
Ne doit pas démarrer par "Br" ou "Su" (voir plus loin pourquoi).

TRAVERSEE :

A la SNCF, on appelle "traversée" ce que les modélistes appellent "croisement".
Et, ainsi, on comprend mieux pourquoi une TJS s'appelle "Traversée Jonction Simple" puisque composée d'une traversée et d'une jonction et la TJD, une "Traversée Jonction Double" puisque composée d'une traversé et de 2 jonctions.
Bien plus qu'un problème de vocabulaire, la traversée pose en gestion des trains des problèmes tout à fait spécifiques.
Je garderai donc le terme de "traversée" pour la suite pour désigner ces 3 éléments liés.
Il y a un cas particulier lié à la traversée simple.
Elle n'a aucun moteur, tout est fixe, mais il y a quand même 2 positions liées à l'alimentation des rails. Il y aura donc une position "gauche" et "droite", par analogie aux aiguilles.

BRANCHEMENT / AIGUILLAGE / AIGUILLE :

Le "branchement", c'est le terme SNCF pour ce que les modélistes appellent "aiguillage"
Je garderai le terme "aiguillage" ou "aiguille", ce qui ne pose pas de difficulté ici.
Une aiguille peut être prise "en pointe", c’est-à-dire que, dans ce cas, on peut lui affecter plusieurs directions ou "en talon" où il n'y a qu'une seule direction possible : vers la pointe.
Une aiguille a une position "gauche" ou "droite" dans le JSON et pour le gestionnaire. Cette position est indépendante du fait qu'il puisse y avoir une position "tout droit" ou "dévié".
Les termes "gauche" et "droite" sont universels, même dans des aiguilles symétriques, enroulées et même pour la traversée simple (voir ci-avant).
LAMES :
Les appareils de voie ont des éléments mobiles appelés "lames".
J'utiliserai ce terme pour designer les différentes positions des appareils de voie.
Une aiguille a "lames = 0" quand on va à la première position (en général "tout droit")
Une aiguille a "lames = 1" quand on va à la deuxième position (en général "dévié")
Sur le TCO, c'est la valeur de "lames" qui permettra de dessiner la position effective des lames de l'appareil de voies.
Pour une TJD, on aura 4 positions, de 0 à 4, pour une TJS, 3 positions, etc…

CANTON :

Un canton, c'est une ou plusieurs zones qui commencent et/ou terminent par un signal.
Il peut y avoir des cantons unidirectionnels qui n'ont qu'un signal à une extrémité et des cantons bidirectionnels avec un signal à chaque extrémité.
Il faut bien distinguer les zones et les cantons. Ils ne sont pas du tout synonymes.
Par exemple, une aiguille peut être une zone, avec sa détection de présence spécifique, mais ne peut pas être un canton car il n'y a pas de signal.
Un canton peut être constitué de 3 zones. L'inverse n'a pas de sens.
L'ambiguïté vient du fait que, très souvent, on explique le cantonnement par un exemple en pleine voie où le canton n'a qu'une zone.

CANTONNEMENT :

Le cantonnement est un système de gestion des trains qui permet l'espacement de 2 trains qui se suivent de façon à leur éviter un rattrapage ou une "prise en écharpe" (2 trains arrivant en talon simultanément sur chaque branche d'une aiguille).
Un système de signalisation complexe à respecter scrupuleusement pour éviter tout problème.

ZONE SIMPLE :

C'est ce que vous aurez à décrire dans ce programme. Soit une section, soit un appareil de voie.
Le nom d'une zone simple peut être quelconque, à une exception près : il ne doit pas comporter de "/", caractéristique des zones multiples (voir plus loin).

PARITE :

La parité est une donnée intrinsèque de la zone.
Quand on trace un trait sur une feuille, il y a une origine et une extrémité.
Dans mon programme, l'origine s'appelle "A" et l'extrémité "B".
Pour une section, le côté pair est du côté "A" et le côté impair du côté "B".
Pour une aiguille, le côté pair est du côté "A" (la pointe) et les côtés impairs les côtés "B", "C", "D" (les talons).
Pour une traversée, les côtés "A" et "C" sont du côté pair et "B" et "D" les côtés impairs.
Pour une section, il y a toujours une parité : c'est la direction principale de déplacement lorsque la section peut être parcourue dans les 2 sens.
A noter que, pour une section unidirectionnelle, le signal éventuel sera toujours côté "B".
La parité permet de définir des voisins pairs et des voisins impairs.

VOISINS PAIRS / IMPAIRS :

Cette caractéristique a été proposée par Pierre au début de ce fil et elle est d'une puissance que je n'imaginais pas au départ. C'est vraiment une excellente idée.

CONNECTEUR :

Un connecteur est l'unique point commun entre 2 zones voisines.
Je les utilise dans la recherche des itinéraires. Mais Pierre a dit qu'on n'en avait pas besoin et, au début, ça m'a rendu perplexe, tant ils me paraissaient nécessaires.
Puis j'ai remarqué qu'on pouvait effectivement s'en passer grâce à la puissance de la notion de voisins. Quand j'en serai à la phase optimisation, je reverrais ma recherche d'itinéraires en utilisant les voisins.
La recherche d'itinéraires étant la partie la plus complexe de mon programme, je démarrerai prudemment…
En développant le TCO (voir plus loin), j'ai, à nouveau eu besoin des connecteurs pour localiser les coupures de rail. C'est donc plus compliqué que prévu de s'en passer.

ZONE MULTIPLE :

C'est un ensemble de zones simples dont le nom comporte un "/".
Exemple : 3 zones simples "Z1/0", "Z1/1" et "Z1/3" deviendront la zone multiple "Z1".
Le côté pair d'une zone multiple est le côté de "/0" ("Z1/0" dans l'exemple précédent).
On peut mélanger des sections et des appareils de voie, sans limite.
En ajoutant une section de longueur nulle à un appareil de voie, on peut ajouter un signal à un appareil de voie dans la zone multiple ainsi créée.
Mais il doit exister une caractéristique essentielle dans une zone multiple : un pivot unique.

PIVOT :

C'est un point réel ou virtuel unique qui sépare en deux une zone multiple.
Une zone multiple peut être vue comme une étoile, avec le pivot en son centre.
La zone multiple a des voisins pairs et des voisins impairs.
Il doit n'y avoir qu'un seul chemin entre un voisin pair et le pivot.
Il doit n'y avoir qu'un seul chemin entre un voisin impair et le pivot.
Le pivot est le point de passage obligé entre un voisin pair et un voisin impair.
Quand il y a une traversée dans une zone multiple, le pivot est virtuel et est en son centre.
Quand il n'y a pas de traversée, le pivot est réel (c'est un connecteur) et se trouve là où 2 aiguilles se touchent par leurs pointes (à une section intermédiaire près).

ITINERAIRE :

C'est la ou les façons de transiter d'une section à une autre section.
Un itinéraire démarre et finit obligatoirement par une section parce qu'il va d'un signal à un autre signal.
A la SNCF, les itinéraires sont gérés par des postes d'aiguillages.
Un poste d'aiguillage a une zone d'action qui lui est propre dans laquelle il gère tous les appareils de voie, les occupations et la signalisation.
Une gare peut avoir plusieurs postes d'aiguillages si elle est très grande.
Et donc plusieurs gestions d'itinéraires possibles pour une seule gare.
Mais l'inverse peut être vrai aussi.
Un poste d'aiguillage peut aussi gérer plusieurs petites gares.
Par exemple, à Reims, on a longtemps géré, en conduite centralisée, les 7 gares entre Reims et Epernay en voie unique sur 23 km.
Cette caractéristique m'a incité à étendre la gestion d'itinéraire à tout le réseau. C'est un choix.
Mon programme calcule tous les itinéraires possibles d'un réseau. C'est nécessaire pour la définition automatique des zones multiples. Il sort même la liste dans un fichier.
A part en développement, afficher ce fichier n'a qu'un intérêt anecdotique.
On doit pouvoir enregistrer les itinéraires, même si, au moment de l'enregistrement, ils ne sont pas réalisables. C'est le déplacement des trains qui, en libérant des zones, permettra alors de débloquer les itinéraires automatiquement.
Pour moi, l'itinéraire, c'est bien plus que le simple fait de faire bouger plusieurs appareils de voie avec un seul bouton. Il y a, en plus de la gestion des occupations, des priorités, des enregistrements, …
Les itinéraires sont très rapides à calculer. Je propose de les faire "à la volée" dans le gestionnaire plutôt que de prendre de la place dans le JSON.

ZONE DE GARE :
 
La définition des zones de gare est du ressort de l'utilisateur, aidé par le programme.
Il faut définit les zones d'approche, les zones de sortie et au moins une zone dans la gare. Le programme se charge d'attribuer la caractéristique de "gare" aux zones intermédiaires.
Dans le cas d'une grande gare, c'est appréciable de ne pas avoir à spécifier "fait partie de la gare" à toutes les zones.
En particulier, il existe des zones d'approche, des zones de gare et des zones de sortie.

ZONE D'APPROCHE :

Ce sont les zones par les quelles débutent les itinéraires allant vers la gare. Elles sont caractérisées par un signal carré en allant vers la gare, jusqu'à ce que l'aiguilleur donne un itinéraire.

ZONE DE SORTIE :

C'est la dernière zone d'un itinéraire.

ENCLENCHEMENT :

C'est la partie la plus complexe de la gestion des itinéraires.
Quand un itinéraire est enclenché, on ne peut plus le modifier d'une part et, d'autre part, tous les itinéraires avec lesquels il est incompatible ne sont plus réalisables.
La présence dans la zone d'approche est la méthode la plus basique de la gestion des enclenchements. Mais il y en a d'autres, qu'on verra quand on en sera à la gestion des trains.
Evidemment, l'enclenchement se termine quand on quitte la zone de sortie.

ZONE DE MANŒUVRES :

La définition des zones de manœuvres est du ressort de l'utilisateur, aidé par le programme.
Il faut définit les zones d'approche, les zones de sortie et au moins une zone dans la zone de manœuvres. Le programme se charge d'attribuer la caractéristique de "manœuvre" au zones intermédiaires. Dans le cas d'une grande zone de manœuvres, c'est appréciable de ne pas avoir à spécifier "fait partie de la zone de manœuvres" à toutes les zones.
Dans la réalité (et surtout aux débuts de la SNCF), il n'y avait quasiment aucun signal dans une zone de manœuvres, la sécurité était assurée par des hommes et une vitesse limitée à 15 km/h.
Dans un réseau miniature, il n'y a pas d'hommes pour faire la sécurité et encore moins des mécaniciens qui marchent "à vue".
La zone de manœuvres sera donc gérée comme le reste, avec des zones toutes bidirectionnelles et des feux virtuels et quelques-uns réels (des carrés violets).
Les carrés violets apparaitront au TCO et, pour les carrés violets virtuels, il y aura simplement un cercle vide indiquant leur emplacement. La vitesse est limitée à 15 km/h et les feux sont seulement des carrés violets.

TRANSIT SOUPLE :

On part d'un constat simple : plus les zones sont courtes, plus elles sont libérées rapidement et plus elles peuvent être affectées à un autre train avec un délai minimal.
Cela favorise la fluidité du trafic.
Mais cela suppose plus de zones, plus de câblage et, évidemment, un coût beaucoup plus élevé. Il faudra donc faire une analyse du réseau et optimiser le nombre de zones (via les zones multiples) et la densité du trafic. Il y a un équilibre à trouver.
Les premiers postes à relais ont été les PRA (Postes tous Relais à destruction Automatique) en 1939 au poste 5 d'Argenteuil. Le principe est qu'un itinéraire est détruit automatiquement quand le train a franchi le tout dernier appareil de voie. C'est presque toujours ce genre de fonctionnement sur les réseaux miniatures.
Puis sont venus les PRS (Postes tous Relais à transit Souple) en 1950 à Gagny-Montereau.
Au lieu d'attendre que tout l'itinéraire soit franchi, on libère les aiguillages au fur et à mesure de l'avancée du train. On perd ainsi beaucoup moins de temps et on peut faire passer plus de trains sur le même grill de voies. C'est plus fluide.
Puis vinrent les PRG (Postes tous Relais Géographiques) en 1971 à Montargis.
Identiques aux PRS dans le transit souple, mais on n'a plus de bouton d'itinéraire : on choisit un point d'entrée et un point de sortie. Ce sera le type d'itinéraires de mon futur gestionnaire.
Le PRG a pour lui d'avoir besoin de moins de boutons : un bouton par voie d'entrée ou sortie au lieu d'un bouton par itinéraire.
A noter que cette idée de commande géographique date de 1909 (Poste Descubes de Nancy) en choisissant d'abord la sortie puis l'entrée. Bien avant les relais…

SIGNALISATION :

Mon programme gère la signalisation lumineuse de type BAL (voir plus loin).
On a juste à définir l'emplacement des feux sur les sections et le programme calcule tous les feux affichables pour un signal donné. Là aussi, le fait d'avoir calculé tous les itinéraires possibles était nécessaire.
En regardant simplement le JSON, on saura combien de signaux il faut acheter et quel devra être leur type (Panneau A à panneau H), y compris les feux vers les voies de manœuvres au sol.

(https://www.locoduino.org/IMG/jpg/01_cibles_signaux_tous.jpg)
 
BAL :

Block Automatique Lumineux.
C'est un système de gestion SNCF basé sur des cantons, avec une signalisation lumineuse permettant d'assurer la sécurité du réseau.

MOTEURS :

Par la suite, j'appellerai "moteur" tout système permettant de changer la position des aiguilles. Il peut s'agir de solénoïdes, de servos ou de moteurs à mouvement lent.
A ce sujet, une traversée simple aura un "moteur virtuel" pour identifier les deux possibilités de traverser l'appareil de voie. C'est obligatoire pour gérer l'alimentation des voies de la traversée.
Les TJS et TJD seront considérées comme deux aiguilles tête-bêche par leurs pointes et, donc, auront 2 moteurs.
Mais j'ai aussi considéré le cas de Märklin qui, pour ses TJD, n'utilise qu'un seul moteur et un astucieux système de renvois.
(https://www.locoduino.org/IMG/png/02_tjd_marklin_devie.png)
(https://www.locoduino.org/IMG/jpg/03_tjd_markiln_devie_interne.jpg)
(https://www.locoduino.org/IMG/png/04_tjd_marklin_tout_droit.png)
(https://www.locoduino.org/IMG/jpg/05_tjd_marklin_tout_droit_interne.jpg)
Les aiguilles triples ont, eux aussi 2 moteurs, même chez Märklin, et il existe des aiguilles triples dites "symétriques" où le dessin semble symétrique, mais, en fait ne l'est pas vis-à-vis des moteurs. Il y aura donc un moteur plus "en avant" que l'autre, d'où des aiguilles triples gauche ou droite.

Suite dans le post suivant
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 10, 2025, 05:23:06 pm
POST DU 10/03/25 PARTIE 2/2

BRETELLES :

Les appareils de voie sont commandés par de moteurs, mais, dans certaines configurations, la position d'une aiguille entraîne obligatoirement la position d'une autre aiguille sous peine de déraillement. Ce sont les bretelles. Elles permettent donc des gains en câblage et en sécurité.
Exemple de bretelle :

(https://www.locoduino.org/IMG/png/10_bretelle_droite_droite_marklin.png)

Contrairement aux apparences, le problème de les détecter automatiquement n'est pas simple.
Les aiguilles, dans une bretelle, sont opposées par leurs talons. C'est obligatoire.
Souvent, elles sont reliées par leurs voies déviées, comme dans l'exemple ci-dessus, mais elles peuvent aussi être voie directe - voie déviée, avec une aiguille droite et une aiguille gauche :

(https://www.locoduino.org/IMG/png/11_bretelle_droite_tout_droit.png)

On peut aussi avoir un élément droit dans la bretelle :

(https://www.locoduino.org/IMG/png/12_bretelle_avec_element_droit.png)

Et c'est là qu'on apprécie les joies de l'informatique…
On cherche : "Des aiguilles, opposées par leurs talons, avec la possibilité d'une aiguille droite et d'une aiguille gauche et possibilité d'éléments droits ou courbes entre les talons des aiguilles".
Et on tombe sur ça :

(https://www.locoduino.org/IMG/png/13_voie_devitement.png)
 
Qui est tout, … sauf une bretelle !
Il manque donc un autre paramètre : la longueur des éléments, indispensable ici !

C'est pareil pour une bretelle double.
Il y a tout un monde entre ça :

(https://www.locoduino.org/IMG/png/14_bretelle_double.png)
 
Et ça :

(https://www.locoduino.org/IMG/png/15_bretelle_double_double_diagonale_.png)
 
Et pourtant, le schéma est le même !
Donc, il faut tenir compte des longueurs dans la détermination automatique des bretelles.
Il y a donc, dans mon programme, une longueur maxi (L_MAXI dans le setup) qui permet de bien définir les bretelles.
A noter que le branchement simple est le seul appareil de voie possible dans une bretelle pour la bonne raison qu'il n'a pas de moteur (cas de la bretelle double).
Dans une bretelle, il ne peut y avoir que 2 aiguilles.
Il s'ensuit que les appareils impliqués sont : les aiguilles, l'une des aiguilles d'une TJS, l'une des aiguilles d'une TJD à 2 moteurs, une aiguille triple.
Il n'est pas possible d'avoir une TJD à un seul moteur dans une bretelle.
Une bretelle, c'est le plus simple des super appareils (voir ci-après).

SUPER APPAREIL :

On a diminué le nombre de zones en créant des zones multiples.
On peut aussi diminuer le nombre de positions à étudier en regroupant les moteurs des appareils de voie des bretelles.

1°) Les bretelles simples :

Deux aiguilles, c'est 2 x 2 positions possibles. Mais comme les deux aiguilles sont liées, il n'y a que 2 positions à étudier : la position "bretelle" et la position "non-bretelle".
On n'a plus qu'un seul super appareil, composé des 2 aiguilles, et seulement 2 positions pour ce super appareil.
On remarquera que, dans une bretelle simple, les deux aiguilles sont dans la même position.
(https://www.locoduino.org/IMG/png/16_bretelle_droite_droite_marklin_numerotee.png)
(https://www.locoduino.org/IMG/png/17_bretelle_droite_tout_droit_numerotee.png)
           
Ex : a0 droite et a1 droite pour la bretelle, a0 gauche et a1 gauche pour les voies parallèles, c’est-à-dire "non bretelle".
Donc, la définition d'une bretelle peut se simplifier :
"Br0" : a0, a1, droite.
La position "non-bretelle" peut s'écrire "Br0-" sans qu'on ait besoin de la décrire dans le JSON (Ce serait Br0- : a0, a1, gauche).
Dernière remarque :
Il n'est pas besoin de décrire une section qui serait entre les 2 aiguilles (une section n'a qu'une position)

2°) Les bretelles doubles :

(https://www.locoduino.org/IMG/png/18_bretelle_double_numerotee.png)
 
Dans une bretelle double, il y a 5 appareils de voie. On n'oublie pas, en effet, la traversée centrale composée d'une "aiguille virtuelle", amenant 2 alimentations potentielles, elles bien réelles, en fonction de la bretelle choisie. Soit 32 positions potentielles et seulement 3 positions possibles.
Br0 : a0, a3, droite, a4
Br1 : a1, a2, gauche, a4
La description de la bretelle reste la même que la bretelle simple, mais, ici, on indique aussi la traversée simple en fin de description, sans donner sa position puisqu'elle est identique à celle des aiguilles.
Les 3 positions sont les suivantes :
- position 0 : Br0, Br1-, a4
- position 1 : Br0-, Br1, a4
- position 2 : Br0-, Br1-
En position 1, a4 est à droite par Br0 et à "non-gauche" = droite par Br1- : il est donc à droite.
En position 2, a4 est à "non droite" = gauche par Br0- et à gauche par Br1- : il est donc à gauche.
En position 3, a4 n'est pas concerné.
 
(https://www.locoduino.org/IMG/png/19_bretelle_double_zonee.png)
 
Mais attention, super appareil ne veut pas dire une seule zone : la bretelle double ci-dessus a bien 7 zones de détection de présence.

3°) Aiguilles triples. Exemple dans le réseau de Dominique :

(https://www.locoduino.org/IMG/png/20_z29_reseau_de_dominique.png)
 
Z29 est une aiguille triple, décomposée ici en 2 aiguilles consécutives : a9 et a11.
Dans la pratique, il y a 3 aiguilles à gérer ici, soit, à priori 2 x 2 x 2 = 8 possibilités.
Il y a bien une bretelle Br0 : a8, a11, gauche, mais elle ne fonctionne que si a9 est à gauche.
Donc il n'y a que 3 positions qui aient un sens :
- Position 0 : Br0, a9 gauche.
- Position 1 : Br0-, a9 gauche
- Position 2 : Br0-, a9 droite.
Il peut paraître surprenant, quand a9 est à droite, que la position de la bretelle intervienne, mais c'est nécessaire à la sécurité : si a9 est à droite, on ne peut pas envoyer un train venant de a8 vers la bretelle.
Autre exemple, dans le réseau de Dominique complété pour essais :

(https://www.locoduino.org/IMG/png/21_z26_reseau_de_dominique.png)
 
Z26 est une aiguille triple, décomposée ici en 2 aiguilles consécutives : a0 et a1.
Br0 : a0, a2, droite
Br1 : a1, a51/0, gauche
Les 3 positions sont :
- Position 0 : Br0, Br1-
- Position 1 : Br1, Br0-
- Position 2 : Br0-, Br1-

4°) Toujours dans le réseau de Dominique, une bretelle avec aiguille commune. Ici a16.

(https://www.locoduino.org/IMG/png/22_bretelle_symetrique.png)
 
Il y a 3 aiguilles, donc 8 positions et, en fait, seulement 2 utiles :
- Position 0 : Br0, Br1-
- Position 1 : Br1, Br0-
On a la liste exhaustive de tous les super appareils possibles :
Bretelle, bretelle double, triple 1 et triple 2, aiguille commune.

LISTES D'APPAREILS DE VOIE :

C'est le moment de faire le point sur les différentes listes consacrées aux appareils de voie.

1°) On a une liste de tous les appareils de voie :
            "a0" : {
                    "nom" : "a0",
                    "type" : "TripleSDa",
                    "no" : 0
            },
Qui se lit : l'appareil a pour nom "a0", il est du type "aiguille triple symétrique à droite côté A", c'est le 1er appareil de la liste des appareils et a pour identifiant le numéro 0.

Rappel 1 : Une aiguille triple a sa première aiguille en partant de la pointe à droite et la suivante à gauche dans le cas d'une "TripleD" et sa première aiguille en partant de la pointe à gauche et sa suivante à droite dans le cas d'une "TripleG".
Si, en plus, elle est d'apparence symétrique, il y aura TripleSD et TripleSG.
La 1ere aiguille est côté A et la deuxième côté B.

Rappel 2
: Une aiguille ayant toujours 2 positions ("gauche" et "droite"), ce n'est pas la peine de l'indiquer dans le JSON.

2°) Une liste des bretelles :
            "Br0" : {
                    "nom" : "Br0",
                    "position" : ["a0","a2","droite"],
                    "no" : 0
            },
Qui se lit : Bretelle 0, position a0 et a2 à gauche, identifiant numéro 0.
L'autre position n'est pas décrite et s'appellera "Br0-".
Là, les positions sont décrites car spécifiques au réseau. On voit aussi pourquoi le nom d'une aiguille ne doit pas démarrer par "Br".

3°) Une liste des super appareils :
            "Su0" : {
                    "nom" : "Su0",
                    "positions" :  [["Br0", "Br1-"], ["Br0-", "Br1"], ["Br0-", "Br1-"]],
                    "no" : 0
            },
Là, les positions sont décrites car spécifiques au réseau. On voit aussi pourquoi le nom d'une aiguille ne doit pas démarrer par "Su".
 
BALISE :

On a considéré que la détection de présence dans une zone se fait par consommation de courant. C'est le système le plus performant. Mais il suppose de nombreuses coupures de rails.
Il existe aussi des détections de présence ponctuelles (ILS, infra rouge, capteurs à effet Hall…) et on les appellera des balises.
Mon programme ajoute systématiquement une balise (notée Bs) à chaque signal. Ce système sert pour garantir un arrêt devant un signal à un point précis.
Le programme ajoute aussi systématiquement une balise (notée Bb) avant un butoir pour garantir l'arrêt.
Je n'ai pas géré le cas de balises isolées (passage à niveaux, tunnels, panneaux "S", …), mais on pourrait définir une méthode pour en ajouter.

LONGUEURS :

Il est indispensable de connaitre la longueur de chaque zone. Par défaut, la longueur d'une zone sera de 999 mm dans mon programme.
Par ailleurs, il faut que des sections de longueur nulle existent pour "affecter" un signal à un appareil de voie.
De plus, certains signaux (jaune clignotant, rouge clignotant, blanc clignotant) sont liés à la longueur de la zone.
Enfin, dans le gestionnaire, j'aurais besoin de longueur précises les sections et branches des appareils de voies pour calculer la distance qui sépare un train de son signal d'arrêt. J'y reviendrai dans le gestionnaire, c'est fondamental.

FICHIERS :

Pour l'instant, dans Processing, tous mes fichiers sont issus de "Tables" et sont donc des fichiers dont l'extension est obligatoirement ".tsv", c’est-à-dire "Tabulation Separated Values" (valeurs séparées par une tabulation) qui se trouve être le fichier natif des fichiers Excel.
Il s'ensuit que le meilleur moyen d'ouvrir ces fichiers texte est l'application Excel (ou tout autre tableur).
La conséquence, c'est que le fichier JSON sort actuellement en "_JSON________.tsv".
Si on veut un vrai fichier JSON, il suffit de le copier ailleurs et de changer l'extension ".tsv" en ".json" et on obtient le fichier "_JSON________.json".
Le fichier JSON est, ici, un fichier de sortie et le fichier ZONES est le fichier d'entrée. Il ne contient que les informations que le programme ne peut pas deviner.
Le fichier ZONES, quant à lui contient exclusivement les valeurs nécessaires au calcul du fichier JSON. Il n'y a que des valeurs que vous rentrez. Tout le reste est calculé.
Il est fortement déconseillé de modifier des valeurs directement dans le fichier ZONES, tant elles sont liées les unes aux autres. En passant par le programme, tous les liens sont pris en compte et la cohésion est garantie.

Variables du fichier ZONES :
NOM :
Le nom de la zone simple.
PARITE :
La parité de la section, avec une aide dans le programme.
TYPE :
Numérotés de 0 à 11

(https://www.locoduino.org/IMG/png/23_types.png)
 
ORIENTATION :

L'orientation est la position du dessin d'une section ou d'un appareil de voie par rapport à la verticale dans un pavé. La "précision" de cette orientation est de 45°. Elle est caractérisée par un nombre entre 0 et 7 dans le fichier zones.

GARE :

L'info de la gare. On a :
g0, g1, … qui sont les zones de gare (on n'en rentre qu'une partie)
ap_g0, ap_g1, … qui sont les zones d'approche des zones de gare (on les rentre toutes)
so_g0, so_g1, … qui sont les zones de sortie des zones de gare (on les rentre toutes)

MANŒUVRE :

L'info de la zone de manœuvres.
m0, m1, … qui sont les zones de manœuvre (on n'en rentre qu'une partie)
ap_m0, ap_m1, … qui sont les zones d'approche des zones de manœuvre (on les rentre toutes)
so_m0, so_m1, … qui sont les zones de sortie des zones de manœuvre (on les rentre toutes)

VITESSES :

L'info de la vitesse limite d'une zone ou, dans un appareil de voie, d'un segment de l'appareil.
X, Y :
Ce sont les coordonnées du centre du "pavé" sur le TCO. Un pavé n'a pas d'orientation. Il est calé sur une grille.
Les X, Y ne sont pas demandés lors de la création des zones simples :
C'est uniquement lors de modifications, c’est-à-dire dans une deuxième étape.

TCO :

A la SNCF, c'est le "Tableau de Contrôle Optique". Il est, en général, le long d'un mur dans le poste d'aiguillage et représente le tracé de toutes les zones gérées par ce poste d'aiguillage, avec l'occupation par les trains, la position des aiguilles, des itinéraires, ...
C'est purement visuel. Il n'y a pas de boutons sur un TCO à la SNCF.

Les modélistes se sont dit qu'il serait pratique, justement, d'y regrouper tous les boutons et le TCO est devenu le "Tableau de Commande Optique".

Tableau de Commande Optique (TCO)

C'était tentant du fait qu'on a déjà le dessin de tous les éléments…
Mais je n'avais pas envie de le dessiner : c'est le programme qui va se charger de le faire.
On doit quand même positionner les éléments (X, Y) et, le plus simple, c'est de rentrer les noms des zones dans Excel. C'est très souple, on peut déplacer plusieurs éléments d'un coup et avoir un positionnement global satisfaisant. C'est plus simple de se mettre en notation "L1C1" plutôt qu'en ABCD. Attention : Excel démarre à 1 et Processing à 0…
On note le nombre de cellules en horizontal et en vertical. En général, le nombre en horizontal est supérieur au nombre en vertical. C'est celui-là qui compte.
On rentre le nombre de colonnes d'Excel dans le setup "NB_PAVES = xx"
Une fois qu'on a rentré tous les X, Y dans les zones, on peut afficher le TCO.

1°) On appuie sur le bouton "Analyse" pour faire tous les calculs et on est ainsi sûr qu'il n'y a pas d'erreur. Si on oublie d'appuyer sur "Analyse" avant, on n'a pas les calculs des portions intermédiaires…

2°) On appuie sur le bouton "TCO" et on a un "paté" du TCO, coincé dans un carré de 500 x 500.
Il faut alors passer au plein écran et le TCO apparait.
On se rend compte alors que certains positionnements ne sont pas bons et on peut alors les modifier directement sur l'écran en cliquant dans les pavés des zones.
Si vous cliquez à gauche dans un pavé, il avance d'une case vers la gauche et le dessin se met à jour. De même pour droite, haut et bas. Et le dessin se recalcule immédiatement !
Quand vous êtes satisfaits du résultat, n'oubliez pas de sauver les X, Y :
1°) Cliquez sur "Valider" dans le rond en bas à droite
2°) Choisissez "Sauver" dans le menu général.

Composition du TCO :

Ce TCO est volontairement orienté vers la vérification des données, plus que vers un gestionnaire.
Par exemple, il n'affiche pas la position des appareils de voie (les lames).
Il affiche des panneaux de signaux complets avec tous les feux allumés en même temps …
Il y a un code couleur des zones :
Noir pour les gares
Violet pour les zones de manœuvres
Noir large sur Aqua pour les zones d'approche de gare
Noir étroit sur Aqua pour les zones de sortie de gare
Violet large sur Aqua pour les zones d'approche de manœuvres ou Violet large sur Noir si on est en gare.
Ce code couleur n'est utile que pour les vérifications et n'aura pas d'intérêt dans le gestionnaire.

Signaux :

Une particularité des panneaux de signaux SNCF est qu'il est impossible d'avoir, sur le même panneau, à la fois l'affichage du Carré et du Carré violet (les feux sont au même endroit).
J'ai donc décidé que, si l'on doit pouvoir afficher C et Cv au même endroit, il faut deux feux : un sur poteau et un au sol pour le Cv.
Dans les zones de manœuvres, j'ai décidé de faire figurer tous les feux, puisque chaque zone est banalisée. Mais les feux virtuels sont simplement affichés par un rond vide.
J'aimerais bien faire figurer ici les vitesses limites, toujours dans un but de vérification des entrées, mais il n'y a pas beaucoup de place…

Impression :

Il suffit de faire une copie-écran et l'imprimer. Mais comme j'ai pitié des cartouches d'imprimante, on peut mettre un fond blanc avant de faire la copie-écran en appuyant sur la bascule "Fond", en bas à gauche.

En PJ : le mode d'emploi du programme.
https://www.locoduino.org/IMG/zip/editeur_json_20.zip (https://www.locoduino.org/IMG/zip/editeur_json_20.zip)
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Dominique le mars 10, 2025, 08:55:08 pm
Bravo Denis,

Très gros travail de présentation de toutes les sortes d'éléments d'un réseau, rassemblés dans un grand texte complet qui les rassemble, ce qui évite de chercher.

De retour la semaine prochaine, je me penche sur ton programme.. a bientôt

Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: Pierre59 le mars 12, 2025, 02:09:29 pm
bonjour

Joli travail pour le lexique.
Mais il me semble qu'il manque un mot essentiel : ENCLENCHEMENT.

Le problème de prise en écharpe c'est du ressort des enclenchements et pas du cantonnement.
Les itinéraires sont aussi en grande partie du ressort des enclenchements.

Je reviendrais sur d'autres points, mais faut que je regarde les programmes avant.

Bon courage.

Pierre
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 12, 2025, 04:49:05 pm
Bonjour Pierre,

Tu as raison, il faut détailler les enclenchements. D'autant que je parle des zones d'approche et des itinéraires.
C'est un sujet fondamental, régulièrement oublié quand on résume les itinéraires à une liste d'aiguilles qui se mettent en mouvement quand on appuie sur un bouton.

Merci pour tes encouragements.

Denis
Titre: Re : Projet partagé d'un gestionnaire de réseau
Posté par: DDEFF le mars 13, 2025, 08:06:40 am
Bonjour,

J'ai remis à jour le lexique (zones d'approche, de sortie, enclenchements et TCO).

La partie TCO de mon programme doit être remaniée. J'y ai ajouté les coupures de rails et je vais déplacer les signaux à leur proximité.
Et, surtout revoir la manière de travailler en gérant, à nouveau, des connecteurs (X, Y, orientation, ...).
C'est vraiment dur de s'en passer ... ;D

Denis