Outils pour utilisateurs

Outils du site


tpqt

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tpqt [2017/03/20 10:02]
bvandepo
tpqt [2019/04/11 17:16] (Version actuelle)
bvandepo
Ligne 1: Ligne 1:
-===== TP Initiation à l'API Réseau de QTCreator et utilisation d'un réseau local pour l'​échange de données via  sockets UDP===== ​ 
  
-Ce TP est la suite du tp[[tppic]]+{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​warning.jpeg}} 
 +<color red> 
 +POUR ACCEDER A L'​INTEGRALITE DU SUJET DE TP: 
 +</​color>​
  
 +<color red>
 +Si vous êtes en salle ER2AU, se connecter (en cliquant en haut à droite sur s'​identifier) en tant que :  utilisateur=au,​ mot de passe=au ​
 +</​color> ​  
  
 <color red> <color red>
-SE LOGGER EN +Si vous êtes en salle ER2EN, se connecter (en cliquant en haut à droite sur s'​identifier) en tant que :  utilisateur=en,​ mot de passe=en ​    
 +</​color>​
  
-utilisateur;​ au, mot de passe; au    si vous êtes en salle ER2AU+Polycopié du cours: https://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​cours_preparation_pic_qt_six.pdf
  
-utilisateur;​ en, mot de passe; en    si vous êtes en salle ER2EN +et:   ​{{https:​//​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​cours_POO_intro9_2019.pdf}}
-</color>+
  
-Document de cours: ​ {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​coursPOO2015.pdf}} 
  
 +
 +===== TP Initiation à l'API Réseau de QTCreator et utilisation d'un réseau local pour l'​échange de données via  sockets UDP===== ​
 +
 +Ce TP est la suite du tp: [[tppic]]
 +
 + 
 + 
  
 __Objectifs :__ __Objectifs :__
Ligne 34: Ligne 45:
 ====Utilisation de l'​application BroadcastReceiver sur les PC étudiant==== ====Utilisation de l'​application BroadcastReceiver sur les PC étudiant====
 L'​application que vous devez développer vous est fournie dans un premier temps afin que vous la voyez fonctionner et sachiez ce que vous devez faire. Une application fonctionnant sur le PC et simulant le PIC est également fournie pour faciliter le développement et permettre aux étudiants n'​ayant pas terminé le programme sur le PIC de faire ce TP. L'​application que vous devez développer vous est fournie dans un premier temps afin que vous la voyez fonctionner et sachiez ce que vous devez faire. Une application fonctionnant sur le PC et simulant le PIC est également fournie pour faciliter le développement et permettre aux étudiants n'​ayant pas terminé le programme sur le PIC de faire ce TP.
- +  ​
- +
-<ifauth @au> +
- ​Récupérer le dossier Commun/​2AU/​PIC/​ si ce n'est pas déjà fait. Veillez à ne pas écraser les fichiers que vous avez déjà écrit pour le PIC! +
-</​ifauth>​ +
- +
-<ifauth @en> +
 Récupérer les fichiers nécessaires en saisissant dans une console: Récupérer les fichiers nécessaires en saisissant dans une console:
   cd ~/   cd ~/
Ligne 50: Ligne 54:
   ./​testenlocal.sh  ​   ./​testenlocal.sh  ​
   echo '​fini'​   echo '​fini'​
-</​ifauth>​+ 
 ====Test des applications en local sur le PC==== ====Test des applications en local sur le PC====
 Dans les dossiers récupérés se trouve un exécutable permettant de simuler la carte PIC. Il y a également le fichier de script .bat ou .sh qui permet de lancer simupic pour qu'​elle utilise les  bons numéros d'IP et de port (que vous avez du déterminer à l'​exercice précédent) . Ce programme permet de simuler la carte PIC et de développer l'​application sur PC sans avoir besoin de la carte PIC. Pour le test en local, vous pourrez utiliser l'​adresse IP de la boucle locale (127.0.0.1). Dans les dossiers récupérés se trouve un exécutable permettant de simuler la carte PIC. Il y a également le fichier de script .bat ou .sh qui permet de lancer simupic pour qu'​elle utilise les  bons numéros d'IP et de port (que vous avez du déterminer à l'​exercice précédent) . Ce programme permet de simuler la carte PIC et de développer l'​application sur PC sans avoir besoin de la carte PIC. Pour le test en local, vous pourrez utiliser l'​adresse IP de la boucle locale (127.0.0.1).
  
-<ifauth @au>+<ifauth @prof>
 ===Configuration du script pour simupic=== ===Configuration du script pour simupic===
 Dans le dossier simupic, configurer l'​application simupic en éditant le script « lancersimupic.bat » (click droit, ​ modifier) pour configurer l'IP et les ports UDP en émission et en réception. La syntaxe est la suivante: Dans le dossier simupic, configurer l'​application simupic en éditant le script « lancersimupic.bat » (click droit, ​ modifier) pour configurer l'IP et les ports UDP en émission et en réception. La syntaxe est la suivante:
Ligne 70: Ligne 75:
 </​ifauth>​ </​ifauth>​
  
-<ifauth @en>+ 
 ===Utilisation de simupic=== ===Utilisation de simupic===
 Saisir dans la console: Saisir dans la console:
   cd ~/binaries   cd ~/binaries
-  ./​simupic ​      +  ./​simupic ​ & ​   ​ 
-</​ifauth>​+ 
  
  
Ligne 90: Ligne 95:
 </​ifauth>​ </​ifauth>​
  
-<ifauth @au>+<ifauth @prof>
 Dézipper le fichier QTbroadcastreceiveretudiantAU2ET3.zip. Pour ouvrir le projet, il faut que vous lanciez le script lanceqt.bat puis cliquez sur  Fichier->​ouvrir_projet et sélectionnez le fichier .pro dans le dossier que vous venez de dézipper. Dézipper le fichier QTbroadcastreceiveretudiantAU2ET3.zip. Pour ouvrir le projet, il faut que vous lanciez le script lanceqt.bat puis cliquez sur  Fichier->​ouvrir_projet et sélectionnez le fichier .pro dans le dossier que vous venez de dézipper.
 </​ifauth>​ </​ifauth>​
  
-<ifauth @en>+  echo commence
   cd ~/   cd ~/
   wget  http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​QTbroadcastreceiveretudiantAU2ET3.zip   wget  http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​QTbroadcastreceiveretudiantAU2ET3.zip
Ligne 101: Ligne 106:
   cd QTbroadcastreceiveretudiantAU2ET3/​QTbroadcastreceiveretudiant/​   cd QTbroadcastreceiveretudiantAU2ET3/​QTbroadcastreceiveretudiant/​
   rm broadcastreceiver.pro.user   rm broadcastreceiver.pro.user
-  qtcreator broadcastreceiver.pro  +  ​qmake-qt4 broadcastreceiver.pro 
-Cliquer sur Configurer le projet. +  ​qtcreator broadcastreceiver.pro ​& 
-</ifauth>+  echo fini 
 +   
 +<color red> ​  
 +Important: COCHER la configuration DEBUG  puis Cliquer sur Configurer le projet. 
 +</color> 
 + 
 + 
 + 
 + 
 +==Initialisation du système de gestion de version en local== 
 +POUR LA PREMIERE SEANCE UNIQUEMENT!,​ Copier/​coller dans une console: 
 +  echo commence 
 +  cd ~/​QTbroadcastreceiveretudiantAU2ET3/​QTbroadcastreceiveretudiant 
 +  git init 
 +  git add broadcastreceiver.pro ​ dialog.ui ​ main.cpp ​ receiver.cpp ​ receiver.h 
 +  git commit -m'​initial version'​ 
 +  gitk & 
 +  echo fini 
 + 
 +Vous pouvez ensuite fermer l'​outils gitk qui permet de voir les changements entre les différentes versions. 
 +   
 +   
 + 
 ===Structure du projet=== ===Structure du projet===
    
Ligne 128: Ligne 156:
  
 Afin que l'​application à développer sur PC soit capable d'​émettre les datagrammes pour piloter la carte PIC, il faut implémenter une méthode ** void Receiver::​sendUDP(int i)**, (i code le numéro de la led à allumer, donc le bouton ​ pressé de l'​application sur le PC). Cette méthode devra faire les actions suivantes: Afin que l'​application à développer sur PC soit capable d'​émettre les datagrammes pour piloter la carte PIC, il faut implémenter une méthode ** void Receiver::​sendUDP(int i)**, (i code le numéro de la led à allumer, donc le bouton ​ pressé de l'​application sur le PC). Cette méthode devra faire les actions suivantes:
-  - Définir une variable de type QHostAddress ​ (par exemple ​DestIP ​+  - Définir une variable de type **QHostAddress**  (par exemple ​**destIP** ​
-  - Appeler la méthode bool setAddress(char * IPsur l'​objet  ​DestIP ​pour régler l'ip du dispositif avec lequel communiquer. +  - Appeler la méthode ​**bool setAddress(char * addrIP)** de l'​objet  ​**destIP** ​pour régler l'ip du dispositif avec lequel communiquer ​à l'aide d'une chaine de caractères **addrIP**
-  - Définir une variable de type quint16 ​ pour coder le numéro du port UDP destination (par exemple ​DestPort=4567;) +  - Définir une variable de type **quint16**  pour coder le numéro du port UDP destination (par exemple ​destPort=4567;) 
-  - Définir un tableau de caractères (par exemple chaine[]) et générer la chaîne pour piloter les leds (par exemple avec la fonction sprintf comme pour le PIC) +  - Définir un tableau de caractères (par exemple ​**chaine[]**) et générer la chaîne pour piloter les leds (par exemple avec la fonction sprintf comme pour le PIC) 
-  - Pour émettre la chaîne sur le socket, appeler la méthode **qint64 writeDatagram(const char *data, qint64 len, const QHostAddress host, quint16 port);** de l'​objet udpSocket. ​NB: il faut caster (convertir le type de) la chaîne en  (const char *)  et  pour le paramètre len utiliser (qint64)strlen(chaine)+1 (car on envoie le contenu de la chaine + le caractère \0 terminateur de chaine.+  - Pour émettre la chaîne ​**chaine** ​sur la socket, appeler la méthode **qint64 writeDatagram(const char * chaine, qint64 len, const QHostAddress host, quint16 port);** de l'​objet ​**udpSocket**Pour le paramètre ​**len** utiliser ​la valeur **(qint64)strlen(chaine)+1** (car on envoie le contenu de la chaine + le caractère \0 terminateur de chaine.
   ​   ​
-Pour que la méthode **void Receiver::​sendUDP(int i)** soit appelée lorsque l'​utilisateur presse le bouton 0, vous devrez appeler **sendUDP(0);​** dans la méthode **void Receiver::​sendUDP0();​** qui est une fonction associée au signal "click de la souris"​ sur le bouton ​0.+La méthode **void Receiver::​sendUDP(int i)** est appelée lorsque l'​utilisateur presse ​un des boutons, ​le paramètre i codant ​le numéro du bouton. ​
  
-Faire de même pour les méthodes **sendUDP1** et **sendUDP2** afin d'​indiquer au programme ce qu'il doit faire en cas d'appui sur les boutons 1 et 2.+Tester que l'appui sur le bouton i commute bien la led i du simulateur. 
 +   
 + 
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console: 
 +  echo commence 
 +  cd ~/​QTbroadcastreceiveretudiantAU2ET3/​QTbroadcastreceiveretudiant 
 +  git commit -a -m'​emission'​ 
 +  gitk &  
 +  echo fini
  
-Tester que l'​appui sur le bouton i commute bien la led i du simulateur et <color #​FF0000>​**Faire valider à un enseignant.**</​color>​ 
  
 ====Réception sur le PC====  ​ ====Réception sur le PC====  ​
Ligne 153: Ligne 188:
  
 Ainsi la méthode **processPendingDatagrams()** sera automatiquement appelée à la réception d'un datagramme sur le numéro de port choisi. Ainsi la méthode **processPendingDatagrams()** sera automatiquement appelée à la réception d'un datagramme sur le numéro de port choisi.
 + 
  
 ===Implémentation de  la méthode de réception=== ===Implémentation de  la méthode de réception===
 Il vous faut maintenant implémenter la méthode **void Receiver::​processPendingDatagrams()** pour traiter les datagrammes reçus: Il vous faut maintenant implémenter la méthode **void Receiver::​processPendingDatagrams()** pour traiter les datagrammes reçus:
  
-  - Pour déterminer si il y a des datagrammes disponibles en réception, appeler la méthode **bool hasPendingDatagrams();​** ​sur l'​objet **udpSocket**.  +  - Pour déterminer si il y a des datagrammes disponibles en réception, appeler la méthode **bool hasPendingDatagrams();​** ​de l'​objet **udpSocket**.  
-  - Pour connaître le nombre d'​octets que l'on peut lire sur le socket, appeler la méthode **qint64 pendingDatagramSize()** de l'​objet **udpSocket**.+  - Pour connaître le nombre d'​octets que l'on peut lire sur la socket, appeler la méthode **qint64 pendingDatagramSize()** de l'​objet **udpSocket**.
   - Pour lire  le  contenu du datagramme, appeler la méthode **qint64 readDatagram(char *data, qint64 maxlen);​** ​ de l'​objet **udpSocket** (Comme pour le programme du PIC, on veillera à ne pas lire plus de données que ce que le tableau data peut contenir).   - Pour lire  le  contenu du datagramme, appeler la méthode **qint64 readDatagram(char *data, qint64 maxlen);​** ​ de l'​objet **udpSocket** (Comme pour le programme du PIC, on veillera à ne pas lire plus de données que ce que le tableau data peut contenir).
   - Utiliser la fonction sscanf pour décoder le datagramme reçu **int sscanf(char *chaine, const char * format, …)**   - Utiliser la fonction sscanf pour décoder le datagramme reçu **int sscanf(char *chaine, const char * format, …)**
   - Régler les valeurs de variables codant l'​état des boutons (b1,b2,b3)   - Régler les valeurs de variables codant l'​état des boutons (b1,b2,b3)
-  - Régler les afficheurs de la fenêtre (sw1,​sw2,​sw3) en appelant la méthode **void setChecked(bool);​** ​sur chacun des trois objets sw1 à 3 +  - Régler les afficheurs de la fenêtre (sw1,​sw2,​sw3) en appelant la méthode **void setChecked(bool);​** ​de chacun des trois objets sw1 à 3 . Appeler également la méthode setText(char * chaine) de l'​objet statusLabel pour afficher les caractères ASCII reçus.
    
-Tester que l'​appui sur le bouton i dans l'​application simupic est bien répercuté sur votre application ​et <color #​FF0000>​**Faire valider à un enseignant.**</color>+Tester que l'​appui sur le bouton i dans l'​application simupic est bien répercuté sur votre application. 
 + 
 +   
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console: 
 +  echo commence 
 +  cd ~/​QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant 
 +  git commit -a -m'​reception'​ 
 +  gitk &  
 +  echo fini 
 +   
  
 =====Test en conditions réelles de communication entre le PC et la carte PIC ===== =====Test en conditions réelles de communication entre le PC et la carte PIC =====
 Il est maintenant temps de tester votre application PC avec votre application PIC, pour cela: Il est maintenant temps de tester votre application PC avec votre application PIC, pour cela:
  
-  - Déterminer les adresses IP et MAC de l'​adaptateur réseau Realteck du PC étudiant en lançant ​ipconfig /all dans une console.+  - Déterminer les adresses IP et MAC de l'​adaptateur réseau Realteck du PC étudiant en lançant ​la commande "ip addr ls" ​dans une console.
   - Modifier le code du PIC en conséquence (adresse IP (et MAC si vous n'avez pas implémenté l'ARP sur le PIC) destinataire et les numéros de ports).   - Modifier le code du PIC en conséquence (adresse IP (et MAC si vous n'avez pas implémenté l'ARP sur le PIC) destinataire et les numéros de ports).
   - Modifier le code du programme PC en conséquence (adresse IP de la carte PIC et les numéros de ports).   - Modifier le code du programme PC en conséquence (adresse IP de la carte PIC et les numéros de ports).
Ligne 183: Ligne 228:
   - Repérer les champs correspondants aux différentes couches réseau.   - Repérer les champs correspondants aux différentes couches réseau.
  
-<color #​FF0000>​**Faire valider à un enseignant.**</color>+    
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console: 
 +  echo commence 
 +  cd ~/​QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant 
 +  git commit -a -m'​avec carte pic' 
 +  gitk & 
 +  echo fini
  
  
tpqt.1490000520.txt.gz · Dernière modification: 2017/03/20 10:02 par bvandepo