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

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #180 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 ?
« Modifié: janvier 13, 2024, 02:29:46 pm par bobyAndCo »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2902
  • 100% Arduino et N
    • Voir le profil
Re : Re : Projet partagé d'un gestionnaire de réseau
« Réponse #181 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.
« Modifié: janvier 13, 2024, 03:44:19 pm par Dominique »
Cordialement,
Dominique

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #182 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
« Modifié: janvier 13, 2024, 06:16:38 pm par bobyAndCo »

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #183 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
« Modifié: janvier 13, 2024, 04:53:08 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #184 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
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #185 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"

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #186 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
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #187 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 :



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 ?




DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #188 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.
« Modifié: janvier 13, 2024, 05:49:04 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Re : Projet partagé d'un gestionnaire de réseau
« Réponse #189 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.


bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Re : Projet partagé d'un gestionnaire de réseau
« Réponse #190 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 ?

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #191 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.
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #192 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 !

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #193 le: janvier 13, 2024, 06:09:46 pm »
C'est dommage car du fichier ci-dessus, il y a moyen de faire quelque chose



Mais pour cela il faut que tu me dises ce que tu penses de horaire et anti horaire ?
« Modifié: janvier 13, 2024, 06:14:54 pm par bobyAndCo »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 936
  • HO avec DCC++
    • Voir le profil
Re : Projet partagé d'un gestionnaire de réseau
« Réponse #194 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