Pb Port Série / RS232 (valeur max envoyée = 127) [Résolu]

Messages postés
3
Date d'inscription
samedi 6 janvier 2007
Dernière intervention
10 mai 2008
- - Dernière réponse : ghmarisamira
Messages postés
10
Date d'inscription
samedi 21 juin 2008
Dernière intervention
13 avril 2009
- 13 avril 2009 à 19:29
Bonjour,

J'ai un soucis concernant la programmation du port série avec Visual Basic 2005 et 2008 Express :
bien
que j'ai configuré DataBits = 8, lorsque  j'envoie un caractère dont le
code ASCII est supérieur à 127 à la réception j'obtiens le caractère
'?' à la place du caractère envoyé.
Donc, impossible d'envoyer '?', 'é', 'à'...

Est-ce que quelqu'un aurait une idée pour résoudre ce problème ???

Merci par avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3
Date d'inscription
samedi 6 janvier 2007
Dernière intervention
10 mai 2008
3
Merci
J'ai trouvé une solution à mon problème et c'est grace à Gilles TOURREAU du forum de MSDN France qui me disait que "




la méthode Write() avec un seul paramètre, prend en paramètre un String... Les String sous .NET sont au format Unicode (16-bit)"












J'ai
donc transformé tous les caractères de ma chaine en Byte avant de les
envoyer, pour les recevoir de l'autre coté en Byte aussi.

Ci-dessous le code des 2 fonctions, des fois que cela puisse intéresser quelqu'un :

    Private Sub Send_Data()
        Dim nbchar As Integer = tb_send.Text.Length
        Dim chartosend(nbchar) As Byte
        Dim i As Integer

        If SerialPort.IsOpen = True Then
            For i = 0 To nbchar - 1
                chartosend(i) = Asc(tb_send.Text.Chars(i))
            Next
            SerialPort.Write(chartosend, 0, nbchar)
        End If
    End Sub

    Private Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As
                                        System.IO.Ports.SerialDataReceivedEventArgs)
                                        Handles SerialPort.DataReceived
        Dim nbchar As Integer = SerialPort.BytesToRead
        Dim chartoreceive(nbchar) As Byte
        Dim texte As String = ""
        Dim i As Integer

        SerialPort.Read(chartoreceive, 0, nbchar)
        For i = 0 To nbchar - 1
            texte = texte + Chr(chartoreceive(i))
        Next
        tb_received.AppendText(texte)
        tb_received.AppendText(vbCrLf)
    End Sub

Merci pour votre aide.

Salutations

PS : si vous trouvez plus simple je suis preneur !!!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de edorul
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
73
0
Merci
Salut
La connexion série n'y est pour rien.
C'est ta traduction CodeAscii --> Caractère qu'il faut remettre en cause.
Il est possible que l'émetteur envoie des code ANSI (ISO 8859-1) et pas ASCII (à voir dans la doc technique de l'appareil).
C'est la même chose pour les caractères "standards" mais l'emplacement de certaines lettres accentuées diffèrent.

Je pense que sous .Net, il doit y avoir une classe qui permet cette conversion (pas le temps de chercher)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
3
Date d'inscription
samedi 6 janvier 2007
Dernière intervention
10 mai 2008
0
Merci
Merci pour votre réponse rapide.
Mais, il ne semble pas que le problème vienne de là, car pour mes tests : mon programme communique avec lui-même sur la même machine (j'utilise les 2 ports série et un cable croisé).
Deplus, si j'affiche à l'écran le caractère dont le code ASCII est 128, j'ai '?'. Par contre, s'il passe par le port série j'obtient encore et toujours '?', code 63.
J'ai un autre programme de test du port série (c'est un utilitaire contenu dans MikroBasic - un basic pour microcontroleurs), que j'utilise sur la même machine, qui lui s'envoie et (se) reçoit les bons caractères.
Donc, le problème doit provenir l'initialisation, de l'envoi des caractères ou de la classe de VB gèrant le port série ?!?

Salutations.
Commenter la réponse de edorul
Messages postés
10
Date d'inscription
samedi 21 juin 2008
Dernière intervention
13 avril 2009
0
Merci
salut,je veux envoyer des données vers un port serie sous forme des codes et je sais pas comment le faire dés le début.qlq'un peut m'aider!
Commenter la réponse de ghmarisamira
Messages postés
10
Date d'inscription
samedi 21 juin 2008
Dernière intervention
13 avril 2009
0
Merci
salut,je veux envoyer des données vers un port serie sous forme des codes et je sais pas comment le faire dés le début.qlq'un peut m'aider!
Commenter la réponse de ghmarisamira

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.