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