Я не большой специалист в работе с аппаратным портом UART в Windows, но sleep (20) явно не правильное решение. Запрос 1 мс. пусть ПЛК тупит - ещё 2-3 мс, ответ идёт 5мс.