bonjour,
J'ai actuellement un boitier communiquant avec le PC par le port série qui présente les caractéristiques suivantes:
bauds=56700 kbits/s
data_bit=8
parity=none
flowcontrol=none
bitstop=1
Le protocole de communication s'énonce comme suit:
1.envoi d'une trame de 6 octets(PC -> boitier):demande d'acquisition
2.réception d'une trame de 8 octets(boitier -> PC):confirmation acquisition
3.reception en continu de trame (encadré par 2 octet de valeur connue et de 2 octets de numérotation de trame modulo 256) de 136 octets au total (vitesse de réception de 56700 kbits/s) telle que l'on ait 18 trames de 136 octets reçus par seconde.
J'ai donc utilisé le programme du paragraphe 3.2 du lien suivant:http://christophej.developpez.com/tu...java/javacomm/ que j'ai évidemment adapté en modifiant la fonction communique, en supprimant le main et les threads car j'instancie la classe à partir d'une interface graphique.
Il se trouve que si je demande l'affichage des données reçus dans la fonction d'interruption ( serialEvent(SerialPortEvent event)) et l'affichage de la taille du buffer d'entrée avec les instructions:fluxLecture.read() et serialPort.getInputStream().available(). Je constate que lorsque le buffer d'entrée atteint sa valeur limite(4096 par défaut),il se vide automatiquement provoquant une trame reçue de taille complètement farfelue couplé avec un saut de trame(50 trames sautées). Or je souhaite pourvoir faire une lecture caractère par caractère sans perdre d'information.
Pour comprendre le mécanisme, j'ai supprimé les différents affichages à l'intèrieur de la fonction d'interruption:serialEvent(SerialPortEvent event) afin de les remplacer par l' incrémentation d'une variable globale à la classe. Puis j'affiche la taille du buffer d'entrée et de la valeur de la variable globale à la sortie du programme. Je constate alors que le rapport (taille du buffer d'entrée)/(valeur de la variable globale)= 4.5. Ce qui signifie que je n'ai pas autant d'appel de la fonction serialEvent(SerialPortEvent event) que de donnée reçue.
Voici donc mes questions:
y a t'il une solution pour obtenir une lecture caractère par caractère? Si non, Est ce que la librairie payante Serialio le permet?
Peux t'on vider le buffer d'entrée sans avoir à lire toutes les données?
Merci par avance
Partager