如何使用Python计算这个CRC?

2023-12-07

我需要使用 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

根据引用的文档,该算法实际上是标准的 16 位 CCITT CRC。这可以用以下公式计算crcmod.

干得好:

import crcmod

# this is a standard CCITT CRC even if it does not look like
# (crcmod applies xorOut to initCrc, so initCrc is in reality 0xffff, not 0)
_CRC_FUNC = crcmod.mkCrcFun(0x11021, initCrc=0, xorOut=0xffff)

data = bytearray.fromhex("023b010000000000")
crc = _CRC_FUNC(data)
data.append(crc & 0xff)
data.append(((crc >> 8) & 0xff))

print (data.hex())

输出: 023b010000000000ff2c

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Python计算这个CRC? 的相关文章

随机推荐

  • 如何获取组合框的显示文本而不是别名?

    我有一个带有一些显示值和别名的组合框 在 SSJS 中 当我这样做时 getComponent comboboxName getValue 它返回别名值 这很好 但现在我想要组合框的显示文本而不是别名值 有什么方法可以得到它吗 定义 SSJ
  • Python 回文

    所以我的任务是查看并检查正整数是否是回文 我已经正确完成了所有工作 但在最后的部分需要帮助 从用户给出的回文中生成一个新的回文的任务 我的 while 循环走在正确的轨道上还是应该使用其他东西 所以结果是如果你输入 192 它会返回Gene
  • 修复正则表达式以解决 ICU/RegexKitLite 错误

    我正在使用 RegexKitLite 它又使用 ICU 作为其引擎 尽管有文档 但在搜索 xxxxxxxxxx 时 像 x 这样的正则表达式将匹配空字符串 它的行为应该像 x 一样 我想在存在此错误时绕过它 并且当正则表达式匹配返回 0 长
  • 生成所有 Excel 单元格公式的平面列表

    我有一个用 VBA 和单元格公式编写的大型程序 我的任务是将其逆向工程到 C winforms 中 我想首先 我需要在平面列表中查看所有单元格公式 有现有的方法可以做到吗 提前致谢 编辑 只是为了分享 在回答者的帮助下 我设法想出了这个 在
  • 如何在 Angular 中使用 ngFor 循环对象属性

    这篇文章是关于我在工作中发现的一个有趣的问题 如果你还不知道的话 我说的是 Angular 2 问题 因此 您想要显示列表的标记 该列表的值来自后端 由于某种原因 您收到的不是一个好的旧对象数组 如下所示 car color red mod
  • 通过在 numpy 中设置一些标准来检索元素的位置

    对于给定的二维数据数组 如何检索粗体中 7 和 11 的位置 索引 因为只有它们是邻居中被相同值包围的元素 import numpy as np data np array 0 1 2 3 4 7 6 7 8 9 10 3 3 3 4 7
  • 如何使用正则表达式前瞻并匹配先前的字符串/字符类

    如果某个数字不位于某个数字之前 则尝试使用负向前瞻来匹配该数字 sign d 8989 匹配898 但不匹配9 我希望它与 8989 整体匹配 是否可以使用负向前瞻来匹配整个字符类或更复杂的正则表达式 d d d 1 2 这将匹配不在 a
  • 根据键对数组进行排序

    我有一个像这样的数组 Array 0 gt Array title gt some title time gt 1279231500 1 gt Array title gt some title 2 time gt 1279231440 2
  • 你能强制IE8识别background-size: 100%吗?

    我需要背景图像精灵根据其容器的宽度调整大小 而不显示整个精灵 并且 background size 100 可以完成此操作 如下所示 featured ul icon controls li prevention background ur
  • 关于例外的问题

    我只是在视觉工作室中玩弄异常 并且使用上面的代码 我期望因为我的异常规范没有提到任何应该抛出 bad exception 的内容 但实际发生的情况是异常被适当的处理程序捕获 为什么这样 我是否缺少 IDE 中的某些设置或其他内容 当我陷入上
  • 从 base64String 加载 bitmapImage

    我怎样才能加载一个bitmapImage from base64String in windows 8 我尝试过这个 但没有成功 它曾经在 Windows Phone 上运行 有什么不同吗 看来我必须使用函数setsourceasync 当
  • 堆空间内存不足

    我的应用程序当前消耗大量内存 因为它正在运行物理模拟 问题是 在第 51 次模拟时 Java 通常会因为堆空间内存不足而抛出错误 我的程序最终运行了数千次模拟 无论如何 我不仅可以增加堆空间 还可以修改我的程序 以便每次运行后都会清除堆空间
  • 在 Bash 中将多个文本文件连接成一个文件

    将目录中的所有 txt 文件合并为一个大文本文件的最快 最实用的方法是什么 目前我正在使用带有 cygwin 的 Windows 因此我可以访问 BASH Windows shell 命令也不错 但我怀疑是否有这样一个命令 这会将输出附加到
  • strftime 不返回缩写时区

    谁能告诉我为什么时区返回为 山区夏令时间 而不是 MST import time print time strftime H M A Z d b y 根据您提出的另一个问题 我猜测您正在使用 Windows 在 Windows 上 strf
  • 如何在map-reduce中读取多个图像文件作为hdfs的输入?

    private static String testFiles new String img01 JPG img02 JPG img03 JPG img04 JPG img06 JPG img07 JPG img05 JPG private
  • 快速从文档目录获取图像

    假设我使用此代码将图像保存到文档目录 let nsDocumentDirectory NSSearchPathDirectory DocumentDirectory let nsUserDomainMask NSSearchPathDoma
  • 通过 Github API 从 Github 存储库获取所有文件名

    是否可以使用 GitHub API 从存储库获取所有文件名 我目前正在尝试使用这个来修补这个PyGithub 但只要它有效 我完全可以手动执行请求 到目前为止我的算法是 获取用户存储库名称 获取符合特定描述的用户仓库 获取存储库文件名 您可
  • 为什么会出现这个 PHP 错误:“严格标准:mysqli::next_result():没有下一个结果集。”?

    我有代码 它基本上是一个副本php net的代码 但由于某种原因它不起作用 这是 php net 上的代码
  • MySQL 多表查询

    Table UserInfoTbl username type user0001 premium user0002 premium user0003 normal user0004 premium Table UserPvTbl usern
  • 如何使用Python计算这个CRC?

    我需要使用 Python 计算此 CRC 以便与 Aurora ABB 太阳能逆变器进行通信 这是文件 http www drhack it images PDF AuroraCommunicationProtocol 4 2 pdf在最后