Socket - Base de données - dk51

Fermé
siskozed Messages postés 69 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 septembre 2009 - 14 févr. 2008 à 12:07
 y9 - 22 janv. 2014 à 09:44
Bonjour,

Je réalise un programme qui gère une exploitation maraichaire. Nous sommes 4 étudiants sur le projet et en gros, nous devons gérer des moteurs en fonction de données climatiques acquisent par une station météo et de différents capteurs (température, hygrométrie etc.)

Le programme que je dois réaliser doit donc communiquer avec la station météo et avec le programme principal, l'ihm. Il sera donc sur un module dk51 (sc12-sc13), il tournera en boucle et récuperera les données météo toutes les 35sec.

La tâche sur laquelle je travaille en ce moment est sur la mise à disposition des mesures. Je dois donc faire le programme qui récupert ces données météorologiques, les envoyer au programme pour avoir les informations dans l'IHM. Je dois ensuite les enregistrer dans une base de données dans le but d'éditer des statistiques de la météo.

Alors voilà, je pense partir sur de la programmation par socket en c/c++.

J'ai plusieurs zones de flou : d'abord sur la programmation socket
puis la communication entre programme en c/c++ et base de données

Si vous savez le faire, ce serait très gentil de me filer quelques petits trucs.
MERCI D'AVANCE.

5 réponses

siskozed Messages postés 69 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 septembre 2009 86
4 mars 2008 à 08:25
up
0
up !
0
siskozed Messages postés 69 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 septembre 2009 86
8 avril 2008 à 11:20
Salut, j'ai réussi à récupérer et analyser les trames qui arrivent. Voici le code. Si ca interesse quelqu'un, vous pouvez me joindre sur mon mail leny@frid.fr

/////////////////////////////////////////////////////////// programme développé sous borland pour carte SC12 ou SC13 avec module DK51
//////////////////////////////////////////////FICHIER PRINCIPAL ///////////////// METEO.CPP

//***** APPLI DK50 AUTHOR : Leny FRID ; DATE : 03/08 ***********

#include "FOSSIL.H"
#include "CLIB.H"
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "METEO.H"

int main()
{
int retStatu1;
int i = 0;
int j = 0;
int a = 0;
unsigned char dummy;
unsigned char meteobuffer[16];
char* grandeur ;
char* signe;

// init fossil --------------------
if( fossil_init( 0 ) != 0x1954 ) // code drivers fossil
{ // il faut le mettre avant le
printf("\r\nInit fossil ERREUR\r\n"); // printf "appli dk50 projet 2008"
}
sleep(1);
//initialisation liaison dk51 - station
fossil_set_flowcontrol( 0, 1 );

printf("\r\n-- PRIMSOL CLIMAT - L.BERNARD - 2008 --\r\n");
printf("\r\n- -\r\n");

// init baudrate ------------------------------------

fossil_setbaud(0,9600, FOSSIL_PARITY_NO, 8, 1);
pfe_enable_pio (10,5); // initialise pio10 en sortie au niveau bas
pfe_enable_pio (9,1); // initialise pio9 en entrée pour qu'il soit capable de lire avant d'émettre


sleep(1);


// purge des buffers entrée et sortie
fossil_purge_output( 0 );
fossil_purge_input( 0 );

retStatu1 = fossil_status_request ( 0 );

if ((retStatu1 && 0x40) == 1 ) // test du bit 6 Buffer empty
{
printf("\rLe buffer est vide\n") ;
}
else
{
printf("\rProbleme, le buffer devrait etre vide\n");
}

// reception et analyse de la trame-----------------------------------------

do
{
i = 0;
dummy = fossil_getbyte_wait ( 0 ); // le getbyte récupere les octets
//envoyés par liaison RS232
meteobuffer[i] = dummy;

if(meteobuffer[0]==0xff) // ON TESTE SI ON A RECU FF 1 FOIS
{
printf( "\n<%2x> ", meteobuffer[i] ); // On affiche l'octet recu
i++;
dummy = fossil_getbyte_wait ( 0 );
meteobuffer[i] = dummy;
printf( "<%2x> ", meteobuffer[i] ); // On affiche l'octet recu

if(meteobuffer[1]==0xff) // ON TESTE SI ON A RECU FF 2 FOIS
{//si on a recu <ff> <ff>, on analyse le troisieme octet pour définir le type de mesure

i++;
dummy = fossil_getbyte_wait ( 0 );
meteobuffer[i] = dummy;

printf( "<%2x> ", meteobuffer[i] ); // On affiche l'octet recu

switch (meteobuffer[2]) // en fonction de meteobuffer[2]
{
/////////////////////// VENT ///////////////////////////
case 0:
// on en deduit que c'est le vent
grandeur = "C'est le vent";
j = 10;

// boucle pour récupérer les mesures du vent
do
{
i++;
dummy = fossil_getbyte_wait ( 0 );
meteobuffer[i] = dummy;
printf( "<%2x> ", meteobuffer[i] ); // On affiche l'octet recu
}while (i < j);
printf( "\n Grandeur mesuree : %s\n\n", grandeur);
//////////////////////// Rafales et vitesse moyenne ////////
capteur_station.vrafvent = ((meteobuffer[5]&0xf0)>>4)+(meteobuffer[6]&0x0f)*10+((meteobuffer[6]&0xf0)>>4)*100;
capteur_station.vmoyvent = (meteobuffer[7]&0x0f)+( (meteobuffer[7]&0xf0)>>4)+(meteobuffer[8]&0x0f)*10;
/////////////// Direction du vent exprimee en ° //////////////
capteur_station.dvent = (meteobuffer[4]&0x0f)+((meteobuffer[4]&0xf0)>>4)*10
+(meteobuffer[5]&0x0f)*100;

printf("Vitesse moyenne du vent : %i\nVitesse des rafales : %i\nDirection du vent : %i\n",capteur_station.vmoyvent, capteur_station.vrafvent, capteur_station.dvent);

break;

/////////////////////// PLUIE ///////////////////////////
case 1:
j = 15;
// on en deduit que c'est la pluie
grandeur = "C'est la pluie";

// boucle pour récupérer les mesures de la pluie
do
{
i++;
dummy = fossil_getbyte_wait ( 0 );
meteobuffer[i] = dummy;
printf( "<%2x> ", meteobuffer[i] ); // On affiche l'octet recu
}while (i < j);
printf( "\n Grandeur mesuree : %s\n\n", grandeur);

//////////////////////// pluviometrie en mm/h ///////////////
capteur_station.pluv = (meteobuffer[4]&0x0f)+((meteobuffer[4]&0xf0)>>4)*10+(meteobuffer[5]&0x0f)*100;
printf("Pluviometrie : %i mm/h\n",capteur_station.pluv);

break;

/////////////////////// THERMO, HYGRO ///////////////////////
case 3:
j =7;
// on en deduit que c'est la temperature et l'hygrometrie
grandeur = " temperature et de l'hygrometrie";

// boucle pour récupérer les mesures
do
{
i++;
dummy = fossil_getbyte_wait ( 0 );
meteobuffer[i] = dummy;
printf( "<%2x> ", meteobuffer[i] ); // On affiche l'octet recu
}while (i < j);
printf( "\n On a la mesure de la%s\n\n", grandeur);

capteur_station.signe =(meteobuffer[5]&0x0f)>>7;
if (capteur_station.signe==0)
{
signe = "+";
}
else
{
signe = "-";
}
capteur_station.temp =((meteobuffer[4]&0xf0)>>4)+(meteobuffer[5]&0x0f)*10+((meteobuffer[5]&0x30)>>4)*100;
capteur_station.temp2 =(meteobuffer[4]&0x0f);
printf("Temperature : %s%i.%i °C\n",signe,capteur_station.temp,capteur_station.temp2);

capteur_station.hygr =(meteobuffer[6]&0x0f)+((meteobuffer[6]&0xf0)>>4)*10;
printf("Hygrometrie : %i %\n",capteur_station.hygr);

break;

default:
// on en deduit que c'est une grandeur que l'on ne traite pas
j = 0;
grandeur = "grandeur non geree, trame suivante";
printf( "\n Grandeur mesuree : %s\n\n", grandeur);
break;
}; // fin switch case
}// fin if recup ff une deuxieme fois
} // fin if recup ff une premiere fois
} // fin do-while general
while(a==0);

}
/////////////////////////////////////////////////////////////////////////////////////INCLUDE FILE METEO.H

//*****************************************************************************/
// Programme primsol climat, par Leny FRID, Avril 2008
//*****************************************************************************/
#ifndef _METEO_H_
#define _METEO_H_
/*****************************************************************************/
/*****************************************************************************/
/*
* definitions Structure
*/
/*****************************************************************************/
struct capteurs_station_tag
{
int vmoyvent; // vitesse des rafales du vent
int vrafvent; // vitesse moyenne du vent
int dvent; // direction du vent exprimee en °C
int temp; // temperature
int temp2; // temperature
int signe; // signe temperature
int hygr; // hygrometrie
int pluv; // pluviometrie
}capteur_station ;

#endif /* __METEO_H__ */

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ne pas oublier de bien parametrer le projet.

Plateform = "dos (standard)",
"no exceptions" pour les librairies,
cocher "class librairy" dans frameworks,
"none" pour match support.

Puis dans les Options --> project, il faut sélectionner un processeur 80186, nécessaire pour l'R-TOS du dk51
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ne pas oublier aussi d'inclure le fichier CLIB2001.lib qui inclut direct tous les fichiers nécessaires (fossil.h, fossil.cpp, api etc...)

Pour in imprim-écran allez ici :

https://codes-sources.commentcamarche.net/

Je me concentre maintenant sur la communication socket... si quelqu'un gère bien là-dessus, je veux bien de l'aide... Je souhaiterais envoyer mes données à mon programme principal programmé en visual c++ sous windows donc... par TCP/IP

0
siskozed Messages postés 69 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 septembre 2009 86
22 avril 2008 à 09:52
quelqu'un pourrait me filer de l'aide sur les sockets ??

J'ai besoin de faire un client sur windows en visual C++ et un serveur sur une carte avec systeme d'exploitation 16bits 80186 (avec borland quoi)... si vous avez des billes là-dedans ca m'aiderait.

Merci
0
Salut, si tu veux je peux te passer mon SocketClient.h et .cpp.
J'utilise un DK40.

Je te passe mon msn : leyougo_3@hotmail.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
siskozed Messages postés 69 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 septembre 2009 86
28 mai 2008 à 23:54
merci beaucoup, je veux bienle code de ton serveur plutôt car j'ai réussi quelques trucs quand même mais il me reste un problème. Mon programme serveur sur la carte BECK au bout de 57 connexions du client n'est plus capables de recevoir de connexions socket... C'est contraignant, je ne sais pas pour quelle raison... si vous avez une piste, je suis à l'écoute (je mettrais mon code demain matin, 9h30).

Merci

0
j'ai un tp info comme ca!
0