antoineleclercq
Messages postés7Date d'inscriptiondimanche 1 février 2009StatutMembreDernière intervention15 avril 2012
-
7 févr. 2012 à 23:08
antoineleclercq
Messages postés7Date d'inscriptiondimanche 1 février 2009StatutMembreDernière intervention15 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.....
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
antoineleclercq
Messages postés7Date d'inscriptiondimanche 1 février 2009StatutMembreDernière intervention15 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 !!
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 ....