THREAD DE SOCKET EN C++ - RTOS - dk51 -
Résolu
siskozed
Messages postés
69
Date d'inscription
Statut
Membre
Dernière intervention
-
216970 -
216970 -
Bonjour la communauté informatique,
Je suis étudiant en BTS informatique industrielle et je suis en projet de fin de 2ème année. Je dois récupérer les données d'une station météo et envoyer ces données au programme principal, sous visual C++.
J'ai réussi à établir la liaison RS232 entre ma carte sc13 + dk51 et ma station météo. J'ai fait un programme sous borland pour le développer en 16bits pour un processeur 80186 du fait de la carte de destination...
Je dois maintenant renvoyer les mesures que j'ai enregistré dans une structure :
Je veux :
sur la carte sc13
- créer un thread d'écoute de socket
Mais la question est comment faire ?????????????????????????????????????
Quelqu'un sait comment gerer les thread sous RTOS ???? Je veux bien de l'aide, je nage .. Merci
Je suis étudiant en BTS informatique industrielle et je suis en projet de fin de 2ème année. Je dois récupérer les données d'une station météo et envoyer ces données au programme principal, sous visual C++.
J'ai réussi à établir la liaison RS232 entre ma carte sc13 + dk51 et ma station météo. J'ai fait un programme sous borland pour le développer en 16bits pour un processeur 80186 du fait de la carte de destination...
Je dois maintenant renvoyer les mesures que j'ai enregistré dans une structure :
Je veux :
sur la carte sc13
- créer un thread d'écoute de socket
Mais la question est comment faire ?????????????????????????????????????
Quelqu'un sait comment gerer les thread sous RTOS ???? Je veux bien de l'aide, je nage .. Merci
A voir également:
- THREAD DE SOCKET EN C++ - RTOS - dk51 -
- Compte thread - Accueil - Réseaux sociaux
- Thread instagram c'est quoi - Accueil - Guide réseaux sociaux
- Check_nrpe state critical: socket timeout after 10 seconds. ✓ - Forum Ubuntu
- Socket 1366 ✓ - Forum Matériel & Système
- Fausse appli Threads : déjà une imitation frelatée et dangereuse ! - Accueil - Guide arnaque
4 réponses
Alors voilà la solution :
// Meteo.h ( THREAD DE COMMUNICATION SOCKET)
// Meteo .cpp (la fonction RUN est la fonction lancée par le thread )
Création du thread et passage du pointeur sur doc
ne pas oublier de déclarer comme ceci dans meteo.h :
voili voilou, je t'envoie le projet complet (ou presque) sur ton adresse mail.
// Meteo.h ( THREAD DE COMMUNICATION SOCKET)
#if !defined(AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_) #define AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Meteo.h : header file // #include "PrimsolClimatDoc.h" #include "CommSocket.h" ///////////////////////////////////////////////////////////////////////////// // CMeteo thread class CMeteo : public CWinThread { DECLARE_DYNCREATE(CMeteo) protected: CMeteo(); // protected constructor used by dynamic creation // Attributes public: // Operations public: int Run(); void setDoc(CPrimsolClimatDoc * doc) { m_pDonnees = doc;} // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMeteo) public: virtual BOOL InitInstance(); virtual int ExitInstance(); //}}AFX_VIRTUAL // Implementation protected: virtual ~CMeteo(); // Generated message map functions //{{AFX_MSG(CMeteo) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int m_Port; CString m_IPSrv; CPrimsolClimatDoc * m_pDonnees; CCommSocket m_pCommSocket; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_METEO_H__4BB4970B_F2ED_4E97_9C58_24835AA71B7C__INCLUDED_)
// Meteo .cpp (la fonction RUN est la fonction lancée par le thread )
// Meteo.cpp : implementation file // #include "stdafx.h" #include "PrimsolClimat.h" #include "Meteo.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMeteo IMPLEMENT_DYNCREATE(CMeteo, CWinThread) CMeteo::CMeteo() { } CMeteo::~CMeteo() { } BOOL CMeteo::InitInstance() { // TODO: perform and per-thread initialization here //M__sock = new CCommSocket(); //CCommSocket dérivé de CAsyncSocket return TRUE; } int CMeteo::ExitInstance() { // TODO: perform any per-thread cleanup here return CWinThread::ExitInstance(); } BEGIN_MESSAGE_MAP(CMeteo, CWinThread) //{{AFX_MSG_MAP(CMeteo) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMeteo message handlers int CMeteo::Run() { m_IPSrv = "192.168.1.56"; m_Port = 4000; float vrafvent1=0; float vrafvent2=0; float vrafvent=0; int dvent=0; float temp1=0; float temp2=0; float temp=0; int signe=0; int hygr=0; int pluv=0; while(1) { int BufSize = 256; char *pBuf=new char[BufSize]; //m_pCommSocket->setDoc(m_pDonnees); // transfert de l'adresse du pointeur m_pDonnees à la classe CCommSocket // client,cree un socket par default m_pCommSocket.Create(); // ouvre la connexion sur le serveur m_pCommSocket.Connect(m_IPSrv,m_Port); // reçoit la trame du serveur m_pCommSocket.Receive(pBuf,BufSize); // ferme le socket connecte Sleep(1); m_pCommSocket.Close(); Sleep(1); vrafvent1 = pBuf[0]; vrafvent2 = pBuf[1]; vrafvent = vrafvent1 + vrafvent2/10; dvent = pBuf[2]; temp1 = pBuf[3]; temp2 = pBuf[4]; temp = temp1+temp2/10; hygr = pBuf[5]; pluv = pBuf[6]; Sleep(1); m_pDonnees->m_pVerrouMeteo.Lock(); m_pDonnees->acquisitionReelleMeteo[0]= temp; m_pDonnees->acquisitionReelleMeteo[1]= (float)hygr; m_pDonnees->acquisitionReelleMeteo[2]= (float)pluv; m_pDonnees->acquisitionReelleMeteo[3]= vrafvent; m_pDonnees->acquisitionReelleMeteo[4]= (float)dvent; m_pDonnees->m_pVerrouMeteo.Unlock(); delete[]pBuf; Sleep(5000); } return (0); }
Création du thread et passage du pointeur sur doc
m_pMeteo = (CMeteo*) AfxBeginThread(RUNTIME_CLASS(CMeteo),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); m_pMeteo->setDoc(m_pDoc); m_pMeteo->ResumeThread();
ne pas oublier de déclarer comme ceci dans meteo.h :
void setDoc(CPrimsolClimatDoc * doc) { m_pDonnees = doc;}
voili voilou, je t'envoie le projet complet (ou presque) sur ton adresse mail.
personne ne s'y connait en socket ?
s'il vous plait ?! HELP
s'il vous plait ?! HELP
J'ai commencé à faire ca :
Mais je ne sais toujours pas comment m'y prendre pour la création du thread sous rtos
Mais je ne sais toujours pas comment m'y prendre pour la création du thread sous rtos
// Include files #include <stdio.h> #include <stdlib.h> #include <string.h> #include "clib.h" #include <iostream> //_________________________________________________________________ Constructeur SocketClient::SocketClient() { int valeurDeRetour = 0; } //____________________ initialisation des parametres de la socketServeurDistante void SocketClient::initialiserParamSocketServeurDistant() { parametreSocketServeurDistant.sin_family = AF_INET ; parametreSocketServeurDistant.sin_port = 7 ; parametreSocketServeurDistant.sin_addr.s_addr = 192.168.1.56 ; } //_______________________ initialisation des parametres de la socketClientLocale void SocketClient::initialiserParamSocketClientLocale() { parametreSocketClientLocale.sin_family = AF_INET ; parametreSocketClientLocale.sin_port = 0; // pour laisser le système fournir un numéro de port à la socket //client locale parametreSocketClientLocale.sin_addr.s_addr = INADDR_ANY ; // pour laisser le système déterminer // l'adresse IP de la machine } //__________________________________________________ créer la socketClientLocale void SocketClient::creerSocketClientLocale() { descripteurSocketClientLocale = socket(AF_INET,SOCK_STREAM,0) ; if (descripteurSocketClientLocale < 0) { cout << "Erreur dans la creation de la socketClientLocale !"; } } //_____________________________ attacher les parametres de la socketClientLocale void SocketClient::attacherParamEtSocketClientLocale() { valeurDeRetour = bind (descripteurSocketClientLocale, (struct sockaddr *) ¶metreSocketClientLocale, sizeof (struct sockaddr_in) ) ; if (valeurDeRetour < 0) { cout << "Erreur dans l'attachement des parametres de la socketClientLocale !"; } } //_________________________________________________________________ se connecter void SocketClient::seConnecter() { valeurDeRetour = connect (descripteurSocketClientLocale, (struct sockaddr *) ¶metreSocketServeurDistant, sizeof (struct sockaddr_in) ) ; if (valeurDeRetour < 0) { cout << "Impossible d'établir une connexion entre les sockets !"; close (descripteurSocketClientLocale) ; } } //______________________________________________________________ envoyer requete void SocketClient::envoyerRequete() { valeurDeRetour = send (descripteurSocketClientLocale, Requete, sizeof (Requete), 0); if (valeurDeRetour < 0) { cout << "Impossible d'envoyer la requete !"; close (descripteurSocketClientLocale) ; } } //____________________________________________________________ recevoir la trame void SocketClient::recevoirTrame() { valeurDeRetour = recv (descripteurSocketClientLocale, TrameServeur, sizeof (TrameServeur), 0); if (valeurDeRetour < 0) } //__________________________________________________________ fermer la connexion void SocketClient::fermerConnexion() { close (descripteurSocketClientLocale) ; }
j'ai résolu le probleme, j'essayerai de mettre la solution dans les jours à venir mais je n'ai pas le temps pour l'instant, si vous etes interessés, envoyez moi un mail, je vous enverrai ca ;)
salut tou le monde
j'ai une certe DK51 avec sc13 lorsque je la connecte a mon pc portable tou se passe bien mais losque je la connecte a mon pc de la maison je recois aucunne reponse qlq'un peut m'aider
j'ai une certe DK51 avec sc13 lorsque je la connecte a mon pc portable tou se passe bien mais losque je la connecte a mon pc de la maison je recois aucunne reponse qlq'un peut m'aider
Bonjour,
Je pense pas que le problème est du à la carte donc il faut verifier les paramètre de votre PC de bureau. parmi les choses que tu dois verifier:
- tu utilise le bon port COM et que ton port n'est pas abimé, pou cela essaie de connecter ton pc de maison à un autre périférique
- vérifier les paramètres de connexions; debit, controle de parité...
Je pense pas que le problème est du à la carte donc il faut verifier les paramètre de votre PC de bureau. parmi les choses que tu dois verifier:
- tu utilise le bon port COM et que ton port n'est pas abimé, pou cela essaie de connecter ton pc de maison à un autre périférique
- vérifier les paramètres de connexions; debit, controle de parité...
Je suis etudiant moi aussi et je suis sur un projet similaire en partie au tien,c'est vraiment tres sympas de ta part de publier le code du thread ça ma beaucoup aidé .
Mon projet consiste en 1éré partie à envoyer des données depuis des capteurs thermiques vers une plaque à base de MCS1210 ensuite ce µc envoie ces données par des sockets vers une @ip à travers le gprs enfin le stockage dans une base de données .
la seconde partie du projet consiste à faire le parametrage du msc1210 (exp:desactiver certain capteurs)
donc on va faire chemin inverse de la 1ere partie mais soit par sms soit par gprs.
Je te serai tres reconnaissant si tu m'envoie ton projet et contre partie si ça t'interesse je pourrais t'envoyer la partie 2 (parametrage) une fois terminé .
voici mon mail :ziedbh2003@yahoo.fr