Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2726 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Envoi d'informations en format kexadecimal en langage C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Envoi d'informations en format kexadecimal en langage C

n°2299001
arnoautom2​7
Posté le 11-04-2017 à 09:32:03  profilanswer
 

Bonjour à tous,
 
Nouveau sur ce site, je cherche des renseignements par rapport à la peogrammation en langage C.
 
Je dois envoyer des trames à un afficheur qui doivent obligatoirement lui arriver en format hexadécimal. Et il doit impérativement y avoir un espace entre chaque octet. Voici un exemple (envoi du message HELLO):
 
24 57 52 4C 3E 2A 00 41 01 00 00 00 00 00 00 68 61 00 4D 41 49 4E 00 00 00 00 20 00 0C 24 0A 02 08 06 EF F1 01 F1 F2 01 F2 48 45 4C 4C 4F EF 56 F7 FE F4
 
 
Comment dois je déclarer mes données ?  
 
Je connais peu le langage C et je suis parti d'un exemple existant d'un programme déjà en focntion dans l'entreprise où je travaille (je le déclarais sous forme d'un char[] mais cela ne fonctionne pas)


Message édité par arnoautom27 le 11-04-2017 à 13:21:15
mood
Publicité
Posté le 11-04-2017 à 09:32:03  profilanswer
 

n°2299014
rat de com​bat
attention rongeur méchant!
Posté le 11-04-2017 à 12:30:01  profilanswer
 

Renseigne toi sur (s)printf avec %X (et modifie le titre du sujet, le C++ c'est pas identique au C!)


Message édité par rat de combat le 11-04-2017 à 12:30:56
n°2299025
arnoautom2​7
Posté le 11-04-2017 à 13:20:35  profilanswer
 

Ok, merci. Je vais regarder ça :)

n°2299026
h3bus
Troll Inside
Posté le 11-04-2017 à 13:25:39  profilanswer
 

Il faudrait définir ce que tu appelles "envoyer des trames à un afficheur". En fonction de ce dont on parle, "qui doivent obligatoirement lui arriver en format hexadécimal" peut n'avoir aucun sens.
 
En général quand on envoie des données à un périphérique (ton afficheur dans ce cas), on transmet des octets qui ont une signification bien particulière pour ce périphérique.
L'hexadécimal n'est qu'une façon d'afficher ces données pour qu'elles soient lisibles par un humain.
 


---------------
sheep++
n°2299027
arnoautom2​7
Posté le 11-04-2017 à 13:28:55  profilanswer
 

Bonjour. En fait l'afficheur doit le recevoir tel qu'écrit dans l'exemple que j'ai affiché, cad: 2 chiffres hexa (1 octet) puis un espace puis 2 chiffres hexa, etc....

n°2299039
h3bus
Troll Inside
Posté le 11-04-2017 à 15:05:45  profilanswer
 

J'ai de gros doutes.
 
Tu as la datasheet de cet afficheur?
Comment es-tu interfacé avec?
Tu programmes sur PC? Microcontrôleur?


---------------
sheep++
n°2299063
Farian
Posté le 11-04-2017 à 17:37:29  profilanswer
 

Je  suis d'accord avec h3bus, vu d'ici, cela sent la mauvaise interprétation : pour envoyer un texte à un afficheur, peu de chance de lui envoyer, sous forme de texte, les codes hexa des caractères à afficher ... Ce serait marcher sur la tête !


---------------
On n'est jamais très fort pour ce calcul !
n°2299064
TotalRecal​l
Posté le 11-04-2017 à 17:37:57  profilanswer
 

Je n'ai pas fait de C depuis pas mal d'années mais la solution ne serait pas un truc comme une boucle sur    
 
printf("%02X", data);
 
où data est chacun de tes bytes à afficher ?
 
Mais effectivement, ça parait assez bizarre d'envoyer de l'héxa codé en ASCII avec des blancs à un afficheur.  
C'est plus une représentation pour les humains ou les fichiers de configuration en texte.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2299071
rat de com​bat
attention rongeur méchant!
Posté le 11-04-2017 à 18:14:01  profilanswer
 

TotalRecall a écrit :

Je n'ai pas fait de C depuis pas mal d'années mais la solution ne serait pas un truc comme une boucle sur    
 
printf("%02X", data);
 
où data est chacun de tes bytes à afficher ?

Exact.
 

Citation :

Mais effectivement, ça parait assez bizarre d'envoyer de l'héxa codé en ASCII avec des blancs à un afficheur.  
C'est plus une représentation pour les humains ou les fichiers de configuration en texte.

C'est pas faux non plus, en même temps qui sait quelle interface bizarre cet afficheur peut avoir... Faut plus d'infos pour en être sûr.

n°2299072
arnoautom2​7
Posté le 11-04-2017 à 18:16:56  profilanswer
 

Merci Pour toutes vos indications. Je vais tester.
Effectivement c'est assez bizarre mais l'afficheur fonctionne réellement comme cela. Cela m'a été indiqué par le fournisseur et j'ai pu le constater avec un logiciel qui m'indique ce que j'envoie sur le port COM. Il faut abbsolument qu'il soit en hexa (ils m'ont fournit un petit logiciel où l'on tape son texte et/ou on peut tester les trames en hexa).
 
Avec mon premier essai, mes octets en hexa étaient convertit en ASCII et ça ne fonctionnait pas.

mood
Publicité
Posté le 11-04-2017 à 18:16:56  profilanswer
 

n°2299073
arnoautom2​7
Posté le 11-04-2017 à 18:18:27  profilanswer
 

Il est prise de tête, je vous l'accorde :)

n°2299105
h3bus
Troll Inside
Posté le 12-04-2017 à 08:23:04  profilanswer
 

En tous les cas, la conversion hexadécimale n'est qu'une petite partie du programme. Il faudrait savoir à quoi sert chaque octet, et pour cela il faut la datasheet/handbook/user manual ou tout autre documentation technique.


---------------
sheep++
n°2299109
arnoautom2​7
Posté le 12-04-2017 à 09:14:49  profilanswer
 

Oui. Après le détail de la trame, je le connais. donc ça ça va :)

n°2299112
TotalRecal​l
Posté le 12-04-2017 à 10:04:51  profilanswer
 

En fait je crois que les gens ont juste très envie que tu partages la référence/specs de ton mystérieux afficheur :D.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2299115
arnoautom2​7
Posté le 12-04-2017 à 10:21:40  profilanswer
 

Je veux bien mais question bête: Comment fait-on pour joindre un fichier ici (je ne trouve pas l'icône joindre/ajouter un fichier) :-)

n°2299117
TotalRecal​l
Posté le 12-04-2017 à 10:22:23  profilanswer
 

Il n'y en n'a pas. Il faut l'uploader quelque part (si il n'est pas déjà sur le net) et copier coller le lien.


Message édité par TotalRecall le 12-04-2017 à 10:22:52

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2299131
Farian
Posté le 12-04-2017 à 13:03:21  profilanswer
 

TotalRecall a écrit :

En fait je crois que les gens ont juste très envie que tu partages la référence/specs de ton mystérieux afficheur :D.


 
Exactement, je n'aurais pas mieux dit !  [:gidoin]  
Ce n'est pas qu'on soit curieux, hein ... [:cosmoschtroumpf]
Mais cela titille notre envie d'en savoir un peu plus  !   [:gordon shumway]  


---------------
On n'est jamais très fort pour ce calcul !
n°2299144
arnoautom2​7
Posté le 12-04-2017 à 16:38:08  profilanswer
 

Voici les manuels, exemples et protocols:
 
https://wetransfer.com/downloads/71 [...] 622/d90c0d  
 
:)

n°2299153
h3bus
Troll Inside
Posté le 12-04-2017 à 17:28:58  profilanswer
 

Pour moi il faut bien envoyer des octets, pas leur représentation hexadécimale en ASCII.
 
Après les docs sont vraiment mal écrites... voir pas français du tout!


---------------
sheep++
n°2299154
arnoautom2​7
Posté le 12-04-2017 à 17:36:51  profilanswer
 

Effectivement, il faut que la trame envoyé soit lu tel quel par l'afficheur (si j'envoie EF par exemple, il doit lire EF).
 
Mon souci actuel est que je n'arrive pas, pour le moment, à trouver une fonction qui me le permette (par exemple si j'écris 24(hexa) quand je lis ce qui est envoyé via le port COM, il envoie 36).
 
J'ai essayé la fonction %x  
avec (%x,mavariable)
 
dans ma variable, je charge la valeur 36 (24 en Hexa)
 
Sur le traceur je vois bien dans la partie qui correpond à la trame de départ que j'ai écrit 24. Par contre la valeur envoyé est toujours 36.
 
I am lost :)

n°2299156
h3bus
Troll Inside
Posté le 12-04-2017 à 17:43:07  profilanswer
 

Le "traceur" affiche la valeur en décimal (24h = 36d), donc tout va bien.


---------------
sheep++
n°2299157
h3bus
Troll Inside
Posté le 12-04-2017 à 17:47:42  profilanswer
 

Pour débuger la liaison RS432 je te conseille un logiciel capable d'afficher en Hexadécimal, par exemple l'excellent Terminal https://sites.google.com/site/terminalbpp/


---------------
sheep++
n°2299158
TotalRecal​l
Posté le 12-04-2017 à 17:49:34  profilanswer
 

Je ne comprend plus rien, on envoie de l'hexa en ASCII ou du binaire affiché en hexa au final ? :pt1cable:


Message édité par TotalRecall le 12-04-2017 à 17:49:54

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2299159
arnoautom2​7
Posté le 12-04-2017 à 17:54:41  profilanswer
 

Au final sur le port COM, ce qui doit être envoyé est de l'hexa:
 
24 57 52 4C 3E 2A 00 41 01 00 00 00 00 00 00 68 61 00 4D 41 49 4E 00 00 00 00 20 00 0C 24 0A 02 08 06 EF F1 01 F1 F2 01 F2 48 45 4C 4C 4F EF 56 F7 FE F4  
 
Si ça se trouve, dans le programme en C, je dois peut-être envoyé la trame sous une autre forme que le port COM la convertisse correctement (je suis un novice dans ce domaine)

n°2299160
h3bus
Troll Inside
Posté le 12-04-2017 à 17:55:43  profilanswer
 

Quand je lis la doc, c'est bien du "binaire", mais évidemment la doc utilise des représentations hexa partout.
 
Mais la doc en français est horrible.
 
Rien que le début:

Citation :

Frame Format
Toutes les données doivent transmettre au format de la trame. Un maximum 1000 octets peuvent
transmettre dans une seule trame. Les données de 1000 octets doivent être transmise en deux ou
plusieurs trames.


 [:wiids]


---------------
sheep++
n°2299161
h3bus
Troll Inside
Posté le 12-04-2017 à 18:02:34  profilanswer
 

arnoautom27 a écrit :

Au final sur le port COM, ce qui doit être envoyé est de l'hexa


Tu t'emmêles les pinceaux.
 
Sur le port COM tu doit envoyer des octets. Chaque octet est codé sur 8 bits et on utilise souvent l'hexadécimal pour représenter un octet car c'est pratique.
 
Mais "ce qui doit être envoyé est de l'hexa" cela ne signifie rien. Ce qui doit être envoyé ce sont des octets dont la documentation te donne une représentation en hexadécimal.
 
Quand la documentation te parle d'envoyer 24 57 52 4C, tu doit envoyer 4 octets: 24h puis 57h puis 52h puis 4Ch
Ce qui est équivalent à envoyer 36 puis 87 puis 82 puis 76, en décimal.
 
C'est la même chose, sauf que la première fois j'utilise l'hexadécimal et la deuxième le décimal. Ce n'est qu'une représentation, un convention d'écriture, mais les données binaires envoyées sur le lien COM sont les mêmes.


---------------
sheep++
n°2299162
arnoautom2​7
Posté le 12-04-2017 à 18:09:52  profilanswer
 

Oui, je commence à m'emmeler je crois :).
 
Là le fournisseur, qui ne sait pas m'envoyer d'exemple en langage C, m'a envoyé un logiciel qui permet d'envoyer du texte (pas un logiciel programmable mais juste une application). Avec le traceur du port  COM je peux voir ce qui est est envoyé:
 

n°2299163
arnoautom2​7
Posté le 12-04-2017 à 18:14:02  profilanswer
 

Voici ce qui est relevé (j'ai mis seulement les 5 premiers octets pour plus de lisibilité):
 
24 57 4C 3E     (ce qui est envoyé par le port COM)    
$WRL> (envoyé par leur logiciel vers le port COM)

n°2299164
Farian
Posté le 12-04-2017 à 18:15:45  profilanswer
 

Là encore, je ne peux qu'être d'accord avec h3bus (et cela correspond à ce que l'on pressentait dès le départ).
 
Au final, cela aurait même tendance à simplifier la chose, pour peu que l'afficheur attende directement les codes ascii, on envoie le contenu de la chaîne C (avec ou sans le zéro terminal, c'est à voir) et c'est marre.
 
(Note : je n'arrive pas à télécharger le document depuis le boulot :( Un mot clé pour trouver la datasheet en anglais directement ?)


---------------
On n'est jamais très fort pour ce calcul !
n°2299165
h3bus
Troll Inside
Posté le 12-04-2017 à 18:26:15  profilanswer
 

arnoautom27 a écrit :

Voici ce qui est relevé (j'ai mis seulement les 5 premiers octets pour plus de lisibilité):
 
24 57 4C 3E     (ce qui est envoyé par le port COM)    
$WRL> (envoyé par leur logiciel vers le port COM)


La encore c'est la même chose, d'abord représenté en hexadécimal, puis en ASCII.
 
Regarde ici: http://www.table-ascii.com
 
Tu verra que 24h c'est $
57h c'est W
Etc...


---------------
sheep++
n°2299166
arnoautom2​7
Posté le 12-04-2017 à 18:26:36  profilanswer
 

Là je viens de faire l'essai. Dans mon programme en C, j'ai envoyé la trame $WRL>  et le port COM a bien écrit:
 
24 57 52 4C 3E       (j'avais oublié le 52 dans mon message précédent)
 
Je dois donc convertir chaque octet de ma trame avec son équivalent  ASCII avant de l'envoyer.
 
Je vais faire l'essai demain et je vous tiens au courant. Merci pour vos orientation :)
 
PS: la doc n'est pas téléchargeable sur Internet, le fournisseur me l'avait fournit directement.

n°2299167
h3bus
Troll Inside
Posté le 12-04-2017 à 18:30:21  profilanswer
 

Sinon en C tu peux écrire:
"\x24\x57\x52" etc

 

et le compilateur va faire la conversion pour toi.

Message cité 1 fois
Message édité par h3bus le 12-04-2017 à 19:15:10

---------------
sheep++
n°2299168
Profil sup​primé
Posté le 12-04-2017 à 18:55:52  answer
 

Bonjour.
 
En informatique "classique" je cois, mais je suis pas certain, vu que "classique" ça dépend... On passe jamais que du binaire.
 
Après tout c'est une question de dimension.
 
un mot de dimensions 4 pour passer de l'hexa ou un petit entier signé, c'est toujours un mot de 4 dimensions, ou quatre bits, mais là encore il peut y en avoir une ceratine quantité.
 
Juste pour re- cadrer.


Message édité par Profil supprimé le 12-04-2017 à 18:57:42
n°2299169
Profil sup​primé
Posté le 12-04-2017 à 19:00:23  answer
 

h3bus a écrit :

Sinon en C tu prix écrire:
"\x24\x57\x52" etc
 
 et le compilateur va faire la conversion pour toi.


 
 
 
A chaque trame on compile... [:dawa_neowen] [:ddr555]

n°2299170
Profil sup​primé
Posté le 12-04-2017 à 19:06:45  answer
 

Un tableau :
 
   Avec un element dans chaque case.
   Ces elements sont construit ainsi :
        un caractère de la table ascii.
        le code decimal (non obligatoire)
        le code Hexadécimal.
 
Faut initialiser le tableau avec la table ascii.
 
et tu fait une fonction char to hexa qui prend un caractère et qui retourne le code exa ou ou l'inverse mutuel.

n°2299172
rat de com​bat
attention rongeur méchant!
Posté le 12-04-2017 à 19:15:21  profilanswer
 


Désolé, c'est du grand n'importe quoi.

 

Si j'ai une chaîne de caractères en C j'ai déjà les codes ASCII des caractères utilisés en mémoire! (chaîne de caractère en C = tableau avec les codes ASCII et un zéro final très important) Et si je veux convertir des nombres entre le décimal et l'héxa inutile de faire des tableaux (sauf peut-être pour des raisons de vitesse mais dans ce cas présent c'est certainement pas un problème), il y a des fonctions toutes faites pour ça.

 

edit: Après avoir vu ton (localghost) premier message sur ce sujet je plussoie h3bus et sa formulation: garde tes idées stupides, c'est incompréhensible et ne fait qu'embrouiller les gens.


Message édité par rat de combat le 12-04-2017 à 19:18:03
n°2299173
h3bus
Troll Inside
Posté le 12-04-2017 à 19:15:24  profilanswer
 

Si tu pouvais éviter de l'embrouiller encore plus avec des idées stupides, merci.

 

Edit: @localghost


Message édité par h3bus le 12-04-2017 à 19:15:53

---------------
sheep++
n°2299174
Profil sup​primé
Posté le 12-04-2017 à 19:25:11  answer
 

Vous êtes deux ronchons "embrouillés" alors !
 
Je prend note ça interresse tout le monde je pense.

n°2299175
h3bus
Troll Inside
Posté le 12-04-2017 à 19:28:39  profilanswer
 

Désolé, d'habitude tes élucubrations me font marrer mais venir poser ta pêche sur le topic d'un mec qui risque de patauger un bon bout de temps si il ne prend pas le problème du bon côté, ouai ça me rends "ronchon"


---------------
sheep++
n°2299176
Profil sup​primé
Posté le 12-04-2017 à 19:48:26  answer
 

h3bus a écrit :

Désolé, d'habitude tes élucubrations me font marrer mais venir poser ta pêche sur le topic d'un mec qui risque de patauger un bon bout de temps si il ne prend pas le problème du bon côté, ouai ça me rends "ronchon"


 
Donc ça n'a rien à voir avec moi.
 
Donc tu me laisse tranquille.
 
 
Ok ?
 
 [:azylum]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Envoi d'informations en format kexadecimal en langage C

 

Sujets relatifs
Quel langage pour ce site web ?[Python] Parser un CSV vers un format custom
Quel langage pour automatiser des tâches dans une applicationProgramme Tripode C
Explication d'un script Cvba outlook envoi de mail
Quel langage pour reparation toute carte[C][pthreads] Probleme deconecton serveur client avec socket
[Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"[C] Algo pour trouver un sens d'incrément
Plus de sujets relatifs à : Envoi d'informations en format kexadecimal en langage C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR