Voici la dernière partie du code pour le ModBus en VB.

    Public Function ReadDecoder(ByVal ligne As String)
        'Passage de la trame en Array
        Dim MyBytes As Array = Split(ligne, "/")
        Dim i, partie1, partie2 As Integer
        Dim grille As ListView
        Dim ReponseValeur As String
        Dim MyValue As Array

        'Remplissage table
        Dim _AliasDBData As New GTCDataSet.AliasDBDataTable
        Dim _AliasDBAdapter As New GTCDataSetTableAdapters.AliasDBTableAdapter
        _AliasDBAdapter.Fill(_AliasDBData)

        If MyBytes(1) = "" Then 'Erreur de retour Trame
            Return 0
        Else 'Pas d'erreur
            For i = 4 To UBound(MyBytes) - 1
                If i / 2 = Int(i / 2) Then 'nombre pair

                    partie1 = MyBytes(i - 1)
                    partie2 = MyBytes(i)

                End If
            Next i
        End If
        Return 0
    End Function

La trame ModBus de retour est composé de plusieurs données :

{num esclave} {fonction} {nbr de valeurs} {valeur 1, partie 1} {valeur 1, partie 2}…{CRC1}{CRC2}

Pour avoir valeur 1 en entier, il faut combiner les deux parties en hexadécimale, puis reconvertir en décimal. C’est pour cette raison qu’on récupère les nombres paires et que pour chaque « i » pair, on récupère deux valeurs.

La traitement des données est à votre charge. Mais par exemple, quand vous demandez en trame X mots à partir de l’adresse Y, vous savez que pour i = 4, adresse = Y.

Si vous avez besoin d’infos supplémentaires, n’hésitez pas à demander.

One thought on “Décodage de trame ModBus reçue”
  1. merci beaucoup c’est très intéressant la série des tuto que vous avez faite , j’en ai vraiment besoin. Vous recevrez plein de questions de ma part!
    bonne continuation

Laisser un commentaire