J'ai une application simple, qui devrait envoyer un seul octet à un port série une fois par minute. Mais parfois, pour une raison étrange, il se fige quelque part dans la fonction WriteFile(). Les deux contrôles de flux sw et hw sont désactivés. J'ai fait des recherches sur des opérations de lecture en attente effectuées à partir d'autres threads, mais je crois que ce n'est pas un problème, car mon application a un thread unique. En outre, handle de CreateFile semble valide, donc le port ne doit pas être utilisé par d'autres applications. Est-ce que quelqu'un a souffert de ça?Port série WriteFile() freeze
Répondre
Eh bien, j'utilise cette bibliothèque: http://lhdelphi.ic.cz/uploader/storage/ComDrv32.pas en Delphi 7, sous Windows XP, mais le composant est à l'intérieur juste une enveloppe autour des appels API Win, CreateFile, WriteFile, etc.
ComDrv32.pas ne semble pas avoir beaucoup de réflexion sur la gestion des erreurs. Cela peut fonctionner correctement tant que les choses vont bien, mais il n'y a pas de vérification d'erreur sur les appels d'API. Je ne ferais pas confiance à cette bibliothèque pour être très robuste. – Jozz
Si vous Google pour les mots writefile se bloque, vous trouverez un certain nombre de discussions sur ce problème. Certains leads sont des dépassements de buffer, dimensionnant correctement votre buffer, un port COM défectueux, effaçant le statut en cas d'erreur ... On dirait qu'il y a plein de choses à essayer.
Une autre chose que je suggère est d'utiliser une bibliothèque de communication au lieu d'appeler l'API directement, quelque chose comme Async Professional (http://sourceforge.net/projects/tpapro/). Même s'ils ajoutent des frais généraux à votre application, ils peuvent simplifier votre travail et éviter un certain nombre de pièges potentiels ...
Avez-vous essayé de définir CommPortDriver.CheckLineStatus sur true («pour éviter les blocages lorsque l'appareil n'est pas connecté ou le périphérique est DE")? La source de la bibliothèque comdrv32.pas contient cette suggestion.
Vous pouvez également essayer ComPort, qui a été négligé pendant un certain temps mais qui est maintenant activement développé à nouveau.
- 1. Envoi d'un fichier binaire au port série
- 2. Port série Câble Unplugged
- 3. Communication par port série
- 4. Surveillance du port série
- 5. Port série - Erreurs ouvertes
- 6. appel de port série
- 7. Port série verrouillé sur Vista
- 8. Surveillance python sur port série
- 9. Communication de port série asynchrone dans Windows dans c
- 10. Données binaires avec pyserial (port série python)
- 11. System.UnauthorizedAccessException du port série dans VB.NET
- 12. Entrée série via le port parallèle
- 13. Lecture du port série en Java
- 14. Détection de périphérique série bluetooth Port COM #
- 15. GetQueuedCompletionStatus arrête de lire un port série
- 16. Commande de commande get du port série
- 17. Port série Spy pour Windows Embedded CE
- 18. Groovy/Grails SimpleTemplateEngine Freeze
- 19. Général mysql freeze
- 20. BinaryWrite vs WriteFile
- 21. Comment regarder un port série avec QSocketNotifier (linux)?
- 22. Ecriture sur un port série avec un script shell
- 23. Port série de suppression de données avec Readline()
- 24. Comment détecter les signaux sur le port série COM1?
- 25. Lire le fichier à partir du port série en Java
- 26. Définir le format des données lues via le port série?
- 27. où j'obtiens série API Interface Port pour rails
- 28. Comment lire et écrire à partir du port série
- 29. bonne classe de port série pour le framework .net?
- 30. IOException de port série enfilé lors de l'écriture
L'information sur la langue, la plate-forme, etc. est également utile. –