Tableau et valeurs en hexa

Résolu
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008 - 13 mai 2008 à 10:43
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008 - 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

25 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 15:33
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 11:06
trame(0) = &hAF
trame(1) = &hD4
trame(2) = &hC0
...
trame(10) = &hFF
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 11:13
J'ai déja essayé cette solution, mais la valeur stockée est en decimal (j'ai vérifié en pas a pas)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 11:20
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 11:39
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...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 11:43
si, pas de soucis, le tout est question de base de compage a l'affichage...

derrière, c'est transparent, équivalent.
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 11:52
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...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 11:58
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
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 12:03
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 12:08
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.."
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 13:04
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??
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 13:26
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)
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 13:34
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 ...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 13:37
Dim trame As String
trame = ":0403..."
trame = StrConv(trame, vbFromUnicode)
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 13:45
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 13:51
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
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 13:57
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)
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 13:57
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)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2008 à 14:22
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
0
simgoku Messages postés 38 Date d'inscription dimanche 4 juin 2006 Statut Membre Dernière intervention 28 mai 2008
13 mai 2008 à 14:36
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...
0
Rejoignez-nous