THREAD DE SOCKET EN C++ - RTOS - dk51 -
Résolu
siskozed
Messages postés
69
Statut
Membre
-
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
- System thread exception not handled ndis.sys ✓ - Forum Windows 10
- 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