Java - décodage hexadecimal / binaire / entier

Résolu
antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012 - 7 févr. 2012 à 23:08
antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012 - 13 févr. 2012 à 10:13
Bonsoir à tous,

Je suis ennuyé avec le java pour le décodage de trames RS232. Pour vous replacer le problème dans son contexte, j'ai développé un réseau embarqué (SPI et CAN) dans une maquette de train avec une passerelle bluetooth. Chacun des 13 systèmes embarqués a une adresse, et chaque véhicule a un numéro.

En embarqué je travaille sur des octets et en hexadécimal sur des micro-contrôleurs, et cela pose problème au niveau de la réception sur le programme en java.

J'émets un entier qui s'incrémente toutes les secondes, donc de 0 à 255. De 0 à 127 j'affiche l'équivalent (table ascii). Par contre de 128 à 255, soit le programme plante soit j'obtiens 65530... (selon les différents tests que j'ai faits)

Voici la composition d'une trame embarquée :

- 1 octet : @ destination >> 3 bits pour le numéro de véhicule / 5 bits pour le numéro du système
- 1 octet : @ source >> 3 bits pour le numéro de véhicule / 5 bits pour le numéro du système
- 1 octet : numéro de transaction
- 1 octet : identifiant de communication (ex. : 1 feux, 2 : moteurs, etc....)
- 0..4 octets de datas
- 1 octet pour le checksum.

Je souhaiterais retrouver les mêmes valeurs qu'en embarqué, donc soit 0xXX, ou de 1 à 255 ou encore 0x10100110.

Sauf que c'est une chaîne de caractères avec les libs javax.comm.* que j'utilise. Et j'obtiens n'importe quoi...

Donc compliqué le passage de l'embarqué au PC.....

Merci d'avance pour votre aide!

Antoine

7 réponses

antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012
13 févr. 2012 à 10:13
Bonjour,

Merci pour ces infos. J'ai changé le format de mes trames, j'ai splitté 1 octet en 2, ex.:
0xAB 0xCD -> 0x0A 0x0B 0x0C 0x0D

Le message est décodé sur l'appli java, et je retrouve la trame de départ envoyée depuis l'embarqué.

A terme, j'essaierai de faire ça plus "proprement"...
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
8 févr. 2012 à 14:27
Hello,
ça ressemble à une histoire de signé/non signé ton problème...
Tes variables sont-elles en non-signées?

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012
8 févr. 2012 à 18:56
Justement tout est non-signé et validé en embarqué. Je vais tenter de passer de String à Bytes...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 févr. 2012 à 21:27
Salut,

Si ton but est de pouvoir traiter des données non signées et surtout pouvoir les manipuler ça risque d'être assez chiant. Pour faire simple en java les types sont tous signés...
Cependant il y a toujours une solution... j'ai survolé rapidement le lien mais le principal est là What is the Java equivalent of unsigned?

Bienvenue dans le monde magnifique de java ô_O





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

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

Posez votre question
antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012
8 févr. 2012 à 21:43
Merci de vos conseils,
Ca fait plus d'un an que je traîne ça!!! Une IHM sur PC est mieux qu'une télécommande pour commander un train!

J'ai fait une variable de type Byte, et quand je l'affiche dans le terminal, je retrouve exactement la trame envoyé par le micro-contrôleur par bluetooth...

Je dois trainer certain octet bit à bit pour mettre à jour l'IHM, je risque de me bouffer les doigts...

Pensez vous qu'un et logique me permettrait de trainer certains bits :

exemple au hasard :
if ((data[]&0x40))
update_feux();

??

Pour vous décrire l'objectif du projet :

1/
Chaque organe du train peut être commandé par 1 bit, sauf la consigne des moteurs qui est de 0 à 255 ( 0 : 0% / 255 : 100%)

2/
Je dois mettre des boutons pour commander feux, ventilos, pantographes, moteur (cf au dessus)
et des icônes de chacun de ses organes pour avoir leur statut en temps réel :
- Un speedometer en fonction de la vitesse renvoyée
- un logo des faces avant/arrière pour afficher les feux allumés
- la configuration du train (si deux locomotives sont couplées)

3/ Un diagnostic avec un téléchargement d'une EEPROM embarquée de 1024 octets contenant les défauts

4/ un affichage temps réel des consignes des systèmes de signalisation du sol.


Je suis très limité en java, si vous avez des pistes ou des conseils sur les méthodes de dèv, l'architecture de l'appli par rapport aux grandes lignes du projet, ça m'aiderait énormement !!

Merci à vous pour votre aide


Vive le développement !
0
antoineleclercq Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 15 avril 2012
9 févr. 2012 à 18:54
Voici un exemple de "compteur de vie" qui atteste le bon fonctionnement de la carte embarquée :

616212050000017e6364
Lifesign : 126
616212050000017f6364
Lifesign : 127
61621205000001efbfbd6364
Lifesign : -17


J'ai -17 dès que je passe au dessus de 127, soit 0x7F si je décode la trame reçue en hexadécimal...
Je ne comprends pas pourquoi je passe de 0x7F à 0xEFBFBD ....
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 févr. 2012 à 21:41
Salut,

la solution est très simple: ICI ensuite une notion optionnel mais dans ton cas ça peut t'être utile ICI





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous