IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

CRC Control in vb.Net


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut CRC Control in vb.Net
    Bonjour,
    Désolée de vous déranger encore.
    Je travaille sur une application en vb.Net qui se connecte aux modems GSM par les ports série,Je veux donc appliquer un contrôle sur les trames reçues(CRC control),en vba j'ai utilisé un Activex qui s'appelle CrcCtrl.ocx (il n'existe plus !) et je l'ai utilisé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     crcSnd = DoCRC1(bTemp)
        crcSnd1 = Int(crcSnd / 256)
        crcSnd2 = crcSnd - (crcSnd1 * 256)
    '..................
     crcCalc = DoCRC2(bRcv)
                crcCalc1 = Int(crcCalc / 256)
                crcCalc2 = crcCalc - (crcCalc1 * 256)
    '........................
    Function DoCRC1(ByVal payLoad As Variant)
        On Error Resume Next
        CrcCtrl1.CRCType = 3 ' set which algorithm to use - vb pops up valid types!
        CrcCtrl1.DoCRCVar payLoad ' do the calculation, without a seed, ie not split up
        DoCRC1 = CrcCtrl1.GetCRCDecStr ' display the result in a label
        'MsgBox (CrcCtrl1.GetCRCHexStr & CrcCtrl1.GetCRCDecStr)
    End Function
    Function DoCRC2(ByVal payLoad As Variant)
        On Error Resume Next
        CrcCtrl2.CRCType = 9 ' set which algorithm to use - vb pops up valid types!
        CrcCtrl2.DoCRCVar payLoad ' do the calculation, without a seed, ie not split up
        DoCRC2 = CrcCtrl2.GetCRCDecStr  ' display the result in a label
    End Function
    Je veux une méthode à le faire en vb.Net sans utiliser les Activex,juste avec une bibliothèque vb ou avec une fonction
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut
    Bonjour ,
    pour plus de détails je vais joindre carrément le dossier de l'Activex CrcCtrl.ocx qui contient les fonctions, si quelqu'un pourra me montrer comment trouver un équivalent pour vbNet.
    Fichiers attachés Fichiers attachés

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux l'utiliser en .net, le seul truc c'est qu'à l'installation il faut copier l'ocx dans system32 et le registrer (regsvr32)

    au niveau du projet il faut ajouter une référence vers l'ocx
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut
    Merci Pol63,
    Justement,je peux pas l'utiliser,parce qu'il existe plus,et il marche pas sous windows 7,donc je cherche une fonction en vb.Net qui fera le même travail.et voici la description des deux algorithmes utilisés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    3: CRC16 
    Fairly widely used CRC, it expressed as x^16,15,2,0. This algorithm has a precalculated lookup table and is done in assembly.
     
    9: CCITT16 Reversed
    As 8, 16 x^16,12,5,0, without the twist. This algorithm has a precalculated lookup

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    "il existe plus"
    on ne peut pas vraiment dire ca, je ne pense pas que cet ocx était fournit avec vb6 (mais je peux me tromper)
    si tu as le fichier tu peux l'utiliser

    utiliser des ocx en .net est déconseillé mais pas interdit, et dans certains cas ca ne pose pas de problème

    par contre sous windows 7 et autres os x64 il faut que le programme tourne en x86 pour pouvoir utiliser des dll/ocx 32 bits
    ca se change dans les propriétés du projet, onglet compiler, bouton options avancées de compilation, remplacer AnyCpu par x86

    après si tu sais ce que fais concretement cet ocx il suffit de recoder, tu peux aussi chercher un décompilateur d'ocx pour récupérer le code source de l'ocx et l'adapter à .net


    EDIT : vu que tu as les noms des normes de CRC que tu utilises tu peux trouver le code .net qui avec sur le net
    googler CRC16 c# et CCITT16 Reversed c# (il y a plus de sources sur c# que sur vb.net)
    et après tu passes le code c# dans un convertisseur vb.net
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut
    Pour le ocx je veux m'en débarrasser,car j'ai essayé de le faire marcher mais il y a beaucoup de problème.
    J'ai chercher sur Internet, mais il y a beaucoup de codes différents,je n'arrive pas à trouver c'est lequel le bon, j'ai trouvé un code sur ce site:
    http://www.drdobbs.com/implementing-...ndan/199904926
    je pense il est bon mais je ne suis pas sûr car je ne peux pas le tester pour le moment.Si tu peux me dire est-ce qu'il est convenant à la description des deux algorithmes que j'ai donné ça sera pas mal( vu que tu es plus expert que moi)
    Merci

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sur wikipedia en général il y a aussi la description du fonctionnement à partir de laquelle on peut coder ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut
    Ok je vais essayer de faire ça
    Merci

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Un Tutoriel sur le calcul des CRC, il pourra peut-être t'aider dans ton développement.
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Salut,

    J'ai bossé sur le CrC il y a quelques mois. J'ai trouvé et adapté deux fonctions.

    La première calcul le CRC, la seconde l'intègre dans la trame. Dans les deux cas la trame est un tableau Bytes().


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Function CRC16(ByVal data() As Byte) As Array
            Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC register
            Dim CL As Byte, CH As Byte 'Polynomial codes & HA001
            Dim SaveHi As Byte, SaveLo As Byte
            Dim i As Integer
            Dim Flag As Integer
            Dim ReturnData(2) As Byte
     
            CRC16Lo = &HFF
            CRC16Hi = &HFF
            CL = &H1
            CH = &HA0
     
            For i = 0 To UBound(data)
                CRC16Lo = CRC16Lo Xor data(i) 'for each data and CRC register XOR
     
                For Flag = 0 To 7
                    SaveHi = CRC16Hi
                    SaveLo = CRC16Lo
                    CRC16Hi = CRC16Hi  2 'peak shift to the right one
                    CRC16Lo = CRC16Lo  2 'shift to the right a low
     
                    If ((SaveHi And &H1) = &H1) Then 'If the high byte last one for a
                        CRC16Lo = CRC16Lo Or &H80 'then the low byte shifted to the right after the meeting in front of a
                    End If 'Otherwise, auto-fill 0
     
                    If ((SaveLo And &H1) = &H1) Then 'If the LSB is 1, then XOR with the polynomial codes
                        CRC16Hi = CRC16Hi Xor CH
                        CRC16Lo = CRC16Lo Xor CL
                    End If
                Next Flag
            Next i
     
            ReturnData(0) = CRC16Hi 'CRC high
            ReturnData(1) = CRC16Lo 'CRC low
            Return ReturnData
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Function AddCRC16(ByVal data() As Byte) As Byte()
            Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC register
            Dim CL As Byte, CH As Byte 'Polynomial codes & HA001
            Dim SaveHi As Byte, SaveLo As Byte
            Dim i As Integer
            Dim Flag As Integer
            'Dim ReturnData(2) As Byte
     
            CRC16Lo = &HFF
            CRC16Hi = &HFF
            CL = &H1
            CH = &HA0
     
            For i = 0 To UBound(data)
                CRC16Lo = CRC16Lo Xor data(i) 'for each data and CRC register XOR
     
                For Flag = 0 To 7
                    SaveHi = CRC16Hi
                    SaveLo = CRC16Lo
                    CRC16Hi = CRC16Hi  2 'peak shift to the right one
                    CRC16Lo = CRC16Lo  2 'shift to the right a low
     
                    If ((SaveHi And &H1) = &H1) Then 'If the high byte last one for a
                        CRC16Lo = CRC16Lo Or &H80 'then the low byte shifted to the right after the meeting in front of a
                    End If 'Otherwise, auto-fill 0
     
                    If ((SaveLo And &H1) = &H1) Then 'If the LSB is 1, then XOR with the polynomial codes
                        CRC16Hi = CRC16Hi Xor CH
                        CRC16Lo = CRC16Lo Xor CL
                    End If
                Next Flag
            Next i
     
            'Agrandissement du data pour mettre 2 paramètres supplémentaires
            ReDim Preserve data(UBound(data) + 2)
     
            'Stock le CRC
            data(UBound(data) - 1) = Convert.ToByte(CRC16Lo)
            data(UBound(data)) = Convert.ToByte(CRC16Hi)
     
            Return data
        End Function

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 76
    Points : 32
    Points
    32
    Par défaut
    Merci prologic,
    Cette fonction pour calculer le CRC pour un tableau de byte reçu?
    il y a une erreur de syntaxe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CRC16Hi = CRC16Hi  2 'peak shift to the right one
    CRC16Lo = CRC16Lo  2 'shift to the right a low

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par Rose Butterfly Voir le message
    Merci prologic,
    Cette fonction pour calculer le CRC pour un tableau de byte reçu?
    il y a une erreur de syntaxe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CRC16Hi = CRC16Hi  2 'peak shift to the right one
    CRC16Lo = CRC16Lo  2 'shift to the right a low
    Pour l'erreur de syntaxe, j'en ai pas la moindre idée, ca fonctionne pour mon programme. A la base, c'est la même fonction, j'ai juste rajouter l'insertion auto du CRC dans le tableau de bytes.

    Mais j'avoue sur que tu as piqué ma curiosité....

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Ca y est, j'ai trouvé....

    J'ai copier/coller la fonction a partir de mon blog et l'éditeur de texte a viré des caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CRC16Hi = CRC16Hi \ 2
    CRC16Lo = CRC16Lo \ 2
    Par contre, même après recherche, je n'ai aucune idée de l'utilité de ces oprérateurs.

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    / veut dire divisé par
    \ veut dire divisé par mais avec retour en tant que nombre entier au lieu de nombre décimal

    5/2 = 2.5
    5\2 = 2
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réaliser un web tab control sous asp.net 1.1
    Par ouadie99 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 19/02/2009, 17h43
  2. Utiliser le data control en vb.net ?
    Par GriffinK dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/02/2008, 11h53
  3. configuration du grid control sous vb.net 2003
    Par bulmish dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2008, 12h21
  4. Réponses: 3
    Dernier message: 24/07/2007, 14h06
  5. control [openfiledialog] (asp.net)
    Par tsdia2 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/04/2007, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo