【发布时间】:2018-11-18 07:05:03
【问题描述】:
我需要使用 Python 计算此 CRC,以便与 Aurora (ABB) 太阳能逆变器进行通信。
这是文件:http://www.drhack.it/images/PDF/AuroraCommunicationProtocol_4_2.pdf 最后一页有计算CRC的说明,我需要用python来做。
我收到的信息是
MESSAGE_GRID_VOLTAGE = bytes.fromhex("023b010000000000")
结果应该是:
CRC_L = FF
CRC_H = 2C
然后我需要像这样发送带有 CRC 的消息:
MESSAGE_GRID_VOLTAGE = bytes.fromhex("023b010000000000ff2c")
我如何在 python 中做到这一点?谢谢!
这是我尝试过的代码:
message = "023b010000000000"
BccLo= int ("FF",16)
BccHi= int("FF", 16)
New = int(message, 16)
New = New ^ BccLo
Tmp=New << 4
New=Tmp ^ New
Tmp=New >> 5
BccLo=BccHi
BccHi= New ^ Tmp
Tmp=New << 3
BccLo=BccLo ^ Tmp
Tmp=New >> 4
BccLo=BccLo ^ Tmp
CRC_L = ~BccLo
CRC_H = ~BccHi
【问题讨论】:
-
到目前为止你尝试了什么?
-
我尝试使用 ^ 运算符,但它不支持字节,也许我应该尝试将字节转换为数字然后将其恢复为字节,我害怕搞砸一些东西从这些到多的转换。
-
我在 c# 中找到了这段代码,如果我尝试将其转换为 python,我仍然遇到同样的问题:dreamincode.net/forums/topic/193903-crc-calculation-problem
-
我在 c# 中尝试过,但它不起作用,crc 不正确,即使我尝试使用用户编写的示例消息。
-
向我们展示一些 Python 代码!在这里,希望您向我们展示您为解决问题所做的努力。