Traitement trame

winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008 - 13 oct. 2008 à 17:07
winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008 - 14 oct. 2008 à 12:22
Salut quelqu'un pourrais m'aider s'il vous plait!!!!
Je suis débutant en vb et j'aimerais savoir comment traiter une trame que je sniff avec un programme rs232 que j'ai réalisé.En faite ma trame et constituer comme suit <CR>;ABC;A5;DEF;N;14....<LF>
en faite le ABC varie
et j'aimerais que des qu'il y a ABC ben voir si ya DEF et si ok ben recuperer N a ce moment la avec l'heure.En gros les trames sont snifer en continuer et jaimerais des que ces parametres y sont ben recuperer N.Merci de me repondre au plus vite c tres urgent .

8 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
13 oct. 2008 à 17:29
Déjà il te faut te caler que le <CR>, ensuite il te faut lire la trame jusqu'au <LF> comme une seule chaine de caractère.

Ensuite, ta trame semble bien se prêtée à un Split. Tu peux donc le faire sur le caractère ;
Tu récupèrera un tableau de chaines de caractères. Il te suffit de regarder l'élément 1 du tableau, s'il est égal à ABC, tu regarde l'élément 3, s'il égal à DEF, tu prend l'élément 4 ainsi que celui correspondant à l'heure.

Je t'invite à regarder l'aide de VB6 sur la fonction Split

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008
13 oct. 2008 à 18:00
Merci popur ta reponse casy mais les trames qui passe sur le mscomm ne sont jamais de la meme taille. Et je c pas comment gerer le <CR> et le <LF> car g plusieurs trame qui arrivent.Les donnees dont g besoin peuvent etre sur la 1ere et la 2eme et la 4eme ainsi dessuite.
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
13 oct. 2008 à 19:37
Salut,
Tu utilise un automate....
Tu regarde la trame recu au fur et à mesure et quand tu as le caractere <LF> tu traite ta trame reçu que tu as stocké dans une variable....
Bon courage
0
winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008
14 oct. 2008 à 00:24
Oui j'ai reussi mais le souci c ke des ke je rentre la bonne trame au debut sa marche mais des ke jen recoit d'autre sa ne marche plus il me prend plus le <LF> en compte
il me prend toute la chaine ou il y a plusieur <LF>.J'ai essayé de vider la variable apres chaque <LF> apres traitement mais sa ne marche pas.

Private Sub MSComm1_OnComm()
Dim tampon As String


Select Case MSComm1.CommEvent
   
    Case comEvReceive
       
        Call Traitement(MSComm1.Input)
       
End Select


End Sub

Private Sub Traitement(tampon As Variant)
Dim ligne As String




Recu.SelStart = Len(Recu.Text)
Recu.SelText = tampon


ligne = tampon
If InStr(1, Recu.Text, "<LF>", vbTextCompare) Then
Text1.Text = ligne
ligne = Recu.Text
ligne2 = Recherche(ligne, "<CR>", ";<LF>")
End If
If InStr(1, ligne2, "STL;A1;LKL", vbTextCompare) Then
Text2.Text = Recherche(ligne2, "LKL;", ";")
Recu.Text = ""
End If




Public Function Recherche(Texte As String, Expression_debut As String, Expression_fin As String) As String
Dim Variable, Valeur As Variant
Valeur = Split(Texte, Expression_debut)
Variable = Split(Valeur(1), Expression_fin)
Recherche = Variable(0)
End Function

Voila mon code si quelqu'un pourrais me corriger svp car je ni arrive pas.Merci d'avance.
0

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

Posez votre question
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
14 oct. 2008 à 08:02
Salut,

Tu déclare une variable et tu stockes ce que tu reçois dans ta variable et c'est ta variable que tu traite par l'intermediare de ton automate

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
14 oct. 2008 à 08:23
Re:
Après réflexion...

Private Sub MSComm1_OnComm()
Dim tampon As String
Select Case MSComm1.CommEvent
   
    Case comEvReceive
        tampon = MSComm1.input
        Call Traitement(tampon)
       
End Select

End Sub

Private Sub Traitement(tampon As string) --> Le variant est peu judicieux
Dim ligne As String

Recu.SelStart = Len(Recu.Text) --> Recu c'est quoi?
Recu.SelText = tampon

ligne = tampon --> quel est l'intérêt?
'-- Si on trouve le caractère <LF> est trouvé dans la chaine Recu.text alors
'-- Text1.text = ligne   ---> Que cherches tu as faire???
If InStr(1, Recu.Text, "<LF>", vbTextCompare) Then
   Text1.Text = ligne
   ligne = Recu.Text
   ligne2 = Recherche(ligne, "<CR>", ";<LF>")
End If
If InStr(1, ligne2, "STL;A1;LKL", vbTextCompare) Then
   Text2.Text = Recherche(ligne2, "LKL;", ";")
   Recu.Text = ""
End If

Public Function Recherche(Texte As String, Expression_debut As String, Expression_fin As String) As String
   Dim Variable, Valeur As Variant
   Valeur = Split(Texte, Expression_debut)
   Variable = Split(Valeur(1), Expression_fin)
   Recherche = Variable(0)
End Function
--> que cherche tu dans ce traitement?

Ce que je propose :
Private Sub MSComm1_OnComm()
Dim strBufferAs String
Select Case MSComm1.CommEvent 
    Case comEvReceive
                strBuffer = strBuffer & Communique.Input
                If InStr(strBuffer, "<LF>") > 0 Then
                    '-- Le timer permet de surveiller la fin de chaine ou le timeout
                    TimerEOF.Enabled = False
                    Call Automate("TraitementInter")
                End If
End Select
End Sub

Private Sub Automate(Situation As String)
  Select Case Situation
        Case "TimeOut"                '-- Gestion du TimeOut
            '-- On vérifie que l'on a pas reçu d'information
            If rsResultat.RecordCount > 0 Then
                '-- On a des informations on lance la commande de traitement
                Automate ("TraitementFinal")
            Else
                '-- On a pas d'information et on défini une variable en mode erreur
                TypeErreur = "TimeOut"
            End If
        Case "ErreurReception"        '-- Erreur dans la réception
            TypeErreur = "ErrRcpt"
            TimerTimeOut.Enabled = True
        Case "TraitementInter"
            DoEvents
            '-- On stocke dans un recordset le resultat et c'est ce resultat qu'on traite
            Do While InStr(strBuffer, "<LF>")
                strbuffer2 = Left(strBuffer, InStr(strBuffer, "<CR>"))
                rsResultat.AddNew
                rsResultat!ligne.Value = strbuffer2
                rsResultat.Update
                strBuffer = Right(strBuffer, Len(strBuffer) - InStr(strBuffer, "<LF>"))
            Loop
            TimerTimeOut.Enabled = True
            TypeErreur = "TrtmtInter"
        Case "TraitementFinal"
            rsResultat.AddNew
            rsResultat!ligne.Value = strBuffer
            rsResultat.Update
            rsResultat.MoveFirst
            TypeErreur = "BufferFinal"
            TimerTimeOut.Enabled = False
        Case "PBConnexion"            '-- Erreur dans la connexion au module
            TypeErreur = "ErrCnx"
            TimerTimeOut.Enabled = True
    End Select
End Sub

Après adapte à ton cas, il se peut que j'ai laissé passer des choses mais je n'ai pas toutes les données de ton problème

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
0
winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008
14 oct. 2008 à 08:45
Je comprend pas trop ton code lillith212.Ce que je recherche a faire c'est dans chaque trame qui arrive voir si il ya la commande ABC et si DC alors recuperer N dans un tableau avec l'heure a laquelle c apparu sur une trame de ce style <CR>;ABC;A6;DC;N;152;<LF> et sa en continu sur les donnees qui arrivent sur le port com.Donc la difficulté et de faire cette verif en continu car les trame ne contiennent pas toutes l'information que je desire.MERCI SI ON POURRAIS M'AIDER CAR JE BLOQUE.
0
winzip34 Messages postés 5 Date d'inscription mardi 12 décembre 2006 Statut Membre Dernière intervention 20 octobre 2008
14 oct. 2008 à 12:22
Je comprend pas trop ton code lillith212 du moins de rsResultat car je n'ai jamais utilisé un recordset,j'ai vu un tuto dessus mais vu que je suis debutant ben comprend pas trop.Ou recupere tu les donnée à quoi servent tes timer??????Ce que je recherche a faire c'est dans chaque trame qui arrive voir si il ya la commande ABC et si DC alors recuperer N dans un tableau avec l'heure a laquelle c apparu sur une trame de ce style <CR>;ABC;A6;DC;N;152;<LF> et sa en continu sur les donnees qui arrivent sur le port com.Donc la difficulté et de faire cette verif en continu car les trame ne contiennent pas toutes l'information que je desire.MERCI SI ON POURRAIS M'AIDER CAR JE BLOQUE.
0
Rejoignez-nous