edorul
Messages postés3Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention10 mai 2008
-
10 mai 2008 à 13:51
ghmarisamira
Messages postés10Date d'inscriptionsamedi 21 juin 2008StatutMembreDernière intervention13 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 ???
edorul
Messages postés3Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention10 mai 2008 10 mai 2008 à 20:25
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 !!!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 mai 2008 à 16:57
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)
edorul
Messages postés3Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention10 mai 2008 10 mai 2008 à 18:26
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 ?!?