当前位置: 首页 > article >正文

Modbus RTU 与 Modbus TCP 深入指南-CRC校验完全解析

四、CRC校验完全解析4.1 CRC-16 算法规格参数值名称CRC-16 / MODBUS多项式0x8005x¹⁶ x¹⁵ x² 1初始值0xFFFF最终异或值0x0000不异或字节顺序低位字节在前Little Endian4.2 CRC 计算原理4.2.1 手动计算步骤以01 03 00 00 00 02为例预置 CRC 0xFFFF处理第1字节 0x01CRC ^ 0x01 → 0xFFFE右移8次每次检查 LSBLSB0CRC 1LSB1CRC (CRC 1) ^ 0xA001处理后续字节重复步骤2最终得到 CRC 0xC40B实际存储为 0x0B 0xC44.2.2 算法伪代码function crc16(data): crc 0xFFFF for byte in data: crc crc ^ byte for i in range(8): if crc 0x0001: crc (crc 1) ^ 0xA001 else: crc crc 1 return crc0xA001 是什么0x8005多项式的位反转Reflected形式。4.3 高效实现4.3.1 查表法C语言// 预计算 CRC 表256项 static const uint16_t crc16_table[256] { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040, }; uint16_t modbus_crc(const uint8_t *data, int length) { uint16_t crc 0xFFFF; for (int i 0; i length; i) { crc (crc 8) ^ crc16_table[(crc ^ data[i]) 0xFF]; } return crc; // 返回值低字节在前小端 } // 发送时附加 CRC void send_modbus_frame(const uint8_t *pdu, int pdu_len, uint8_t slave_addr) { uint8_t frame[256]; int idx 0; frame[idx] slave_addr; memcpy(frame[idx], pdu, pdu_len); idx pdu_len; uint16_t crc modbus_crc(frame, idx); frame[idx] crc 0xFF; // CRC 低字节 frame[idx] (crc 8) 0xFF; // CRC 高字节 write_serial(frame, idx); } // 接收时验证 CRC int validate_modbus_frame(const uint8_t *frame, int length) { if (length 4) return -1; // 最小帧地址功能码CRC uint16_t recv_crc frame[length-2] | (frame[length-1] 8); uint16_t calc_crc modbus_crc(frame, length-2); return (recv_crc calc_crc) ? 0 : -1; }4.3.2 Python实现def modbus_crc(data: bytes) - int: crc 0xFFFF for byte in data: crc ^ byte for _ in range(8): if crc 0x0001: crc (crc 1) ^ 0xA001 else: crc 1 return crc # 返回16位整数低字节在前 # 使用 data bytes([0x01, 0x03, 0x00, 0x00, 0x00, 0x02]) crc modbus_crc(data) frame data crc.to_bytes(2, little) print(frame.hex()) # 输出: 010300000002c40b4.4 CRC 常见错误及排查错误现象可能原因解决方法偶尔CRC错误波特率精度不够用示波器测实际波特率晶振误差2%持续CRC错误字节顺序颠倒检查交换高低字节数据帧首尾CRC错包含起始/结束静默时间CRC只计算地址到数据末尾多站总线上CRC错误信号反射/终端电阻缺失检查RS485两端120Ω电阻

相关文章:

Modbus RTU 与 Modbus TCP 深入指南-CRC校验完全解析

四、CRC校验完全解析4.1 CRC-16 算法规格参数值名称CRC-16 / MODBUS多项式0x8005(x⁶ x⁵ x 1)初始值0xFFFF最终异或值0x0000(不异或)字节顺序低位字节在前(Little Endian)4.2 CRC 计算原理4.2.1 手动计…...

IPXWrapper 实用指南:让经典游戏在现代Windows系统重获联机能力

IPXWrapper 实用指南:让经典游戏在现代Windows系统重获联机能力 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper IPXWrapper是一款开源协议转换工具,专门解决《星际争霸》《帝国时代》等经典游戏在现代Win…...

在 Nodejs 后端服务中集成 Taotoken 实现多模型对话能力

在 Nodejs 后端服务中集成 Taotoken 实现多模型对话能力 1. 场景需求与架构设计 假设您正在开发一个需要智能对话能力的 Nodejs 后端服务,例如客服系统或交互式应用。这类场景通常面临两个核心挑战:如何根据对话内容选择最适合的模型,以及如…...

别再只盯着K8s了!手把手教你用OpenShift 4.x搭建企业级容器平台(附避坑指南)

从Kubernetes到OpenShift:企业级容器平台的进阶实战指南 为什么企业需要超越原生Kubernetes? 在容器编排领域,Kubernetes已经成为事实标准,但企业级应用场景对平台提出了更高要求。当你的团队需要处理多集群管理、合规审计、安全加…...

从MediaCodec到FFmpeg:避免视频封装‘埋雷’,让你的H.264/AVC流顺畅播放

从MediaCodec到FFmpeg:构建零卡顿视频封装的技术实践 视频播放卡顿问题就像一场无声的演出事故——观众期待流畅的视听体验,而技术团队却在幕后与各种"埋雷"搏斗。当开发者在Android端使用MediaCodec或跨平台采用FFmpeg进行视频处理时&#xf…...

轻松上手Tiled:打造专业2D游戏地图的完整指南

轻松上手Tiled:打造专业2D游戏地图的完整指南 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled 还在为游戏地图设计发愁吗?面对复杂的场景布局和碰撞设置,你是否感到无从下手&#x…...

3分钟快速上手:Get-cookies.txt-LOCALLY插件安全导出Cookie完整指南

3分钟快速上手:Get-cookies.txt-LOCALLY插件安全导出Cookie完整指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今网络时代&am…...

基于开源大模型搭建私有ChatGPT服务:从协议兼容到生产部署

1. 项目概述与核心价值最近在折腾AI应用开发,发现很多朋友都想自己部署一个类似ChatGPT的对话服务,无论是用于内部知识库问答、客服机器人,还是个人学习研究。直接调用官方API固然方便,但成本、速率限制和数据隐私始终是绕不开的问…...

女生入门吉他怎么选?这款高颜值吉他值得关注

在吉他品类中,女生对乐器的需求往往与男生不同——握持舒适度、外观颜值、便携性都是重要考量。一把好的入门吉他,不仅要手感友好,还要足够好看,才能让学习过程更愉快。本文从行业现状出发,客观分析女生选琴的核心痛点…...

初次使用Taotoken从注册到发出第一个API请求的全流程

初次使用Taotoken从注册到发出第一个API请求的全流程 1. 注册账号与获取API Key 访问Taotoken官网完成注册流程。登录后进入控制台,在「API密钥管理」页面点击「创建新密钥」。系统会生成一个以sk-开头的API Key字符串,请立即复制并妥善保存。该密钥只…...

3步构建云音乐歌词库:163MusicLyrics实用指南与系统化解决方案

3步构建云音乐歌词库:163MusicLyrics实用指南与系统化解决方案 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否遇到过这样的场景:听到一首喜…...

暗黑破坏神2 d2dx宽屏补丁:让经典游戏在现代PC上完美重生

暗黑破坏神2 d2dx宽屏补丁:让经典游戏在现代PC上完美重生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为…...

告别Debug.Log:在Unity中为MySQL操作设计一个可视化管理面板

告别Debug.Log:在Unity中为MySQL操作设计一个可视化管理面板 在Unity开发中,数据库操作是许多项目的核心需求。传统的开发方式往往需要频繁修改代码参数、查看控制台输出,这不仅效率低下,也增加了调试的复杂度。本文将带你从工程化…...

我是怎么用 Claude Code + Superpowers + GLM 5.1 从0到1做出一个儿童拼图游戏的!

一个想法 → 一个完整产品,全程 AI 协作开发实录 🔥 今天来分享我如何用 Claude Code 的 Superpowers 技能体系,从一句"我想做一个儿童拼图游戏"出发,经过头脑风暴、方案设计、计划制定、代码实现,最终部署…...

APKMirror安卓应用:安全下载APK的终极开源解决方案

APKMirror安卓应用:安全下载APK的终极开源解决方案 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 在安卓生态系统中,安全下载第三方应用一直是用户面临的重要挑战。APKMirror作为一款开源安卓应用&#xf…...

Claude API拦截器:优化大模型交互的轻量级中间件实践

1. 项目概述:一个针对Claude模型的“拦截器”最近在AI应用开发圈里,一个叫Optimalko/claude-blocker的项目引起了我的注意。光看名字,你可能会有点懵——“Claude拦截器”?这听起来像是个安全工具或者防火墙。但深入了解后&#x…...

3步终极解决方案:Visual C++ Redistributable AIO 完全指南

3步终极解决方案:Visual C Redistributable AIO 完全指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO 是一个革命性的开源工…...

告别Anchor Box!用PyTorch从零复现FCOS目标检测模型(附完整代码与训练技巧)

告别Anchor Box!用PyTorch从零复现FCOS目标检测模型(附完整代码与训练技巧) 在目标检测领域,Anchor Box曾是主流方法的核心组件,从R-CNN系列到YOLOv3都依赖精心设计的锚框。但2019年ICCV提出的FCOS(Fully C…...

生成引擎优化(GEO)赋能内容创作效率及用户体验提升的实践案例分析

生成引擎优化(GEO)作为一种新兴技术,正在逐步渗透到内容创作的各个环节。它的核心在于通过数据分析与智能技术,为创作者提供更高效、更精准的内容生产工具。GEO能够优化内容的结构,使其更符合用户的搜索需求&#xff0…...

Ubuntu 22.04上,用Docker Compose一键部署Vulhub靶场的保姆级教程

Ubuntu 22.04上Vulhub靶场极速部署指南:从零到漏洞复现 在网络安全学习过程中,拥有一个随时可用的漏洞实验环境至关重要。Vulhub作为基于Docker的漏洞靶场集合,以其开箱即用的特性成为安全研究者的首选工具。本文将带你用最简洁高效的方式&am…...

告别命令行恐惧:用Onboard虚拟键盘在树莓派上轻松输入Wi-Fi密码和SSH命令

树莓派虚拟键盘实战:Onboard解决无外设输入难题 想象一下这样的场景:你刚拿到崭新的树莓派,迫不及待想配置Wi-Fi连接或进行SSH设置,却发现手边没有USB键盘。面对闪烁的命令行光标,输入复杂的Wi-Fi密码或执行apt-get u…...

手把手教你用STM32CubeMX和HAL库,从零打造一个USB数字小键盘(附完整工程)

从零构建STM32 USB数字键盘:CubeMX配置与HAL库开发全指南 在创客圈里,能够亲手打造一个完全自定义的输入设备总是令人兴奋的体验。想象一下,当你敲击自己设计的键盘,每一个按键都精准执行你预设的命令——无论是快速输入复杂密码、…...

如何3步快速掌握B站视频下载:BilibiliDown完整使用指南

如何3步快速掌握B站视频下载:BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...

taotoken 如何帮助教育科技产品快速集成并安全开放 ai 答疑功能

Taotoken 如何帮助教育科技产品快速集成并安全开放 AI 答疑功能 1. 教育科技场景中的 AI 答疑需求 教育科技产品在集成 AI 答疑功能时面临三个核心挑战:模型选型适配、访问权限控制和行为审计追溯。传统方案需要开发者自行对接多个模型供应商,处理不同…...

告别乱码!手把手教你用STM32CubeMX和SPI Flash制作并显示自定义中文字库

STM32嵌入式开发实战:从零构建SPI Flash中文字库与显示系统 在物联网设备和工业控制面板的开发中,汉字显示往往是刚接触STM32的开发者遇到的第一个"拦路虎"。传统解决方案要么依赖昂贵的显示模块内置字库,要么需要占用大量MCU内部…...

10分钟搞定Cellpose:AI细胞分割工具零基础安装配置秘籍

10分钟搞定Cellpose:AI细胞分割工具零基础安装配置秘籍 【免费下载链接】cellpose a generalist algorithm for cellular segmentation with human-in-the-loop capabilities 项目地址: https://gitcode.com/gh_mirrors/ce/cellpose 想要快速上手Cellpose这款…...

m4s-converter终极指南:快速免费保存B站视频的完整教程

m4s-converter终极指南:快速免费保存B站视频的完整教程 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站视频突然下架而…...

3大核心功能重塑Windows文件管理体验:QTTabBar标签页增强工具深度解析

3大核心功能重塑Windows文件管理体验:QTTabBar标签页增强工具深度解析 【免费下载链接】qttabbar QTTabBar is a small tool that allows you to use tab multi label function in Windows Explorer. https://www.yuque.com/indiff/qttabbar 项目地址: https://gi…...

基于RAG架构的房地产土木工程智能问答助手构建实战

1. 项目概述:一个面向房地产与土木工程领域的智能问答助手最近在GitHub上看到一个挺有意思的项目,叫real-estate-civil-eng-chatbot。光看这个名字,就能猜到个大概——这是一个专门为房地产和土木工程领域打造的聊天机器人。作为一个在建筑行…...

CSAPP DataLab通关秘籍:20个位运算与补码函数保姆级解析(附完整代码)

CSAPP DataLab通关秘籍:20个位运算与补码函数保姆级解析(附完整代码) 当你第一次打开CSAPP的DataLab实验手册时,那些密密麻麻的位操作约束条件可能会让你感到无从下手。别担心,这份攻略将带你从零开始,逐步…...