为了确保消息数据的完整性,除了验证消息CRC之外,建议实现一个代码,该代码检查串行端口(UART)中是否存在帧错误。如果接收到的消息中的CRC与接收设备计算出的CRC不匹配,则应忽略该消息。
以下C语言代码段显示了如何使用逐位移位和XOR操作来计算Modbus消息CRC。使用消息帧中的每个字节,除了包含CRC本身的最后两个字节以外,计算CRC。
1. CRC16校验码的使用现在,选择最常用的CRC-16校验来解释如何使用它。根据Modbus协议,常规485通信的信息发送形式如下:地址功能码数据信息校验码1byte 1byte nbyte 2byte CRC check是先前数据内容的校验值,为16位数据,当发送,! ! ! !低8位在前,高8位在后。
这是重要的一点! ! ! !例如:信息字段代码为:1011001,检查字段为:1010。发件人:发送的传输字段为:1 0 1 1 0 0 1 1 0 0信息字段检查字段收件人:使用相同的计算方法进行计算信息字段的校验码,并将其与接收到的实际校验码进行比较,如果信息相等且信息正确,则信息不正确;或者将所有接收到的信息除以多项式,如果可以将其除以则信息是正确的。
2. CRC16校验码的计算方法常用的查表法和计算方法。通常的计算方法为:(1)预设一个16位寄存器值0xFFFF,并将该寄存器称为CRC寄存器; (2)将第一个8位二进制数据(即,通信信息帧的第一个字)段与16位CRC寄存器的低8位进行XOR运算,将结果放入CRC寄存器,然后将结果存入CRC寄存器。
高八位数据保持不变; (3)将CRC寄存器的内容向右移一位(向高位),并用0填充最高位。(4)如果移位的位为0:重复步骤3(再次向右移一位);如果移位的位为1,则将CRC寄存器与多项式(A001)进行XOR运算(5)重复步骤3和4,直到向右移位8次为止,从而已处理了整个8位数据; (6)重复步骤2至5,以处理通信信息帧的下一个字节; (7)按照上述步骤计算出通信信息帧的所有字节后,交换得到的16位CRC寄存器的高字节和低字节; (8)最后获得的CRC寄存器的内容为CRC码。
上述计算步骤中的多项式A001是8005逐位求反的结果。高字节和低字节交换缺少一句话! ! ! -------------------------------------------------未签名整数CRC16; #define SEED 0xFFFF //初始化CRC16 #define GP 0xA001 //生成多项式//对于标准CRC16 //(除法除法)//开始一个新的CRC,设置CRC16 = SEED //然后对每个字节调用Calc_CRC(字节& amp; CRC16); // CRC16将包含结果///(如果计算所有传入数据// INCLUDING CRC,则结果应为0x0000 // //如果要发送CRC,请确保//以正确的顺序发送字节)void Calc_CRC(unsigned byte b,unsigned int * CRC){BOOL进位;我CRC [0] ^ = b& amp; 0xFF;对于(i = 0; i& lt; 8; i ++){进位= CRC [0]& amp; 0x0001; CRC [0]& gt; = 1; if(carry)CRC [0] ^ = GP;}} ----------- ------------------------- -------------这个代码是正确的! ! ! ! unsigned int CRC16_2(unsigned char * buf,int len){unsigned int crc = 0xFFFF; for(int pos = 0; pos& lt; len; pos ++){crc ^ =(unsigned int)buf [pos]; //将XOR字节写入最小sig。
//(int i = 8; i!= 0; i--)的crc字节//循环遍历每个位{if((crc& amp; 0x0001)!= 0)//如果设置了LSB {crc& ; gt;> = 1; //向右移动并XOR 0xA001 crc ^ = 0xA001;}否则//未设置其他LSB {crc& gt;& == 1; //仅向右移动}}} //高低字节转换crc =((crc& amp; 0x00ff)& lt;& lt; 8)| ((crc& amp; 0xff00)& gt; 8);返回crc;您也可以加入并共享。免责声明:本文内容经21ic授权后发布,版权归原作者所有。
该平台仅提供信息存储服务。本文仅代表作者的个人观点,并不代表该平台的立场。
如有任何疑问,请与我们联系,谢谢!。
公司: 深圳市捷比信实业有限公司
电话: 0755-29796190
邮箱: tao@jepsun.com
产品经理: 陆经理
QQ: 2065372476
地址: 深圳市宝安区翻身路富源大厦1栋7楼

更多资讯
获取最新公司新闻和行业资料。
- PTTC聚鼎PT08V2DF-C与PTLC24D-B核心参数对比解析 PTTC聚鼎PT08V2DF-C与PTLC24D-B参数深度解析在工业自动化与智能控制领域,PTTC聚鼎系列传感器以其高精度、强稳定性著称。其中,PT08V2DF-C与PTLC24D-B作为两款典型型号,广泛应用于环境监测、温湿度控制及设备状态检测等场景。以下将...
- 如何根据项目需求选择PTTC聚鼎PT08V2DF-C或PTLC24D-B传感器 基于项目需求的传感器选型指南:PT08V2DF-C vs PTLC24D-B在智能控制系统设计中,传感器的选型直接决定系统的可靠性与扩展性。面对PTTC聚鼎推出的两款热门型号——PT08V2DF-C与PTLC24D-B,工程师常面临选择困惑。本文将从项目实际出发...
- SC-CUT切晶振与USB-C切换器:现代电子设备中的关键组件解析 SC-CUT切晶振与USB-C切换器的技术原理与应用在当今高速发展的电子科技领域,SC-CUT切晶振和USB-C切换器作为核心元器件,广泛应用于智能手机、笔记本电脑、工业控制设备及智能家居系统中。它们不仅提升了设备的性能稳定性,还...
- 深入理解积层压敏电阻JMV-C:从原理到实际应用的全面指南 积层压敏电阻的工作原理积层压敏电阻(MLV, Multilayer Varistor)是通过将多个压敏陶瓷层与金属电极交替沉积并高温烧结而成的片式元件。其核心材料为氧化锌(ZnO)基复合陶瓷,具有显著的非线性伏安特性。非线性伏安特性详解...
- 铜的电阻温度系数约为0.004/°C 铜是一种常用的导电材料,因其良好的导电性能和相对较低的成本,在电气工程中被广泛应用。铜的电阻温度系数(temperature coefficient of resistance),是指在特定温度范围内,温度每变化1度时,其电阻值相对于基准温度(通常是2...
- PTTC聚鼎PT08V2DF-C产品特性与应用范围详解 在现代电子技术飞速发展的今天,PTTC聚鼎PT08V2DF-C作为一种高性能的电子元器件,在多个领域中发挥着重要作用。PTTC聚鼎PT08V2DF-C是一种具备高可靠性、高稳定性的保护器件,广泛应用于各种电子设备中,以确保电路的安全运行。...
- WLFX2CA2-C*: 高性能爆行程设备的应用与特点 针对代码或型号"WLFX2CA2"以及其变体"WLFX2CA2-C*"的理解,这似乎是指一种特定的设备或者机械组件,特别是提到“爆行程”时,我们可能会联想到与发动机、气动或者液压设备相关的产品。假设这是一种工业应用中的...
- 现货SMC磁性开关D-90、D-A93 D-A73:高效可靠的自动化控制选择 现货供应的SMC磁性开关D-90、D-A93和D-A73型号是工业自动化领域中不可或缺的传感设备。这些开关主要用于检测气缸活塞的位置,通过内置的磁感应元件来实现非接触式的信号传输。它们在设计上具备小巧紧凑的特点,能够轻松安装...
- 穆勒PLD10-20/1N/C/001:一款高效可靠的漏电断路器 穆勒的PLD10-20/1N/C/001漏电断路器是一款高品质、安全可靠的电气保护设备。这款断路器适用于单相电路中的过载和短路保护,同时也能提供人身触电保护功能。其额定电流为10A至20A范围内的可调设置,能够满足不同家庭或小型商业...
- JMV-C积层压敏电阻技术参数及应用领域详解 积层压敏电阻(JMV-C)是一种广泛应用在电子设备中的关键保护元件,它能在瞬间吸收过电压,保护电路不受损害。JMV-C积层压敏电阻具有体积小、响应速度快、可靠性高等特点,特别适合用于电源线路和信号线路的过电压保护。...
- 深度解析:如何正确使用USB-C切换器提升生产力? 深度解析:如何正确使用USB-C切换器提升生产力?在追求高效办公与无缝协作的时代,合理使用USB-C切换器能够显著提升个人与团队的工作效率。本文将从技术原理、实际应用、常见问题及优化建议四个方面,全面解析如何最大化...
- GB/T 1- 整流变压器与1.24V参考电压组件协同设计实践 GB/T 1- 整流变压器与1.24V参考电压组件的协同优化设计随着电力电子设备向智能化、高效化发展,整流变压器的设计不再局限于简单的变压功能,而是需要集成先进的控制策略。在此背景下,1.24V参考电压组件与国家标准 GB/T 1- 的...
- USB切换器与USB-C切换器:高效多设备管理的智能解决方案 USB切换器与USB-C切换器:高效多设备管理的智能解决方案在现代办公和家庭环境中,用户往往需要同时连接多个USB设备,如键盘、鼠标、U盘、外接硬盘等。随着USB-C接口的普及,传统的USB-A接口逐渐被取代,这也催生了对高性能、...
- PTTC聚鼎PT08V2DF-C与PMV0402-180G:如何正确理解并应用其规格书信息? 前言电子工程师在设计电路时,常面临从海量规格书中提取关键信息的挑战。尤其对于像PTTC聚鼎出品的PT08V2DF-C与PMV0402-180G这类专业元器件,准确理解其规格书内容,直接影响产品可靠性与成本控制。本文将结合真实规格书内容,...
- 元利富气缸行程开关AL-10R, CS1-J, C系列:可靠性能与广泛应用 元利富生产的气缸行程开关AL-10R, CS1-J, C系列是工业自动化领域中的重要组成部分。这些型号的行程开关广泛应用于各种机械和设备中,用于检测气缸的位置变化,从而实现自动化控制的目的。AL-10R型行程开关以其紧凑的设计和可...
- 飞腾电力德力西GN9-12(C)户外高压隔离开关:可靠稳定的户外电气解决方案 飞腾电力提供的德力西GN9-12(C)户外高压隔离开关是一款专为户外环境设计的电气设备。这款隔离开关适用于12kV及以下电压等级的电力系统中,作为隔离电源之用,确保维修人员的安全。它采用了先进的制造技术和高质量的材料,...
- PTTC聚鼎PT08V2DF-C与PMV0402-180G规格书深度解析:性能对比与应用指南 引言在工业自动化、智能设备及嵌入式系统领域,高性能的电子元器件是保障系统稳定运行的关键。PTTC聚鼎作为国内领先的电子元件制造商,其推出的PT08V2DF-C与PMV0402-180G两款产品备受关注。本文将从技术参数、应用场景、性能对...
- JMV-C积层压敏电阻技术解析:高性能电子保护的核心组件 JMV-C积层压敏电阻概述JMV-C积层压敏电阻是一种基于多层陶瓷结构的先进压敏电阻器件,广泛应用于电子设备的过电压保护领域。其核心优势在于高可靠性、快速响应和优异的耐浪涌能力,特别适用于通信设备、电源系统及工业控...
- 德力西GN9-12(C)户外高压隔离开关:稳定可靠的电力安全保障 德力西GN9-12(C)户外高压隔离开关是一款专为户外使用设计的电气设备,适用于交流50Hz、额定电压12kV的电力系统中。这款隔离开关具有良好的绝缘性能和机械稳定性,能够在各种恶劣环境下保持稳定运行。其主要功能是隔离电源,...
- 如何选择高性能的SC-CUT晶振与兼容性佳的USB-C切换器? 选购指南:从性能到兼容性的全面考量面对市场上琳琅满目的SC-CUT切晶振与USB-C切换器产品,如何挑选真正符合项目需求的组件?以下从技术参数、品牌信誉、实际应用场景三个维度进行深度分析,帮助工程师与采购人员做出明智...