Modbus CRC16 算法(举例)

Modbus CRC16 算法(举例)

1. Modbus CRC16 算法规范

Modbus 用的 CRC 算法标准称为 “Modbus CRC-16”​ 或 “CRC-16-IBM”,也叫 CRC-16-ANSI,多项式为:

多项式 = x 16 + x 15 + x 2 + 1 多项式=x^{16} + x^{15} + x^{2} + 1 多项式=x16+x15+x2+1

用 16 进制表示时,多项式是 0x8005(但注意,Modbus 是高位在前运算,这里 Modbus 采用的是位逆序后的 0xA001​ 进行右移计算)。

算法初始值和结果异或:
初始 CRC 值 = 0xFFFF
实际上,在 Modbus RTU 中,计算时每个字节先与 CRC 低字节异或,然后 CRC 右移 1 位,如果移出位是 1 则与多项式 0xA001 异或(这是 0x8005 的位逆序多项式)。计算完所有字节后,得到的 CRC 值在传输时是低字节在前(Little-endian 字节顺序)附加在帧末尾。

简单概括
取当前数据的 1 位,与 CRC 的低位(bit 0)异或,结果记为 xorBit,然后 CRC 右移 1 位,如果 xorBit为 0,继续取数据的下一位;如果 xorBit为 1,则 CRC 与多项式 0xA001 异或。

2. 对 01 03 00 00 00 01进行 CRC 计算

用这个算法来算。

字节 0x01:
crc = 0xFFFF ^ 0x01 = 0xFFFE (1111 1111 1111 1110)
循环 8 次(一次一位):
位 0:crc & 1 = 0 → 右移 1 位:0x7FFF
位 1:0x7FFF & 1 = 1 → 右移 1 位得 0x3FFF,然后异或 0xA001:
0x3FFF ^ 0xA001 = 0x9FFE
位 2:0x9FFE & 1 = 0 → 0x4FFF
位 3:0x4FFF & 1 = 1 → 右移:0x27FF ^ 0xA001 = 0x87FE
位 4:0x87FE & 1 = 0 → 0x43FF
位 5:0x43FF & 1 = 1 → 右移:0x21FF ^ 0xA001 = 0x81FE
位 6:0x81FE & 1 = 0 → 0x40FF
位 7:0x40FF & 1 = 1 → 右移:0x207F ^ 0xA001 = 0x807E
处理完字节 0x01 后,CRC = 0x807E。

字节 0x03:
crc ^= 0x03 → 0x807E ^ 0x03 = 0x807D
循环 8 次:
0x807D & 1 = 1 → 右移:0x403E ^ 0xA001 = 0xE03F
0xE03F & 1 = 1 → 右移:0x701F ^ 0xA001 = 0xD01E
0xD01E & 1 = 0 → 0x680F
0x680F & 1 = 1 → 右移:0x3407 ^ 0xA001 = 0x9406
0x9406 & 1 = 0 → 0x4A03
0x4A03 & 1 = 1 → 右移:0x2501 ^ 0xA001 = 0x8500
0x8500 & 1 = 0 → 0x4280
0x4280 & 1 = 0 → 0x2140
CRC = 0x2140

字节 0x00:(跟0异或结果是本身)
crc ^= 0x00 = 0x2140
循环 8 次(每次 crc & 1 都是 0,因为 0x2140 二进制 0010 0001 0100 0000,最低位是 0,但右移过程中最低位会变化,我们仔细算):
0x2140 & 1 = 0 → 0x10A0
0x10A0 & 1 = 0 → 0x0850
0x0850 & 1 = 0 → 0x0428
0x0428 & 1 = 0 → 0x0214
0x0214 & 1 = 0 → 0x010A
0x010A & 1 = 0 → 0x0085
0x0085 & 1 = 1 → 右移:0x0042 ^ 0xA001 = 0xA043
0xA043 & 1 = 1 → 右移:0x5021 ^ 0xA001 = 0xF020
CRC = 0xF020

字节 0x00:
crc ^= 0x00 = 0xF020
循环:
0xF020 & 1 = 0 → 0x7810
0x7810 & 1 = 0 → 0x3C08
0x3C08 & 1 = 0 → 0x1E04
0x1E04 & 1 = 0 → 0x0F02
0x0F02 & 1 = 0 → 0x0781
0x0781 & 1 = 1 → 右移:0x03C0 ^ 0xA001 = 0xA3C1
0xA3C1 & 1 = 1 → 右移:0x51E0 ^ 0xA001 = 0xF1E1
0xF1E1 & 1 = 1 → 右移:0x78F0 ^ 0xA001 = 0xD8F1
CRC = 0xD8F1

字节 0x00:
crc ^= 0x00 = 0xD8F1
循环:
0xD8F1 & 1 = 1 → 右移:0x6C78 ^ 0xA001 = 0xCC79
0xCC79 & 1 = 1 → 右移:0x663C ^ 0xA001 = 0xC63D
0xC63D & 1 = 1 → 右移:0x631E ^ 0xA001 = 0xC31F
0xC31F & 1 = 1 → 右移:0x618F ^ 0xA001 = 0xC18E
0xC18E & 1 = 0 → 0x60C7
0x60C7 & 1 = 1 → 右移:0x3063 ^ 0xA001 = 0x9062
0x9062 & 1 = 0 → 0x4831
0x4831 & 1 = 1 → 右移:0x2418 ^ 0xA001 = 0x8419
CRC = 0x8419

字节 0x01:
crc ^= 0x01 = 0x8418
循环:
0x8418 & 1 = 0 → 0x420C
0x420C & 1 = 0 → 0x2106
0x2106 & 1 = 0 → 0x1083
0x1083 & 1 = 1 → 右移:0x0841 ^ 0xA001 = 0xA840
0xA840 & 1 = 0 → 0x5420
0x5420 & 1 = 0 → 0x2A10
0x2A10 & 1 = 0 → 0x1508
0x1508 & 1 = 0 → 0x0A84
CRC = 0x0A84

最终 CRC = 0x0A84

3. 传输顺序

CRC 计算结果 0x0A84 在传输时,低字节在前,即先发 0x84,再发 0x0A。
所以整帧为:

01 03 00 00 00 01 84 0A 

4. CRC(循环冗余校验)在线计算

网址:CRC(循环冗余校验)在线计算

在这里插入图片描述

Read more

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek + 通义万相制作AI视频流程 4.1 DeepSeek + 通义万相制作视频优势 4.1.1 DeepSeek 优势 4.1.2 通义万相视频生成优势 4.2

By Ne0inhk
【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

系列篇章💥 No.文章01【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能02【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南03【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力04【DeepSeek开发入门】DeepSeek API 开发初体验05【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践)06【DeepSeek开发入门】Function Calling 函数功能应用实战指南07【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手08【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南09【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器10【DeepSeek部署实战】基于Ollama快速部署Dee

By Ne0inhk

DeepSeek各版本说明与优缺点分析_deepseek各版本区别

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处,为广大AI技术爱好者和开发者提供一份参考指南。 1. DeepSeek-V1:起步与编码强劲 DeepSeek-V1是DeepSeek的起步版本,这里不过多赘述,主要分析它的优缺点。 发布时间: 2024年1月 特点: DeepSeek-V1是DeepSeek系列的首个版本,预训练于2TB的标记数据,主打自然语言处理和编码任务。它支持多种编程语言,具有强大的编码能力,适合程序开发人员和技术研究人员使用。 优势: * 强大编码能力:支持多种编程语言,能够理解和生成代码,适合开发者进行自动化代码生成与调试。 * 高上下文窗口:支持高达128K标记的上下文窗口,能够处理较为复杂的文本理解和生成任务。 缺点: * 多模态能力有限:该版本主要集中在文本处理上,缺少对图像、语音等多模态任务的支持。 * 推理能力较弱:尽管在自然语言

By Ne0inhk

用DeepSeek和Cursor从零打造智能代码审查工具:我的AI编程实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】摸鱼、技术交流群👉 点此查看详情 引言:AI编程革命下的机遇与挑战 GitHub统计显示,使用AI编程工具的开发者平均效率提升55%,但仅有23%的开发者能充分发挥这些工具的潜力。作为一名全栈工程师,我曾对AI编程持怀疑态度,直到一次紧急项目让我彻底改变了看法。客户要求在72小时内交付一个能自动检测代码漏洞、优化性能的智能审查系统,传统开发方式根本不可能完成。正是这次挑战,让我探索出DeepSeek和Cursor这对"黄金组合"的惊人潜力。 一、工具选型:深入比较主流AI编程工具 1.1 为什么最终选择DeepSeek+Cursor? 经过两周的对比测试,我们发现不同工具在代码审查场景的表现差异显著: 工具代码理解深度响应速度定制灵活性多语言支持GitHub Copilot★★★☆★★★★★★☆★★★★Amazon CodeWhisperer★★☆★★★☆★★★★★★☆DeepSeek★★★★☆★★★★★★★☆★★★★☆Cursor★★★☆★★★★☆★★★★★★★★ 关键发现: * Dee

By Ne0inhk