Optimiser la fonction datareceived

cs_daerken Messages postés 15 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 23 avril 2012 - 19 avril 2012 à 23:16
cs_daerken Messages postés 15 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 23 avril 2012 - 24 avril 2012 à 14:39
Bonjour à tous,

Je dois optimiser un logiciel déjà développé avec visual basic.
Pour résumer :
Le logiciel doit traiter des trames de réponses via le port série RS232.
Ces réponses sont en fait provoqués par des commandes que nous envoyons à la machine.

On à trois commandes et donc on souhaite pouvoir traiter 3 trames de réponses.
La fonction datareceived est utilisé afin de traiter les octets de réponses.

Le développeur me précédent (loin de penser que je suis un développeur !^^)à utilisé trois timers afin de laisser le temps à la fonction Datareceived de traiter les données il me semble car si je ne me trompe pas la fonction Datareceived s'exécute automatiquement lors de l'émission d'une réponse mais travail au second plan donc n'arrête pas l'exécution du code.
Voici mon problème : Je souhaite ne plus avoir de timers car il me semble que ça ralentit beaucoup l'application.

Pour l'instant je n'ai pas de solution car je ne comprends pas assez bien comment marche le fonction Datareceived.
J'aimerai connaître votre point de vue.

J'espère avoir été assez clair :s

Ps : Si vous avez besoin du code je le mettrait mais j'ai pas voulut encombrer le post avec.

Merci beaucoup.

22 réponses

Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
24 avril 2012 à 11:16
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
     Handles MyBase.Load
    SerialPort.Open()

    Dim xmtBuf() As Byte = {&HBE, &HEF, &H10, &H5, &H0, &HC6, &HFF, &H11, &H11, &H1, &H0, &H1}

    vga = "1"
    serie = "1"
    lampe = "0"
    SerialPort.Write(xmtBuf, 0, xmtBuf.Length)
    Timer_source.Enabled = True

End Sub


Private Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
    Handles SerialPort.DataReceived

    Dim Count As Integer = SerialPort.BytesToRead
    Dim Buffer(0 To Count - 1) As Byte
    Dim Text2Display As String = ""

    serie = "0"
    SerialPort.Read(Buffer, 0, Count)
    For I As Integer = 0 To Buffer.GetUpperBound(0)
        Text2Display += Buffer(I).ToString("X2") & " "
    Next

    If Text2Display = "00 26 00" Then
        vga = "0"
        affichage(Text2Display)
        'ici tu case ton second test qu'il y a su ton timer
       
    End If



    If Microsoft.VisualBasic.Left(Text2Display, 5) = "00 2F" Then
        lampe = Microsoft.VisualBasic.Right(Text2Display, 6)
        'ici le 3eme test ou alors tu cloture le port


    End If
    affichage(Text2Display)
End Sub


Private Sub affichage(ByVal [text] As String)
    If Me.ecoute.InvokeRequired Then
        Dim d As New SetTextCallback(AddressOf affichage)
        Me.Invoke(d, New Object() {[text]})
    Else
        Me.ecoute.Text = [text]
    End If
End Sub


Private Sub Timer_source_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_source.Tick
    Dim xmtBuf() As Byte = {&HBE, &HEF, &H10, &H5, &H0, &HDC, &HBF, &H11, &H11, &H1, &H0, &H26}
    SerialPort.Write(xmtBuf, 0, xmtBuf.Length)
    ecoute.Text = "source"
    Timer_source.Enabled = False
    Timer_lampe.Enabled = True
End Sub


j'ai mit des annotation

en utilisant cela tu n'a plus que 1 timer
0
cs_daerken Messages postés 15 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 23 avril 2012
24 avril 2012 à 14:39
Merci beaucoup de ton aide :).
0
Rejoignez-nous