Auteur Sujet: projet de reseau etagere analogique  (Lu 1634 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2448
  • 100% Arduino et N
    • Voir le profil
Re : projet de reseau etagere analogique
« Réponse #15 le: septembre 06, 2021, 10:51:12 am »
Bonjour Pascal,

Je m'inquiète: toujours pas d' Ids, ni dans le tableau, ni surtout dans les exemples où c'est vraiment nécessaire.
Ces filtres ne correspondent pas aux Ids du tableau du message du septembre 05, 2021, 12:47:41 am

Le système peut fonctionner sans masque (vous le rendez inefficace ici) et sans filtres, mais pas sans Ids.
D'ailleurs la bibliothèque (ACAN et autres) ne propose que 2 masques et 6 filtres en tout donc je ne vois pas comment vous allez implémenter toute votre liste.

Je vous encourage de faire un test en réel entre 3 Arduinos simulant un MASTER, un TCO et un SOLENOIDE.
Vous commencez sans masque ni filtre, puis vous les introduisez progressivement : vous verrez que ce n'est pas trivial.

Concernant le programme des détecteurs RFID, il faut bien lire l'article.
Je n'utilise pas la fonction controleurCAN.dispatchReceivedMessage() qui passe la main à la fonction messageCmd dans les filtres, mais j'explique seulement ce qu'on peut faire.
De plus l'exemple utilise les Ids longs pour l'exemple seulement.
Et on ne la retrouve donc pas dans la loop où d'autres fonctions d'émission sont utilisées.

Cordialement,
Dominique

palou

  • Newbie
  • *
  • Messages: 10
  • presque à la retraite ...
    • Voir le profil
Re : projet de reseau etagere analogique
« Réponse #16 le: septembre 06, 2021, 11:59:40 am »
Bonjour Dominique

J'ai vraiment des lacunes concernant le CAN entre le filtre et l'id

Pour moi, le filtre est utilisé pour inhiber la réception de messages inutiles pour le controleur.

Par exemple Si j'ai un masque 0x7FF et un filtre à 0x7A0 , je ne recevrai que les messages dont l'id sera 0xA0, toute autre valeur d'id sera ignorée

Dans votre exemple
const ACAN2515Mask masque = extended2515Mask (0x1FFFFFFF) ; // For filter #0 and #1
  const ACAN2515AcceptanceFilter filtres [] = {
    {extended2515Filter (0x1FFFFF7A), messageCmd},
    {extended25l15Filter (0x1FFFFF7B), messageCmd},
  } ;
les filtres refletent les ID 0x7A et 0x7B

Si je reprend mon tableau
Le master a pour IDs 01/03/05/07/09/0A/0F (les MASTER_XXXX)
Le tableau des filtres implanté dans le master sera le suivant
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x701, messageAlert}, // Réception alertes depuis les contrôleurs
    {0x703, messageErr},   // notification d'erreurs depuis les contrôleurs
    {0x705, messageOrdre}, // réception des ordres depuis le TCO
    {0x707, messageAck},  // notifications d’acquittement depuis les controleurs
    {0x709, messageAccessoire}, // réception des ordres pour les accessoires
    {0x70A, messageFini}, // notifications de fin d'opérations pour les ordres "longs" (par exemple déplacement d'aiguille)
    {0x70F, messageInfo} // messages d'informations depuis les contrôleurs
} ;

Le TCO a pour Ids 0xF0 (TCO_AFFICHAGE)
Le tableau des filtres implanté dans le TCO sera le suivant
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x7F0, messageAffichage} // Réception commandes d'affichage
} ;

Le meme principe est appliqué pour les autres types de controleurs :
Un masque identique pour tous les types,
les filtres adaptés en fonction des ID pouvant être reçus par le controleur implanté
Par exemple on peut avoir jusqu'à 16 controleurs d'aiguilles de 0 à 15 (0x00 à 0x0F). Les id de bases sont 0x40 et 0x70 (SOLENOIDE_ORDRE et SOLENOIDE INFO)
Pour le controleur d'aiguille N°2 on aurait
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x742, messageOrdre}, // Réception commandes d'aiguille (SOLENOIDE_ORDRE)
    {0x772, messageInfo}, // Réception demande d'état (SOLENOIDE_INFO)

} ;
et pour le controleur d'aiguille n° 4
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x744, messageOrdre}, // Réception commandes d'aiguille (SOLENOIDE_ORDRE)
    {0x774, messageInfo}, // Réception demande d'état (SOLENOIDE_INFO)

} ;

Maintenant, la ou je ne suis pas sur c'est comment doit etre effectué le dialogue dans le programme:
Par exemple le TCO pour transmettre un ordre au master va utiliser la commande CAN.sendMsgBuf en envoyant le message au Master sur l'id MASTER_ORDRE
Mais doit il utilisé l'ID (0x05) ou la valeur de masque (0x705) pour envoyer le message ?
CAN.sendMsgBuf(0x05,8,buff)
ou

CAN.sendMsgBuf(0x705,8,buff)

Cdt
Pascal

Le train train quotidien ... Oui Merci !!!

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2448
  • 100% Arduino et N
    • Voir le profil
Re : projet de reseau etagere analogique
« Réponse #17 le: septembre 06, 2021, 12:47:16 pm »
N’oubliez pas qu’il n’y a que 6 filtres par module.
Cordialement,
Dominique

palou

  • Newbie
  • *
  • Messages: 10
  • presque à la retraite ...
    • Voir le profil
Re : projet de reseau etagere analogique
« Réponse #18 le: septembre 06, 2021, 05:20:17 pm »
Le seul qui soit impacté est le Master (7 ID). il va falloir que je fusionne 2 ID.
MASTER_ACK et MASTER_ERREUR me semblent les plus appropriés. Si il y a une erreur on enverra un "NACK" si c'est OK on enverra un "ACK".
Le train train quotidien ... Oui Merci !!!

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2448
  • 100% Arduino et N
    • Voir le profil
Re : Re : projet de reseau etagere analogique
« Réponse #19 le: septembre 06, 2021, 08:34:14 pm »
Bonjour Dominique

J'ai vraiment des lacunes concernant le CAN entre le filtre et l'id
OUI

Citer
Pour moi, le filtre est utilisé pour inhiber la réception de messages inutiles pour le controleur.
OUI

Citer
Par exemple Si j'ai un masque 0x7FF et un filtre à 0x7A0 , je ne recevrai que les messages dont l'id sera 0xA0, toute autre valeur d'id sera ignorée
OUI mais ausi 7A0

Citer
Dans votre exemple
const ACAN2515Mask masque = extended2515Mask (0x1FFFFFFF) ; // For filter #0 and #1
  const ACAN2515AcceptanceFilter filtres [] = {
    {extended2515Filter (0x1FFFFF7A), messageCmd},
    {extended25l15Filter (0x1FFFFF7B), messageCmd},
  } ;
les filtres refletent les ID 0x7A et 0x7B
NON : il n'acceptent que les Ids de messages longs 1FFFFF7A et 1FFFFF7B mais n'émettent surtout pas de messages avec ces Ids

Citer
Si je reprend mon tableau
Le master a pour IDs 01/03/05/07/09/0A/0F (les MASTER_XXXX)
Le tableau des filtres implanté dans le master sera le suivant
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x701, messageAlert}, // Réception alertes depuis les contrôleurs
    {0x703, messageErr},   // notification d'erreurs depuis les contrôleurs
    {0x705, messageOrdre}, // réception des ordres depuis le TCO
    {0x707, messageAck},  // notifications d’acquittement depuis les controleurs
    {0x709, messageAccessoire}, // réception des ordres pour les accessoires
    {0x70A, messageFini}, // notifications de fin d'opérations pour les ordres "longs" (par exemple déplacement d'aiguille)
    {0x70F, messageInfo} // messages d'informations depuis les contrôleurs
} ;

Le TCO a pour Ids 0xF0 (TCO_AFFICHAGE)
Le tableau des filtres implanté dans le TCO sera le suivant
const ACAN2515Mask masque = 0x7FF);
  const ACAN2515AcceptanceFilter filtres [] = {
    {0x7F0, messageAffichage} // Réception commandes d'affichage
} ;
NON: le MASTER, comme le TCO ne reçoit jamais de messages avec les Ids des messages qu'il envoie : 2 entités (noeuds) ne peuvent émettre avec le même Id.
Quand vous écrivez "Le master a pour IDs 01/03/05/07/09/0A/0F ", ça veut dire quoi ? Qu'il envoie des messages avec ces Ids ou qu'il en reçoit avec ces Ids ?

Citer
Le meme principe est appliqué pour les autres types de controleurs :
C'est bien ça qui est à revoir !


Citer
les filtres adaptés en fonction des ID pouvant être reçus par le controleur implanté
OUI ça c'est vrai



Citer
Maintenant, la ou je ne suis pas sur c'est comment doit etre effectué le dialogue dans le programme:
Par exemple le TCO pour transmettre un ordre au master va utiliser la commande CAN.sendMsgBuf en envoyant le message au Master sur l'id MASTER_ORDRE
Mais doit il utilisé l'ID (0x05) ou la valeur de masque (0x705) pour envoyer le message ?
l'Id uniquement (le masque c'est en réception seulement)

Vous n'arrivez pas à séparer l'Id d'un message émis et le filtre d'un message reçu  >:( >:(
Le meilleur moyen est de laisser tomber les masques et filtres tant que vous n'avez pas bien saisi le rôle des Ids

Reprenez votre exemple
Citer
Premier exemple, action sur aiguillage depuis le TCO
utilisateur   TCO   message   MASTER   message   SOLENOIDE
modifie position aiguille n° 7   envoi de l'information au MASTER   ==> MASTER_ORDRE   convertit le numéro de l'aiguille en couple contrôleur/sortie et envoie l'info au contrôleur de solénoide   ==> SOLENOIDE_ORDRE   réception du message
Affichage clignotant de l'aiguille   <== TCO_AFFICHAGE   réception du ACK et demande d'affichage (aiguille en attente)   <== MASTER_ACK   Mise en liste d'attente de la commande (pas d'activation simultanée de solénoïdes)
Affichage fixe de l'aiguille   <== TCO_AFFICHAGE   modification aiguille terminée. On affiche le résultat final sur le TCO   <== MASTER_FINI   L'aiguille a été actionnée
et mettez les valeurs des Ids dans les messages

Montez donc un test comme j'ai proposé, sans utiliser de filtre/masque : vous verrez plus clair ensuite.

Cdt
.
« Modifié: septembre 06, 2021, 09:31:06 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2448
  • 100% Arduino et N
    • Voir le profil
Re : projet de reseau etagere analogique
« Réponse #20 le: septembre 06, 2021, 09:35:09 pm »
Vous pouvez regarder ce sujet tout frais :
https://forum.locoduino.org/index.php?topic=1219.msg13803#msg13803

notamment le programme Configurateur
Cordialement,
Dominique