小编Pra*_*hed的帖子

CRC16 (ModBus) - 计算算法

我正在使用 ModBus RTU,并且我正在尝试弄清楚如何计算 CRC16。我不需要代码示例。我只是对这个机制感到好奇。我了解到基本的 CRC 是数据字的多项式除法,根据多项式的长度用零填充。下面的测试示例应该检查我的基本理解是否正确:

  • 数据字:0100 1011
  • 多项式:1001 (x 3 +1)
  • 由于最高指数 x 3 ,所以用 3 位填充
  • 计算:0100 1011 000 / 1001 -> 余数:011

计算。

01001011000
 1001
 0000011000
      1001
      01010
       1001
       0011 
Run Code Online (Sandbox Code Playgroud)

Edit1:到目前为止已由 Mark Adler 在之前的评论/答案中验证。

在寻找答案时,我看到了很多不同的方法,包括反转、依赖小端或大端等,这些方法改变了给定的结果011

Modbus RTU CRC16

当然,我很想了解不同版本的 CRC 是如何工作的,但我的主要兴趣是简单地了解这里应用的机制。到目前为止我知道:

  • x 16 +x 15 +x 2 +1 是多项式:0x18005 或 0b11000000000000101
  • 初始值为0xFFFF
  • 十六进制消息示例:01 10 C0 03 00 01
  • 上述消息的 CRC16(十六进制):C9CD

我确实像上面的示例一样手动计算了这个值,但我不想在这个问题中以二进制形式写下来。我认为我的二进制转换是正确的。我不知道的是如何合并初始值——它是用来填充数据字而不是零吗?或者我需要颠倒答案吗?还有别的事吗?

  • 第一次尝试:用 0 填充 16 位。计算出的二进制余数为1111 1111 1001 1011十六FF9B进制,对于 CrC16/Modbus 不正确,但对于 …

modbus crc16 boolean-polynomials

8
推荐指数
1
解决办法
2万
查看次数

SQLAlchemy基本递归CTE示例-层次树查询

我无法理解如何在 SQLAlchemy 中实现递归 CTE 。要么没有例子,要么我不理解它们,要么找不到它们。

我实际上正在使用 Django 2.2 和 Python 3.7、Conda 和 SQLAlchemy 和 MySQL 8。但据我了解/已经注意到,这对我的问题并不重要。

我按照本指南在 MySQL 中创建了一个相邻列表模型,并查看了SQLAlchemy 的手册。 MWE 之后有问题。

我的数据库定义是:

CREATE TABLE events (
 id int(10) UNSIGNED AUTO_INCREMENT,
 name varchar(255) ,
 parent_id int(10) UNSIGNED DEFAULT NULL,
 description varchar(255) DEFAULT=NULL,
 PRIMARY KEY (id),
 FOREIGN KEY (parent_id) REFERENCES events (id)
);
Run Code Online (Sandbox Code Playgroud)

并使用这个虚拟条目:

INSERT INTO events (id, name, parent_id) VALUES (1, "root", null);
INSERT INTO events (id, name, parent_id) VALUES (2, "A", …
Run Code Online (Sandbox Code Playgroud)

python mysql recursion sqlalchemy common-table-expression

5
推荐指数
0
解决办法
2385
查看次数