k8¿­·¢ÌìÉúÓ®¼ÒÒ»´¥¼´·¢

Ê×Ò³
²úÆ·
׿Խ ? Ò×Óà ? ¿É¿¿
ËÑË÷
ÀúÊ·ËÑË÷
ËÑË÷·¢ÏÖ
Ê×Ò³ > ÐÂÎÅÖÐÐÄ > ¼¼ÊõÓ¦ÓÃ

ModbusЭÒéµÄCRCУÑé˵Ã÷

2022-09-23 10:53:44| À´Ô´£ºk8¿­·¢ÌìÉúÓ®¼ÒÒ»´¥¼´·¢µç×Ó| ´Î| 0´Î

¡¡¡¡ModbusͨѶЭÒéÁ½ÖÖ´«Ê䷽ʽ

¡¡¡¡1¡¢ASCIIģʽ

¡¡¡¡µ±¿ØÖÆÆ÷ÉèΪÔÚModbusÍøÂçÉÏÒÔASCII(ÃÀ¹ú±ê×¼ÐÅÏ¢½»»»´úÂë)ģʽͨÐÅ,ÔÚÏûÏ¢ÖеÄÿ¸ö8Bit×Ö½Ú¶¼×÷ΪÁ½¸öASCII×Ö·û·¢ËÍ¡£ÕâÖÖ·½Ê½µÄÖ÷ÒªÓŵãÊÇ×Ö·û·¢Ë͵Äʱ¼ä¼ä¸ô¿É´ïµ½1Ãë¶ø²»²úÉú´íÎó¡£

¡¡¡¡´úÂëϵͳ

¡¡¡¡? Ê®Áù½øÖÆ,ASCII×Ö·û0...9,A...F

¡¡¡¡? ÏûÏ¢ÖеÄÿ¸öASCII×Ö·û¶¼ÊÇÒ»¸öÊ®Áù½øÖÆ×Ö·û×é³É

¡¡¡¡Ã¿¸ö×Ö½ÚµØλ

¡¡¡¡? 1¸öÆðʼλ

¡¡¡¡? 7¸öÊý¾Ýλ,×îСµÄÓÐЧλÏÈ·¢ËÍ

¡¡¡¡? 1¸öÆæżУÑéλ,ÎÞУÑéÔòÎÞ

¡¡¡¡

modbusÓ¦ÓÃЭÒé


¡¡¡¡

¡¡¡¡CRCÓòÊÇÁ½¸ö×Ö½Ú,°üº¬Ò»16λµÄ¶þ½øÖÆÖµ¡£ÓÉ´«ÊäÉ豸¼ÆËãºó¼ÓÈëÏûÏ¢ÖС£½ÓÊÕÉ豸ÖØмÆËãÊÕµ½ÏûÏ¢µÄCRC,²¢Óë½ÓÊÕµ½µÄCRCÓòÖеÄÖµ±È½Ï,Èç¹ûÁ½Öµ²»Í¬,ÔòÓÐÎÞ¡£

¡¡¡¡CRCÊÇÏȵ÷ÈëÒ»ÖµÊÇÈ«¡°1¡±µÄ16λ¼Ä´æÆ÷,È»ºóµ÷ÓÃÒ»¹ý³Ì½«ÏûÏ¢ÖÐÁ¬ÐøµÄ8λ×Ö½Ú¸÷µ±Ç°¼Ä´æÆ÷ÖеÄÖµ½øÐд¦Àí¡£½öÿ¸ö×Ö·ûÖеÄ8BitÊý¾Ý¶ÔCRCÓÐЧ,ÆðʼλºÍֹͣλÒÔ¼°ÆæżУÑéλ¾ùÎÞЧ¡£

¡¡¡¡CRC²úÉú¹ý³ÌÖÐ,ÿ¸ö8λ×Ö·û¶¼µ¥¶ÀºÍ¼Ä´æÆ÷ÄÚÈÝÏà»ò(OR),½á¹ûÏò×îµÍÓÐЧλ·½ÏòÒƶ¯,×î¸ßÓÐЧλÒÔ0Ìî³ä¡£LSB±»ÌáÈ¡³öÀ´¼ì²â,Èç¹ûLSBΪ1,¼Ä´æÆ÷µ¥¶ÀºÍÔ¤ÖõÄÖµ»òÒ»ÏÂ,Èç¹ûLSBΪ0,Ôò²»½øÐС£Õû¸ö¹ý³ÌÒªÖظ´8´Î¡£ÔÚ×îºóһλ(µÚ8λ)Íê³Éºó,ÏÂÒ»¸ö8λ×Ö½ÚÓÖµ¥¶ÀºÍ¼Ä´æÆ÷µÄµ±Ç°ÖµÏà»ò¡£×îÖռĴæÆ÷ÖеÄÖµ,ÊÇÏûÏ¢ÖÐËùÓеÄ×Ö½Ú¶¼Ö´ÐÐÖ®ºóµÄCRCÖµ¡£

¡¡¡¡CRCÌí¼Óµ½ÏûÏ¢ÖÐʱ,µÍ×Ö½ÚÏȼÓÈë,È»ºó¸ß×Ö½Ú¡£

¡¡¡¡CRC¼òµ¥º¯ÊýÈçÏ£º

¡¡¡¡unsigned short CRC16(puchMsg, usDataLen)

¡¡¡¡unsigned char *puchMsg ; /* Òª½øÐÐCRCУÑéµÄÏûÏ¢ */

¡¡¡¡unsigned short usDataLen ; /* ÏûÏ¢ÖÐ×Ö½ÚÊý */

¡¡¡¡{

¡¡¡¡unsigned char uchCRCHi = 0xFF ; /* ¸ßCRC×Ö½Ú³õʼ»¯ */

¡¡¡¡unsigned char uchCRCLo = 0xFF ; /* µÍCRC ×Ö½Ú³õʼ»¯ */

¡¡¡¡unsigned uIndex ; /* CRCÑ­»·ÖеÄË÷Òý */

¡¡¡¡while (usDataLen--) /* ´«ÊäÏûÏ¢»º³åÇø */

¡¡¡¡{

¡¡¡¡uIndex = uchCRCHi ^ *puchMsgg++ ; /* ¼ÆËãCRC */

¡¡¡¡uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;

¡¡¡¡uchCRCLo = auchCRCLo[uIndex] ;

¡¡¡¡}

¡¡¡¡return (uchCRCHi << 8 | uchCRCLo) ;

¡¡¡¡}

¡¡¡¡/* CRC ¸ßλ×Ö½ÚÖµ±í */

¡¡¡¡static unsigned char auchCRCHi[] = {

¡¡¡¡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µÍλ×Ö½ÚÖµ±í*/

¡¡¡¡static char auchCRCLo[] = {

¡¡¡¡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

¡¡¡¡} ;

¡¡¡¡ModBusÍøÂçÊÇÒ»¸ö¹¤ÒµÍ¨ÐÅϵͳ,ÓÉ´øÖÇÄÜÖն˵Ŀɱà³ÌÐò¿ØÖÆÆ÷ºÍ¼ÆËã»úͨ¹ý¹«ÓÃÏß·»ò¾Ö²¿×¨ÓÃÏß·Á¬½Ó¶ø³É¡£Æäϵͳ½á¹¹¼È°üÀ¨Ó²¼þ¡¢Òà°üÀ¨Èí¼þ¡£¿ÉÓ¦ÓÃÓÚ¸÷ÖÖÊý¾Ý²É¼¯ºÍ¹ý³Ì¼à¿Ø¡£Ï±í1ÊÇModBusµÄ¹¦ÄÜÂ붨Òå¡£

¡¡¡¡±í1 ModBus¹¦ÄÜÂë

¡¡¡¡01 READ COIL STATUS

¡¡¡¡02 READ INPUT STATUS

¡¡¡¡03 READ HOLDING REGISTER

¡¡¡¡04 READ INPUT REGISTER

¡¡¡¡05 WRITE SINGLE COIL

¡¡¡¡06 WRITE SINGLE REGISTER

¡¡¡¡15 WRITE MULTIPLE COIL

¡¡¡¡16 WRITE MULTIPLE REGISTER

¡¡¡¡ModBusÍøÂçÖ»ÊÇÒ»¸öÖ÷»ú,ËùÓÐͨÐŶ¼ÓÉËû·¢³ö¡£ÍøÂç¿ÉÖ§³Ö247¸öÖ®¶àµÄÔ¶³Ì´ÓÊý¿ØÖÆÆ÷,µ«Êµ¼ÊËùÖ§³ÖµÄ´Ó»úÊýÒªÓÉËùÓÃͨÐÅÉ豸¾ö¶¨¡£²ÉÓÃÕâ¸öϵͳ,¸÷PC¿ÉÒÔºÍÖÐÐÄÖ÷»ú½»»»ÐÅÏ¢¶ø²»Ó°Ïì¸÷PCÖ´Ðб¾ÉíµÄ¿ØÖÆÈÎÎñ¡£

¡¡¡¡ModBusµÄ´«Ê䷽ʽ

¡¡¡¡ÔÚModBusϵͳÖÐÓÐ2ÖÖ´«Êäģʽ¿ÉÑ¡Ôñ¡£Õâ2ÖÖ´«ÊäģʽÓë´Ó»úPCͨÐŵÄÄÜÁ¦ÊÇͬµÈµÄ¡£Ñ¡ÔñʱӦÊÓËùÓÃModBusÖ÷»ú¶ø¶¨,ÿ¸öModBusϵͳֻÄÜʹÓÃÒ»ÖÖģʽ,²»ÔÊÐí2ÖÖģʽ»ìÓá£Ò»ÖÖģʽÊÇASCII(ÃÀ¹úÐÅÏ¢½»»»Âë),ÁíÒ»ÖÖģʽÊÇRTU(Ô¶³ÌÖÕ¶ËÉ豸)ÕâÁ½ÖÖģʽµÄ¶¨Òå¼û±í3

¡¡¡¡

ASCIIºÍRTU´«ÊäģʽµÄÌØÐÔ


¡¡¡¡

¡¡¡¡ASCIIºÍRTU´«ÊäģʽµÄÌØÐÔ

¡¡¡¡¿ØÖÆÆ÷ÄÜÉèÖÃΪÁ½ÖÖ´«Êäģʽ(ASCII»òRTU)ÖеÄÈκÎÒ»ÖÖÔÚ±ê×¼µÄModbusÍøÂçͨÐÅ¡£Óû§Ñ¡ÔñÏëÒªµÄģʽ,°üÀ¨´®¿ÚͨÐŲÎÊý(²¨ÌØÂÊ¡¢Ð£Ñ鷽ʽµÈ),ÔÚÅäÖÃÿ¸ö¿ØÖÆÆ÷µÄʱºò,ÔÚÒ»¸öModbusÍøÂçÉϵÄËùÓÐÉ豸¶¼±ØÐëÑ¡ÔñÏàͬµÄ´«ÊäģʽºÍ´®¿Ú²ÎÊý¡£

¡¡¡¡ËùÑ¡µÄASCII»òRTU·½Ê½½öÊÊÓÃÓÚ±ê×¼µÄModbusÍøÂç,¶¨ÒåÁËÔÚÕâЩÍøÂçÉÏÁ¬Ðø´«ÊäµÄÏûÏ¢¶ÎµÄÿһλ,ÒÔ¼°¾ö¶¨ÔõÑù½«ÐÅÏ¢´ò°ü³ÉÏûÏ¢ÓòºÍÈçºÎ½âÂë¡£ÔÚÆäÍøÂçÉÏ(MAPºÍModbus Plus)ModbusÏûÏ¢±»×ª³ÉÓë´®Ðд«ÊäÎ޹صÄÖ¡¡£


ÁªÏµÏúÊÛ
ÏúÊÛÍõ¾­Àí΢ÐÅ ÏúÊÛÍõ¾­Àí
΢ÐŹ«ÖںŠ΢ÐŹ«ÖÚºÅ
·þÎñÈÈÏß
400-6688-400

k8¿­·¢ÌìÉúÓ®¼ÒÒ»´¥¼´·¢