Ком порт для чтения на C # - PullRequest
1 голос
/ 31 мая 2011

Подскажите, пожалуйста, как читать данные из com-порта в c #, если данные получены в байтах, но переменной длины, то есть ответом могут быть байтовые массивы 20 и 50, то есть основной вопросоткуда вы знаете, что устройство перестало отвечать?

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Ты не. COM-порты немного похожи на TCP - это потоковая служба - они передают только 7 или 8 бит за раз (в зависимости от того, как вы настроили порт, обычно 8 бит).

Если вы хотите отправить что-нибудь более сложное, чем байт, вам нужно построить протокол поверх. Если ваши данные являются текстовыми, часто используется CR или null в конце. Если это значения во всем наборе байтов 0-255, то вам нужен более сложный протокол, чтобы гарантировать, что кадрирование блоков данных получено правильно. Возможно, ваши требования могут быть удовлетворены простым тайм-аутом, например, «если в течение 500 мс не получены символы, это конец блока данных», но такие протоколы тайм-аута, очевидно, имеют низкую производительность и подвержены сбоям :(

Rgds, Martin

1 голос
/ 31 мая 2011

Наиболее важной частью является определение используемых битов протокола. У вас должны быть как стартовые, так и стоповые биты, которые сообщат вашему объекту SerialPort, когда прекратить чтение. Обычно вам не нужно заботиться об этом, поскольку ваша функция обратного вызова будет содержать данные в массиве.

http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

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