Auteur Sujet: Nouveau projet : un petit locodrome  (Lu 9839 fois)

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Nouveau projet : un petit locodrome
« Réponse #15 le: juillet 30, 2015, 12:57:03 am »
Je crois qu'il manque la suite ;)
Par contre, ce n'est pas de la voie normale.
Si signaux, ce serait simplement un rouge et vert sans plus de choses.
G.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : Nouveau projet : un petit locodrome
« Réponse #16 le: juillet 30, 2015, 07:02:17 am »
Je pense que ce petit réseau à automatiser ferait bien l'objet d'un exemple de modélisation en suivant les contributions de Pierre (fil "modélisation logicielle" du forum) et de Denis.

Si on considère le découpage proposé par Denis, sur la base de mon dernier plan, on a une zone à gauche incluant l'aiguille gauche, une zone à droite incluant l'aiguille droite, ces 2 zones se rejoignant à la coupure à l'arrière au milieu, et 2 zones devant entre les aiguilles, l'une entre les talons directs, l'autre entre les talons déviés des aiguilles.

Sur cette hypothèse, on pourrait définir des objets zone, aiguille, train, signal,.. qui permettraient de définir la topographie du réseau, les actions aux passage des détecteurs (mises à jour des variables d'état) et le pilotage des trains en fonction de ces variables (démarrer, accélérer, ralentir, s'arrêter).

Il faudrait alors faire le rapprochement entre la modélisation en programmation objet et le matériel (détecteurs et commande des trains, les signaux n'étant pas obligatoires d'après Guillaume).

Je tend donc la perche pour cela à Denis et à Pierre, s'ils veulent bien, qui sont bien plus en avance que moi sur ce sujet que je suis tout juste en train d'intégrer.
Cordialement

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Nouveau projet : un petit locodrome
« Réponse #17 le: juillet 30, 2015, 07:05:06 pm »
J'ai lu un petit peu ces objets, j'avoue que pour moi c'est encore un peu abstrait.
Mais il me semble que la programmation serait différente au sens que ce n'est pas forcément la même architecture.
Mais en fait, je n'en sais trop rien pour le moment ;)

Je pense déjà à monter les rails et à mettre en place les moteurs d'aiguilles.
Plus qu'à attendre le master
G.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2024
  • 100% Arduino et N
    • Voir le profil
Re : Nouveau projet : un petit locodrome
« Réponse #18 le: mars 14, 2016, 06:30:16 pm »
Voilà une brique du projet :

La gestion du réseau :

http://www.locoduino.org/spip.php?article154



Et le programme pour modéliser les 5 zones et les 2 aiguilles se trouve ici en fichier joint.

Le programme tourne sur tous les types d'Arduino, même un Nano !

La commande "A n" permet d'inverser une aiguille n
La commande "I n" ou "I n <" permet d'afficher la suite de zones qui peuvent être parcourues (itinéraire possible) à partir d'une zone n de départ, dans le sens horaire ou anti-horaire (avec "<")

La modélisation du réseau se résume à la définition des méthodes des zones suivantes :

// 0 gare quai droit (zone paire = z2 si a0 droite, impaire = z5 si a1 droite)
Zone* Z0::suivantePaire() { return selonAiguille(a0,z2,NULL); }
Zone* Z0::suivanteImpaire() { return selonAiguille(a1,z5,NULL); }
/* si on accepte de passer les aiguilles en entrant par un talon, quelle que soit leur position
 * alors on peut définir ces methodes comme :
 * Zone* Z0::suivantePaire() { return z2; }
 * Zone* Z0::suivanteImpaire() { return z5; }
 */

// 1 gare quai gauche (zone paire = z2 si a0 deviée, impaire = z5 si a0 déviée)
Zone* Z1::suivantePaire() { return selonAiguille(a0,NULL,z2); }
Zone* Z1::suivanteImpaire() { return selonAiguille(a1,NULL,z5); }
/* si on accepte de passer les aiguilles en entrant par un talon, quelle que soit leur position
 * alors on peut définir ces methodes comme :
 * Zone* Z1::suivantePaire() { return z2; }
 * Zone* Z1::suivanteImpaire() { return z5; }
 */

// 2 aiguille a0 (zone paire = z3, impaire = z0 si a0 droite ou z1 si a0 deviée)
Zone* Z2::suivantePaire() { return z3; }
Zone* Z2::suivanteImpaire() { return selonAiguille(a0,z0,z1); }

// 3 boucle est (zone paire = z4, impaire = z2)
Zone* Z3::suivantePaire() { return z4; }
Zone* Z3::suivanteImpaire() { return z2; }

// 4 boucle ouest (zone paire = z5, impaire = z3)
Zone* Z4::suivantePaire() { return z5; }
Zone* Z4::suivanteImpaire() { return z3; }

// 5 aiguille a1 (zone paire = z0 si a1 droite ou z1 si a1 déviée, impaire = z4)
Zone* Z5::suivantePaire() { return selonAiguille(a1,z0,z1); }
Zone* Z5::suivanteImpaire() { return z4; }

Nous introduirons progressivement les autres méthodes (notamment la méthode provenance() qui permettra le suivi des trains), ainsi que les interfaces avec les organes réels du réseau :
  • L'interface avec les aiguilles
  • L'interface avec les détecteurs d'occupation
  • L'interface avec les signaux
  • L'interface avec la traction
  • ...

On pourrait facilement avoir 2 trains qui peuvent circuler. Quand l'un s'arrête en gare sur la voie libre, l'autre part  et fait le tour.

Cordialement