2016-12-15 1 views
2

Je suis un débutant en C++ et Qt. Je veux enregistrer dans un tableau la valeur reçue dans un port série après avoir reçu la chaîne: "Données". J'utilise l'exemple de terminal pour que le port série fonctionne correctement.Comment enregistrer dans un tableau les 100 suivants reçu la valeur après une chaîne reçue déterminée dans Qt

The read function in the Example is the same: 
void MainWindow::readData() 
{ 
    QByteArray data = serial->readAll(); 
    console->putData(data); 

} 

Comment puis-je le modifier? Merci!!!

+1

Est-ce synchrone ou asynchrone? quel est le format de vos paquets? –

+0

Est asynchrone et les paquets sont de type int. –

+0

Qu'est-ce qui détermine le début et la fin de votre transmission? utilisez-vous une somme de contrôle? –

Répondre

1

Si vous envoyez manuellement les données, je vous recommande d'ajouter un délimiteur de début de trame et un délimiteur de fin de trame et une somme de contrôle de préférence. Il suffit de déclarer l'endroit où vous déclarez le numéro de série.

QByteArray packet_storage; 

StartOfMessage and EndOfMessage dépendra de votre appareil. Je ne sais pas ce que vous transmettez. J'espère que vous pouvez comprendre à partir de la documentation de votre appareil ce que vous envoyez.

comme pour moi, je suis en utilisant

enum Constants 
    { 
     StartOfMessage = '\x02', /* Value of byte that marks the start of a message */ 
     EndOfMessage = '\x03', /* Value of byte that marks the end of a message */ 
     CarridgeReturn = '\x0D', /* Carridge return is first byte of end of line */ 
     LineFeed  = '\x0A', /* Line feed is second byte of end of line */ 
     NullChar  = '\0'  /* Null Character */ 
    }; 

void MainWindow::readData() 
{ 
    // read all 
    QByteArray data = serial->readAll(); 

    // store all read data packet_storage is a QByteArray 
    packet_storage.append(data); 

    int start_index = 0; 
    int end_index = 0; 

    // process packet if not empty 
    if(!packet_storage.isEmpty()) 
    { 
     if(packet_storage.contains(StartOfMessage) && packet_storage.contains(EndOfMessage)) 
     { 
        start_index = packet_storage.indexOf(StartOfMessage,0); 
        end_index = packet_storage.indexOf(EndOfMessage,0); 

        int length = 0; 

        for (int i=start_index; i <= end_index; i++) 
        { 
         length++; 
        } 

        // get data 
        QByteArray dt = packet_storage.mid(start_index,length); 

        // do your processing here. 
        // store in vector write to file etc. 
        processpacket(dt);       

        packet_storage.remove(start_index,dt.size()); 

      } 

     } 
} 
+0

Merci Rafael! Maintenant, j'essaie de l'utiliser! –

+0

Désolé, mais comment définir packet_storage et start et end_index? =) –