2012-06-08 2 views
1

До сих пор мне не удалось найти ответ, но я хотел знать, есть ли способ, в частности, с C#, чтобы определить, на что способна максимальная скорость, которую может использовать последовательный порт, без необходимости проверять его.Есть ли способ обнаружить скорость последовательного порта?

Есть ли что-то в этом профиле оборудования или что-то, что хранит доступные скорости передачи для определенного порта, который может запросить C#?

ответ

2

С помощью отражения вы можете/должны сделать это следующим образом:

serialPort = new SerialPort(portName); 
    serialPort.Open(); 
    object p = serialPort.BaseStream.GetType().GetField("commProp", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(serialPort.BaseStream); 
    Int32 bv = (Int32)p.GetType().GetField("dwSettableBaud", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(p); 

Примечание: Порт будет открыт для того, чтобы проверить это устанавливаемое бод! :)

Посмотреть этот пост для получения дополнительной информации о том, как вы можете проверить скорость передачи данных: How to programatically find all available Baudrates in C# (serialPort class)

+0

Спасибо за ответ. К сожалению, ответ дает почти четверть гигабауда (я никогда не думал, что напишу этот термин о нормальном RS232). Таким образом, он указывает число, значительно превышающее то, на что способен последовательный драйвер (на указанном порту может обрабатываться 268 894 207 (число, сохраненное в bv), установив его на 230 400 бод, вызвало исключение). Есть ли какая-то фильтрация или формула, которую я должен поставить bv through, чтобы получить истинную максимальную скорость, которую может обрабатывать последовательный чип, или это просто предел того, какие окна будут пытаться писать на него? – Xantham

+0

RS232 - это асинхронная шина данных без какой-либо встроенной синхронизации или обнаружения/коррекции ошибок. Таким образом, практический предел скорости передачи зависит от нескольких факторов, в том числе от качества/длины последовательного соединения и спецификаций скорости передачи в бодах с обеих сторон канала (насколько точна скорость передачи в бодах для Tx и сколько ошибок в Rx бод можно переносить с помощью передискретизации Rx). Если вы собираетесь использовать ограничения скорости, лучше добавьте некоторый протокол с CRC и повторными передачами для обработки случайных битовых ошибок. – TJD

Смежные вопросы