Последовательный Конвертер Ethernet и SerialPort.Write()

#c# #serial-port

#c# #последовательный порт

Вопрос:

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

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

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

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

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

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

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

Есть идеи?

Комментарии:

1. Мы можем предложить очень мало, если вы не сообщите use, какую модель конвертера вы используете. Выполняется ли запись на виртуальный последовательный порт, который фактически передает данные по протоколу TCP на удаленный последовательный порт? Или запись на последовательный порт, который преобразует данные в ethernet? В вашем описании отсутствуют некоторые большие пробелы.

2. perle.com/products/IOLAN-SDS-Rack-Terminal-Server.shtml

3. @rare: Итак, выполняется ли этот код C # на стойке SDS? Обычно я ожидаю, что вы установите TCP-соединение с rack, и затем оно будет преобразовано в serial, но в этом случае вы будете говорить о сокетах в вашем коде, а не о последовательных портах.

4. @Ben: Ну, я использую их драйвер, который делает его похожим на SerialPort. Он обрабатывает проблемы с протоколом TCP. Я хочу сохранить код как можно более общим. Например, не привязан к какому-либо конкретному протоколу, который может потребоваться устройству последовательного подключения к Ethernet. Почему? Возможно, я буду использовать COM-порты mobo, платы с COM-портами PCI или, кто знает, что в будущем.

5. @rare: Значит, они устанавливают VCP (виртуальный COM-порт) в группе портов в диспетчере устройств?