-
Multi RS232
Bonjour,
Je developpe une petite aplli delp qui utilise plusieurs ports RS232
J'ai un soucis, j'aimerais ne pas avoir a attendre d'avoir "causer" sur un port pour pouvoir "causer" sur le suivant. J'aimerais donc parler aux 4 ports en meme temps et renvoyer toutes ces donnees dans ma base de données. (il s'agit de relevé de pression de températures et autres) .
Je gagnerais un temps fou!! Merci d'avance !!
-
Je ne sais pas si c'est faisable :
créer un thread par port avec lequel tu veux communiquer ??
Après pour l'accès à la BDD je ne sais pas si ça se passerait bien ou pas... Et il y a peut-être une solution plus "matérielle" ?
-
La solution est effectivement de passer par des threads : Windows est parfaitement capable (surtout vu la lenteur d'un port série par rapport au processeur) de gérer 4 ports COM simultanément.
Simplement, pourquoi te casser la tête à les gérer toi-même, ces threads, quand des gens l'ont déjà (bien) fait ? :-D
Va voir là :
AsyncFree : http://delphree.clexpert.com/pages/app_ASYNCFREE.htm
et
ComPort : http://sourceforge.net/projects/comport/
J'ai essayé les deux, voici mon compte-rendu :
- AsyncFree est très bien, mais peut poser des problèmes si les timings d'échanges sur les LS sont "courts". J'ai dû abandonner cette librairie parcequ'elle ne pouvait pas supporter facilement des timeouts de l'ordre de quelques millisecondes. Par contre, pour les transferts "lourds" continus et plus ou moins unidirectionnels, elle est d'enfer.
- CPort est (à mon sens) plus primitive d'accès, moins facile à utiliser et moins documentée, mais permet des timings ultra serrés. Elle est plus adaptée à des "ping-pongs" permanents sur la LS.
Les deux librairies marchent de 95 à XP, et gèrent les ports COM de 1 à 255 si jamais tu en as besoin... ;-)
Bref, si ton protocole ressemble à du ModBus, passe direct sur ComPort. Si c'est un flux genre Telnet, prends AsyncFree. Si c'est un mélange des deux, essaie les deux :wink: !
Pour la centralisation en BDD, par contre, c'est pas mon rayon... Mais tu peux être amené à utiliser un thread supplémentaire par port, en plus d'un objet de synchro comme TMultiReadExclusiveWriteSynchronizer, sauf si ton accès BDD est d'ores et déjà protégé contre les accès concurrents.
-
On peut le faire sans utiliser un seul Thread auxiliaire et en utilisant seulement les APIs windows avec les structures OverLapped. Je me suis servi de cette méthode pour accéder à plus de 10 ports RS232 en même temps sans créer de thread.
Par contre, le code est sous copyright, mais je suis parti seulement de l'aide MS livrée avec Delphi :wink:
Le plus simple utilise des composants tous faits. J'ai déjà utilisé TComPort et il intègre directement un thread par liaison.
-
Arf, oui, les Overlapped... J'avoue que je n'y pense jamais pour du multiplexé... :oops:
Monstrueusement puissant, abominable à mettre au point, mais quand (enfin) ça marche, c'est génial !!! :ccool:
-
Merci pour toutes ces reponses, Comport est le GEstionnaire serie que j'utilise donc je ne vais pas etre trop depaysé. Je vais essayer de m'y plonger un peu plus profondement pour voir!!! merci beaucoup a topus et bonne journee!!