Modbus

Résolu
valviet Messages postés 10 Date d'inscription vendredi 16 avril 2010 Statut Membre Dernière intervention 7 juillet 2010 - 14 juin 2010 à 12:08
valviet Messages postés 10 Date d'inscription vendredi 16 avril 2010 Statut Membre Derniè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

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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.

Mon site
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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.

Mon site
0
valviet Messages postés 10 Date d'inscription vendredi 16 avril 2010 Statut Membre Derniè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 .
0
valviet Messages postés 10 Date d'inscription vendredi 16 avril 2010 Statut Membre Dernière intervention 7 juillet 2010
15 juin 2010 à 08:44
Cela marche nikel :)
Merci pour vos réponses
0
Rejoignez-nous