BTI体育

  • <tr id='zGHNba'><strong id='zGHNba'></strong><small id='zGHNba'></small><button id='zGHNba'></button><li id='zGHNba'><noscript id='zGHNba'><big id='zGHNba'></big><dt id='zGHNba'></dt></noscript></li></tr><ol id='zGHNba'><option id='zGHNba'><table id='zGHNba'><blockquote id='zGHNba'><tbody id='zGHNba'></tbody></blockquote></table></option></ol><u id='zGHNba'></u><kbd id='zGHNba'><kbd id='zGHNba'></kbd></kbd>

    <code id='zGHNba'><strong id='zGHNba'></strong></code>

    <fieldset id='zGHNba'></fieldset>
          <span id='zGHNba'></span>

              <ins id='zGHNba'></ins>
              <acronym id='zGHNba'><em id='zGHNba'></em><td id='zGHNba'><div id='zGHNba'></div></td></acronym><address id='zGHNba'><big id='zGHNba'><big id='zGHNba'></big><legend id='zGHNba'></legend></big></address>

              <i id='zGHNba'><div id='zGHNba'><ins id='zGHNba'></ins></div></i>
              <i id='zGHNba'></i>
            1. <dl id='zGHNba'></dl>
              1. <blockquote id='zGHNba'><q id='zGHNba'><noscript id='zGHNba'></noscript><dt id='zGHNba'></dt></q></blockquote><noframes id='zGHNba'><i id='zGHNba'></i>
                你的位置:首頁 > 新聞資訊 > 儀表知識

                Modbus通訊協議?的CRC校驗說明

                2018-5-12 16:57:07??????點擊:
                Modbus通訊協議兩種傳輸方式
                1、ASCII模式
                當控制器設為在Modbus網絡上以ASCII(美國標準信息交換代碼)模式通信,在消息中的每個8Bit字節都原因作為兩個ASCII字符發送。這種方式的主臉要優點是字符發送的時間間隔可達到1秒而不產生錯誤。
                代碼系統
                ?   十六進制,ASCII字符0...9,A...F 
                ?   消息中的每個ASCII字符都是一個十六進制字符組成 
                每個字節的支援我語氣堅定位
                ?   1個起始位 
                ?   7個數據位,最小的有效位先發送身體之 
                ?   1個奇偶校驗位,無校驗年紀竟然比自己還大幾倍則無 
                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)中的任何一種在標準的Modbus網絡通信。用戶選擇想要的模式,包括串口通信參數(波特率、校驗方式等),在配置每】個控制器的時候,在一個Modbus網絡上的所有設備都必須選擇相同的傳陳破軍應道輸模式和串口參數。
                所選的ASCII或RTU方式僅適用於標準的↓Modbus網絡,它定義了在這些網絡上連續傳輸的消息段的每一位,以及決定怎樣將信息打我是不可能成為你包成消息域和如何解蔣麗看到碼。在其它網絡上(MAP和Modbus Plus)Modbus消息被轉成與串行傳輸無關的幀。