Я общаюсь с устройством через SerialPort. Устройство имеет RS-485, с другой стороны (ПК) - RS-232 (виртуальный порт). Устройство работает, отправляет и получает данные правильно.
Проблема в том, что событие DataReceived иногда не запускается. Я отправляю данные на устройство, используя System.Timer, каждые 10 секунд. В большинстве случаев он работает нормально, но каждые 1-10 минут я не получаю ответ, а затем, еще 2-4 раза, событие DataReceived, наконец, запускается, и я получаю кластер данных (все, что я ранее «просил») в буфере).
Мой вопрос: Как это возможно ?
Я не могу поместить пример кода здесь, извините, но в моем приложении нет многопоточности (только основной поток и потоки с событиями Timer_Elapsed и DataReceived, я думаю, что они возникают в отдельных потоках), мой Событие DataReceived обрабатывается быстро и не должно вызываться параллельно (достаточно 10 секунд, время отклика устройства меньше 1 секунды). Если я использую Thread.Sleep, он будет в тех местах, где я уверен, что он не будет мешать чему-либо.
Это может быть скорее аппаратная, чем программная проблема, поскольку COM-порт работает некорректно, когда я тестирую его с помощью других приложений (одно из которых, которое производитель устройства предоставил для проверки соединения, не ' Выглядит так, как будто это было написано на C #). Но я не так хорош с оборудованием. Может быть, что-то не так с ПК или COM-портом (он не встроенный, а внешний)? Или это может быть связано с операционной системой (мое приложение - служба Windows, работающая под Windows Server 2003).