MODBUS通信協議.doc
《MODBUS通信協議.doc》由會員分享,可在線閱讀,更多相關《MODBUS通信協議.doc(9頁珍藏版)》請在裝配圖網上搜索。
MODBUS通信協議 HZR、HZC系列產品采用RS485、RS232、CAN、EtherNet(TCPIP)等通信方式與當地監(jiān)控系統或上一級調度自動化系統連接。MODBUS是應用層協議,可基于上述通信媒介進行系統互連。MODBUS采用直接內存訪問的模式,其基本協議定義了內存訪問的具體細節(jié),各應用程序或系統互連時只須提供內存地址表即可。 一、 HZR、HZC系列產品支持的MODBUS命令 1、 連續(xù)讀n個字(功能碼03H) 下行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):03H 起始地址(WORD):0000H~FFFFH 讀的字數(WORD):0001H~007DH 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 上行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):03H 數據長度(BYTE):01H~FAH 數據內容(BYTE):讀到的具體數據 數據內容(BYTE):讀到的具體數據 。。。 數據內容(BYTE):讀到的具體數據 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 2、 寫1個字(功能碼06H) 下行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):06H 起始地址(WORD):0000H~FFFFH 寫入數據(WORD):0001H~FFFFH 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 上行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):06H 起始地址(WORD):0000H~FFFFH 寫入數據(WORD):0001H~FFFFH 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 3、 連續(xù)寫n個字(功能碼10H) 下行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):10H 起始地址(WORD):0000H~FFFFH 寫的字數(WORD):0001H~007DH 數據長度(BYTE):01H~FAH 數據內容(BYTE):寫入的具體數據 數據內容(BYTE):寫入的具體數據 。。。 數據內容(BYTE):寫入的具體數據 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 上行: 設備地址(BYTE):01H~FFH 功 能 碼(BYTE):10H 起始地址(WORD):0000H~FFFFH 寫的字數(WORD):0001H~007DH 校 驗 碼(WORD):以上所有字節(jié)的CRC16校驗和 CRC計算例程: unsigned short CalculateCRC(unsigned short* pData,unsigned short wLength) { unsigned short wCRC; wCRC = 0xffff; while(wLength--) wCRC = (wCRC>>8)^c_wTableCRC[(wCRC^*pData++)&0x00ff]; return wCRC; } unsigned short c_wTableCRC[256] = { 0x0000,0xc0c1,0xc181,0x0140,0xc301,0x03c0,0x0280,0xc241, 0xc601,0x06c0,0x0780,0xc741,0x0500,0xc5c1,0xc481,0x0440, 0xcc01,0x0cc0,0x0d80,0xcd41,0x0f00,0xcfc1,0xce81,0x0e40, 0x0a00,0xcac1,0xcb81,0x0b40,0xc901,0x09c0,0x0880,0xc841, 0xd801,0x18c0,0x1980,0xd941,0x1b00,0xdbc1,0xda81,0x1a40, 0x1e00,0xdec1,0xdf81,0x1f40,0xdd01,0x1dc0,0x1c80,0xdc41, 0x1400,0xd4c1,0xd581,0x1540,0xd701,0x17c0,0x1680,0xd641, 0xd201,0x12c0,0x1380,0xd341,0x1100,0xd1c1,0xd081,0x1040, 0xf001,0x30c0,0x3180,0xf141,0x3300,0xf3c1,0xf281,0x3240, 0x3600,0xf6c1,0xf781,0x3740,0xf501,0x35c0,0x3480,0xf441, 0x3c00,0xfcc1,0xfd81,0x3d40,0xff01,0x3fc0,0x3e80,0xfe41, 0xfa01,0x3ac0,0x3b80,0xfb41,0x3900,0xf9c1,0xf881,0x3840, 0x2800,0xe8c1,0xe981,0x2940,0xeb01,0x2bc0,0x2a80,0xea41, 0xee01,0x2ec0,0x2f80,0xef41,0x2d00,0xedc1,0xec81,0x2c40, 0xe401,0x24c0,0x2580,0xe541,0x2700,0xe7c1,0xe681,0x2640, 0x2200,0xe2c1,0xe381,0x2340,0xe101,0x21c0,0x2080,0xe041, 0xa001,0x60c0,0x6180,0xa141,0x6300,0xa3c1,0xa281,0x6240, 0x6600,0xa6c1,0xa781,0x6740,0xa501,0x65c0,0x6480,0xa441, 0x6c00,0xacc1,0xad81,0x6d40,0xaf01,0x6fc0,0x6e80,0xae41, 0xaa01,0x6ac0,0x6b80,0xab41,0x6900,0xa9c1,0xa881,0x6840, 0x7800,0xb8c1,0xb981,0x7940,0xbb01,0x7bc0,0x7a80,0xba41, 0xbe01,0x7ec0,0x7f80,0xbf41,0x7d00,0xbdc1,0xbc81,0x7c40, 0xb401,0x74c0,0x7580,0xb541,0x7700,0xb7c1,0xb681,0x7640, 0x7200,0xb2c1,0xb381,0x7340,0xb101,0x71c0,0x7080,0xb041, 0x5000,0x90c1,0x9181,0x5140,0x9301,0x53c0,0x5280,0x9241, 0x9601,0x56c0,0x5780,0x9741,0x5500,0x95c1,0x9481,0x5440, 0x9c01,0x5cc0,0x5d80,0x9d41,0x5f00,0x9fc1,0x9e81,0x5e40, 0x5a00,0x9ac1,0x9b81,0x5b40,0x9901,0x59c0,0x5880,0x9841, 0x8801,0x48c0,0x4980,0x8941,0x4b00,0x8bc1,0x8a81,0x4a40, 0x4e00,0x8ec1,0x8f81,0x4f40,0x8d01,0x4dc0,0x4c80,0x8c41, 0x4400,0x84c1,0x8581,0x4540,0x8701,0x47c0,0x4680,0x8641, 0x8201,0x42c0,0x4380,0x8341,0x4100,0x81c1,0x8081,0x4040 }; 通訊數據的類型及格式說明: 信息傳輸為異步方式,并以字節(jié)為單位。在主站和從站之間傳遞的通訊信息是11位的字格式: 字格式(串行數據) 11位二進制 起始位 1位 數據位 8位 奇偶校驗位 1位:有奇偶校驗位/無:無奇偶校驗位 停止位 1位:有奇偶校驗位/2位:無奇偶校驗位 ● 通訊數據(信息幀)格式 數據格式: 地址碼 功能碼 數據區(qū) 錯誤校檢 數據長度: 1字節(jié) 1字節(jié) N字節(jié) 16位CRC碼(冗余循環(huán)碼) ★ 注:1、1個字節(jié)由8位二進制數組成(既8 bit)。 2、ModBus是Modicon公司的注冊商標。 3、“從機”在本文件中既為PDM。 一、通訊信息傳輸過程: 當通訊命令由發(fā)送設備(主機)發(fā)送至接收設備(從機)時,符合相應地址碼的從機接收通訊命令,并根據功能碼及相關要求讀取信息,如果CRC校驗無誤,則執(zhí)行相應的任務,然后把執(zhí)行結果(數據)返送給主機。返回的信息中包括地址碼、功能碼、執(zhí)行后的數據以及CRC校驗碼。如果CRC校驗出錯就不返回任何信息。 1.1 地址碼: 地址碼是每次通訊信息幀的第一字節(jié)(8位),從1到255。這個字節(jié)表明由用戶設置地址的從機將接收由主機發(fā)送來的信息。每個從機都必須有唯一的地址碼,并且只有符合地址碼的從機才能響應回送信息。當從機回送信息時,回送數據均以各自的地址碼開始。主機 發(fā)送的地址碼表明將發(fā)送到的從機地址,而從機返回的地址碼表明回送的從機地址。相應的地址碼表明該信息來自于何處。 1.2 功能碼: 是每次通訊信息幀傳送的第二個字節(jié)。ModBus通訊規(guī)約可定義的功能碼為1到127。PDM系列儀表/變送器僅用到其中的一部分功能碼。作為主機請求發(fā)送,通過功能碼告訴從機應執(zhí)行什么動作。作為從機響應,從機返回的功能碼與從主機發(fā)送來的功能碼一樣,并表明從機已響應主機并且已進行相關的操作。 表8.1 MODBUS部分功能碼 功能碼 定 義 操 作(二進制) 02 讀開關量輸入 讀取一路或多路開關量狀態(tài)輸入數據 01 讀開關量輸出 讀取一路或多路開關量輸出狀態(tài)數據 03 讀寄存器數據 讀取一個或多個寄存器的數據 05 寫開關量輸出 控制一路繼電器“合/分”輸出 06 寫單路寄存器 把一組二進制數據寫入單個寄存器 10 寫多路寄存器 把多組二進制數據寫入多個寄存器 1.3 數據區(qū): 數據區(qū)包括需要由從機返送何種信息或執(zhí)行什么動作。這些信息可以是數據(如:開關量輸入/輸出、模擬量輸入/輸出、寄存器等等)、參考地址等。例如,主機通過功能碼03告訴從機返回寄存器的值(包含要讀取寄存器的起始地址及讀取寄存器的長度),則返回的數據包括寄存器的數據長度及數據內容。對于不同的從機,地址和數據信息都不相同(應給出通訊信息表)。 二、MODBUS功能碼簡介 2.1 功能碼“02”:讀1路或多路開關量狀態(tài)輸入 例如:主機要讀取地址為01,開關量DI1—DI4的輸入狀態(tài)。 從機(PDM)數據寄存器的地址和數據為: 起始位地址 DI寄存器數據(16進制) 備 注 0000 0B DI1/DI2/DI4狀態(tài)為“1”,DI3狀態(tài)為“0” 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 備 注 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 02 讀開關量輸入狀態(tài) 起始BIT位 2 0000 起始BIT位地址為0000 讀數據長度 2 0004 讀取4路開關量輸入狀態(tài)位 CRC碼 2 79C9 由主機計算得到CRC碼 從機(PDM)響應返回的報文格式: 從機響應 字節(jié)數 返回的信息 備 注 從機地址 1 01 來自從機01 功能碼 1 02 讀開關量輸入狀態(tài) 數據長度 1 01 1個字節(jié)(8個BIT位) DI狀態(tài)數據 1 0B DI寄存器內容 CRC碼 2 E04F 由從機計算得到CRC碼 2.2 功能碼“01”:讀1路或多路開關量輸出狀態(tài) 例如:主機要讀取地址為01,開關量DO1,DO2的輸出狀態(tài)。 從機(PDM)數據寄存器的地址和數據為: 起始位地址 DO寄存器數據(16進制) 備 注 0000 02 DO2輸出狀態(tài)為“1”,DO1輸出狀態(tài)為“0” 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 備 注 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 01 讀開關量輸出狀態(tài) 起始BIT位 2 0000 起始BIT位地址為0000 讀數據長度 2 0002 讀取2路繼電器輸出狀態(tài)位 CRC碼 2 BDCB 由主機計算得到CRC碼 從機(PDM)響應返回的報文格式: 從機響應 字節(jié)數 返回的信息 備 注 從機地址 1 01 來自從機01 功能碼 1 01 讀開關量輸出狀態(tài) 數據長度 1 01 1個字節(jié)(8個BIT位) DO狀態(tài)數據 1 02 DO寄存器內容 CRC碼 2 D049 由從機計算得到CRC碼 2.3 功能碼“03”:讀多路寄存器輸入 例如:主機要讀取地址為01,起始地址為0116的3個從機寄存器數據。 從機(PDM)數據寄存器的地址和數據為: 寄存器地址 寄存器數據(16進制) 對應PDM電量 0116 1784 UA 0117 1780 UB 0118 178A UC 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 備 注 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 03 讀取寄存器 起始地址 2 0116 起始地址為0116 數據長度 3 0003 讀取3個寄存器(共6個字節(jié)) CRC碼 2 E5F3 由主機計算得到CRC碼 從機(PDM)響應返回的報文格式: 從機響應 字節(jié)數 返回的信息 備 注 從機地址 1 01 來自從機01 功能碼 1 03 讀取寄存器 讀取字 1 06 3個寄存器共6個字節(jié) 寄存器數據1 2 1784 地址為0116內存的內容 寄存器數據2 2 1780 地址為0117內存的內容 寄存器數據3 2 178A 地址為0118內存的內容 CRC碼 2 5847 由從機計算得到CRC碼 2.4 功能碼“05”:寫1路開關量輸出(“遙控”) 例1:開關量輸出點DO1,其當前狀態(tài)為“分”,主機要控制該路繼電器“合”。 控制命令為: “FF00”為控制繼電器“合”; “0000”為控制繼電器“分”; 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 備 注 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 05 寫開關量輸出狀態(tài) 輸出BIT位 2 0000 對應輸出繼電器BIT位(DO1) 控制命令 2 FF00 控制該路繼電器輸出為“合”狀態(tài)位 CRC碼 2 8C3A 由主機計算得到CRC碼 從機(PDM)響應返回的報文格式: 與主機發(fā)送的報文格式及數據內容完全相同。 例2:開關量輸出點DO2,其當前狀態(tài)為“合”,主機要控制該路繼電器“分”。 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 備 注 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 05 寫開關量輸出狀態(tài) 輸出BIT位 2 0001 對應輸出繼電器BIT位(DO2) 控制命令 2 0000 控制該路繼電器輸出為“合”狀態(tài)位 CRC碼 2 9C0A 由主機計算得到CRC碼 從機(PDM)響應返回的報文格式: 與主機發(fā)送的報文格式及數據內容完全相同。 2.5 功能碼“06”:寫單路寄存器 例如:主機要把數據07D0,保存到地址為002C的從機寄存器中去(從機地址碼為01)。通訊數據保存結束后,地址為002C的PDM表原存儲信息為: 地址 原來存儲數據(16進制) 002C 04B0 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送的信息 舉例 從機地址 1 01 發(fā)送至地址為01的從機 功能碼 1 06 寫單路寄存器 起始地址 2 002C 要寫入的寄存器地址 寫入數據 2 07D0 對應的新數據 CRC碼 2 4BAF 由主機計算得到的CRC碼 從機(PDM)響應返回的報文格式: 與主機發(fā)送的報文格式及數據內容完全相同。 2.6功能碼“10”:寫多路寄存器 主機利用這個功能碼把多個數據保存到PDM表的數據存儲器中去。Modbus通訊規(guī)約中的寄存器指的是16位(即2字節(jié)),并且高位在前。這樣PDM的存儲器都是二個字節(jié)。由于Modbus通訊規(guī)約允許每次最多保存60個寄存器,因此PDM一次也最多允許保存60個數據寄存器。 例如:主機要把0064,0010保存到地址為002C,002D的從機寄存器中去(從機地址碼為01)。通訊數據保存結束后,地址為002C/002D的PDM表內存儲信息為: 地址 原來存儲數據(16進制) 002C 04B0 002D 1388 主機發(fā)送的報文格式: 主機發(fā)送 字節(jié)數 發(fā)送信息 舉例 從機地址 1 01 發(fā)送至從機01 功能碼 1 10 寫多路寄存器 起始地址 2 002C 要寫入的寄存器的起始地址 保存數據字長度 2 0002 保存數據的字長度(共2字) 保存數據字節(jié)長 1 04 保存數據的字節(jié)長度(共4字節(jié)) 保存數據1 2 04B0 數據地址002C 保存數據2 2 1388 數據地址002D CRC碼 2 FC63 由主機計算得到的CRC碼 從機(PDM)響應返回的報文格式: 從機響應 字節(jié)數 字節(jié)數 舉例 從機地址 1 01 來自從機01 功能碼 1 10 寫多路寄存器 起始地址 2 002C 起始地址為002C 保存數據字長度 2 0002 保存2個字長度的數據 CRC碼 2 8001 由從機計算得到的CRC碼 三、錯誤校驗碼(CRC校驗): 主機或從機可用校驗碼進行判別接收信息是否正確。由于電子噪聲或一些其它干擾,信息在傳輸過程中有時會發(fā)生錯誤,錯誤校驗碼(CRC)可以檢驗主機或從機在通訊數據傳送過程中的信息是否有誤,錯誤的數據可以放棄(無論是發(fā)送還是接收),這樣增加了系統的安全和效率。 MODBUS通訊協議的CRC(冗余循環(huán)碼)包含2個字節(jié),即16位二進制數。CRC碼由發(fā)送設備(主機)計算,放置于發(fā)送信息幀的尾部。接收信息的設備(從機)再重新計算接收到信息的CRC,比較計算得到的CRC是否與接收到的相符,如果兩者不相符,則表明出錯。 在進行CRC計算時只用8個數據位,起始位及停止位,如有奇偶校驗位也包括奇偶校驗位,都不參與CRC計算。 ● CRC碼的計算方法是: 1.預置1個16位的寄存器為十六進制FFFF(即全為1);稱此寄存器為CRC寄存器; 2.把第一個8位二進制數據(既通訊信息幀的第一個字節(jié))與16位的CRC寄存器的低 8位相異或,把結果放于CRC寄存器; 3.把CRC寄存器的內容右移一位(朝低位)用0填補最高位,并檢查右移后的移出位; 4.如果移出位為0:重復第3步(再次右移一位); 如果移出位為1:CRC寄存器與多項式A001(1010 0000 0000 0001)進行異或; 5.重復步驟3和4,直到右移8次,這樣整個8位數據全部進行了處理; 6.重復步驟2到步驟5,進行通訊信息幀下一個字節(jié)的處理; 7.將該通訊信息幀所有字節(jié)按上述步驟計算完成后,得到的16位CRC寄存器的高、低 字節(jié)進行交換; 8.最后得到的CRC寄存器內容即為:CRC碼。 四、通訊錯誤信息及數據的處理: 當PDM表檢測到除了CRC碼出錯以外的錯誤時,必須向主機回送信息,功能碼的最高位置為1,即從機返送給主機的功能碼是在主機發(fā)送的功能碼的基礎上加128 。以下的這些代碼表明有意外的錯誤發(fā)生。 PDM從主機接收到的信息如有CRC錯誤,則將被PDM表忽略。 PDM返送的錯誤碼的格式如下(CRC碼除外): 地址碼: 1字節(jié) 功能碼: 1字節(jié)(最高位為1) 錯誤碼: 1字節(jié) CRC碼:2字節(jié)。 PDM響應回送如下錯誤碼: 81.非法的功能碼。 接收到的功能碼PDM表不支持。 82.非法的數據位置。 指定的數據位置超出PDM表的范圍。 83.非法的數據值。 接收到主機發(fā)送的數據值超出PDM相應地址的數據范圍。- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- MODBUS 通信協議
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.820124.com/p-10176203.html