Auteur Sujet: Projet partagé d'un gestionnaire de réseau  (Lu 175284 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #420 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 ?

Cordialement,
Dominique

Brunotoutsimple

  • Jr. Member
  • **
  • Messages: 70
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #421 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 
Cordialement
Bruno

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #422 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 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

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #423 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.


 
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 :


 
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
« Modifié: mai 21, 2024, 05:09:10 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #424 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
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3055
  • 100% Arduino et N
    • Voir le profil
Re : Re : Re : Projet partagé d'un gestionnaire de réseau
« Réponse #425 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 !
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #426 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 :


 
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
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #427 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



Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #428 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

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #429 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

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #430 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 :


 
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
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

trimarco232

  • Sr. Member
  • ****
  • Messages: 353
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #431 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

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #432 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
« Modifié: juin 05, 2024, 09:52:48 am par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #433 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

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #434 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

Denis :P
 
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)