Page 2 sur 2

Re: Envoi de trames Hexa via port RS232

Posté : mar. 17 juil. 2018 14:37
par Bud Spencer

Code : Tout sélectionner

somme_trame = 0

for h in ([trame_totale[i:i+8] for i in range(0,len(trame_totale),8)]):
	somme_trame += int(h[-2:] + h[-4:-2] + h[-6:-4] + h[-8:-6],16)
	
checksum_trans = ((16**8)-somme_trame) % (16**8)
Ne sachant pas qui est le diviseur dans ta fonction modulo il est possible que :

Code : Tout sélectionner

checksum_trans = (16**8) % ((16**8)-somme_trame)
Ce qui me semblerait plus logique

Re: Envoi de trames Hexa via port RS232

Posté : mar. 17 juil. 2018 16:13
par Nidog
Merci pour ton aide.

Mais malheureusement je ne retrouve pas (exactement) le même code sous VBA et sous le code transmis en PY :

Avec trame_totale = "0000000001000000000000000300000007000000080000000000000000000000"

Je retrouve avec le code VB :
checksum_trans = 19

Et sous PY (avec ((16**8)-somme_trame) % (16**8)) :
checksum_trans = 4294967277

Ce qui me donne les checksum suivants :
VB = ED FF FF FF
PY = 0xffffffedL

Je pensais inverser les h[] dans :

Code : Tout sélectionner

somme_trame += int(h[-2:] + h[-4:-2] + h[-6:-4] + h[-8:-6],16)

Re: Envoi de trames Hexa via port RS232

Posté : mar. 17 juil. 2018 20:14
par Bud Spencer
Je ne sais pas ce qu'il y a dans ta fonction modulo. Perso, ca ne me dit rien puisque de mémoire en vbs pour calculer un modulo on faisait :
valeur mod diviseur

Je t'avouerais que j'ai tapé ce code vite fait sans le tester mais a la relecture le calcul de somme_trame me semble identique dans les 2 langages. Fais l'essais d'afficher la valeur de somme_trame avant le calcul de modulo pour voir si tu as la meme chose avec les 2 langages. Si j'ai un peu de temps demain (je promet rien ...) , je ferais moi meme l'essais.

Re: Envoi de trames Hexa via port RS232

Posté : mer. 18 juil. 2018 07:57
par Nidog
Pardon erreur dans la lecture des Print()...

Sous VB j'ai :
somme_trame=1687329312
checksum_trans=2607637984

Et sous PY :
somme_trame=19
checksum_trans=4294967277

En sachant que le Modulo sous VB est calculé suivant :

Code : Tout sélectionner

'VB Script
Function Modulo(a, b)
	Modulo = a - (b * Int((a / b)))
End Function
Pour ensuite afficher le code HEX dans une cellule Excel, j'effectue une nouvelle inversion MSB LSB :

Code : Tout sélectionner

checksum_inv = Hex(Modulo(checksum_trans, 16 ^ 2)) & " " & Hex(Modulo(Int(checksum_trans / (16 ^ 2)), 16 ^ 2)) & " " & Hex(Modulo(Int(checksum_trans / (16 ^ 4)), 16 ^ 2)) & " " & Hex(Modulo(Int(checksum_trans / (16 ^ 6)), 16 ^ 2))
Le Problème étant déjà de retrouver le même résultat de somme_trame sous VB et sous PY :?

Re: Envoi de trames Hexa via port RS232

Posté : mer. 18 juil. 2018 08:44
par Nidog
Solution trouvée ! :D

J'ai fais abstraction du résultat "somme_trans" vu qu'une autre inversion MSB LSB est réalisée.

J'ai conservé le résultat checksum_trans sous PY (à savoir 4294967277), puis je réalise :

Code : Tout sélectionner

trame_fin = hex(checksum_trans)[2:10]
trame_fin_inv = hex(checksum_trans)[-3:-1] + " " + hex(checksum_trans)[-5:-3] + " " + hex(checksum_trans)[-7:-5] + " " + hex(checksum_trans)[-9:-7]
Je retrouve alors bien le même résultat que sous VB, même après essais avec d'autres Trames !

Merci beaucoup pour ton aide et ta patience @Bud Spencer ! : :lol:

Re: Envoi de trames Hexa via port RS232

Posté : mer. 18 juil. 2018 10:08
par Bud Spencer
Parfait :-)

De mon coté, à titre de controle et bonne conscience, je viens de faire l’essais vite fait du calcul de somme_trame avec la valeur de trame_totale que tu donnes et j’ai bien le même résultat aussi bien avec ton code qu’avec mon code python. Mon interpretation etait donc correcte.

Juste un petit détail qui a son importance. Ton code n’est pas du VBScript mais du VBA. (Les nommages explicite de fin de boucle Next et le convertisseur Val() existe en VB et VBA mais pas en VBscript ;-) )

Re: Envoi de trames Hexa via port RS232

Posté : mer. 18 juil. 2018 10:25
par Nidog
Merci d'avoir prit du temps !

Oups erreur de néophyte pour le VBA ... Merci je saurai m'en rappeler !

Re: Envoi de trames Hexa via port RS232

Posté : ven. 3 août 2018 15:33
par vague nerd
Bonjour.

Si vous estimez que votre problème est résolu, merci d'ajouter [RESOLU] au début du titre du sujet.
Pour ce faire, visualiser le premier Post que vous avez réalisé, cliquez sur "Editer", et ajouter [RESOLU] devant le titre, sans l'effacer.

Cela permet que le message soit tout de suite identifié comme ayant eu une réponse correspondant à la demande.
Ainsi, les visiteurs en sont informés, aussi bien lors d'une recherche sur le forum qu'au travers des moteurs de recherche.

Merci d'avance !

Re: Envoi de trames Hexa via port RS232

Posté : mar. 14 août 2018 23:18
par bruno83
Bonjour
J’utilise sans arrêt la liaison rs232 en python : Gsm commande AT, journal lumineux avec cheksum ,reconnaissance vocale,rfid,appli rs232 ..........
Ici je n’ai pas vu d’encodage et décodage truc classique en python 3 avec serial étrange !!!!
exemple : ser.write(b'AT+CMGF=1\r')
mais j’ai peut-être zappé le truc :oops:
a+ bruno