Bonjour,
J'ai actuellement un problème pour traiter les données reçus d'une trame par liaison série.
Les trames sont envoyés chaque minute par une horloge HARPES : http://i.imgur.com/9PUuK4a.png
Elles sont de cette forme :
FF 01 10 02 04 15 09 11 09 54 02 03 16
13 octets au total et en hexa.
Pour l'acquisition du port série j'utilise la classe QSerialPort configuré à 1200bauds, parité pair, & 2 bits de stop.
Pour la lecture j'instancie mon objet Trame et ensuite fait appelle à la fonction Affiche_decodee qui récupère en continue les informations reçus du port série.
1 2 3 4 5 6 7
| void MainWindow::readData()
{
// utilisation de la classe decode harpes
decode_harpes Trame;
console->insertPlainText(Trame.Affiche_decodee(serial->readAll()));
} |
La lecture se fait, mais je n'arrive pas a traiter mes données dans la fonction Affiche_decodee.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QString decode_harpes::Affiche_decodee(const QByteArray trames)
{
for (int i = 0; i < trames.size(); i++)
{
if (trames.at(i) == -1)//FF = -1 décimal
{
return QString("Début de trame \n");
}
else if (trames.at(i-1) == 3 && trames.at(i) == 22) //16hexa = 22 decimal 3hexa = 3 decimal
{
return QString("\nFin de trame \n");
}
else
{
return QString::number(trames.at(i),16);
}
}
} |
Je ne cherche pas à convertir la trame qui arrive en décimal et préfère la traiter directement en décimal. Mais voilà le résultat :
Je ne récupère pas toutes la trames, des octets ou demi octets ont disparu !
Avez-vous une idée de comment je pourrais stocker ou traiter correctement la trame ? CAD en demi octet ou octect.
Je met en PJ le projet Qt ainsi que la doc pour le décodage de la trame.
Partager