Последовательный <> Ethernet-конвертер и SerialPort.Write () - PullRequest
2 голосов
/ 09 мая 2011

Я пытаюсь добиться максимальной пропускной способности через последовательный порт.Я считаю, что мой код C # вызывает состояние переполнения буфера.SerialPort.Write () обычно является методом блокировки.

Проблема заключается в том, что устройство / драйвер, выполняющее преобразование Ethernet в последовательный интерфейс, не блокируется в течение времени, необходимого для передачи сообщения.Кажется, он вообще не блокируется.До тех пор, пока он не прекратит блокировку навсегда, как только слишком много данных будет записано в него слишком быстро.Затем SerialPort необходимо утилизировать, прежде чем он снова заработает.Другая проблема - BytesToWrite всегда == 0 сразу после thw write.Драйвер ???

Итак, как мне обойти эту проблему?

Я пытался выполнить Sleep сразу после записи на время, необходимое для отправки сообщения, но это не работает.

com.Write(buffer, 0, length);
double sleepTime = ((length + 1) * .000572916667) * 1000; //11 bits, 19.2K baud
Thread.Sleep((int) sleepTime);

Я понимаю, что может быть некоторая задержка между тем, когда устройство получает сообщение и когда оно отправляет его через COM-порт.Возможно, это причина, по которой драйвер не блокирует вызов .Write?

Я мог бы подождать, пока сообщение не будет подтверждено узлом.Проблема в том, что я имею дело с тысячами узлов, и некоторые сообщения транслируются по всему миру.Не возможно ждать, чтобы все подтвердили.Что делать?

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...