计算块检查字符(BCC)以进行串行通信

时间:2009-05-21 06:50:32

标签: c# .net serial-port serial-communication

我通过SerialPort类的.NET通过串口与设备进行通信,并根据我需要计算“块检查字符”的第三方设备规范要求。我被告知的唯一信息是它是异或操作(XOR),必须对所有字符执行。

所以,如果我有字符串“Bob,001”,那么如何计算BCC?

1 个答案:

答案 0 :(得分:3)

最有可能是基于字符的异或。您需要获取它们的样本以进行验证,但大多数校验和通常最终为0。

因此,对于XOR校验和,您将拥有该数据包:

Bob,001X

其中X是校验和,当你将所有这些字符排在一起时,你很可能得到0。

因此,要计算出X,你只需对“Bob,001”中的所有字符进行异或。这是因为对于任何N,N xor N总是0。

现在可能是X将是两个十六进制字符,如果你被允许拥有的是字母数字。这就是为什么你需要样本数据(所以我们可以解决)或正确的规范(应该由设备制造商提供)。

你所指的实际设备是什么?可能是网上的信息显示了如何操作。

基于更新:

  

这是Amadeus Hospitality PMS设备。他们所说的一切都不是必须在所有角色上进行。不包括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

校验和的位置可能会有所不同,实际上,它的计算方式可能会有所不同,但这种可能性要小得多。如果没有样本数据或来自供应商的进一步信息,我认为不能做更多的事情。粗略搜索互联网没有发现任何技术细节。