- Ouvrir un port série en VB
- Envoyer une trame en ModBus
- Recevoir une trame en ModBus
- Le CRC16 en ModBus
- Constructeurs de trame ModBus
- Décodage de trame ModBus reçue
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.
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