valviet
Messages postés10Date d'inscriptionvendredi 16 avril 2010StatutMembreDernière intervention 7 juillet 2010
-
14 juin 2010 à 12:08
valviet
Messages postés10Date d'inscriptionvendredi 16 avril 2010StatutMembreDernière intervention 7 juillet 2010
-
15 juin 2010 à 08:44
Bonjour,
Je communique avec un automate via le protocole ModBus.
j'envoie donc des trames et l'automate me répond, j'affiche la réponse de l'automate dans un text box.
Mais j'aimerais récupérer seulement 2 octet de la trame car ces deux derniers contiennent une valeur dont j'ai besoin pour une supervision
For i = 1 To Len(tampon)
VarTest = VarTest & Asc(Mid(tampon, i, 1))
Next i
Text2.Text = VarTest
Je modifie donc les données de l'automate en les transformant de l'ascii au décimal.
la réponse affiché dans le textbox : " 142956190178 " [*] 1 adresse
[*] 4 = fonction
[*] 2 = Nombre d'octet
[*] 9 = Valeur premier mot (données)
[*] 56 = Données
[*] 190 = CRC
[*] 178 CRC
j'aimerais donc simplement récupérer les 2 octet des données et les affichés dans un text box.
Ps: le thème je ne savais vraiment pas quoi mettre :x
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 14 juin 2010 à 22:31
Bonjour,
Si c'est pour extraire les 2 derniers octets (ou le dernier mot) de données :
Mot=Asc(Mid(tampon, Len(tampon)-3, 1))*256+Asc(Mid(tampon,Len(tampon)-2, 1))
De préférence, extrait en binaire, dans un tableau, plutot que dans une chaine, car il est possible que les données soient altérées.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 14 juin 2010 à 13:39
Bonjour,
A la place de :
VarTest = VarTest & Asc(Mid(tampon, i, 1))
essaye de faire en hexadécimal :
VarTest = VarTest & right$("0" & hex$(Mid$(tampon, i, 1)),2) & " "
Tu y verra plus clair
Ensuite, dis précisément sur quoi tu bloques.
valviet
Messages postés10Date d'inscriptionvendredi 16 avril 2010StatutMembreDernière intervention 7 juillet 2010 14 juin 2010 à 14:25
Si je met " VarTest = VarTest & right$("0" & hex$(Mid$(tampon, i, 1)),2) & " " "
il aime pas, sa me met une erreur "Type incompatible" j'ai déclarer VarTest comme étant un string peut être pour ça
En quelque sorte je cherche si il n'y a pas moyen d'extraire un peu plus facilement les 2 octet qui m'intéressent ^^ (une fonction doit bien existé :P)
pour le moment je procède comme ça :
Private Sub MSComm1_OnComm()
Dim tampon As String
Dim i As Integer
Dim Test As String
Dim Affichage As String
Select Case MSComm1.CommEvent '
Case comEvReceive
tampon = MSComm1.Input
For i = 1 To Len(tampon)
VarTest = VarTest & Asc(Mid(tampon, i, 1)) & " "
Next i
Text2.Text = VarTest
Test = (Left(VarTest, 13))
Affichage = (Right(Test, 7))
MsgBox (Affichage)
End Select
End Sub
Mais c'est moche et sa fonctionne une fois sur deux .