Cours:IIedf

De troyesGEII
Aller à : navigation, rechercher

Etapes du projet

  1. Compréhension de la liaison téléinformation
  2. Récupération des données sur le Pc
  3. Analyse des données
  4. Affichage
    • sous forme textuelle
    • sous forme graphique


Liaison téléinformation

Le compteur edf envoie en permanence des données pas le biais d'une liaison téléinformation.

Vous pouvez trouver le principe de cette transmission sur les documents suivants :

Ces données, comme vous avez pu le lire sur les documents précédents, sont transmises sur une liaison filaire de type série, avec les caractéristiques suivantes :

  • 1200 bits/s
  • 7 bits de données
  • parité paire
  • 1 bit de stop

Reliez votre pc au compteur et vérifiez (avec le logiciel gtkterm par exemple) que le compteur transmet des données.

Liaison Série

A l'aide de la page décrivant la liaison série sous linux, écrire un programme qui permet d'afficher (à l'aide d'un printf) les caractères reçus.

On pourra se baser sur ce programme :

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
 
 
 
int main(void)
{
   int port_serie;
   struct termios options;
   int reception;
   char buffer[16] = "";

   port_serie = open("/dev/ttyS0", O_RDONLY | O_NOCTTY | O_NDELAY);    //Demande d'accès en lecture seule
   if(port_serie < 0)                                                  //en cas d'erreur d'ouverture
   {
      perror("Erreur d'ouverture du port serie");
      exit(-1);
   }
   else
   {
      printf("Port serie numero %d bien ouvert. \n", port_serie);
      tcgetattr(port_serie, &options); 		                       //On récupère les paramètres actuels
      cfsetospeed(&options, B1200);                                    //Choix de la vitesse
      options.c_cflag |= (CLOCAL | CREAD);
      options.c_cflag &= PAREVEN;                                      //Choix de la parité
      options.c_cflag &= ~CSTOPB;                                      //Nbre de bits de stop
      options.c_cflag &= ~CSIZE;
      options.c_cflag |= CS7;                                          //Nbre de bits de données
      tcsetattr(port_serie, TCSANOW, &options);                        //Mise en place des paramètres
      sleep(3);
      printf("Lecture des donnees en cours ... \n");
      fcntl(port_serie,F_SETFL,10);                                    //mode bloquant pour la fonction read() si aucun caractere dispo, programme attend

      while (1)
      {
	 reception=read(port_serie,buffer,1);                          //buffer contiendra les données, 1 est le nombre d'octets a copier dans cet espace
	 if (reception != -1)    printf("%s",buffer);
      }
   }
   close(port_serie);                                                  //fermeture du port serie
   return 0;
}