VS 2008 Envoie de Bytes sur le port serie à partir d'un String composés de Bytes

Signaler
Messages postés
4
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
5 septembre 2011
-
Messages postés
4
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
5 septembre 2011
-
Hello à tous, je sollicite votre aide pour un bout de code que je n'arrive décidément pas à mettre en place (mon projet est fini à 99% )

Voilà mon problème

J'ai réalisé une simple application pour réceptionner des Bytes du port serie et les envoyer via Socket à une autre application qui me renvoie le même nombre de Bytes (différents) toujours via Socket

Mais losque j'essaye de renvoyer les bytes reçus vers le port série rien ne va plus !  (les bytes reçu sont concaténés dans un String)

En effet, Comment envoyer un String composé de Bytes (exemple:  "FADC56EC90A2EE5BDACB")

La plupart de code que j'ai trouvé envoie un string vers le port rs232 en le transmortant en byte au préalable
Par exemple

Dim b As Byte()

b = Encoding.Default.GetBytes(sockstring)) 'dans sockstring on trouve le string FADC56EC90A2EE5BDACB

SerialPort.Write(b, 0, b.Length)

Le code prend la chaine sockstring comme un simple string (du genre "hello World")

Votre aide sera la bienvenue

Pour info, voici la procédure que j'utilise pour lire les bytes sur le port série

 Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
        Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
        Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte

        RS232.Read(trame, 0, nb_octet) 'on lit le port

        Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII

        'On va convertir tous les octets du tableau en valeurs Hexadecimal pour les afficher à l'écran
        Array.ForEach(Of Byte)(trame, AddressOf Trt_Trame)

    End Sub

    Private Sub Trt_Trame(ByVal bit As Byte)
        'on appelle le délégué pour afficher les données

            If Me.InvokeRequired Then
                Me.Invoke(New _affiche_Hexa(AddressOf Affiche_Hexa), Hex(bit).PadLeft(2, "0"))
            End If
    End Sub

    Private Sub Affiche_Hexa(ByVal donnee As String)
        RTB_Hexa.AppendText(donnee) 'on affiche les données à l'écran
    End Sub

Merci d'avance

ps:  les data viennent d'un port µControleur vie son port UART

3 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Ok pour la réception, mais ton problème est sur l'envoie, non?

comment fais-tu l'envoie ?

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
4
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
5 septembre 2011

Oui comme je l'ai précédemment dit, Tout beigne sauf l'envoie des datas

Je sais recevoir du Port série
Envoyer et Recevoir via Winsock

Mais là où sa foire c'est envoyer un string constitué de Byte (ex: FADC56EC90A2EE5BDACB)
vers le port série

Comment faire?

Merci
Messages postés
4
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
5 septembre 2011

J'ai trouvé

Je transforme le string en Ascii puis seulement j'utilise le Bytes array pour l'envoie sur RS232

For x = 1 To tstring.Length Step 2
                buffer = Strings.Mid(tstring, x, 2)
                output = output + TxConv(buffer)  ' Appel d'une procedure de transformation Byte en Ascii (tirée de VB6....je sais j'ai honte)
Next

Dim b As Byte()

b = Encoding.Default.GetBytes(output)

RS232.Write(b, 0, b.Length)