`
isiqi
  • 浏览: 16685536 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

modbus 查表法

 
阅读更多

CRC简单函数如下:
unsignedshortCRC16(puchMsg,usDataLen)
unsignedchar*puchMsg;/*要进行CRC校验的消息*/
unsignedshortusDataLen;/*消息中字节数*/
{
unsignedcharuchCRCHi=0xFF;/*高CRC字节初始化*/
unsignedcharuchCRCLo=0xFF;/*低CRC字节初始化*/
unsigneduIndex;/*CRC循环中的索引*/
while(usDataLen--)/*传输消息缓冲区*/
{
uIndex=uchCRCHi^*puchMsgg++;/*计算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCHi<<8 uchCRCLo);
}
/*CRC高位字节值表*/
staticunsignedcharauchCRCHi[]={
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40
};
/*CRC低位字节值表*/
staticcharauchCRCLo[]={
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,
0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,
0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,
0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,
0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,
0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,
0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,
0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,
0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,
0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,
0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
0x43,0x83,0x41,0x81,0x80,0x40
}; 

分享到:
评论

相关推荐

    Qt CRC16(Modbus)校验值计算,查表方法

    总的来说,理解CRC16的原理,掌握查表法的实现,以及熟悉Qt编程,是完成"Qt CRC16(Modbus)校验值计算"任务的关键。这不仅有助于提升软件的可靠性,也能加深对数据通信协议的理解。在实际工程中,这样的错误检测机制...

    CRC16(ModbusRTU)_FPGA_查表实现源码.rar

    CRC16(ModbusRTU)_FPGA_查表实现源码,是基于C语言的查表实现CRC16的版本,我用的定长6Byte数据+2Byte CRC的方式,(可以修改参数DATA_LENGTH以修改数据长度)生成的CRC,先把数据存在FIFO中一字节一字节读出然后...

    verilog计算modbus帧报文是否正确,校验的参数包括地址,功能码,寄存器地址,CRC16信息,3天调试后,测试已经通过

    在IT领域,Modbus是一种广泛使用的串行通信协议,它允许设备之间进行数据交换,尤其在工业自动化系统中。Verilog则是一种硬件描述语言(HDL),用于设计和验证数字电子系统的逻辑行为。本项目中,开发者使用Verilog...

    CRC16校验(查表法+直接生成法)JS算法

    CRC16校验(查表法+直接生成法)JS算法 CRC16校验JS算法,crc.js为直接生成法,crc1.js为查表法,包含CRC16和ModbusCRC16,校验内容可以包含中文汉字,具体使用请看demo.html

    CRC16校验JS算法(查表法+直接生成法)

    在提供的压缩包中,有两个JavaScript文件——crc.js和crc1.js,分别对应两种不同的CRC16计算方法:直接生成法和查表法。直接生成法是通过执行一系列位操作来计算CRC值,这种方法代码量较大,但不需要额外的数据结构...

    Modbus-CRC16 C语言2种实现方法 1;直接计数法,2:查表法

    1:直接计数 省ROM空间,但是需要一定时钟周期。适用于ROM空间有限的单片机,对速度要求不高的场景。...2:查表法,消耗一定的ROM空间,但是计算速度快。适用于对速度有要求的场景。 可以移植到任何单片机上应用。

    查表法和计算2种方法求CRC校验码

    代码附有注释,可以直接使用VC6.0等工具编译。具体理解可以参照Modbus_over_serial_line_V1_02.pdf文档,百度文库有下。

    采用查表法 crc16.rar

    总结来说,`采用查表法 crc16.rar`提供的资源是用C语言实现的CRC16校验代码,特别适用于Modbus协议的通信校验。通过查表法,我们可以快速有效地计算CRC16值,提高程序运行效率,同时保证数据传输的准确性和可靠性。...

    Modbus通信协议中CRC校验的快速C语言算法

    针对Modbus协议的特点,文章提出了一种反转CRC校验的方法,并推导出用于快速计算CRC校验值的查表法。最后,通过C语言实现了基于这种快速查表算法的CRC校验程序。 #### 1. Modbus协议简介 Modbus是一种广泛应用于...

    最全CRC16计算代码(包含直接计算和查表以及表格计算 内含MODBUS/CCITT/CCITT-FALSE/XMODEN等多种校验方式)

    收集整理最全的CRC16计算,C语言代码,包括CRC16-IBM/CRC16-MAXIM/CRC16-USB/CRC16-MODBUS/CRC16-CCITT/CRC16-CCITT-FALSE/CRC16-X25/CRC16-XMODEN/CRC16-DNP。 每种代码都包含查表和计算方式。还可以计算CRC表并...

    CRC16-MudBus示例函数(计数法+查表法)

    CRC16_MudBus(通常写作CRC-16/MODBUS)是一种常用于Modbus通信协议的循环冗余校验(Cyclic Redundancy Check,简称CRC)算法。它通过对数据进行计算得到一个校验值,用于检测数据传输过程中是否发生错误,以确保...

    ST语言编写Modbus通信CRC16校验程序.docx

    通过查表法计算CRC校验码,不仅简化了计算流程,还极大地提高了计算效率。 通过上述分析,我们可以清楚地了解到如何使用ST语言编写Modbus通信CRC16校验程序。这种基于查表的方法不仅简单高效,而且易于理解和实现。...

    crc.rar_modbus crc_modbus crc16_modbus-rtu crc_modbus协议_modbus通讯

    计算过程中通常采用查表法,这是因为直接的CRC计算较为复杂,而查表法可以显著提高计算速度。在提供的"crc.txt"文件中,可能包含了这种CRC16计算的函数实现,可以直接用于校验或生成Modbus RTU通信中的CRC值。 ...

    VB 求MODBUS16位CRC

    本文将深入探讨如何在VB中计算16位MODBUS协议的CRC值,以及查表法这一实现方式。 MODBUS协议的CRC计算通常涉及两个主要步骤:初始化和迭代。16位CRC计算基于一个预定义的多项式,例如MODBUS常用的CRC-16校验多项式...

    stm32 modbus 协议程序

    查表法是实现CRC计算的一种高效方法,它使用预先计算好的CRC查找表,通过查表快速得到数据的CRC值,提高了计算效率。 函数模块化是编程中的良好实践,它将程序分解为多个独立的功能单元,每个单元负责特定的任务,...

    crc.rar_51 MODBUS CRC16_C51 modbus C_crc_crc modbus_modbus asm

    综上所述,这个资源包提供了针对51系列单片机的MODBUS CRC16校验算法实现,采用查表法提高计算速度,对于需要在单片机上实现MODBUS通信的开发者来说,是一个有价值的参考资料。通过研究和理解这些代码,开发者可以更...

    ModBus CRC16计算.docx

    ModBus CRC16 计算可以分为两种方法:计算方法和查表法。 计算方法是使用数学公式来计算CRC16校验值。该方法需要了解CRC16的算法原理和实现细节,需要编写相应的代码来实现CRC16计算。 查表法是使用预先计算好的...

    《LabVIEW modbus RTU 实例讲解.pdf》

    校验过程可以使用查表法或者计算法。计算法的基本思路是初始化一个16位的CRC寄存器,然后将数据流分成一个个字节进行处理。每个字节与CRC寄存器的低8位异或后,将结果放入CRC寄存器,并进行位移操作,移出的位与特定...

    两种CRC16(Delphi下的循环冗余编码程序)

    它基于除法原理,通过对数据进行特定位数的除法运算来生成一个校验码,这个校验码可以检测出数据在传输或存储过程中可能出现的错误。在Delphi编程环境中,实现CRC16通常涉及到两个主要的CRC16算法:CRC16-CCITT和CRC...

    51单片机实现Modbus从机程序

    在程序中,我们还使用了CRC校验来确保数据的正确性,使用了查表法来实现CRC校验。该方法可以大大提高数据传输的可靠性。 在工业自动化系统中,Modbus协议广泛应用于设备之间的通信,例如,PLC、DCS、RTU等设备都...

Global site tag (gtag.js) - Google Analytics