Probleme avec Tcomport

Résolu
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 1 févr. 2006 à 15:40
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre 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

12 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 févr. 2006 à 16:45
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
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 févr. 2006 à 17:11
j'ai testé çà marche pour mettre à jour le composant Tcomport mais il
faut quand même mettre à jour les comcombobox indépendament

@+

jlen
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
2 févr. 2006 à 08:39
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+
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 08:55
c'est une solution à laquelle je n'avais pas pensé ; j'aurais du
regarder dans l'aide à autres fonctions / fonctions de convertion!!

@+

jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
2 févr. 2006 à 09:33
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 10:11
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
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
2 févr. 2006 à 11:15
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 11:43
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 14:13
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
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
2 févr. 2006 à 15:23
C'est loin d'être simple quand on ne maitrise pas un composant ou une fonction
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 15:34
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
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
2 févr. 2006 à 15:46
je n'hésiterais pas, je vais déjà essayer d'assimiler tout ça.

A+
0
Rejoignez-nous