winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 octobre 2008
-
13 oct. 2008 à 17:07
winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 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 .
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 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.
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 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
winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 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 -- <
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 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 -- <
winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 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.
winzip34
Messages postés5Date d'inscriptionmardi 12 décembre 2006StatutMembreDernière intervention20 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.