计算3964r串行通信协议的BCC

时间:2019-05-25 17:24:20

标签: serial-port checksum xor

我正在尝试编写一些代码,以便通过使用Siemens 3964r协议的串行设备与旧设备进行通信。在传输结束时,这包括校验和,或更准确地说,包括BCC(块校验字符)。 ETX之后的单个字符。文档将BCC定义为:

使用3964R传输协议,可以通过发送附加块来增强数据安全性 校验字符(BCC =块校验字符)。 块校验字符是偶数纵向奇偶校验(所有数据的EXOR逻辑运算) 字节)发送或接收的块。其计算从用户数据的第一个字节开始(第一个 建立连接之后,并在DLE ETX字符后结束 在连接终止时。

以下是十六进制的一些示例数据。 53 54 41 54 55 53 10 03 07

07是此文件中的密件抄送。

4d 45 41 53 4d 50 54 45 53 54 41 4e 41 50 52 47 30 30 30 55 78 30 31 31 2e 30 30 5a 30 31 31 31 30 10 03 61

61是此中的BCC。

我通常知道如何进行XOR运算,但是我无法找出使我拥有适当BCC的所有组合。我认为我对这个定义的解释是错误的。

我的首选语言是javascript,因为它是用于node.js电子应用程序的。我可以读取缓冲区并获取十六进制值。而且我可以构造更合适的消息。但是,直到我可以添加适当的密件抄送,它才能正常工作。因此,只是寻找比我更聪明的人,他确切地知道如何产生有效的密件抄送。

谢谢!

1 个答案:

答案 0 :(得分:0)

作为第一个评论发布的文档具有正确的结构来计算3964r BCC。该文件在这里:

https://support.industry.siemens.com/cs/attachments/1117397/s7300_cp341_manual_en_en-US.pdf?download=true

这是一个简单的javascript函数。十六进制数组将被传入,而不是像此处那样进行硬编码,但这可以准确地计算出此特定协议的BCC。如果有人在乎或需要它。我只是在此将bcc作为十六进制字符串写到控制台,但是您可以使其成为一个函数并实际上返回可用的东西。

['Avengers: Endgame', 'Long Shot', 'Pokemon Detective Pikachu', 'The Hustle', 'John Wick - Parabellum', 'Aladdin', 'Chandigarh Amritsar Chandigarh']