IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Matériel Discussion :

Probleme de communication sur port serie


Sujet :

Matériel

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Probleme de communication sur port serie
    salut les gens,

    Je post car j'ai un probleme qui me ronge ...
    Voilaj'ai installé une carte pci multiport RS422,
    apres avoir modifié un peu le driver
    la carte semble marcher au poil.

    Pas de probleme quand j'écris sur le port a partir d'une console avec une redirection
    je lis parfaitement les données avec mon programme.
    Mais lorsque j'écris a partir de mon programme je ne lis rien
    Mais les données sont envoyées :
    la fonction me renvoie le bon nombre de caracteres envoyés
    Les stat. des ports (/proc/tty/driver/serial) m'indiquent les bons nombres de caracteres emis et recus sur chacun des ports

    et enfin
    si j'ecris N caractéres depuis mon programme
    et que ensuite j'ecris M caracteres depuis une console
    je lis N+M caractere sur mon port destinataire
    dont les N premiers caracteres sont du nimporte quoi ...

    Bref, le compteur de caractere seble s'incrementer mais il n'y a pas d'evenement "caractere dispo"
    la fonction select me renvoie 0 = timeout

    J'ai fais plein d'essais avec des option d'ouverture de fichier (/dev/ttySx) différentes
    J'ai plus d'inspiration, pitié donnez un petit qqchose

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    puisque la carte marche, je penserai un probleme protocolaire....
    ou de bit de fin ce genre de choses ...

    comment causes ton programme au port serie ? par le periph ou par les fonctions Stty ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    d abord merci pour ton aide

    je cause au port comme a un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    *fh = open (filename, O_RDWR | O_NOCTTY | O_NDELAY)) < 0)
     
    // pour la lecture :
     
    timeout.tv_sec = 2;
    		timeout.tv_usec = 100000;
    		int selval;
    		FD_SET (fh, &readfds);
    		selval = select (fh+1, &readfds, NULL, NULL,(struct timeval *) &timeout);
    		if (selval < 0)
    			qWarning("Erreur select com %d fh %d  error %d", com, fh, errno);
    		else
    			qDebug("Select  %d", selval);
     
    		if (FD_ISSET (fh, &readfds))
    		{
    			int len= read (fh, buffer, MAXTSLEN);
    ...
     
     
     
    // Pour l'écriture
     
    QString buff = "\01" + st + getcheck( st ) + "\r\n";	
    	int retval;
    	retval = write( fh, &buff[0], buff.length() );
    	qDebug( "write %d octets",retval);
    Bref qquechose de basic il me semblait
    Un probleme protocolaire ... et bien c'est possible
    mais je ne sais pas ou chercher car "\r\n" soit 0x0d et 0x0a me semblait suffir
    s'il faut mettre autre chose quoi par exemple ??
    et comment savoir quoi mettre ?? il y a t il une config a lire qque part ?

    sinon j'ai fais des essais avec minicom :
    le port qui aura été ouvert (puis fermé ou pas) par minicom
    recoit par le programme le bon nombre de caractere
    mais pas les bons

    enfin si le probleme vient du driver je ne sais comment le resoudre
    j'ai du changer l'io_region prevu a la base (2)
    en le forcant à 0, sinon le driver ne marché par correctement
    mais j'avais les memes problemes avant cette modif


    merci pour ton attention
    et n'hésite pas a repondre
    toute piste m'intéresse

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    bon désolé, mais j'aurai fait comme toi.... en l'utilisant comme "fichier"



    ducoup je sais pas quoi te conseiller d'autre.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    méa culpa

    ct une coquille dans la fonction d'émission
    j'envoyé un pointeur sur un QString et donc je recevais
    nimporte quoi et je n'avais pas le caractere de fin de trame
    d'ou toute cette merde

    pour info :

    ancienne fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QString buff = "\01" + st + getcheck( st ) + "\r\n";
    	const char *disp = buff.toAscii().constData();
    	//for(int i=0; i<buff.length(); i++)
    		//qDebug("send mesge : [%02x] com %d fh %d       buff.length %d",
    			//	 disp[i], com, fh, buff.length());
    	qDebug("send mesge : [%s]      com %d       fh %d      buff.length %d",
    				 disp, com, fh, buff.length());
    	int retval;
    	retval = write( fh, &buff[0], buff.length() );
    	qDebug( "write : %d octets",retval);
    nouvelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QString buff = "\01" + st + getcheck( st ) + "\r\n";
    	const char *disp = buff.toAscii().constData();
    	//for(int i=0; i<buff.length(); i++)
    		//qDebug("send mesge : [%02x] com %d fh %d       buff.length %d",
    			//	 disp[i], com, fh, buff.length());
    	qDebug("send mesge : [%s]      com %d       fh %d      buff.length %d",
    				 disp, com, fh, buff.length());
    	int retval;
    	retval = write( fh, disp, buff.length() );
    	qDebug( "write : %d octets",retval);

    je suis pas trtés fier sur ce coup la
    j'ai perdu du temps
    mais j'ai appri plein de truc en fouillant nimporte ou !!

    encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aide sur communication sur port serie
    Par azräel dans le forum VB.NET
    Réponses: 12
    Dernier message: 19/01/2009, 09h48
  2. Réponses: 4
    Dernier message: 19/03/2007, 09h56
  3. [Port Serie]Probleme d'ecriture sur port serie
    Par GETah dans le forum Windows
    Réponses: 2
    Dernier message: 20/06/2005, 10h43
  4. [HARDWARE] APN usb sur port serie ou autre
    Par SuperOliV dans le forum Périphériques
    Réponses: 4
    Dernier message: 15/07/2004, 13h28
  5. communication par port serie
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 06/02/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo