При чтении порта данные приходят частями с интервалом 15-17 мс. Вот пример лога чтения ответа на очередной запрос:
- Код: Выделить всё
16:54:23.621 _Send> 03 41 00 06 C8 38 8A 34
16:54:23.621 _isRC>
16:54:23.623 _isRC>
16:54:23.625 _isRC> 03 41 00 06 C8 38 FF FF FF FF FF
16:54:23.627 _isRC>
16:54:23.629 _isRC>
16:54:23.631 _isRC>
16:54:23.633 _isRC>
16:54:23.635 _isRC>
16:54:23.637 _isRC>
16:54:23.639 _isRC>
16:54:23.642 _isRC> FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F6 69
Получается, в 621 мс послан запрос, в 625 мс получена первая часть данных, затем около 17 мс ничего нет, а потом в 642мс приходит оставшаяся часть посылки.
Хотя физически ответная посылка передается цельным куском. Я понимаю, что это особенности работы Windows, прием производится через
- Код: Выделить всё
ReadFile(FHandle, Buffer^, length, Dword(Result), @Overlapped)
Но можно ли как-нибудь этого избежать, чтобы получать байты из порта не позднее хотя бы одной миллисекунды после их физического прихода в UART?