TRANSFERT DE FICHIER PAR RS232 [VC++]

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 9 juin 2004 à 23:10
Schreiben Messages postés 1 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 1 mai 2008 - 1 mai 2008 à 19:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23560-transfert-de-fichier-par-rs232-vc

Schreiben Messages postés 1 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 1 mai 2008
1 mai 2008 à 19:38
salut les amis j'ai un probleme dans mon projet de fin d'etude je vais essayer d'envoyer une trame serie RS232 par hyperterminal j'ai enregistré le trame dans un fichier texte puis j'ai l'envoyer mais rien ne ce passe est ce que la structure du trame est fausse (stx addresse index blokchek etx)
en code ascii ou ilya une autre problem ? je suis bloqué dans cette fase j'attend vos aident les amis (nizar_tun@hotmail.com)
merci
zezitinho Messages postés 3 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 9 octobre 2007
9 oct. 2007 à 15:27
hello, il y a un bug dans ton programme...

Le fichier n'est pas reçu correctement, il est incomplet...

Je sais pas si c'est du a l'emetteur ou au recepteur, mais c'est dommage car il avait l'air intéressant ce programme !
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
6 juin 2007 à 18:01
Si tu ne maitrise pas les pointeurs ni l'algèbre des pointeurs, il faut que tu commence par là.
Demande a google de t'expliquer, tu trouvera ton bonheur ;)
Bonne chance.
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
6 juin 2007 à 16:47
et aussi pr precision ma fonction read me retourne :
un buffer de ce type :BYTE buffer[RX_SIZE+1];
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
6 juin 2007 à 16:38
oki merci
mais je capte aps bien ca:
//tu castes la trame sur une structure qui sera pas assez grande?
stx = (t_stx *)buff;
//stx est un pointeur, alors +1 ???
data = (char *)(stx + 1);
//OK :-)
dataLenght = stx->N - (sizeof(stx) + sizeof(etx))
//???
etx = (t_etx *)(data + dataLenght);
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
6 juin 2007 à 15:43
tu cree une structure qui a le format de ta trame et tu place un pointeur sur le debut de ta trame que tu cast en ta structure. Si la trame est de longueur variable tu le fais pour le header de ta trame.

un truc du genre:
typedef struct s_stx {
size_t N; // Nbre octet total
short I; //indice du message , code 4 à FF
int NE; //nbre d'ETX. les codes égaux a ETX seront supprimés du message et remplacés apr leur rang en fin de message(R.ETX)
} t_stx;

typedef struct s_etx {
int R.ETX; //rang ds le buffer d'origine de la premiere config. code arret(ETX) supprimée dans la aprtie infos
short PL; //Checksum
} t_etx;


char *buff; // Ma Trame

t_stx *stx;
t_etx *etx;
char *data;
size_t dataLenght;

stx = (t_stx *)buff;
data = (char *)(stx + 1);
dataLenght = stx->N - (sizeof(stx) + sizeof(etx))
etx = (t_etx *)(data + dataLenght);
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
6 juin 2007 à 15:03
oki ,
mais tu pourrais aps m'aider ou tenter de m'aider un peu?
en gros j'aimerais faire comme pr les chaines de caracteres style
strcpy(stx,buffer+1,1)
strcpy(N,buffer+2,1)
strcpy(INFOS, buffer+3,N);

enfin un truc du genre mais ca bug
la chaine lue sur le port c des octets sous forme heaxadecimale?
comment je peux decomposer mon buffer lu comme chaine de caractere?

je suis trop nul pr ce qui est hexa; ascii etc...*
si t'as une idée je suis preneur
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
6 juin 2007 à 14:52
Salut,
Dans mes souvenirs, mon protocole stx/etx etait vraiment tres con.
j'ouvre mon flux par STX, j'envois tout mon flux d'une seule traite (en echappant eventuellement ETX si son code se presente) puis je ferme par ETX. ca fonctionnait mais il n'y avait aucun controle d'erreur et pas de notion de trames.
Ma fonction stxetxdecode remplace uniquement les caracteres echappe dans le buffer recu.

J'ai bien peur que tu ne puisse pas vraiment t'inspirer de cette source pour faire ton protocole.


PS:le code est vraiment tres sale...

Desole.
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
6 juin 2007 à 14:21
salut,

je voudrais savoir si il est possible que tu m'aides a comprendre ta fonction stxetxdecode
car j'ai une com sur un port série a effectuer avec des trames STX-N-I-NE-INFOS-R.ETX-PL-ETX
----------------------------------------------------------------------------------------------------------------------
N: Nbre octet total
I: indice du message , code 4 à FF
NE: nbre d'ETX. les codes égaux a ETX seront supprimés du message et remplacés apr leur rang en fin de message(R.ETX)
INFOS: infos requises
R.ETX: rang ds le buffer d'origine de la premiere config. code arret(ETX) supprimée dans la aprtie infos
PL: Checksum

j'arrive a lire des octets sur le port mais apres je dois decoder ma trame stx-etx
pr en retirer la chaine d'informations
et ensuite décomposer cette chaine...

si jamais tu peux me guider un peu, ca doit ressembler a ta fonction je pense!

merci d'avance...
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
31 oct. 2004 à 03:32
il me semble (mais je suis pas expert)
qu'avec le port // il faut utiliser un driver special avec windows 2k/XP!

je ne pourrais pas plus t'aider. le programme que j'ai ecris utilise le port serie.
rkadouche Messages postés 1 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 octobre 2004
31 oct. 2004 à 03:03
Bonjour
j'ai un problème de communiquer avec le port parallèle via Windows 2000
j'utilise les fonctions _inp() et _outp() de Visual C++6
merci
cs_lkhra Messages postés 2 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 22 juillet 2004
22 juil. 2004 à 11:32
salut ,
psyjc au fait j'ai essaye ton prog il est genial ,mais le truc ce que moi je veux just envoyer et recevoir des donnees et non pas des fichiers pour pouvoir piloter une machine via rs232 et avec le protocole SYN/SYN/SYN/STX/DATA/ETX.
peux tu m'eclairer s'il te plait merci
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 juin 2004 à 22:46
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
11 juin 2004 à 11:37
moi je te conseille ce site pour debuter (c'est avec celui que j'ai moi meme commencé a manipuler les API):
http://bob.developpez.com/tutapiwin/
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
11 juin 2004 à 11:04
merci, ca fait plaisir! quand je vois les sources de certains je pensais que la mienne etait vraiiiiiimmmeennnnttttt loin derriere..

je cherche des sites qui explique simplement (pour debutant) comment se servir de l'api windows plutot sous forme de cours (manipulation de fichiers/repertoirs, graphismes, threads ...)
jai regardé du coté de la msdn, mais j'y comprends pas grand chose :(
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
11 juin 2004 à 09:28
oui c'est un debut prometteur !!!
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 juin 2004 à 23:10
Très bon exemple RS232, Pour un premier prog cpp, chapeau
Rejoignez-nous