我正在使用 ModBus RTU,并且我正在尝试弄清楚如何计算 CRC16。我不需要代码示例。我只是对这个机制感到好奇。我了解到基本的 CRC 是数据字的多项式除法,根据多项式的长度用零填充。下面的测试示例应该检查我的基本理解是否正确:
计算。
01001011000
1001
0000011000
1001
01010
1001
0011
Run Code Online (Sandbox Code Playgroud)
Edit1:到目前为止已由 Mark Adler 在之前的评论/答案中验证。
在寻找答案时,我看到了很多不同的方法,包括反转、依赖小端或大端等,这些方法改变了给定的结果011。
Modbus RTU CRC16
当然,我很想了解不同版本的 CRC 是如何工作的,但我的主要兴趣是简单地了解这里应用的机制。到目前为止我知道:
我确实像上面的示例一样手动计算了这个值,但我不想在这个问题中以二进制形式写下来。我认为我的二进制转换是正确的。我不知道的是如何合并初始值——它是用来填充数据字而不是零吗?或者我需要颠倒答案吗?还有别的事吗?
第一次尝试:用 0 填充 16 位。计算出的二进制余数为1111 1111 1001 1011十六FF9B进制,对于 CrC16/Modbus 不正确,但对于 …
我无法理解如何在 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)