Modbus-RTU通讯协议中CRC校验码的计算步骤

2023-05-16

    在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。

CRC计算方法是:

1、  预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器

2、  把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的低八位相异或,吧结果存放于CRC寄存器。

3、  把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检测右移后的移出位。

4、  如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与多项式A001进行异或。

5、  重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。

6、  重复步骤2和5,进行通讯信息帧下一个字节的处理。

7、  将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换

8、  最后得到的CRC寄存器内容即为:CRC校验码。


void GetCrC(unsigned char *CmmBuf, unsigned char Len)
{
    unsigned short crc = 0xFFFF;
    unsigned char i;
    unsigned char j;
    if(Len > 78) return;
    j = 0;
    while(j < Len)
    {
        crc ^= CmmBuf[j];
        for(i=0; i < 8; i++)
        {
            if(crc & 0x01)
            {
                crc >>= 1;
                crc ^= 0xA001;
            }
            else
            {
                crc >>= 1;
            }
        }
        j++;
    }
    CmmBuf[j] = crc % 0x100; //校验和从长度算起,长度为长度减3
    CmmBuf[j + 1] = crc / 0x100;


}

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

Modbus-RTU通讯协议中CRC校验码的计算步骤 的相关文章

  • 【Modbus】 RTU CRC校验码计算方法

    Modbus是美国Modicon公司 即现在的Schneider Electric公司 于1979年开发的一种通信协议 其目的是采用一根双绞线实现多个设备之间的通信 Modbus 协议采用问答式的通信方式 具有简单 硬件便宜 通用性强 使用
  • modbus读取保持寄存器实例

    读取108 110的实例 一共读取3个寄存器 请求 03 00 6B 00 03 03 功能码 表示读取保存寄存器 006B 十六进制表示107 从107开始往后读取 0003 十六进制表示读取3个寄存器 响应 03 06 02 2B 00
  • Modbus RTU 工业通讯技术实现

    Modbus 是一个工业上常用的通讯协议 一种通讯约定 ModBus 协议是应用层报文传输协议 OSI 模型第7层 它定义了一个与通信层无关的协议数据单元 PDU 即PDU 功能码 数据域 ModBus 协议能够应用在不同类型的总线或网络
  • 需要帮助纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题

    我们正在尝试在 Javascript 上编写 GPS 设备侦听器代码 在此过程中 我们无法开发正确的 CRC ITU 错误检查脚本 协议文档生成crc码的解释如下 终端或服务器可以使用校验码来区分 接收到的信息是否有误 为了防止错误 数据传
  • 检查 CRC 多项式的错误检测能力

    我试图找出如何计算任意 CRC 多项式的错误检测能力 我知道有多种错误检测功能可能 或可能不适用于 任意多项式 检测单个比特错误 所有 CRC 都可以执行此操作 因为这只需要 CRC 宽度 gt 1 突发错误检测 所有 CRC 都可以检测大
  • 什么是“必须处理用户手势才能显示权限请求”。 Chrome Web Serial API 中出现错误消息?

    在编程方面 我是一个真正的初学者 我的目的是通过 COM 端口 RS485 控制具有 Google Chrome 中集成的 API 的设备 我尝试重现以下教程 https web dev serial 控制台中出现以下错误消息 未捕获 承诺
  • Modbus 错误:[输入/输出] 未收到来自远程设备的响应

    我尝试从 Mac 笔记本电脑连接到 Modbus 设备 MR SI4 使用串行连接 使用 USB RS485 转换器 安装 到 dev cu SLAB USBtoUART 这是我的代码 import logging logging basi
  • CRC-CCITT 16位Python手动计算

    Problem 我正在为嵌入式设备编写代码 许多 CRC CCITT 16 位计算解决方案都需要库 鉴于使用库几乎是不可能的并且会消耗其资源 因此需要一个函数 可能的解决方案 下面是网上找到的CRC计算 然而 它的实现是不正确的 http
  • 在Python中计算modbus的CRC16

    首先 抱歉 我是初学者 我在 modbus 上得到以下字节序列 01 04 08 00 00 00 09 00 00 00 00f8 0c 该字节序列上粗体的 CRC 是正确的 但是 要检查 创建 CRC 我必须遵循设备规范 其中规定 错误
  • 如何使用 pymodbus 写入 PLC 输入寄存器

    我想使用 pymodbus 写入 PLC 输入寄存器 我能够阅读它们 from pymodbus client sync import ModbusTcpClient client ModbusTcpClient 10 10 10 32 c
  • 如何在python3中计算ANSI CRC16多项式(0x8005)?

    我尝试使用此代码计算 ANSI CRC16 多项式 0x8005 import crcmod crc16 crcmod mkCrcFun 0x8005 0xffff True 但我收到此错误消息 ValueError 多项式的次数必须为 8
  • rtu水文专用(支持SL/T427-2021等大部分协议)

    SRTU200 系列是一款集数据采集与 4G NB IoT LoRa GPS 等多种通信功能于一体的 多功能遥测终端机 该设备搭配丰富的采集控制接口 提供 RS232 RS485 以太网 模拟量 输入 开关量输入 开关量输出和继电器等 产品
  • 使用反射输入计算 CRC64 的最有效方法

    我需要使用计算 CRC 64这个设置 https i stack imgur com Tdj7Z png进入这个精彩的网站 http www sunshine2k de coding javascript crc crc js html h
  • 计算 Modbus RTU CRC 16

    我正在实现一个软件 可以通过串行方式读取和写入 Modbus RTU 协议中的数据 为此 我需要计算字节字符串末尾的两个 CRC 字节 但我无法执行此操作 在网上搜索 我发现两个函数似乎可以正确计算 CRC WORD CRC16 const
  • J2Mod 基本主从问题

    我正在尝试使用 Modbus 从站和主站j2mod 它的版本是 1 0 6 所以与另一个程序兼容 对于我在网上找到的代码 我确实有一些一般性问题 我几乎没有找到任何有用的文档 所以我有点无能为力 TCP主控器 this addr InetA
  • 我可以在输入寄存器中写入吗? MODBUS

    我已经在一家公司工作了两个月MODBUS项目现在我发现了一个问题 我的客户要求我写入输入寄存器 地址 30001 到 40000 我认为这对我来说不是什么问题 因为每个modbus文档说 30001 到 40000 寄存器是只读的 甚至可以
  • ruby: `read': File.read 处的参数无效 -(Errno::EINVAL)

    我正在做一个简单的脚本来检查所有文件的 crc require zlib exit if Object const defined Ocra files Dir glob File open dir txt a do file file p
  • pymodbus TcpClient超时

    我遇到 pymodbus TcpClient 超时问题 import logging from pymodbus client sync import ModbusTcpClient logging basicConfig log logg
  • 将 CRC 值保存在文件中,而不更改实际的 CRC 校验和?

    我正在将我从自己的类中定义的一些对象保存到文件中 保存流数据 这一切都很好 但我希望能够在文件中存储该文件的 CRC 校验和 然后 每当我的应用程序尝试打开文件时 它都可以读取内部存储的 CRC 值 然后对实际文件进行检查 如果文件的 CR
  • CRC 16 程序计算校验和

    我目前正在编写一个 CRC16 程序 它使用 CRC 16 多项式计算字符的 CRCX 16 X 15 X 2 1 程序应从标准输入读取数据并以十六进制输出 16 位 CRC 尽管如此 当我执行该程序时 我得到了错误的输出值 这是我的代码

随机推荐

  • 5G工业路由器安全性怎么样?工业路由器的特点

    路由器 xff0c 本身就是一个具有相当大潜力的网络通信设备 xff0c 即使再是网络小白的用户 xff0c 可能也知道路由器是家中用于发布无线网络的设备 xff0c 如果深入了解的话 xff0c 其作用和发展会让人大为感慨 相信很多用户也
  • 路由器有防火墙?工业路由器的那些安全防护

    想要网络安全光是电脑装了杀毒软件可不行 xff0c 如果一个企业或者大型工厂一旦因为网络防护疏忽 xff0c 那么丢失数据信息所造成的损失是无法估量的 xff0c 所以企业及工厂网络通信及数据传输所使用的路由器一般都是工业级的 xff0c
  • Cat.1和Cat.4有哪些区别

    Cat 1的全称为LTE UE Category 1 xff0c 它是4G LTE网络的一个类 xff0c 也可以理解为低配的4G终端 xff0c 属于广域网 xff0c 蜂窝联网 xff0c 上行峰值为5Mbit s xff0c 下行峰值
  • RS485接口连接设备数量总共有多少?

    RS485总线可以连接256个设备 xff0c 但测试后发现这个数字有比较大的差异 有一种说法认为专门开发串行嵌入式的RS485总线只能连接32个节点 xff0c 这由自身的驱动能力决定的 有人说网上的各种485总线产品可以支持128个 x
  • 预防山体滑坡,泥石流监测智能预警系统

    一 行业背景 我国是一个山区面积较大的国家 xff0c 山地 丘陵约占国土总面积的2 3 xff0c 在众多的山区中 xff0c 都具备泥石流形成的基本条件 xff0c 这也让我国成为受泥石流灾害影响最大的国家 在我国境内 xff0c 泥石
  • 如何扩大无线网络信号强度?

    欢迎来到东用小知识课堂 xff0c 每天学习一分钟 xff0c 让你紧跟时代 xff0c 扩充自己 xff0c 成为大佬不是梦 xff01 无线网络通信设备存在一个问题 xff0c 那就是他的信号发射都是直线型 xff0c 因此一旦家中或者
  • OpenWrt 添加cpu温度显示监控

    opkg update opkg install lm sensors lm sensors detect 然后修改一下 usr lib lua luci view admin status index htm 增加一个温度的显示 lt C
  • RS485接线方式小科普

    欢迎来到东用知识小课堂 xff01 RS 485采用平衡发送和差分接收方式实现通信 xff1a 发送端将串行口的ttl电平信号转换成差分信号a xff0c b两路输出 xff0c 经过线缆传输之后在接收端将差分信号还原成ttl电平信号 RS
  • 传输数据稳如老狗,还支持多种接口,这款DTU让智能化更简单

    如果你的项目正在向着智慧化转变或发展 xff0c 那么你一定会深刻意识到数据传输的稳定性对于整个系统的稳定运行的重要性 毕竟 xff0c 项目的智能化发展需要时刻保持数据的可靠性和稳定传输 xff0c 如果一旦传输因设备或者网络等因素导致中
  • 什么是光耦隔离?光耦隔离的主要作用

    欢迎来到东用知识小课堂 xff01 光耦合器的结构相当于把发光二极管和光敏三极管封装在一起 光耦隔离电路使被隔离的两部分电路之间没有电的直接连接 xff0c 主要是防止因有电的连接而引起的干扰 xff0c 特别是低压的控制电路与外部高压电路
  • ORB305与CISCO路由器构建L2TP over IPSec VPN操作手册

    1 网络拓扑 在思科路由器与ORB305之间建立一个安全隧道 xff0c 对客户路由器端设备子网 xff0c 与思科路由器端服务器子网之间的数据流进行安全保护 xff0c 组网拓扑图如图所示 2 思科路由器端配置指导 此处以多数客户使用专线
  • linux下使用UDP发送接收数据

    接收 static int sock fd struct sockaddr in recv addr 读取参数 struct sockaddr in send addr 发送参数 sock fd 61 socket AF INET SOCK
  • 0长度数组的使用,重点掌握的知识

    0长度的数组在ISO C和C 43 43 的规格说明书中是不允许的 xff0c 但是GCC的C99支持的这种用法 GCC对0长度数组的文档参考 xff1a Arrays of Length Zero 如下代码片段 xff0c 哪个更简洁更灵
  • Freertos中检测内存的剩余函数

    static uint16 t prvTaskCheckFreeStackSpace const uint8 t pucStackByte
  • 重定位

    一 必须知道的几个概念 1 链接地址和运行地址 运行地址 xff0c 顾名思义就是程序运行的时候的地址 xff0c 也就是你用工具将代码下载到RAM的那个地址 xff0c 也叫加载地址 链接地址 xff0c 由链接脚本指定的地址 为什么需要
  • CC2541低功耗的实现方法

    转自 xff1a http blog csdn net mzy202 article details 42091537 CC2541 CC2540 实现超低功耗是非常重要的 xff1a 我们来总结一下实现方法 xff1a 1 xff0c 有
  • Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法

    2021年1月更新 xff0c 发现升级 big sur 11 1之后 xff0c 固件版本变成了429 0 0 0 睡眠问题又回来了 xff0c 每次都睡死 xff0c 不醒 于是我按老办法 xff0c 把mbp114的nvme驱动刷到m
  • stm32使用stlink v2.0下载的sw接线方式

    stm32的sw下载需要用到4根线 GND VCC SWCLK SWDIO xff0c 对应好即可 xff0c 相比较3根线的方式 xff0c 优先推荐4根线下载方式
  • stm32芯片的焊接

    stm32的焊接 xff0c 使用到东西 xff1a 松香 xff0c 维修佬 xff0c 烙铁 1 首先将stm32的一个角的脚上涂上维修佬 xff0c 要特别特别少 xff0c 太多了 xff0c 容易粘连到其他脚上面 xff0c 不好
  • Modbus-RTU通讯协议中CRC校验码的计算步骤

    在CRC计算时只用8个数据位 xff0c 起始位及停止位 xff0c 如有奇偶校验位也包括奇偶校验位 xff0c 都不参与CRC计算 CRC计算方法是 xff1a 1 预置1个16位的寄存器为十六进制FFFF xff08 全1 xff09