2009-05-21 1 views
4

Я общаюсь с устройством через последовательный интерфейс класса SerialPort .NET и основываясь на требованиях к спецификациям сторонних устройств, мне нужно вычислить «контрольный символ блока». Единственная информация, о которой я говорю, это то, что это операция исключительного ИЛИ (XOR), и она должна выполняться над всеми символами.Вычислить контрольный символ блока (BCC) для последовательной связи

Итак, если у меня есть строка «Боб, 001», как бы вычислить BCC?

ответ

3

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

Таким образом, для XOR контрольной суммы, вы бы пакет:

Bob,001X 

, где Х представляет собой контрольную сумму и , когда вы XOR все эти символы вместе, вы, скорее всего, получите 0.

Итак, чтобы обработать X, вы просто XOR все символы в «Bob, 001». Это в силу того факта, что N xor N всегда 0, для любого N.

Теперь может случиться, что X будет состоять из двух шестнадцатеричных символов, если вам разрешено иметь только буквенно-цифровые символы. Вот почему вам нужны образцы данных (так что мы можем это исправить) или надлежащую спецификацию (которую должен предоставить производитель устройства).

является Фактическое устройство, на которое вы имеете в виду? Возможно, в Интернете есть информация о том, как это сделать.

на основе обновления:

Это Hospitality PMS устройство Amadeus. Не все они говорят, что это должно выполняться по всем символам. исключая STX и ETX.

Вам нужно будет получить некоторые выборочные данные, чтобы подтвердить, но это, скорее всего потока данных что-то вроде:

 Running 
Data  ChkSum 
====== ======= 
STX 02 
B 42  42 
o 6f  2d 
b 62  4f 
, 2c  63 
0 30  53 
0 30  63 
1 31  52 
4 52  00 
ETX 03 

Положение контрольной суммы может меняться и, на самом деле, это вычисление может меняться слишком хотя это гораздо менее вероятно. Я не думаю, что гораздо больше можно сделать без выборочных данных или дополнительной информации от поставщика. Беглый поиск в Интернете не выявил технических деталей.

+0

Это устройство PMS Amadeus Hospitality. Не все они говорят, что это должно выполняться по всем символам. исключая STX и ETX. – GONeale

+0

У меня есть функция, которую я написал, и она вычисляет -что-то, просто не уверен, что это правильный BCC прямо сейчас. Вернусь к вам, спасибо. – GONeale