Ahoj.
V C# řeším komunikace s COM portem. Používám pouze RX a TX (žádné další vodiče), a komunikuji tak, že pošlu příkaz a okamžitě čekám odpověď.
Odpověď si čtu pomocí funkce ReadByte, kterou mám v cyklu podmíněném výrazem spBytesToRead>0. Problém je, že se mi někdy stane, že se cyklus ukončí ještě dřív, než se přečtou všechna data - čtení softwarem je rychlejší než zápis dat na COM port.
Zkoušel jsem více metod čtení dat (ReadChar, Line,...), ale nic nepomohlo (jak jinak).
Celkem funkční řešení je zahlodat vlákno pomocí Thread.Sleep, ale vymyslet efektivní hodnotu sleepu je obtížné, a takové řešení mi přijde neprofesionální.
Samozřejmě jsem čtení dat vyvolávat eventem DataReceived, ale dosáhl jsem toho, že se mi přečtou všechna potřebná data, ale jsou rozkouskovaná do několika částí.
Neznáte prosím někdo funkční řešení komunikace?
Mockrát děkuju!
Fórum › .NET
COM port komunikace - neúplnost dat
Pokud znáš rychlost, počet bitů na znak a prodlevu odpovědi, tak snadno spočítáš, za jak dlouho má celá odpověď dorazit. Mimo jiné se z toho dá určit vhodná hodnota komunikačního timeoutu. Ovšem úplně nejlepší je mít možnost ihned rozebírat a kontrolovat přijatá data, protože přesně určíš okamžik, kdy došel poslední bajt.
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 37 hostů
Podobná vlákna
COM port — založil Bunny
Seriovy port v C — založil jatagan
Serial port — založil omicron
Sériový port — založil Yety
Com Port v Delphi — založil beni017
Moderátoři diskuze