Industrial Communications

cancel
Showing results for 
Search instead for 
Did you mean: 

calcul de la somme de controle checksum

Solved!
Go to solution

Bonsoir T le monde

 

je suis entrain de piloter une alimentation programmable Spellman via la liaison RS232 connectée au PC sous LABVIEW

et pour cela je doit rédiger des messages de COMMANDE en code ASCII,,et dans chaque message il faut calculer le

chechsum (CSUM somme de controle) pour verifier l'intégrité des données.

 

le format général du message est le suivant:

 

<STX><ADD><DEVTYPE><DATA><CSUM>

 

ils disent que le Checksum (CSUM)= <ADD>+<DEVTYPE>+<DATA > écrit en ASCII

 

sachant que - ADD: addresse de mon alimentation

                  - DEVTYPE: type de mon alimentation

                  - DATA: commande à envoyer

                   - STX: Start of text character

                   - LF: Line Feed ccharacter

 

j'ai essayé de le faire à la main mais le calcul est trop compliqué,,,est ce que quelqu'un a déja fait ce genre de calcul? un exemple va m'aider énnormément.

 

à bientot

0 Kudos
Message 1 of 13
(10,615 Views)

Pourriez-vous préciser la méthode de calcul de la somme de calcul ou mieux encore, poster le protocole de communication de votre alimentation ou un lien vers celui-ci ?

 

Dans l'attente, voici un exemple partant du principe que le calcul de la somme de contrôle est une simple addition :

 

CSUM Spellman.png

Message 2 of 13
(10,612 Views)

SLT, Tout d'abord merci de m'avoir répondu,le VI que tu m'as envoyé correspond bien à le première opération de calucl.

tu peux trouver en pièce jointe le  protocole de communication de l'alimentation.

 

la méthode de calcul de la somme de controle se trouve à la section 3.3.

 

3.3. Checksum calculation

The checksum is calculated as follows:

 Add the <ADDR>, <DEVTYPE>, and <DATA> bytes into a 16 bit (or larger) word. The bytes are added as unsigned integers.

 Take the 2’s compliment (negate it).

 Truncate the result down to the eight least significant bits.

 Clear the most significant bit (bit 7) of the resultant byte, (bitwise AND with 0x7F).

 Set the next most significant bit (bit 6) of the resultant byte (bitwise OR with 0x40).

Using this method, the checksum is always a number between 0x40 and 0x7F. The checksum can never be confused with the <STX> or <LF>, since these have non-overlapping ASCII values.

0 Kudos
Message 3 of 13
(10,607 Views)
Solution
Accepted by Nadal06

...ce qui se traduit ainsi en code LV :

 

CSUM Spellman.png 

Message 4 of 13
(10,598 Views)

BSR JB;

 

Merci beaucoup pour votre aide précieuse,

Effectivement le code LV reflète exactement la méthode de calcul,,je vais chercher dans "trouver des expemples" si il existe

si non je vais le construire et faire la comparaison aux commandes déja pré-définies.

 

Encore merci merci et merci à bientotSmiley Happy

0 Kudos
Message 5 of 13
(10,590 Views)

Inutile de chercher, vous ne trouverez pas ce code dans les exemples. Mais pourquoi iriez-vous le chercher là puisqu'il vous suffit de la reprendre de ce forum !

Comme vous l'aurez peut-être remarqué et comme le montre en tous les cas son cadre, il ne s'agit pas d'une simple image mais d'un "code snippet". J'ignore le nom exact en français mais c'est une sorte de copie de code.

 

Quelle version de LabVIEW utilisez-vous ? Si 2010 (10.0) ou 2010 SP (10.0.1), il vous suffit de faire un "glisser - déposer" de l'image du forum vers votre bureau et puis du bureau dans un VI vide. Et puis, vous réalisez un VI, qu'il vous suffira de réutiliser comme un sous-VI, avec ce bout de code.

Si vous deviez utiliser une version antérieure de LabVIEW, il vous suffira de poster une demande de conversion de l'exemple vers votre version. Ceci peut se faire directement ici ou alors mieux encore dans cette discussion spécifique à ce type de demandes.

 

 

PS : Une bonne manière de remercier ceux qui prennent le temps de répondre est l'attribution d'un compliment aux réponses qui en sont jugées dignes ainsi que le marquage comme solution de la réponse ayant résolu la question ou le problème. Cette dernière opération permet également de marquer la discussion comme terminée et facilite la localisation de la solution aux éventuelles personnes qui pourraient être aiguillées vers cette discussion par une recherche sur les forums.

 

 

 

Message 6 of 13
(10,583 Views)

Hello

 

Est-ce que cette solution a fonctionné pour vous? Parce que j'essaie de piloter une alimentation identique et je n'obtiens pas la checksum comme dans les exemples donnés dans le manuel.

 

Merci d'avance.

0 Kudos
Message 7 of 13
(3,119 Views)

Un petit détour par le profile de Nadal06 révèle que sa dernière connexion sur ces forums remonte à fin 2012. Ne vous attendez donc pas à une réponse de sa part.

 

Je peux tenter de vous aider si vous postez :

- le modèle de votre alimentation

- le lien vers son protocole de communication

- le bout de code que vous utilisez 

 

 

0 Kudos
Message 8 of 13
(3,046 Views)

Le modèle est Spellman MPS 1kV DCC 10W.

J'ai essayé d'utiliser votre code pour calculer la checksum du example dans le manuel 11V1? qui devrait être X (0x58), mais j'ai obtenu x (0x78).

 

Il semble qu'il y ait quelque chose qui n'est pas correct.

 

0 Kudos
Message 9 of 13
(2,967 Views)

En prenant un peu de temps pour me replonger dans le sujet et faire des essais, je viens d'identifier votre erreur.

 

Comme pour DATA, il ne faut pas entrer les valeurs pour ADD et DEVTYPE mais les codes ASCII de celles-ci.

Pour l'exemple du manuel que vous citez (11V1?X) :

 

CSUM.png

 

Ceci fait, CSUM est bien 0x58.

0 Kudos
Message 10 of 13
(2,938 Views)