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

VB.NET Discussion :

lecture port com


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut lecture port com
    Bonjour,

    je pense que je n'ai pas posté ce message dans le bon forum, c'est pourquoi je me permet de le replacer ici, j'espere que les modérateur m'excuseront.

    donc voici mon probleme:

    j'ai fait un petit programme en vb pour lire des code venant d'un pic(16F628A),
    celui-ci m'envoi des code hexa qui sont interpreter en ascii par le pc,
    je les transforme en suite en code decimale que j'affiche dans un label.

    le probleme est que tout les code envoié supérieure à 128 decimale sont considérer par le pc comme des "?" (code ascii 63).

    j'ai vu que la fonction de lecture readexisting me rend une chaine de ce type:
    "??345678" les 2 "?" correspondant au code hexa 129 et 130.

    que puisje faire pour régler ce probleme afin de pouvoir afficher 129 et 130 dans mon label?


    voici la configuration de ma variable port Com de mon formulaire FormStart:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FormStart.Com = My.Computer.Ports.OpenSerialPo rt(Me.ComboBox1.SelectedItem)
    FormStart.Com.BaudRate = 9600
    FormStart.Com.Parity = IO.Ports.Parity.None
    FormStart.Com.DataBits = 8
    FormStart.Com.StopBits = 1
    FormStart.Com.Handshake = IO.Ports.Handshake.None
    et voici comment je lis le port com:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    receive_string = Com.ReadExisting
    merci pour votre aide.

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Je ne comprends pas trop, tu dis que ton Pic t'envois des codes hexadécimaux, la chaine que tu donnes en exemple (??345678) ne correspond pas à ça. D'où vient-elle ? C'est une chaine de code hexa que ton programme a déjà traduit en caractères ASCII ?
    Que veux tu afficher au juste 129 et 130 ou les caractères dont le code ASCII est 129 ou 130 ?

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    essaye de travailler en octet et de transformer après
    donc readbytes au lieu de readexisting (et sendbytes)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut
    Les code envoyer par le pic sont en hexadecimal,

    j'ai vu qu'il était interpreter par le pc (code vba) avec readexisting comme des code ascii

    voici la string envoier par le pic en decimale " 128 129 51 52 53 54 55 56"
    ou en hexa "80 81 33 34 35 36 37 38"

    c'est pourquoi la chaine que je recois est "??345678" car avec readexisting on recois une string.

    le code envoier par le pic 129 decimal (ou 81 hex) donne ? (caractere ascii) pour le vba
    51 decimal (ou 33 hex) donne 3 (caractere asii) pour le vba

    mon probleme est donc que j'envoi un code hexa qui est interpreter comme code asii par mon programme vba, j'arrive a convertir grace à la fonction ASC() le caratere asii en code decimal, mais cela ne fonctionne plus pour les code hexa superieure à 7F hex ou 127 decimal.

    je vais essayer avec read byte.

    merci pour votre aide.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Par défaut
    voila j'ai essayer aver redbyte et cela fonctionne mieux, merci.

    mais j'ai un autre probleme.

    je recois du pic une trame de 8 bytes toutes les 20 ms + ou -.

    les code recus s'ajoute donc constament dans le buffer de reception, ce qui me donne une enorme trame apres seulement quelque seconde "128 51 52 53 ..."

    le pic termine toujours une trame par 13 dec (CR = retour a la ligne)

    je test donc le debut de la trame en attendant le code 13 pour ensuite debuter la lecture des 8 bytes à la suite l'un de l'autre.

    le probleme est que lorsque j'arrette le pic le code vb continue a afficher les trame car le buffer n'est pas vide.

    comment puisje faire pour effacer le buffer apres en avoir lu l'information dont j'ai besoin.

    j'ai utilisé un timer (1s) pour la lecture du port com, exiterait il une facon de créer un evenement sur reception d'un byte ?

    merci de vos reponse.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            Dim receive_string As String = ""
     
            'attente du CR "13"
            Do Until receive_string = "13"
                receive_string = Com.ReadByte
            Loop
     
            'reception de la trame de 8 byte
            Label1.Text = Com.ReadByte
            Label2.Text = Com.ReadByte
            Label3.Text = Com.ReadByte
            Label4.Text = Com.ReadByte
            Label5.Text = Com.ReadByte
            Label6.Text = Com.ReadByte
            Label7.Text = Com.ReadByte
            Label8.Text = Com.ReadByte
     
            Label10.Text = "Reception OK"
            Label10.BackColor = Color.Lime
     
     
            Label9.Text = My.Computer.Clock.LocalTime.ToLongTimeString
     
        End Sub

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il ne faut pas faire ca sur un timer
    il y a en effet un évènement qui signale l'arrivée d'octets
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Ecriture et lecture port COM
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 5
    Dernier message: 12/04/2015, 04h29
  2. lecture port COM sur event
    Par fantasiopop dans le forum Développement OS X
    Réponses: 0
    Dernier message: 09/10/2014, 09h15
  3. Lecture port COM problème
    Par seb-65 dans le forum WinDev
    Réponses: 13
    Dernier message: 19/09/2012, 02h18
  4. [débutant]Lecture port COM avec configue
    Par kyoleroi dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 12h02
  5. Lecture / écriture sur un port com
    Par dorian833 dans le forum C++
    Réponses: 7
    Dernier message: 07/07/2005, 15h20

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