Распознать BREAK в протоколе надежно (RS232) - PullRequest
0 голосов
/ 04 марта 2012

У меня есть шина EMS на RS232 с протоколом, где все блоки разделены перерывом (0x00).

Данные непрерывно отправляются с устройства.

Моя проблема в том, что я не могу надежно отделить эти блоки.

В блоке иногда бывает 0x00 (но это не перерыв).

Я знаю, что каждый блок начинается с 0x01,0x02 или 0x03 и заканчивается CRC + BREAK.

Есть ли хороший способ разбить блоки в C #?

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2012

Вы имеете в виду разрыв RS232, передается наш нулевой байт?

Звучит так, как будто вы говорите о нулевом байте, и в этом случае вам нужно определить разницу между байтом данных и байтом-терминатором.

В этом случае вам нужно взглянуть на особенности идентификации пакетов данных. Если пакеты всегда имеют одинаковую длину, вы можете легко определить, является ли ноль терминатором. в противном случае вам нужно будет проанализировать данные в пакетах, чтобы разобраться с этим. Содержат ли они какую-либо информацию о длине? Или, возможно, вам нужно прочитать байт данных за байтом и проанализировать их, чтобы понять, что означает каждый байт и, следовательно, где заканчивается пакет.

Если вы не можете сделать это, значит, у вас нет протокола, у вас есть случайные непредсказуемые данные. Любой протокол должен позволять вам обнаруживать и разбивать пакеты каким-либо образом.

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