Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1459 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  Gestion du RTS sur un port série

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion du RTS sur un port série

n°1847799
luc84
Posté le 06-02-2009 à 09:28:20  profilanswer
 

Bonjour,
 
Attention, c'est un problème technique assez pointu !
 
Je développe en Builder C++ sous Windows XP.
Mon application pilote un port série pour dialoguer avec un indicateur de poids (une balance) en RS485 2 fils.
Côté matériel j'ai donc un convertisseur RS232 / RS485 entre le PC et l'indicateur de poids.
La prise de ligne se fait par le signal RTS : lors de l'envoi de la trame de requête, le signal RTS 'monte' (la ligne RS485 est donc prise), puis le RTS retombe dès que le dernier caractère a été émis (la ligne RS485 est libérée), l'indicateur de poids peut alors répondre.
Ce fonctionnement du RTS est entièrement géré par l'API Windows.
Pour cela j'utilise les fonctions :
 
//ouverture du port série :
hdcom=CreateFile(comx,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN­_EXISTING,0,0);
//Reset du port :
ClearCommError(hdcom,&pErr,NULL);
//Init du port série :
SetCommState(hdcom,&dcb);
//Envoie des données :
crw = WriteFile(hdcom,buffer,len,&nbcarecrits,NULL);
//Lecture de la réponse :
crr = ReadFile(hdcom,buffer,len,&nbcarlus,NULL);
 
Voici mon problème :
Si mon application est le seul programme lancé sur le PC, je me retrouve avec des erreurs de réception.
Je lance une autre application (Google Earth par exemple), la liaison fonctionne correctement.
J'ai réalisé d'autres essais :

  • utilisation du port série de la carte mère (pilote Microsoft) ou utilisation d'une carte série multivoies (pilote MOXA) : idem.
  • lancement d'une autre application que Google Earth : idem, à partir du moment qu'elle consomme un peu de mémoire.
  • essais sur un autre PC, d'une autre marque : idem.
  • essais en liaison avec un automate programmable en RS485 2 fils : idem.


J'ai branché l'oscilloscope pour visualiser le signal RTS et le signal de réponse de l'indicateur de poids (côté 5V sur la carte de l'appareil) : lorsque mon application est seule à tourner sur le PC, le RTS retombe trop tard (l'indicateur a déjà commencé à répondre).
Si une autre application est lancée, le signal RTS retombe plus tôt et la liaison fonctionne correctement.
 
Bien sûr, la solution technique est d'utiliser un convertisseur RS232 / RS485 qui gère le retournement tout seul, sans avoir besoin du RTS.
Mais j'aimerais bien conserver mes convertisseurs actuels et surtout comprendre le phénomène.
 
Si quelqu'un a une idée, je suis preneur.

mood
Publicité
Posté le 06-02-2009 à 09:28:20  profilanswer
 

n°1855133
m3z
il faut toujours faire simple
Posté le 25-02-2009 à 15:48:39  profilanswer
 

Hello,  
 
Voila un problème d'informatique industriel bien classique.
Mais par expérience je te conseillerais d'attaquer le problème à plus bas niveau : Gère le RTS toi même.  
Tu le mets non géré dans la config (SetCommState) puis tu le fais monter AVANT l'envoi de ta trame et descendre dès que ton buffer est vide.  
Jette un oeil sur la fonction EscapeCommFunction qui permet de fait ca.
Microsoft n'a jamais su gérer correctement une liaison série !
 
A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  Gestion du RTS sur un port série

 

Sujets relatifs
Gestion des sessions de façon efficace ?gestion de parc matériel
Gestion des textes sur Nintendo DSStopper public void (pour gestion d'événements)
Gestion du clavier...Problème :(Gestion de saut de page ACCESS/VBA
Inserer de la gestion de donnees via SQL dans du code CCode retour et gestion des erreurs
[Access/MCD]gestion de notes
Plus de sujets relatifs à : Gestion du RTS sur un port série


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR