Cours:IIedf
Révision datée du 21 janvier 2013 à 19:02 par Bjacquot (discussion | contributions)
Etapes du projet
- Compréhension de la liaison téléinformation
- Récupération des données sur le Pc
- Analyse des données
- 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;
}