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 [2018/03/15 13:35]
bvandepo
tpqt [2021/04/14 17:12] (Version actuelle)
bvandepo [Développement de l'application PC avec QTCreator]
Ligne 1: Ligne 1:
  
-{{http://homepages.laas.fr/bvandepo/files/iut/tp_pic/warning.jpeg}}+{{https://bvdp.inetdoc.net/files/iut/tp_pic/warning.jpeg}}
 <color red> <color red>
 POUR ACCEDER A L'INTEGRALITE DU SUJET DE TP: POUR ACCEDER A L'INTEGRALITE DU SUJET DE TP:
Ligne 13: Ligne 13:
 </color> </color>
  
-Polycopié du courshttp://homepages.laas.fr/bvandepo/files/iut/tp_pic/cours_preparation_pic_qt_six.pdf+<color red> 
 +Si vous êtes en chez vous, et que vous n'arrivez pas à vous connecter via SSH et VNC à une salle de TP, se connecter (en cliquant en haut à droite sur s'identifier) en tant que  utilisateur=app, mot de passe=app 
 +</color>
  
-et:   {{http://homepages.laas.fr/bvandepo/files/iut/tp_qt/coursPOO2015.pdf}} 
  
 +<color red>
 +Si vous êtes en chez vous, et que vous arrivez à vous connecter via SSH et VNC à une salle de TP, se connecter (en cliquant en haut à droite sur s'identifier) en tant que :  utilisateur=dist, mot de passe=dist
 +</color>
 +
 +
 +
 +
 +Polycopié du cours: https://bvdp.inetdoc.net/files/iut/cours_preparation_pic_qt_2021_complet_numbered.pdf
 +
 +et:   https://bvdp.inetdoc.net/files/iut/cours_POO_intro_complet_2021_numbered.pdf
  
  
Ligne 43: Ligne 54:
      
 Le résultat de cette analyse est que vous devez utiliser les numéros de ports 2700 et 2701 pour échanger des informations depuis le PC. Le résultat de cette analyse est que vous devez utiliser les numéros de ports 2700 et 2701 pour échanger des informations depuis le PC.
 +
 +
 +Le schéma suivant récapitule l'ensemble des matériels et logiciels que nous allons utiliser dans cette série de TP. Les différents éléments seront expliqués au fur et à mesure. <color red>A chaque étape, vous devez être capable d'identifier les portions utilisées et leur rôle. Vous devrez remplir les cases jaunes sur la feuille distribuée lors du TP.</color>
 +
 +
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/schemareseauPIC-2018-au-en-horizontal.png}}
 +
 +
 +
 +
 ====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 @app>  
 +Récupérer les fichiers nécessaires, et dezipper: https://bvdp.inetdoc.net/files/iut/td_fifo/install_qt5_windows/QTbroadcastreceiveretudiantEtBinairesWindowsQT5.zip
 +
 +</ifauth>
 +
 +<ifauth @au,@en,@dist>   
 Récupérer les fichiers nécessaires en saisissant dans une console: Récupérer les fichiers nécessaires en saisissant dans une console:
 +  echo 'commence'
   cd ~/   cd ~/
-  wget  http://homepages.laas.fr/bvandepo/files/iut/tp_qt/binaries.zip+  wget  https://bvdp.inetdoc.net/files/iut/tp_qt/binaries.zip
   unzip binaries.zip    unzip binaries.zip 
   rm binaries.zip   rm binaries.zip
Ligne 54: Ligne 82:
   ./testenlocal.sh     ./testenlocal.sh  
   echo 'fini'   echo 'fini'
 +</ifauth>
 +
  
  
Ligne 75: Ligne 105:
 </ifauth> </ifauth>
  
- + 
 + 
 +<ifauth @app> 
 +===Configuration du script pour le test en local=== 
 +Dans le dossier dezippé, configurer l'application BroadcastReceiver en éditant le script « testenlocal.bat » (click droit,  modifier) pour configurer l'IP et les ports UDP en émission et en réception. La syntaxe est la suivante: 
 +  start broadcastReceiver.exe IP_destination port_UDP_émission port_UDP_réception paramètres_optionnels_de_réglages_de_la_fenêtre 
 +par exemple:  
 +  start broadcastreceiver 192.168.1.100 27016 27017 10 40 500 130    
 + 
 +===Configuration du script pour simupic=== 
 +Dans le dossier dezippé, configurer l'application simupic en éditant le script « testsimu.bat » (click droit,  modifier) pour configurer l'IP et les ports UDP en émission et en réception. La syntaxe est la suivante: 
 +  start  simupic.exe ipachanger port1achanger port2achanger paramètres_optionnels_de_réglages_de_la_fenêtre 
 +par exemple:  
 +  start  simupic.exe ipachanger port1achanger port2achanger 2 25 700 80    
 + 
 +</ifauth> 
 + 
 + 
 +<ifauth @au,@en,@dist>  
 ===Utilisation de simupic=== ===Utilisation de simupic===
 Saisir dans la console: Saisir dans la console:
 +  echo 'commence'
   cd ~/binaries   cd ~/binaries
-  ./simupic     +  ./simupic    
- +  echo 'fini'  
 +</ifauth> 
  
  
Ligne 96: Ligne 146:
  
 <ifauth @prof> <ifauth @prof>
-Dézipper le fichier QTbroadcastreceiveretudiantAU2ET3.zipPour 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.+Note pour la Migration de qt4 vers qt5: 
 + 
 + 
 +https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5 
 + 
 +http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html 
 + 
 + 
 </ifauth> </ifauth>
  
-  echo commence+<ifauth @au,@en,@dist> 
 +   
 +  echo 'commence'
   cd ~/   cd ~/
-  wget  http://homepages.laas.fr/bvandepo/files/iut/tp_qt/QTbroadcastreceiveretudiantAU2ET3.zip+  wget  https://bvdp.inetdoc.net/files/iut/tp_qt/QTbroadcastreceiveretudiantAU2ET3.zip
   unzip QTbroadcastreceiveretudiantAU2ET3.zip   unzip QTbroadcastreceiveretudiantAU2ET3.zip
   rm QTbroadcastreceiveretudiantAU2ET3.zip   rm QTbroadcastreceiveretudiantAU2ET3.zip
   cd QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant/   cd QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant/
   rm broadcastreceiver.pro.user   rm broadcastreceiver.pro.user
 +  echo "Migration qt4 vers qt5"
 +  sed -i '/QT += network/ a QT += widgets' broadcastreceiver.pro  
 +  sed -i 's/#include <QtGui>/#include <QtWidgets>/g' receiver.cpp
 +  qmake broadcastreceiver.pro
   qtcreator broadcastreceiver.pro &   qtcreator broadcastreceiver.pro &
-  echo fini +  echo 'fini' 
-Cliquer sur Configurer le projet. +   
- +<color red>   
 +Important: COCHER la configuration DEBUG  puis Cliquer sur Configurer le projet. 
 +</color> 
 +</ifauth>
  
 +==Ouverture du projet ==
 +POUR OUVRIR LE PROJET avec QTCreator après l'avoir récupéré, vous devrez Copier/coller dans une console:
  
 +  echo 'commence'
 +  cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant
 +  qtcreator broadcastreceiver.pro  &
 +  echo 'fini'
  
 +<ifauth @au,@en,@dist>  
 ==Initialisation du système de gestion de version en local== ==Initialisation du système de gestion de version en local==
 POUR LA PREMIERE SEANCE UNIQUEMENT!, Copier/coller dans une console: POUR LA PREMIERE SEANCE UNIQUEMENT!, Copier/coller dans une console:
-  echo commence+ 
 +  echo 'commence'
   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant
   git init   git init
Ligne 122: Ligne 196:
   git commit -m'initial version'   git commit -m'initial version'
   gitk &   gitk &
-  echo fini+  echo 'fini'
  
 Vous pouvez ensuite fermer l'outils gitk qui permet de voir les changements entre les différentes versions. Vous pouvez ensuite fermer l'outils gitk qui permet de voir les changements entre les différentes versions.
-  +</ifauth>  
      
  
Ligne 131: Ligne 205:
 ===Structure du projet=== ===Structure du projet===
    
-Le projet est constitué des fichiers sources d'une application graphique sous QT. Votre code sera saisi dans l'implémentation de la fenêtre principale, à l'intérieur du fichier Sources->receiver.c. <color #FF0000>. Les définitions des méthodes et objets de la fenêtre principale sont quant à elles faites dans le fichier receiver.h. Ce sont les deux seuls fichiers que vous aurez à modifier jusqu'à nouvel ordre. </color> Pour information le projet contient également: +Le projet est constitué des fichiers sources d'une application graphique sous QT. Votre code sera saisi dans l'implémentation de la fenêtre principale, à l'intérieur du fichier Sources->receiver.cpp. <color #FF0000>. Les définitions des méthodes et objets de la fenêtre principale sont quant à elles faites dans le fichier receiver.h. Ce sont les deux seuls fichiers que vous aurez à modifier jusqu'à nouvel ordre. </color> Pour information le projet contient également: 
    .pro      fichier décrivant le projet QT, les règles de compilation, les librairies à utiliser etc...    .pro      fichier décrivant le projet QT, les règles de compilation, les librairies à utiliser etc...
   main.cpp       fichier décrivant le programme principal, qui se contente de lancer la fenêtre principale.   main.cpp       fichier décrivant le programme principal, qui se contente de lancer la fenêtre principale.
Ligne 148: Ligne 222:
 **CTRL+R** permet d’exécuter le programme. Le programme devra être fermé en cliquant sur le bouton croix de la fenêtre avant de le recompiler ou de l’exécuter à nouveau. **CTRL+R** permet d’exécuter le programme. Le programme devra être fermé en cliquant sur le bouton croix de la fenêtre avant de le recompiler ou de l’exécuter à nouveau.
  
-**F5** permet d'exécuter le programme en mode DEBUG. L'utilisateur passe alors en mode Debug, ce qui ajoute à l'affichage une zone à droite dans laquelle l'utilisateur pourra observer les variables et leurs valeurs. L'utilisateur pourra placer ou retirer des points d'arrêt en cliquant à droite du numéro de ligne d'un fichier. Il pourra exécuter en pas à pas sans rentrer dans les fonctions à l'aide de **F10** ou bien en entrant dans les fonctions à l'aide de **F11**. Il pourra ajouter une variable particulière à la liste des variables affichées en Debug en selectionant le nom de la variable dans le fichier programme et en cliquant droit dessus puis clic gauche sur **ajouter un évaluateur d'expression**.+**F5** permet d'exécuter le programme en mode DEBUG. L'utilisateur passe alors en mode Debug, ce qui ajoute à l'affichage une zone à droite dans laquelle l'utilisateur pourra observer les variables et leurs valeurs. L'utilisateur pourra placer ou retirer des points d'arrêt en cliquant à gauche du numéro de ligne d'un fichier. Il pourra exécuter en pas à pas sans rentrer dans les fonctions à l'aide de **F10** ou bien en entrant dans les fonctions à l'aide de **F11**. Il pourra ajouter une variable particulière à la liste des variables affichées en Debug en selectionant le nom de la variable dans le fichier programme et en cliquant droit dessus puis clic gauche sur **ajouter un évaluateur d'expression**.
      
 ====Émission depuis le PC====   ====Émission depuis le PC====  
  
 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 * IP)** de 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 **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 é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 0vous 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. 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: +{{https://bvdp.inetdoc.net/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+ 
 +  echo 'commence'
   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant
   git commit -a -m'emission'   git commit -a -m'emission'
   gitk &    gitk & 
-  echo fini+  echo 'fini'
  
  
Ligne 197: Ligne 270:
   - 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);** de 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. 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:+{{https://bvdp.inetdoc.net/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   echo commence
   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant
Ligne 228: Ligne 301:
  
        
-{{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:+{{https://bvdp.inetdoc.net/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   echo commence
   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant   cd ~/QTbroadcastreceiveretudiantAU2ET3/QTbroadcastreceiveretudiant
Ligne 247: Ligne 320:
   - les définitions des boutons pour les leds 1 et 2   - les définitions des boutons pour les leds 1 et 2
   - les méthodes associées  dans la partie private slots:    - les méthodes associées  dans la partie private slots: 
-Dans le fichier receiver.c, implémenter les fonctions correspondant à l'appui sur les boutons (appel de **sendUDP(i)** ) et ajouter dans la méthode constructeur de la fenêtre: +Dans le fichier receiver.cpp, implémenter les fonctions correspondant à l'appui sur les boutons (appel de **sendUDP(i)** ) et ajouter dans la méthode constructeur de la fenêtre:
   - la construction des objets boutons (new)   - la construction des objets boutons (new)
   - la connexion de l'événement « click sur les boutons » au slots correspondants   - la connexion de l'événement « click sur les boutons » au slots correspondants
   - le placement des boutons sur la fenêtre (button1Layout->addWidget...)   - le placement des boutons sur la fenêtre (button1Layout->addWidget...)
 +</ifauth>
 ===Gestion du Timer sur le PC=== ===Gestion du Timer sur le PC===
  
Ligne 259: Ligne 332:
   - Décommenter la création de **commutTimerButton** et de **Timer** ainsi que les implémentations de **void Receiver::commutTimer()** et de **void Receiver::on_timer_Event()**   - Décommenter la création de **commutTimerButton** et de **Timer** ainsi que les implémentations de **void Receiver::commutTimer()** et de **void Receiver::on_timer_Event()**
   - Tester votre application avec Simupic   - Tester votre application avec Simupic
-</ifauth>+ 
 + 
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}} 
tpqt.1521117306.txt.gz · Dernière modification: 2018/03/15 13:35 de bvandepo