Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Pierre59

Pages: 1 2 [3] 4 5 ... 23
31
Vos projets / Re : Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 05:53:35 pm »

1°) De quels objets on a besoin pour les signaux ?
=> on a surtout besoins d'accès aux signaux voisins !
2°) Quels lien y-a-t' il entre eux ? ces relations de voisinage
3°) Comment rentrer les infos du JSON dans ces objets ?
=>Processing a tout ce qu'il faut pour traiter les fichiers Json, Le gestionnaire, en Processing, basé sur un fichier Json que j'ai publié montre bien tout cela, de toute façon je t'aiderais.
Et peut être d'autres choses ...
Pierre

32
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 05:12:54 pm »
Mon but initial était de t'habituer à la programmation vraie objet.

Mais pourqois pas aller aussi dans ce que tu propose.

Pierre

33
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 04:42:16 pm »
Oui

Pierre

34
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 04:05:35 pm »

Le noyau du gestionnaire gère l’état des aiguilles, des zones, des autorisations, des signaux, des itinéraires, …
Il prends en compte les changement d’état des éléments, par exemple occupation/libération des zones.
Il accepte des demandes d’itinéraires qu’il peut établir, mais dans le respect des enclenchements, avec la manoeuvre des aiguilles et l’affichage des feux des signaux.
Et certainement encore d’autres tâches.

Pierre

35
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 03:28:31 pm »

Le noyau du gestionnaire assure la sécurité, donc les enclenchements.

Pierre

36
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 03:17:59 pm »

Décider de la circulation des trains, de leurs horaires, des priorités, de ou ils partent et ou ils vont, … c’est de la régulation (il y a des régulateurs pour cela a la SNCF), ce n’est pas du rôle du gestionnaire.

Pierre

37
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 09, 2025, 07:30:07 am »

J’ai fait une erreur avec le carré violet, j’ai oublié de déclarer la variable feu, cette variable va servir pour tous les signaux donc il faut la mettre dans la classe de base Signal :

Classe Signal {
   enum Feu={Vl,A,S,C,Cv,M,…};
   Feu feu;
   void ouvrir() {}
   void fermer() {}
}

Classe CareViolet hérite de Signal {
   void ouvrir() { feu=M; }
   void fermer() { feu=Cv; }
}

Pierre

38
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 08, 2025, 05:58:43 pm »
Tu vas déja beaucoup trop vite, on se concentre sur le gestionnaire, le reste viendra après.

pierre

39
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: avril 08, 2025, 05:07:20 pm »
Je vais vous présenter ici la démarche habituellement uitilisée par la programmation objet. Cette démarche est indépendante du langage utilise (C++,Processing(Java)).

Quand on programme en programmation objet, il faut commencer par identifier les objets possibles.

Prenons un de ces objets, généralement il y a plusieurs variantes possibles de cet objet, cela s’appelle du polymorphisme (la programmation objet c’est de l’encapsulation, de l’héritage et du polymorphisme).

Bien évidemment il n’est pas question de traiter les variantes avec des si/sinon (if/else) en programmation objet on procède completement différemment.

On commence par écrire une classe de base ayant le nom de l’objet, cette classe peut être une classe abstraite (on ne fait généralement pas d’instance de cette classe, mais cet aspect est secondaire), cette classe sera remplie par la suite en fonction des besoins (variables et fonctions (méthodes)).

Ensuite pour chaque variante on crée une sous-classe (il faut trouver un nom en rapport avec l’objet) qui hérite de la classe base, ou d’une autre sous-classe héritant directement ou indirectement de l’objet).

Voila le schéma général d’’écriture. Maintenant il fait remplir la classe et les sous-classes.

Prenons un exemple avec les signaux SNCF. Il faut réfléchir aux actions que l’on peut faire sur un signal, c’est la partie la plus difficile du processus ( et ce n’est pas lié au fait que l’on soit en programmation objet ), faut pas chercher de complications mais plutôt de la synthèse et ne pas chercher à trouver tout tout de suite. De façon synthétique un signal on peut l’ouvrir et le fermer (indépendamment de qui l’ouvre ou le ferme), cela fait deux actions pour l’instant.

On va coder ces deux actions sous forme de fonctions (méthodes) : void ouvrir() {…} et void fermer(){…}, c’est le signal qui saura ce qu’il faut faire.

Dans le programme objet utilisant ces signaux une variable de type signal sera typée Signal et non SignalCarre, Carré, Avertissement, … Pour que cela se passe bien( à la compilation ) il faut que la classe de base Signal contienne les deux fonctions (méthodes), mais sous une forme dégradée car la classe Signal ce n’est pas un vrai signal (on ne sait pas comment l’ouvrir ni le fermer) : void ouvrir() {} et void fermer() {}.

Ecrivons une variante, la plus simple CarreViolet. On a tout d’abord besoin d’une variable pour mémoriser le feu d’un signal, une énumération du genre : enum Feu={Vl,A,S,C,Cv,M,…}; convient très bien, mais dans quelle classe il faut la mettre, elle va servir pour tous les signaux, donc il faut la mettre dans la classe de base Signal.

Les deux fonctions (méthodes) peuvent donc s’écrires : void ouvrir() { feu=M; } et void fermer() { feu=Cv; } .

On a donc pour l’instant :

Classe Signal {
   enum Feu={Vl,A,S,C,Cv,M,…};
   void ouvrir() {}
   void fermer() {}
}

Classe CareViolet hérite de Signal {
   void ouvrir() { feu=M; }
   void fermer() { feu=Cv; }
}

Bien évidemment il manque les autres variantes de signaux.

Voila la démarche standard de la programmation objet, c’est généralement toujours la même démarche.

Je vous laisse digérer cette démarche, et me poser toutes les questions nécessaires..

Cordialement

Pierre59

40
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« le: mars 23, 2025, 03:23:35 pm »
Bonjour

Bonnes questions sur ce que l'on fait, c'est nécessaire de temps en temps.

Mais ton programme est trop gros parce que tu n'utilise pas vraiment la Programmation objet. Je peut d'aider comme je l'ai déjà fait.

L'IA peut peut-être nous aider ???

Amicalement

Pierre

41
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« 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

42
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« 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

43
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« 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

44
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« 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

45
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« 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

Pages: 1 2 [3] 4 5 ... 23