Petit problème avec mon port série.

Signaler
Messages postés
16
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
4 juin 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour à tous,
je suis entrain de programmer un petit logiciel pour m'aider dans mon travail.
Je dois communiquer en passant par un port série avec un appareil de la société dans laquelle je bosse.
Mon seul soucis se situe au niveau des informations que je reçoit de cet appareil lorsque je lance une requête.
J'utilise HDD Free serial port monitor pour voir ce qui se passe.
Je reçois bien une réponse au format hexadécimal : 01 1F 00 0A 00 08 00 00 00 00 00 00 00 00 1C
Ce qui est exact mais le soucis c'est que lorsque je veux faire apparaître cette réponse dans un textbox il m'affiche deux petit carré??
Pouvez-vous s'il vous plaît m'aider?? J'utilise Visual Studio 2008.
Merci.
Voici la partie de mon code qui nous intéresse:
Imports Microsoft.Win32

Public Class Form1
    Dim WithEvents serialPort As New IO.Ports.SerialPort
    Private Sub CommencerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommencerToolStripMenuItem.Click
        rk = Registry.CurrentUser.CreateSubKey("SOFTWARE\montool")
        Dim port_busmanager As String
        port_busmanager = rk.GetValue("Port_busmanager")
        If port_busmanager = "" Then
            MsgBox("Veuillez indiquer le port série à utiliser dans les options.")
            Me.Close()
            Exit Sub
        End If
        If serialPort.IsOpen Then
            serialPort.Close()
        End If
        Try
            With serialPort
                .PortName = port_busmanager
                .BaudRate = 19200
                .Parity = IO.Ports.Parity.Even
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                .ReadBufferSize = 128
                .DtrEnable = 1
            End With
            serialPort.Open()
        Catch ex As Exception
            MsgBox(ex.ToString)
            Exit Sub
        End Try
        serialPort.Write(Chr(&H1) & Chr(&H1F) & Chr(&H0) & Chr(&H0) & Chr(&H1E))
        Label27.Hide()
        GroupBox6.Show()
    End Sub

    Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
        TextBox2.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
    End Sub

    Public Delegate Sub myDelegate()
    Public Sub updateTextBox()
        TextBox2.Text = serialPort.ReadExisting
    End Sub
End Class

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Parce que ce que tu reçois, ce sont des chiffres (Bytes) et qu'ils ne correspondent pas à des caractères ASCII "imprimables".

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
16
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
4 juin 2012

Ok et je fais comment pour les convertir?


On est libre d'être con mais con de se croire libre
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Bah tu transformes chaque Byte en hexa afin de ressembler à l'exemple fourni
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Donc il faudra peut-être d'abord convertir la chaine que tu reçois en un tableau de Bytes
Messages postés
16
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
4 juin 2012

J'ai essayé mais j'ai une erreur à chaque fois que je j'essaie de mettre une boucle for.
SVP aidez-moi!

On est libre d'être con mais con de se croire libre
Messages postés
16
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
4 juin 2012

ca y est c'est bon j'ai trouvé.
Il suffit de lire les octet dans un tableau comme ceci:
serialPort.Read(lectures, 0, 15)


lol maintenant j'aurai une dernière question.
Pouvez-vous me dire comment on fait pour savoir lorsque la réponse donné lors d'une requête est fini.
Je veux dire j'ai plusieurs requête à envoyer à l'appareil mais je dois attendre la réponse à chaque fois mais je ne sais pas comment faire pour attendre cette réponse.
Merci pour votre aide !!
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Je pense que c'est la fin du message reçu qui le déterminera.

D'après ce que tu as donné en exemple, je vois "1C" ou "00 1C".
1C décmal 28 FS = File Separator : c'est cohérent.

--> D'abord regarder dans la doc, sinon, se baser sur l'expérience des trames reçues.
Pour attendre une réponse, il faut monter un Booléen après une requète pour dire "En attente de réponse" et :
- lors de la réception : le passer à False quand tu vois le Byte final
- dans la sub qui fait les requète, sortir de la Sub si en attente, ou ajouter une boucle d'attente de la valeur False (pas trop conseillé)