Tableau et valeurs en hexa [Résolu]

simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 10:43 - Dernière réponse : simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention
- 13 mai 2008 à 15:48
Bonjour a tous,

Je me suis mis récemment au VB6...

Je programme actuellement une interface reliant mon pc a un automate, cependant je rencontre un probléme.

Je souhaite envoyer une trame  a l'automate, cette trame doit etre
envoyée en hexa, j'ai donc déclaré un tableau comme ceci :

dim trame(10) as byte


Je veux lui faire prendre des valeurs en hexa, cependant il refuse et
me les passe toutes en décimal, même avec la fonction hex()... D'ou mon
probléme... J'ai déja pensé a déclaré mon tableau en string, mais cela
pose des problémes au niveau de mes paramétres dans les procédures que
j'utilise

Merci d'essayer de m'éclairer

Bonne journée
Afficher la suite 

Votre réponse

25 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 15:33
3
Merci
ta trame de départ, dans un tableau d'octet
Trame(0) = &H4
Trame(1) = &H3
Trame(2) = &H0
Trame(3) = &H0
Trame(4) = &HFF
Trame(5) = &H10
Trame(6) = &HA
Trame(7) = &HE0

la suite, c'est juste le passage en ASCII/HEXA :

3A => hexa du code ascii du caractère ":"
ensuite, on prend le code ascii du caractère "0" et du caractère "4"
ensuite, on prend le code ascii du caractère "0" et du caractère "3"
ensuite, on prend le code ascii du caractère "0" et du caractère "0"
ensuite, on prend le code ascii du caractère "0" et du caractère "0"
ensuite, on prend le code ascii du caractère "F" et du caractère "F"
ensuite, on prend le code ascii du caractère "1" et du caractère "0"
ensuite, on prend le code ascii du caractère "0" et du caractère "A"
ensuite, on prend le code ascii du caractère "E" et du caractère "0"
ensuite, on ajoutes "0D0A", marqueur de fin de ta trame

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 11:06
0
Merci
trame(0) = &hAF
trame(1) = &hD4
trame(2) = &hC0
...
trame(10) = &hFF
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 11:13
0
Merci
J'ai déja essayé cette solution, mais la valeur stockée est en decimal (j'ai vérifié en pas a pas)
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 11:20
0
Merci
bien sur que oui...

l'hexadecimal n'est qu'une representation graphique, dans une base donnée...
elle est même stockée en binaire, en fait... mais l'IDE donne la version décimale, plus claire pour nous, faibles humains.

le tout est que tu lui donne la bonne valeur, le reste...
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 11:39
0
Merci
Oui mais si j'envoie ma trame en décimal, l'automate ne la recevra pas bien non???

C'est vrai que si je suis ce que tu me dis (qui est tout a fait logique) ca devrait marcher ...

Donc je dois avoir une erreur dans ma trame alors...
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 11:43
0
Merci
si, pas de soucis, le tout est question de base de compage a l'affichage...

derrière, c'est transparent, équivalent.
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 11:52
0
Merci
Je te joins l'aide en ligne de l'automate qui spécifie que le codage doit etre ascii

Lire 5 données 16 bits
à partir de l'adresse 17 :
 , Trame en hexadécimal avant codage ASCII :

" : " 04 03 00 00 FF 10 0A E0 " CR " " LF ", ----
,  , Trame en hexadécimal après codage ASCII :

3A 30 34 30 33 30 30 30 30 46 46 31 30 30 41 45 30 0D
0A, ----
,  , la réponse sera si les cinq valeurs valent 0 :

3A 30 34 30 33 30 41 30 30 30 30 30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 45 46 0D 0A


Quel est leur intérét a nous demander d'envoyer une trame ascii alors? je ne comprend pas leur raisonnement...
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 11:58
0
Merci
assez étrange, en effet...
il semblent vouloir que l'on transmette le code ascii de la representation ascii de la trame...

envoyer

30 34
pour signifier
04

c'est.... étrange

mais pas très complexe a mettre en oeuvre
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 12:03
0
Merci
Oui mais j'avais déja fait le test d'envoyer la trame en hexa et
l'automate me répondait tres bien...Mais quand je l'envoie en décimal
ca ne marche pas... Je vais revoir mon programme, j'ai oublié de
préciser j'envoie toute la trame d'un coup
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 12:08
0
Merci
gaffe au fait que VB bosse en Unicode et non en Ascii...

a part ce détail (un Strconv et on n'en parle plus)
il n'y a effectivement pas de soucis a envoyer directement

":04030000FF.."
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 13:04
0
Merci
Euh question bête, comment tu verifie que c'est en unicode??? Et c'est
quoi la différence entre unicode et ascii pour le logiciel??
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 13:26
0
Merci
VB stockes toutes les Strings en Unicode (deux octets par caractères).

en gros, on a :

b o n j o u r
62 00 6F 00 6E 00 6A 00 6F 00 75 00 72 00

Windows le gère, c'est transparent.
reste que pour communiquer avec certaines APIs, ou via Winsock ou MsComm, il te faudra surement passer cela en Unicode (Strconv vbFromUnicode)
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 13:34
0
Merci
je ne comprend pas comment employer ces deux fonctions, j'ai essayer comme ca :

vbFromUnicode (trame)

 StrConv (trame)


Il me sort des erreurs sur les deux ...
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 13:37
0
Merci
Dim trame As String
trame = ":0403..."
trame = StrConv(trame, vbFromUnicode)
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 13:45
0
Merci
Je pense que tu as mal compris ce qui se passe. Je te montre mon code
(enfin une partie) pour que tu ressitue bien ce qui se passe:

Private Sub gestion_trame(ByRef trame() As Byte, ByVal ctrldata As Byte)

    Dim adr_esclave As Integer

    Dim fonction As Integer

    Dim adr_donnee As Integer

    Dim nb_octet As Integer

    Dim donnees As Byte

    Dim trame2(10) As String

    Dim trame3 As String

   

    adr_esclave = 4

    fonction = 3

    adr_donnee = InputBox("saisissez l'adresse du premier registre")

    nb_octet = 10

    trame(1) = &H3A

    trame(2) = Hex(3)

    trame(3) = &HA

    trame(4) = Hex(adr_esclave)

    trame(5) = Hex(fonction)

    trame(6) = Hex(adr_donnee - 1)

    trame(7) = &HA

    donnees = adr_esclave + fonction + adr_donnee - 1 + nb_octet

    trame(8) = ctrledatabyte(donnees)

    trame(9) = &HD

    trame(10) = &HA

   

End Sub


en fait, quand j'utilise un dim trame as string, ca marche, mais quand
j'utilise un dim trame as byte, c'est la que ca ne marche plus, il
stocke tout en decimal, alors que quand je l'utilise en string, il les
prend bien en hexa et la trame est bien reconstituée...Je suis obligé
de le déclarer en byte car je m'en sers pour un calcul de checksum..

Donc voili voila
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 13:51
0
Merci
oui, te faut un codage ASCII, sinon, kaput

et gaffe a ton tableau de 11 octets (et oui, les tableaux commencent généralement à l'indice 0)

perso, je manipulerai des tableaux de Byte...
et conversion ascii juste avant l'envoi
pas de soucis pour les calculs, ainsi
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 13:57
0
Merci
c'est ce que je compte faire, une coversion juste avant l'envoi...Mais
ca me laisse tout en décimal... par exemple, au début de ma trame je
dois envoyer ":" et il m'envoie 58 (le décimal du code ascii)...

J'ai essayé ca mais ca me retourne toujours une erreur...

dim trame2(10) as string  

trame2() = StrConv(trame, vbFromUnicode)
Commenter la réponse de simgoku
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 13:57
0
Merci
c'est ce que je compte faire, une coversion juste avant l'envoi...Mais
ca me laisse tout en décimal... par exemple, au début de ma trame je
dois envoyer ":" et il m'envoie 58 (le décimal du code ascii)...

J'ai essayé ca mais ca me retourne toujours une erreur...

dim trame2(10) as string  

trame2() = StrConv(trame, vbFromUnicode)
Commenter la réponse de simgoku
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 mai 2008 à 14:22
0
Merci
tu as le choix des armes...

Dim Trame As String
Dim TrameEnvoi As String
Trame = ":04030000FF100AE0" & vbCrLf
TrameEnvoi = StrConv(Trame, vbFromUnicode)

----------------------

Dim Trame As String
Dim TrameEnvoi() As Byte
Trame = ":04030000FF100AE0" & vbCrLf
TrameEnvoi = StrConv(Trame, vbFromUnicode)

-----------------------------------

Dim Trame As String
Dim i As Long
Dim TrameEnvoi() As Byte
Trame = ":04030000FF100AE0"

ReDim TrameEnvoi(Len(Trame) + 1)
For i = 0 To Len(Trame) - 1
TrameEnvoi(i) = Asc(Mid$(Trame, i + 1, 1))
Next i
TrameEnvoi(i) = &HD
TrameEnvoi(i + 1) = &HDA
Commenter la réponse de Renfield
simgoku 38 Messages postés dimanche 4 juin 2006Date d'inscription 28 mai 2008 Dernière intervention - 13 mai 2008 à 14:36
0
Merci
Tres bien je pense que ca va m'aider , cependant, les valeurs stockées
dans trame sont en décimal, et je n'arrive pas a les passer en
hexa....Tout reste en décimal , du coup l'automate ne répond pas a ma
trame...J'ai essayé tes deux premiere techniques, mais le résultat est
le même...
Commenter la réponse de simgoku

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.