Суть программы такова: отсылаем короткий запрос на устройство (5 байт), далее переключается интерфейс RS485 на прием и ждем некоторое время ответа. Потом переключаем интерфейс RS485 на передачу и снова шлем запрос. Свою проблему "вылечил" увеличением времени задержки в отвечающем устройстве до 18 мс, раньше было 2 мс. Программа стала работать на любом ПК, но решение мне категорически не нравится. Вот собственно кусок кода, отвечающий за передачу-прием: while(true) { WriteFile(CommHandle, wrbuffer, 3, &BytesWritten, &WriteEx); ReadFile(CommHandle, rdbuffer, 7, &BytesRead, &ReadEx); WaitForSingleObject(WriteEx.hEvent, 10);
GetOverlappedResult(CommHandle, &ReadEx, &BytesRead, true))
if (BytesRead == 0) далее следует разбор на тему принято/не принято и декодируются кадры (если принято)
Sleep(10); } все работает в отдельном потоке, таймауты на передачу общий 5 мс, на прием 25мс
|