IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Envoi d'une variable sur un bus CAN


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Envoi d'une variable sur un bus CAN
    Bonjour,

    Je suis débutant en C et je souhaiterai envoyer un message CAN tout les 10ms contenant une donnée X sur 64 bit (data 64 bit + DLC 8 + CRC .... arbitrage) sur un bus CAN-HS (500kbit/sec)

    jai lu plusiueres tutoriel mais j'en ne comprend pas la logique, quel serait le code C qui permet cette insertion ?


    Merci pour votre aide

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Sur linux/unix, ca devrait se résumer à:
    • ouvrir le fichier correspondant au bus CAN ("/dev/???")
    • écrire dedans au bon rythme (thread et sleep?)
    • fermer le fichier.

    J'imagine qu'il pourrait y avoir une étape d'initialisation du bus CAN, sans certitude.

    Pour windows, j'imagine qu'un google(msdn api CAN) devrait suffire
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Sur quel système, avec quelle interface?


    Delias

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    oui dsl, ....... c'est sous Windows 10 sous Visual studio 10 SP1

    le code fonctionnera avec CANalyzer afin de vérifier si la variable est bien envoyée sur le bus CAN, avec les bonnes valeurs

  5. #5
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Je pense que le plus simple reste a utilisé les API dédiée au BUS CAN de votre plateforme. Cependant vous avez à votre disposition l'API SocketCAN qui est une implémentation de protocoles CAN pour les systèmes GNU/Linux Unix. basé sur les API Socket qui permet d'outre-passée la plupart des limitations (un driver spécifique pour un matériel spécifique avec des fonctionnalités ou des possibilités limitées) et vous permettant d'utiliser "certaine" fonctionnalités possibles comme l'utilisation des protocole réseaux , les files d'attente etc.. "à titre d'exemple". Voici des liens pour télécharger l'API SocketCAN ou CanLinux.

    Si vous êtes sur une plateforme Windows, vous avez la possibilité de recompiler les sources avec Cygwin et vous aurez un fichier exécutable qui fonctionnera pour la/les plateforme(s) Windows souhaité où contacter le fabricant du matériel afin qu'ils puissent vos fournis API et la documentation nécessaire pour la réalisation de votre projets
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Merci Samba, à la base je cherche à la devolopper moi même en language bas niveau (C/C++) et d'utiliser l'interface CANalyzer sans passer par d'autres API

    Nom : Untitled.png
Affichages : 2520
Taille : 96,3 Ko

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Le langage en lui-même est de bien trop bas niveau.
    Seul, il ne connaît que les entiers, les opérations mathématiques, et les caractères.

    En C ou en C++, il n'y a ni réseau, ni bus CAN, ni lecteur de pensées.

    Tu as donc deux choix: soit utiliser les APIs adaptés, soit les recoder toi-même, et donc, lire la documentation des protocoles de communications sous-jacents.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par ternel Voir le message
    , ni bus CAN, ni lecteur de pensées.
    c'est le CAN case qui émule le reseau CAN, on a les Tx/Rx comme sur un vrai bus CAN-HS

    de même, les paramètres du bus son configurable sous CANalyzer (Bandwidth, DLC,...)

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    Dans ton schéma, y'a quand même une belle erreur.
    La liaison PC -> CAN Case n'est pas un message CAN, mais un message USB.
    Depuis windows XP, les programmes ne peuvent plus accéder au hard, il faut obligatoirement passer par un driver.

    Dans ton cas, ton soft, comme le CANalyzer, doir faire appel au driver le la CAN Case qui va fait appel au driver de l'USB pour envoyer la bonne trame au CAN Case qui lui la transformera pour l'envoyer sur le bus CAN.

    Donc il faut faire appel à l'API de la CAN case, cela peut-être un simple appel de fonction dans une DLL. Faut juste que cela soit documenté (et ça c'est pas certain, car si le vendeur veut que tu utilises son soft pour accéder au hard qu'il t'a vendu, la première chose qu'il fait c'est justement de ne pas documenter son driver).

    Après pour moi, il reste une autre grosse incertitude, c'est de savoir si la CAN case et son driver acceptent deux softs en même temps, il y a quand même de forte chance que cela ne soit pas possible.

    L'autre solution c'est de communiqué directement avec CANalyzer, au moyen des API, aucune idée de si c'est prévu et comment.

    Et si l'idée te viendrais d'écrire un pilote, je te recommande le troisième message de cette discussion: https://www.developpez.net/forums/d1.../creer-driver/

    Delias

  10. #10
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  11. #11
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Hello,

    Déjà, il faut savoir si tu n'utilises que la couche matérielle ou une couche logicielle (comme CANopen par exemple).

    Dans le premier cas, c'est juste le remplissage de quelques registres par une interruption ou un thread.

    Dans le deuxième cas aussi, mais il faut suivre les directives du protocole. Le plus simple (qui est tout sauf simple) est d'acheter la stack, d'implémenter une eds (electronic data seet) pour la fournir aux autres membres du bus. Tu peux déclarer ton 64 bits en PDO cyclique dans l'eds et le faire partir toutes les 10 millisecondes, les PDO peuvent fonctionner comme celà. C'est un travail très conséquent malgré tout.

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/10/2006, 18h37
  2. Réponses: 2
    Dernier message: 09/09/2006, 21h08
  3. ajouter une variable sur un control
    Par gijy dans le forum MFC
    Réponses: 15
    Dernier message: 21/03/2006, 18h18
  4. Envoi d'une variable en shell script sur php
    Par Ponchi dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2006, 13h54
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo