Probleme avec Tcomport [Résolu]

Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 1 févr. 2006 à 15:40 - Dernière réponse :
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 15:46
Bonjour,
J'ai un soucis d'utilisation du composant Tcomport (communication série). Je ne trouve pas comment faire. Je ne maitrise pas ce composant.
J'ai mis les composants ComComboBox pour chaque paramètre (6 au totals). Lorsque je modifie une valeur dans ces comcombobox, la modification pour Tcomport est aussitot pris en compte. Je le vois avec la fonction comport1.ShowSetupDialog.
J'ai mémorisé ces parametres dans un fichier. Lorsque je lance ma fiche, les parametres sont lu et remis dans les comcombobox mais et c'est là mon probléme, je ne sais pas mettre à jour le composant Tcomport. Il garde les valeurs défini dans l'inspecteur d'object qui ne correspondent pas aux valeurs qu'il y a dans les comcombobox mais dès que je touche à un comcombobox celui ci remet à jour le parametre dans tcomport.
Ma question: Comment mettre à jour les paramètres vitesse baud, parite, nb bit, etc.. du composant Tcomport?
Y a t-il une fonction qui dit ComPort.mise_à_jour_suivant_valeur_combobox ?

merci de vos réponses
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 1 févr. 2006 à 16:45
3
Merci
salut,

je ne l'ai jamais fait mais l'aide comport donne ceci pour l'enregistrement et le rechargement des proprietes



Example (Configuration file)



begin

// store settings to configuration file sauvegarde

ComPort1.StoreSettings(stIniFile, 'c:\ComPortTest.ini');

// load settings rechargement

ComPort1.LoadSettings(stIniFile, 'c:\ComPortTest.ini');

end;

si cela peut t être utile

à+jlen

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 1 févr. 2006 à 17:11
0
Merci
j'ai testé çà marche pour mettre à jour le composant Tcomport mais il
faut quand même mettre à jour les comcombobox indépendament

@+

jlen
Commenter la réponse de jlen100
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 08:39
0
Merci
merci de t'a réponse. C'est une solution que je vais conserver. Mais entre temps, j'ai trouvé une autre possibilité qui fait la même chose mise à jour de comport

ComPort1.Port:=ComComboBox1_Port.Text;
ComPort1.BaudRate:=StrToBaudRate(ComComboBox2_Vitesse.Text);
ComPort1.DataBits:=StrToDataBits(ComComboBox3_NbBit.Text);
ComPort1.StopBits:=StrToStopBits(ComComboBox4_BitStop.Text);
ComPort1.Parity.Bits:=StrToParity(ComComboBox5_Parite.Text);
ComPort1.FlowControl.FlowControl:=StrToFlowControl(ComComboBox6_Flux.Text);

Voilà

A+
Commenter la réponse de cs_philpas
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 2 févr. 2006 à 08:55
0
Merci
c'est une solution à laquelle je n'avais pas pensé ; j'aurais du
regarder dans l'aide à autres fonctions / fonctions de convertion!!

@+

jlen
Commenter la réponse de jlen100
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 09:33
0
Merci
Je vais encore utiliser ton savoir sur ce composant si tu le veux bien. Comment récupère t-on l'information qui dit que le port est prêt à recevoir des données et l'information qui dit que le port demande l'autorisation à emettre et recevoir sans doute une réponse Ok tu peux emettre. je ne trouve pas l'instruction


if comport.pret_a_recevoir then .....


ou
if comport.reponse_à_demande_autorisation_emettre then ...

Merci
Commenter la réponse de cs_philpas
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 2 févr. 2006 à 10:11
0
Merci
si tu utilises controle de flux harware(RTS/CTS) utilises les
event OnCTSChange et la fonction setRTS pour indiquer une demande
d'émission.

dans le cas d'un controle software les données sont bufferisées tu peux
connaitre l'état d'avancement et appelant les fonctions inputcount et
outputcount



@+

jlen
Commenter la réponse de jlen100
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 11:15
0
Merci
Oui mais ceci c'est si j'utilise le controle de flux. Si je ne l'utilise pas ce controle de flux, est ce que le signal DSR sur le port est suffisant pour savoir si je peux envoyé mes caractères sur le port.
C'est à dire : si j'ai DSR sur le port du PC A cela veux dire que le PC B est pret à recevoir mes données? et l'inverse si je n'ai pas le signal DSR sur A c'est que le port B n'est pas ouvert.
Ce que je dis est vrai ou faux?

Merci
Commenter la réponse de cs_philpas
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 2 févr. 2006 à 11:43
0
Merci
non pour faire communiquer 2 PC ce n'est pas suffisant il faut faire un
protocole de communication soit en cotrole Hardwre soit en software

en hardware tu envoie un RTS et tu attends un CTS

en software il faut créer un protocole qui ressemble à çà:

tu envoies une trame d'interrogation

et tu attends la réponse (mieux vaut mettre un timeout si tu ne veux pas bloquer le PC et cas de non réponse)

quand tu as reçu la confirmation que le PC est pret tu lances la transmission.

mais quelque soit la méthode il faut toujours vérifier que la transmission est possible (PC branché et à l'écoute).

@+

jlen
Commenter la réponse de jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 2 févr. 2006 à 14:13
0
Merci
precision en fait dans l'absolu on ne fait pas communiquer 2 PC entre
eux mais 2 applications situées à distance( dans 2 PC ou autres
automates....)

une façon simple de détecter si l'appli est à l'écoute par exemple:

Com1.Writestr('P');//on envoie 1 caractere qui doit être reconnu par le recepteur;

timeout.enabled:= true // on met un timer reglé ~1s et dans timeoutOntimer on timeout.enabled:=false;

while (com1.inputcount =0) and (timeout.enabled) do //on attend que le recepteur est envoyé un caractere ou que la fin du timeout

Application.ProcessMessage;//pour ne pas bloquer

il suffit que le récepteur envoie 1 caractere pour savoir qu'il est à l'écoute et pret à recevoir.

pour que ton programme soit toujours à l'écoute il suffit de laisser la com1 ouverte

ensuite soit tu testes l'imputcount péridodiquement (dans un timer) soit tu utilises l'évenement onrxchar).

@+

jlen
Commenter la réponse de jlen100
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 15:23
0
Merci
C'est loin d'être simple quand on ne maitrise pas un composant ou une fonction
Commenter la réponse de cs_philpas
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 2 févr. 2006 à 15:34
0
Merci
c'est surtout le problème des communications qui, en généra,l n'est pas simple.

Il y a une règle que j'applique dans les communications entre applications:

1)s'assurer qu'elle est prete à recevoir les données

2) s'assurer qu'elle à bien reçue les données (attente d'au moins un caractère en retour)

en effet la communication peut toujours être interrompue ou perturbée



on peut y ajouter des sommes de controle et autres petits plaisirs!!

mais il faut savoir que la communication n'est jamais garantie à 100%



si tu à besoin d'aide à ce sujet n'hésite pas



@+

jlen
Commenter la réponse de jlen100
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Dernière intervention
4 septembre 2008
- 2 févr. 2006 à 15:46
0
Merci
je n'hésiterais pas, je vais déjà essayer d'assimiler tout ça.

A+
Commenter la réponse de cs_philpas

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.