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 :

Pb Calcul Checksum


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Pb Calcul Checksum
    Bonjour à tous,

    Je dois envoyer une trame via RS qui contient un checksum...

    Actuellement je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Dim Buffer(lstBytes.Count) As Byte
            For i = 0 To lstBytes.Count - 1
                Buffer(i) = lstBytes(i)
            Next
     
            Dim checksum As Integer = 0
     
            For Each x As Byte In Buffer
                checksum = (x + checksum)
            Next
            Buffer(lstBytes.Count) = CByte(checksum) 'J'ai testé avec And &HFF, ou Mod 256
     
            SerialPort1.Write(Buffer, 0, Buffer.Count)
    Dans la doc il me mettent ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    All commands have a checksum byte appended.  The sum of all bytes in the command, including the checksum byte, should add up to A5h.
    Et une commande type ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     lstBytes.Add(&H1F)
            lstBytes.Add(&HE0)
            lstBytes.Add(&H0)
            lstBytes.Add(&HD)
    Mais l'équipement me renvoie une erreur de calcul de checksum. Surtout je ne comprend pas le should add up to A5h.

    Pouvez-vous m'aider ?! Merci !

  2. #2
    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
    je ne vois pas trop ce qu'ils veulent dire par là

    après il n'y a que 256 possibilité pour le checksum, tu peux tenter les 256 dans une boucle pour repérer le bon, et après tu cherches le rapport avec A5 (165 dec)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Il serait intéressant de donner ta définition de checksum!

    Car a ma connaissance c'est la somme de bits à 1 en ne comptant pas la retenue.

    Ainsi 255 + 1= 0.

    10 xor Ff nous retourne 1 bit (je parle d'un xor bit à bit)'qui devait être sommé à la valeur précédente sans retenue!

    Je n'ai pas l'impression que c'est ce que fait ton code.
    Dernière modification par Invité ; 30/09/2016 à 17h12.

  4. #4
    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
    chaque protocole de dialogue peut implémenter sa propre somme de controle, en la définissant ; parfois elle est beaucoup plus complexe qu'une simple somme modulotée©
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    je ne vois pas trop ce qu'ils veulent dire par là

    après il n'y a que 256 possibilité pour le checksum, tu peux tenter les 256 dans une boucle pour repérer le bon, et après tu cherches le rapport avec A5 (165 dec)
    J'ai suivi ton conseil, le bon checksum est 153 dec. Je vais tester une autre commande et voir pour trouver une correspondance...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Voilà ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lstBytes.Add(&H1F)
    lstBytes.Add(&HE0)
    lstBytes.Add(&H0)
    lstBytes.Add(&H1)
    A comme bon checksum 165

    et la commande original où seul le dernier byte change (13 et non 1 comme précédemment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lstBytes.Add(&H1F)
    lstBytes.Add(&HE0)
    lstBytes.Add(&H0)
    lstBytes.Add(&HD)
    A comme bon checksum 153

    Maintenant avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lstBytes.Add(&H1F)
    lstBytes.Add(&HE0)
    lstBytes.Add(&H0)
    lstBytes.Add(&H2)
    le bon checksum est 164

    Une idée d'un calcul logique ?

  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
    oui, tu peux me donner le chk pour AA et 05 pour être sûr ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Pour 5, le checksum est 161.

    Mais je ne peux pas te donner pour AA.

    L'équipement n'accepte, en décimal, qu'une valeur qui va de 0 à 15.

  9. #9
    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
    en fait je veux une somme qui fait entre 166 et 255 (modulo 256) pour voir
    donc tu prends l'exemple que tu veux (tes 3 exemples sont en dessous ou égal à 165 (somme puis modulo 256), il m'en faudrait une au dessus)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    La commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lstBytes.Add(&H7)
    lstBytes.Add(&HF8)
    A un checksum de 166

  11. #11
    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
    donc
    sum de tous les bytes
    modulo 256
    165 - le modulo trouvé ci dessus
    là il faudrait refaire un modulo 256, sous excel ca marche bien, les nombres négatifs sont remis en positif, mais le modulo de .net ne fait pas ca donc j'ai ajouté un test et une somme



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim chk = 165 - (From b In lstBytes Select CInt(b)).Sum Mod 256
    If chk < 0 Then chk = chk + 256
     
    lstBytes.Add(CByte(chk)) ' ajout du checksum aux octets à envoyer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Alors là je dis chapeau !

    Bravo et merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Défi calcul checksum
    Par Toto33Roxx dans le forum Windows
    Réponses: 1
    Dernier message: 17/02/2015, 13h19
  2. [Forum] Calcul checksum 8bit crc32()
    Par svan1812 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 26/09/2014, 12h00
  3. Comment Calculer Checksum 32 bit d'un Fichier
    Par kassimitec dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/08/2009, 19h20
  4. Calculer checksum d'une entête ip
    Par snyfir dans le forum Développement
    Réponses: 0
    Dernier message: 21/05/2009, 17h28
  5. Probleme calcule checksum
    Par nuFox dans le forum Réseau
    Réponses: 17
    Dernier message: 19/02/2008, 08h49

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