Info CRC 16 sur MODBUS JBUS

Cyril - 3 avril 2001 à 14:47
 nioupy - 27 juin 2001 à 14:36
Je cherche avoir la méthode de gérer sous VB6 pour implanter
le calcul du CRC 16 pour les trame Jbis

Merci d'avance
A voir également:

2 réponses

voici la fonction que j'utilise dans un de mes programmes... la valeur dont il faut calculer le crc est dans text1,
on affiche ensuite le crc, poid faible-poid fort dans crcval

'capture d'une chaine et transformation en héxa
texte$ = Text1.Text
tailletxt = Len(texte$) 'Text1.Text)
ReDim tabl(tailletxt \ 2)
Call texttohex(Len(texte$), texte$)
'///////////////////////////////////////////////

'calcul du CRC
Call calcul_crc(nboctets)
'////////////////////////////////////////////////

'inversion poid fort / poid faible du CRC pour l'envoi
a = crc And &HFF
b = crc And &HFF00
b = b \ &H100
a = a * &H100
crc = a + b
crcval.Text = Hex(crc)
'////////////////////////////////////////////////

' transformation du texte en hexa...

Sub texttohex(tailletext As Integer, texte As String)
    texte = UCase(texte)
    Dim valeurs()
    ReDim valeurs(tailletext)
    For i = 1 To tailletext
        car = Mid(texte, i, 1)
        Select Case car
            Case "0"
                valeurs(i) = &H0
            Case "1"
                valeurs(i) = &H1
            Case "2"
                valeurs(i) = &H2
            Case "3"
                valeurs(i) = &H3
            Case "4"
                valeurs(i) = &H4
            Case "5"
                valeurs(i) = &H5
            Case "6"
                valeurs(i) = &H6
            Case "7"
                valeurs(i) = &H7
            Case "8"
                valeurs(i) = &H8
            Case "9"
                valeurs(i) = &H9
            Case "A"
                valeurs(i) = &HA
            Case "B"
                valeurs(i) = &HB
            Case "C"
                valeurs(i) = &HC
            Case "D"
                valeurs(i) = &HD
            Case "E"
                valeurs(i) = &HE
            Case "F"
                valeurs(i) = &HF
            Case Else
                MsgBox ("Erreur dans la chaîne à envoyer")
        End Select
    Next i
    pb.Value = 0
    pb.Max = tailletext \ 2 + 10
    nboctets = tailletext \ 2
    compteur = 0
    For i = 1 To tailletext Step 2
        tabl(compteur) = valeurs(i) * &H10 + valeurs(i + 1)
        compteur = compteur + 1
    Next i
    

End Sub

' calcul du CRC à proprement parler

Sub calcul_crc(n As Integer)

Const polynome_generateur = 40961 '&HA001
    Dim bit As Integer
    crc = 65535 ' &hffff    CRC est une variable globale de type string déclarée dans un module
    For i = 0 To n - 1 ' n étant le nombre d'octets à traiter
        crc = crc Xor tabl(i)   ' tabl() est le tableau contenant les différents octets à prendre en compte dans le calcul du CRC ... déclaré en global dans un module, il est de type string
        For j = 0 To 7
            bit = crc And 1     ' masquage pour garder le bit n°0
            crc = crc \ 2       ' décalage vers la droite de 1 ... \ permet une division entière
            crc = crc And 32767 '&H7FFF masquage pour obtenir un décalage logique
            If bit Then crc = crc Xor polynome_generateur
        Next j
    Next i
End Sub


je déclare ceci dans un module :
Public crc As String
Public tabl() As String
Public nboctets As Integer


en espérant que cela t'aide !
ensuite, je suppose que tu voudras envoyer des chaines vers ton automate... si tu y arrives (surtout si tu réussis à lire la réponse;) explique moi comment tu fais... car je n'y suis pas encore parvenu !
1
-------------------------------
Réponse au message :
-------------------------------

Je cherche des informations sur les fonctions vb pour le calcul du CRC16 pour un automate ASCOM pour les trames

Merci d'avance
0
Rejoignez-nous