Petit problème avec mon port série.

cs_plastik Messages postés 16 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 4 juin 2012 - 24 mai 2011 à 12:46
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 24 mai 2011 à 19:42
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 mai 2011 à 13:59
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)
0
cs_plastik Messages postés 16 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 4 juin 2012
24 mai 2011 à 14:39
Ok et je fais comment pour les convertir?


On est libre d'être con mais con de se croire libre
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 mai 2011 à 15:28
Bah tu transformes chaque Byte en hexa afin de ressembler à l'exemple fourni
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 mai 2011 à 15:30
Donc il faudra peut-être d'abord convertir la chaine que tu reçois en un tableau de Bytes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_plastik Messages postés 16 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 4 juin 2012
24 mai 2011 à 16:07
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
0
cs_plastik Messages postés 16 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 4 juin 2012
24 mai 2011 à 16:52
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 !!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 mai 2011 à 19:42
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é)
0
Rejoignez-nous