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

LabVIEW Discussion :

Erreur sur fonction READ (Communication Série)


Sujet :

LabVIEW

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut Erreur sur fonction READ (Communication Série)
    Bonjour,

    J'ai un soucis et je n'arrive pas à le régler.
    En faite je communique avec un appareil électrique via une liaison RS232. Donc je fait une simple écriture/lecture, avec les bonne configurations.

    J'ai des commandes spécifiques pour commander par exemple la tension de la phase 1 de l'appareil etc... Ces commandes sont entrée dans la fonction WRITE via une chaine. Ex de commande : U1,230.000\nSET\n.

    Le soucis arrive au niveau de la fonction READ.
    Dès que je position 8 octets ou moins à l'entrée de la fonction READ, je ne reçois aucune erreur.

    Parcontre dès que je dépasse 8 octet je reçois une erreur de timeout. Mais le soucis c'est que dans les deux cas ma commande s'éxecute mais dans un des cas il y a une erreur...

    Et biensur je souhaiter avoir une fonction READ avec plus de 8 octet car je souhaiterais lire les valeurs dans un indicateur.

    Avez-vous une idée de mon problème?

    Merci d'avance,

    Cordialement,

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Salut,

    Si tu as une erreur si tu veux lire plus de 8 octets, c'est qu'il n'y a pas plus de 8 octets à lire car la fonction ne fait que lire le nombre d'octets voulus.

    Si tu en veux plus, et que tu es sur qu'il y en a plus, mets un petite tempo avant la lecture pour permettre au buffer de se remplir proprement.

    Sinon, il existe une fonction ByteInSerialPort qui te retourne le nombre d'octets reçus. Il te suffit de mettre une boucle sur cette fonction en attendant le bon nombre (attention a prévoir quand même un time out).

    a+
    L'urgent est fait, l'impossible est en cours, pour les miracles, prévoir un délai et un bon thermos.
    Quant aux MP techniques, autant les poster sur le forum approprié car, là, ils auront des réponses.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    C'est un noeud de propriété du type "Number of byte at serial port" c'est bien ça?

    Avant je met une petite tempo aussi.

    Et après ma phase de configuration je peux aussi rajouter un "VISA Flush I/O Buffer " qui va vider le buffer?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    En rajoutant la fonction "Number of byte at serial port" mon problème de buffer à étais résolu.

    Parcontre j'aimerais savoir si vous aurez une idée de comment faire pour détecter la présence de communication ou non entre le PC et la liaison RS232.

    Je m'explique. Même si je déconnecte mon câble RS232, mon programme tourne sans problème et ne me retourne aucune erreur. Je chercherais à pouvoir faire au début de mon programme un test qui permetterais de voir si la laison est bonne ou non.

    J'ai rechercher des exempls mais sur la version 7.0 il n'y a pas grand chose a ce sujet.

    Merci d'avance,

    Cordialement,

  5. #5
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Salut,

    Il n'y a aucune gestion d'erreur integrée au COM. Il faut que tu l'integre toi-meme a ton protocole: quand tu envoie une trame, il faut que tu sache ce que tu dois recevoir ( format de la trame et nombre d'octet).
    Je suppose que, dans ton VI, tu ne gere pas le nombre d'octet. C'est pour cela que tu n'a pas d'erreur.

    Le FLUSH permet simplement de vider le buffer de données precedement recue mais inutile.
    De la meme maniere, la seule facon de savoir si ton matos est bien connecté est d'envoyer une commander est de tester la reponse ( c'est le principe de *IDN en GPIB qui retourne le nom de l'appareil).

    a+
    L'urgent est fait, l'impossible est en cours, pour les miracles, prévoir un délai et un bon thermos.
    Quant aux MP techniques, autant les poster sur le forum approprié car, là, ils auront des réponses.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    Ce que je remarque c'est par exemple lorsque j'écrit une commande dans WRITE et que mon cable est déconnecter. Le noeud de propriété "Number of Byte at port" entre la fonction WRITE et READ me renvoi 0.

    Si je peux crée une condiction si la valeur est égale à 0 c'est que le cable n'est pas connecté.

    Sauf je c'est pas trop comment le faire.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 37
    Points
    37
    Par défaut
    tu relis ta sortie a un comparateur =0.
    tu relis le booleen de sortie a une structure condition et tu met ce que tu veux dans la structure condition (boite de dialogue...)

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    Etant donné que mon programme devient compliqué j'ai un soucis.

    En faite j'ai penser à la même chose , une fonction comparaison mais moi ce que je souhaite c'est : lorsque le comparateur = 0, il mette dans mon indicateur les termes "Pas de connexion" et que le programme reprenne du départ en attendant que le bouton "Connecter" soit activer.

    Donc ce qu'il me manque c'est la possibilité que le programme revienne au départ.

    Ci-joint des images et mon programme (LV 7.0) pour que vous compreniez ce que j'essaye de dire.

    Merci d'avance à tous,

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 117
    Points : 69
    Points
    69
    Par défaut
    Pour faire une comparaison, il te faut un élément de comparaison mais aussi une structure qui va avec pour définir si la condition est vrai ou faux

  10. #10
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    Cela est fait, maintenant il faut que je puisse revenir au départ de mon programme. Car tant que la connexion n'est pas établie, il ne faut pas qu'il puisse continuer dans la suite du programme.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 117
    Points : 69
    Points
    69
    Par défaut
    hmmmm tu peux mettre une boucle while à la place de la condition.
    tu met dans ta boucle le début du programme, et tu le fais tourner jusqu'à ce qu'il soit différent de 0 et puis tu resors de ta boucle vers la suite de ton programme.

  12. #12
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Il me manque encore quelques petites chose pour que mon application soit fonctionnel. J'ai trouver le moyen de gérer le problème si le cable n'est pas connecter.

    Sur mon image, j'ai un bouton Ok qui va activer une séquence et après un bouton OFF qui va activer une autre s'équence.
    Autour dans tout ça se trouver une boucle while. Je voudrais que cette boucle while s'arrête dès que le noeud de propriété "Number bit of port" est égale à 0.

    Dans mon exemple je dois attendre la fin des séquences pour que ça puisse s'éxecuter. Moi je veux que ce soit immédiat, vue qu'aucun cable ne serait connecter alors.

    Si quelqu'un aurait une idée?

    Merci d'avance,

Discussions similaires

  1. Erreur sur fonction d'extraction des mots
    Par Siguillaume dans le forum Langage
    Réponses: 16
    Dernier message: 11/06/2008, 10h16
  2. Erreur sur Fonction PL/SQL
    Par boudou dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/10/2007, 08h34
  3. [MySQL] Erreur sur fonction PHP
    Par lothar59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/03/2007, 11h31
  4. [Débutant - Excel - Graph] Erreur sur changement nom de série
    Par seiryujay dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2006, 10h12
  5. Erreur sur fonction
    Par all4linux dans le forum C
    Réponses: 2
    Dernier message: 30/06/2006, 10h40

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