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

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

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

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

              <i id='cL6qeC'><div id='cL6qeC'><ins id='cL6qeC'></ins></div></i>
              <i id='cL6qeC'></i>
            1. <dl id='cL6qeC'></dl>
              1. <blockquote id='cL6qeC'><q id='cL6qeC'><noscript id='cL6qeC'></noscript><dt id='cL6qeC'></dt></q></blockquote><noframes id='cL6qeC'><i id='cL6qeC'></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種模式混用。一種模式逍遥E族是ASCII(美國信◥息交換碼),另一红人種模式是RTU(遠程終书友111212224548531端設備)這↘兩種模式的定義見表3 

                 ASCII和RTU傳輸模式的♂特性

                控制器能設置為兩種傳輸模》式(ASCII或RTU)中的任何→一種在標準的Ψ Modbus網絡通信。用耻辱戶選擇想要的模式,包括串口通信这本新书參數(波特率、校驗方式▃等),在配置每】個控制器的時候,在一個Modbus網絡上的所有設備都必須選擇相同的傳輸模式和串口參數。
                所選的ASCII或RTU方式僅適用於但士兵標準的Modbus網絡,它定義了在這些網絡上連續傳輸的消息段的每一█位,以及決定怎樣將信息打包成消息域和自然如何解碼『。在其它網絡上(MAP和Modbus Plus)Modbus消息被轉成與可是想到八年前串行傳輸無關的幀。