MODBUS通訊協議-RTU_第1頁
MODBUS通訊協議-RTU_第2頁
MODBUS通訊協議-RTU_第3頁
MODBUS通訊協議-RTU_第4頁
MODBUS通訊協議-RTU_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Modbus通訊協議RTU傳輸模式本說明僅做內部參考,詳細請參閱英文版本.第一章 Modbus協議簡介Modbus協議是應用于電子限制器上的一種通用語言.通過此協議,限制器相互之間、限制器經由網絡例如以太網和其它設備之間可以通信.它已經成為一通用工業(yè)標準.有 了它,不同廠商生產的限制設備可以連成工業(yè)網絡,進行集中監(jiān)控.此協議定義了一個限制器能熟悉使用的消息結構,而不管它們是經過何種網絡進行通信的.它描述了一限制器請求訪問其它設備的過程,如果回應來自其它設備的請求,以及怎樣偵測錯誤并記錄.它制定了消息域格局和內容的公共格式.當在一 Modbus網絡上通信時,此協議決定了每個限制器須要知道它們的設

2、備地址,識別按地址發(fā)來的消息,決定要產生何種行動.如果需要回應,限制器將生成反應信息并用 Modbus協議發(fā)出.在其它網絡上,包含了 Modbus協議的消息轉換為在此網絡上使用的幀 或包結構.這種轉換也擴展了根據具體的網絡解決節(jié)地址、路由路徑及錯誤檢測的方法.協議在一根通訊線上使用應答式連接半雙工,這意味著在一根單獨的通訊線上信號沿著相反的兩個方向傳輸.首先,主計算機的信號尋址到一臺唯一的終端設備從機,然 后,在相反的方向上終端設備發(fā)出的應答信號傳輸給主機.協議只允許在主計算機和終端設備之間,而不允許獨立的設備之間的數據交換,這就不會在使它們初始化時占據通訊線路,而僅限于響應到達本機的查詢信號

3、.1. 1傳輸方式傳輸方式是一個信息幀內一系列獨立的數據結構以及用于傳輸數據的有限規(guī)那么,以RTU模式在Modbus總線上進行通訊時,信息中的每8位字節(jié)分成2個4位16進制的字符,每個信息必須連續(xù)傳輸下面定義了與Modebus協議-RTU方式相兼容的傳輸方式.代碼系統 8位二進制,十六進制數 0.9, A.F 消息中的每個8位域都是一個兩個十六進制字符組成每個字節(jié)的位 1個起始位 8個數據位,最小的有效位先發(fā)送 1個奇偶校驗位,無校驗那么無 1個停止位有校驗時,2個Bit 無校驗時錯誤檢測域 CRC能環(huán)冗長檢測1.1.1 . 2 協議當信息幀到達終端設備時,它通過一個簡單的“口進入尋址到的設備

4、,該設備去掉 數據幀的“信封數據頭,讀取數據,如果沒有錯誤,就執(zhí)行數據所請求的任務,然后, 它將自己生成的數據參加到取得的“信封中,把數據幀返回給發(fā)送者.返回的響應數據中包含了以下內容:終端從機地址Address 被執(zhí)行了的命令Function 執(zhí)行命令生成的被請求數據Data和一個校驗碼Check.發(fā)生任何錯誤都不會有成功的響應.1. 2. 1 信息幀AddressFunctionDataCheck8-Bits8-BitsN x 8-Bits16-Bits圖1 -1 .信息幀格式特注:Modbus信息幀所允許的最大長度為256個字節(jié),即N的范圍是大于等于零且小于等于 252 N0 , 252

5、.即,所有的數據一共 256個,數據剩下253個.1.1.2 地址Address域信息幀地址域信息地址在幀的開始局部,由 8位組成,有效的從機設備地址范圍 0-247十進制,各從機設備的尋址范圍為1-247.主機把從機地址放入信息幀的地址區(qū),并向從機尋址.從機響應時,把自己的地址放入響應信息的地址區(qū),讓主機識別已作出響應的從機地址.地址0為播送地址,所有從機均能識別.當Modbus協議用于高級網絡時,那么不允許廣播或其它方式替代.1.1.3 功能Function域信息幀功能域代碼告訴了被尋址到的終端 執(zhí)行何種功能.有效碼范圍1-225十進制, 有些代碼是適用于所有限制器, 有些適應于某種限制器

6、,還有些保存以備后用.有關功能代 替碼的全部內容見附錄Ao當主機向從句發(fā)送信息時,功能代碼向從機說明應執(zhí)行的動作.如讀一組離散式線圈或輸入信號的ON/OFF狀態(tài),讀一組存放器的數據,讀從機的診斷狀態(tài),寫線圈或存放器,允許下截、記錄、確認從機內的程序等.當從機響應主機時,功能代碼可說明從機正常響應 或出現錯誤即不正常響應,正常響應時,從句簡單返回原始功能代碼;不正常響應時,從 機返回與原始代碼相等效的一個碼,并把最高有效位設定為“1.如,主機要求從機讀一組保持存放器時,那么發(fā)送信息的功能碼為:0000 0011 十六進制03假設從機正確接收請求的動作信息后,那么返回相同的代碼值作為正常響應.發(fā)現

7、錯時,那么返回一個不正常響信息:1000 0011十六進制 83從機對功能代碼作為了修改,此外,還把一個特殊碼放入響應信息的數據區(qū)中,告訴主機出現的錯誤類型和不正常響應的原因,不正常響應見附錄Bo主機設備的應用程序負責處理不正常響應,典型處理過程是主機把對信息的測試和診斷送給從機,并通知操作者.表1 - 1列出了所有設備常用的功能碼、它們的意義及它們的初始功能.表1 - 1常用功能碼代碼名稱作用01讀取線圈狀態(tài)取得一組邏輯線圈的當前狀態(tài)ON/OFF02讀取輸入狀態(tài)取得一組開關輸入的當前狀態(tài)ON/OFF03讀取保持存放器在一個或多個保持存放器中取得當前的二進制值04讀取輸入存放器在一個或多個輸入

8、存放器中取得當前的二進制值05強置單線圈強置一個邏輯線圈的通斷狀態(tài)06預置單存放器放置一個特定的二進制值到一個單存放器中07讀取異常狀態(tài)取得8個內部線圈的通斷狀態(tài)15強置多線圈強置串連續(xù)邏輯線圈的通斷16預置多存放器放置一系列特定的二進制值到一系列多存放器中17報告從機標識可使主機判斷編址從機的類型及該從機運行指示燈的狀態(tài)1.2.4 數據域數據域包含了終端執(zhí)行特定功能所需要的數據或者終端響應查詢時采集到的數據.這些數據的內容可能是數值、參考地址或者極限值. 他由數據區(qū)有2個16進制的數據位2的8次方256,數據范圍為00-FF16進制.例如:功能域碼告訴終端讀取一個存放器,數據域那么需要指明從

9、哪個存放器開始及讀取多少個數據,內嵌的地址和數據依照類型和從機之間的不同水平而有所不同.假設無錯誤出現,從機向主機的響應信息中包含了請求數據,假設有錯誤出現,那么數據中有一個不正常代碼,使主機能判斷并作出下一步的動作.數據區(qū)的長度可為“零以表示某類信息.1. 2. 5 錯誤校驗域該域允許主機和終端檢查傳輸過程中的錯誤.有時,由于電噪聲和其它干擾, 一組數據在從一個設備傳輸到另一個設備時在線路上可能會發(fā)生一些改變,出錯校驗能夠保證主機或者終端不去響應那些傳輸過程中發(fā)生了改變的數據,這就提升了系統的平安性和效率, 出錯校驗使用了 16位循環(huán)冗余的方法,即 CRC校驗.錯誤檢測域包含一 16Bits

10、值用兩個8位的字符來實現.錯誤檢測域的內容是通過對消 息內容進行循環(huán)冗長檢測方法得出的.CRC域附加在消息的最后,添加時先是低字節(jié)然后是高字節(jié).故CRC的高位字節(jié)是發(fā)送消息的最后一個字節(jié).1. 2. 6 字符的連續(xù)傳輸當消息在標準的 Modbus系列網絡傳輸時,每個字符或字節(jié)按由左到右的次序方式發(fā)送: 最低有效位LSB .最高有效位MSB.位的序列是:有奇偶校驗啟始位12345678奇偶位停止位無奇偶校驗啟始位12345678停止位停止位圖1 - 2 . 位順序RTU1 . 3錯誤檢測1、奇偶校驗用戶可以配置限制器是奇或偶校驗,或無校驗.這將決定了每個字符中的奇偶校驗位是 如何設置的.如果指定

11、了奇或偶校驗,“1的位數將算到每個字符的位數中ASCII模式7個數據位,RTU中8個數據位.例如 RTU字符幀中包含以下 8個數據位:1 1 0 0 0 1 0 1整個“ 1的數目是4個.如果便用了偶校驗,幀的奇偶校驗位將是0,便得整個“ 1的個數仍是4個.如果便用了奇校驗,幀的奇偶校驗位將是1,便得整個“ 1的個數是5個.如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測.代替一附加的停 止位填充至要傳輸的字符幀中.2、CRC檢測RTU方式時,采用CRC方法計算錯誤校驗碼,CRC校驗傳送的全部數據. 它忽略信息 中單個字符數據的奇偶校驗方法.循環(huán)冗余校驗CRC域占用兩個字節(jié),包含了

12、一個 16位的二進制值.CRC值由傳送 設備計算出來,然后附加到數據幀上,接收設備在接收數據時重新計算CRC值,然后與接收到的CRC域中的值進行比擬,如果這兩個值不相等,就發(fā)生了錯誤.CRC開始時先把存放器的 16位全部置成“ 1,然后把相鄰2個8位字節(jié)的數據放入當 前存放器中,只有每個字符的8位數據用作產生 CRC,起始位,停止位和奇偶校驗位不加至ij CRC中.在生成CRC時,每個8位字節(jié)與存放器中的內容進行異或,然后將結果向低位移位, 高位那么用“ 0補充,最低位LSB移出并檢測,如果是 1,該存放器就與一個預設的固 定值進行一次異或運算,如果最低位為0,不作任何處理.上述處理重復進行,

13、知道執(zhí)行完了 8次移位操作,當最后一位第 8位移完以后,下 一個8位字節(jié)與存放器材的當前值進行異或運算, 同樣進行上述的另一個 8次移位異或操作, 當數據幀中的所有字節(jié)都作了處理,生成的最終值就是CRC值.生成一個CRC的流程為:1、 預置一個16位存放器為0FFFFH 全1,稱之為CRC存放器.2、 把數據幀中的第一個 8位字節(jié)與CRC存放器中的低字節(jié)進行異或運算,結果存回CRC存放器.3、 將CRC存放器向右移一位,最高位填以 0,最低位移出并檢測.4、 如果最低位為0:重復第3步下一次移位.如果最低位為1:將CRC存放器與一個預設的固定值0A001H進行異或運算.5、 重復第3步和第4步

14、直到8次移位.這樣處理完了一個完整的八位.6、 重復第2步到第5步來處理下一個八位,直到所有的字節(jié)處理結束.7、 最終CRC存放器得值就是 CRC的值.CRC值附加到信息時,低位在先,高位在后.查閱 附錄C中的一個實例,它詳細說明 了 CRC的校驗.第二章 Modbus數據和限制功能詳解Modbus信息中的所有數據地址以零作為基準,各項數據的第一個數據地址的編號為0.假設無特殊說明在此節(jié)文中用十進制值表示,圖中的數據區(qū)那么用十六進制表示.圖2-1為一個例子,說明了 Modbus的查詢信息,圖 2-2為正常響應的例子,這兩例 子中的數據均是16進制的,也表示了以 RTU方式構成數據幀的方法.主機

15、查詢是讀保持存放器 ,被請求的從機地址是 06,讀取的數據來自地址40108保持寄有器.注意,該信息規(guī)定了存放器的起始地址為0107 006BH o從機響應返回該功能代碼,說明是正常響應,字節(jié)數" Byle count中說明有多少個 8 位字節(jié)被返回.它說明了附在數據區(qū)中8位字節(jié)的數量,當在緩沖區(qū)組織響應信息時,“字節(jié)數區(qū)域中的值應與該信息中數據區(qū)的字節(jié)數相等.如RTU方式時,63H用一個字節(jié)01100011發(fā)送.8個位為一個單位計算“字節(jié)數,它忽略了信息幀用組成的方法.AddrFunData start reg hiData start reg loData #of regs hi

16、Data #of regs loCRC16 hiCRC16 lo06H03H00H6BH00H01HXXHXXH圖2 T Modbus的查詢信息AddrFunByte countData1 hiData1 LoData 2 hiData2 loData3 hiData3 loCRC16 hiCRC16 lo06H03H06H02H2BH00H00H00H63HXXHXXH圖2 - 2 Modbus的響應信息2. 1讀取線圈狀態(tài)功能碼01讀取從機離散量輸出口 DO,0X類型的ON/OFF狀態(tài),不支持播送.查詢查詢信息規(guī)定了 要讀的起始線圈和線圈量, 線圈的起始地址為 0000H, 1-16個線圈

17、的尋址地址分為 0000H -0015H DO1=0000H, DO2=0001H ,依此類推.圖2 - 3的例子是從地址為 17的從機讀取DO1至DO6的狀態(tài).AddrFunDO start reg hiDO start reg loDO #of regs hiDO #of regs loCRC16 hiCRC16 lo11H01H00H00H00H06HXXHXXH圖2 - 3讀取線圈狀態(tài)-查詢響應響應信息中的各線圈的狀態(tài)與 數據區(qū)的每一位的值相對應,即每個 DO占用一位1 = ON, 0 = OFF,第一個數據字節(jié)的 LSB為查詢中的尋址地址,其他的線圈按順序在該字節(jié) 中由低位向高位排列

18、,直至8個為止,下一個字節(jié)也是從低位向高位排例.假設返回的線圈數不是8的倍數,那么在最后的數據字節(jié)中的剩余位至字節(jié)的最高位全部填0,字節(jié)數區(qū)說明全部數據的字節(jié)數.圖2 -4所示為線圈的輸出狀態(tài)響應的實例.AddrFunByte countDataCRC16 hiCRC16 lo11H01H01H2AHXXHXXH數據000000DO2DO1MSB765432LSB圖2 -4讀取線圈狀態(tài)-響應2. 2讀取輸入狀態(tài)功能碼02讀取從機離散量 輸入信號DI,0X類型的ON/OFF狀態(tài),不支持播送.查詢查詢信息規(guī)定了要讀的輸入起始地址,以及輸入信號的數量.輸入的起始地址為0000H ,1-16個輸入口的

19、地址分別為 0-15 DO1=0000H , DO2=0001H ,依此類推.圖2 - 5的例子是從地址為 17的從機讀取DI1到DI16的狀態(tài).AddrFunDI start addr hiDI start addr loDI num hiDI num loCRC16 hiCRC16 lo11H02H00H00H00H10HXXHXXH圖2 - 5讀取輸入狀態(tài)-查詢響應響應信息中的各輸入口的狀態(tài),分別對應于 數據區(qū)中的每一位值,1 = ON; 0 = OFF ,第一個數據字節(jié)的LSB為查詢中的尋址地址,其他輸入口按順序在該字節(jié)中由低位向高位排 列,直至8個位為止.下一個字節(jié)中的8個輸入位也是

20、從低位到高位排列.假設返回的輸入位數不是8的倍數,那么在最后的數據字節(jié)中的剩余位直至字節(jié)的最高位全部填零.字節(jié)數區(qū)說明了全部數據的字節(jié)數.圖2 -6所示為讀數字輸出狀態(tài)響應的實例.AddrFunByte countData1Data2CRC16 hiCRC16 lo11H02H02H33HCCHXXHXXH數據1DI8DI7DI6DI5DI4DI3DI2DI1MSBLSB2DI16DI15DI14DI13DI12DI11DI10DI9MSBLSB圖2 - 6讀取輸入狀態(tài)-響應2. 3讀取保持存放器功能碼03讀取從機保持存放器4X類型的二進制數據,不支持播送.查詢查詢信息規(guī)定了要讀的保持存放器起

21、始地址及保持存放器的數量,保持存放器尋址起始地址為0000H ,存放器1-16所對應的地址分別為 0000H -0015Ho圖2 - 7的例子是從17號從機讀3個采集到的根本數據 U1、U2、U3,U1的地址為0000H, U2的地址為 0001H, U3的地址為 0002H oAddrFunData start addr hiData start addr loData #of regs hiData #of regs loCRC16 hiCRC16 lo11H03H00H00H00H03HXXHXXH圖2 - 7讀取保持存放器-查詢響應響應信息中的存放器數據為二進制數據,每個存放器分別對應

22、2個字節(jié),第一個字節(jié)為高位值數據,第二個字節(jié)為低位數據.圖 2 - 8 的例子是讀取 U1,U2,U3U1=03E8H,U2=03E7H,U3=03E9H的響應.AddrFunByte countData1 hiData1 LoData 2 hiData2 loData3 hiData3 loCRC16 hiCRC16 lo11H03H06H03HE8H03HE7H03HE9HXXHXXH圖2 - 8讀取保持存放器-響應2.4 讀取輸入存放器功能碼04讀取從機輸入存放器3X類型中的二進制數據,不支持播送.查詢查詢信息規(guī)定了要讀的存放器的起始地址及存放器的數量,尋止起始地址為0,存放器1-16所

23、對應的地址分別為 0000H -0015Ho圖2 - 9的例子是請求17號從機的0009存放器.AddrFunDO addr hiDO addr loData #of regs hiData #of regs loCRC16 hiCRC16 lo11H04H00H08H00H01HXXHXXH圖2 - 9讀取輸入存放器-查詢響應響應信息中的存放器數據為每個存放器分別對應2個字節(jié),第一個字節(jié)為高位數據,第二個字節(jié)為低位數據.圖2 -10的例子存放器30009中的數據用000AH 2個字節(jié)表示.AddrFunByte countData hiData LoCRC16 hiCRC16 lo11H04

24、H02H00H0AHXXHXXH圖2 - 10讀取輸入存放器-響應2.5 強置單線圈功能碼05強制單個線圈DO, 0X類型為ON或OFF狀態(tài),播送時,該功能可強制所有從機中 同一類型的線圈均為 ON或OFF狀態(tài).該功能可越過限制器內存的保護狀態(tài)和線圈的禁止狀態(tài).線圈強制狀態(tài)一直保持有效直至下一個限制邏輯作用于線圈為止.限制邏輯中無線圈程序時,那么線圈處于強制狀態(tài).查詢查詢信息規(guī)定了需要強制一個單獨線圈的類型,線圈的起始地址為0000H , 1-16個線圈的尋址地址分為 0000H -0015H DO1=0000H, DO2=0001H ,依此類推.由查詢數據區(qū)中的一個常量,規(guī)定被請求線圈的ON

25、/OFF狀態(tài), FF00H值請求線圈處于ON狀態(tài),0000H值請求線圈處于 OFF狀態(tài),其它值對線圈無效,不起作用.圖示2-11的例子是請求17號從機開DO1的On狀態(tài).AddrFunDO addr hiDO addr loValue hiValue loCRC16 hiCRC16 lo11H05H00H00HFFH00HXXHXXH圖示2-11強制單線圈-查詢響應圖2 -12所示為對這個命令請求的正常響應是在DO狀態(tài)改變以后傳送接收到的數據.AddrFunDO addr hiDO addr loValue hiValue loCRC16 hiCRC16 lo11H05H00H00HFFH00

26、HXXHXXH圖示2-12強制單線圈-響應2. 6預置單存放器功能碼06把一個值預置到一個保持存放器 4X類型中,播送時,該功能把值預置到 所有從機 的相同類型的存放器中.該功能可越過限制器的內存保護.使存放器中的預置值保持有效. 只能由限制器的下一個邏輯信號來處理該預置值.假設限制邏輯中無存放器程序時,那么存放器中的值保持不變.查詢查詢信息規(guī)定了要預置存放器的類型,存放器尋址起始地址為0000H ,存放器1所對應的地址為0000H o圖示2-13的例子是請求17號從機0040H.的值為2717.AddrFunData start reg hiData start reg loValue hi

27、Value loCRC hiCRC lo11H06H00H40H0A卜9DHXXHXXH圖示2-13預設單存放器-查詢響應圖2 -14所示對于預置單存放器請求的正常響應是在存放器值改變以后 將接收到的數據傳送回去.AddrFunData start reg hiData start reg loValue hiValue loCRC hiCRC lo11H06H00H40H0A卜9DHXXHXXH圖小2-14預設單奇存器響應2. 7讀取異常狀態(tài)功能碼7讀從中機中8個不正常狀態(tài)線圈的數據,某些線圈號已在不同型號的限制器中預定義,而其它的線圈由用戶編程,作為有關限制器的狀態(tài)信息,如“ machin

28、e ON/OFF",“heads retraced,縮回標題,asafeties satisfied平安性滿意,“error conditions "存在錯誤條件或其它用戶定義的標志等.該功能碼不支持播送.該功能代碼為存取該類信息提供了一種簡單的方法,不正常線圈的類型是的在功限制器型號線圈設定M84,184/384,584,9841-8用戶定義484257電池狀態(tài)258-264用戶定義884761電池狀態(tài)762內存保護狀態(tài)763R10工況狀態(tài)764-768用戶預定義能代碼中不需要線圈類型預定義的不正常線圈號如下:查詢圖示2-15的例子是請求讀從機設備AddrFunCRC16

29、 hiCRC16 lo11H07HXXHXXH17中的不正常狀態(tài).圖示2-15讀取異常狀態(tài)-查詢響應正常響應包含 8個不正常的線圈狀態(tài),為一個數據字節(jié),每個線圈一位.LSB對應為最低線圈類型的狀態(tài).圖2 -16所示按查詢要求返回響應:AddrFunDO DataCRC16 hiCRC16 lo11H07H6DHXXHXXH圖示2-16讀取異常狀態(tài)-響應該例子中,線圈數據為 6DH 二進制0110 ,1101,從左到右最高位至最低位的線圈 狀態(tài)分別為:OFF - ON - ON - OFF - ON - ON - OFF - ON.假設限制器型號為 984,這 些位表示線圈 8至1的狀態(tài);假設限

30、制器型號為 484那么表示線圈264至257的狀態(tài).2. 8強置多線圈功能碼15按線圈的順序把各線圈 DO, 0X類型強制成 ON或OFF.播送時,該功能代碼可 對各從機中相同類型的線圈起強制作用.該功能代碼可越過內存保護和線圈的禁止狀態(tài)線圈.保持強制狀態(tài)有效,并只能由限制器的下一個邏輯來處理.假設無線圈限制邏輯程序時,線圈將保持強制狀態(tài).查詢查詢信息規(guī)定了被強制線圈的類型,線圈的起始地址為 0000H , 1-16個線圈的尋址地址分為 0000H -0015H DO1=0000H , DO2=0001H ,依此類推.查詢數據區(qū)規(guī)定了被請求線圈的ON/OFF狀態(tài),如數據區(qū)的某位值為 “1表示請

31、求的相應線圈狀態(tài)為 ON,位值為“ 0",那么為OFF狀態(tài).圖示2-17例子為請求從機設備17中一組10個線圈為強制狀態(tài),起始線圈為 20 那么尋址地址為 19或13H,查詢的數據為 2個字節(jié),CD01H 二進制11001101 0000 0001相 應線圈的二進制位排列如下:Bit:1100110100000001Coll:2726252423222120-2928傳送的第一個字節(jié)CDH對應線圈為 27-20, LSB對應線圈 20,傳送的第二個字節(jié)為01H,對應的線圈為29-28, LSB為繼圈28,其余未使用的位均填“ 0.AddrFunDO addr hiDO addr lo

32、Data #of reg hiData #of reg loByte countValue hiValue loCRC hiCRC lo11H0FH00H13H00H0AH02HCDH01HXXHXXH圖示2-17強置多線圈-查詢響應正常響應返回從機地址,功能代碼,起始地址以及強制線圈數. 圖2 -18對上述查詢返回的響應.AddrFunDO addr hiDO addr loData #of reg hiData #of reg loCRC16 hiCRC16 lo11H0FH00H13H00H0AHXXHXXH圖示2-18強置多線圈-響應2. 9預置多存放器功能碼16把數據按順序預置到各

33、4X類型存放器中,播送時該功能代碼可把數據預置到全部 從機中的相同類型的存放器中.該功能代碼可越過限制器的內存保護, 在存放器中的預置值一直保持有效, 只能由限制 器的下一個邏輯來處理存放器的內容, 限制邏輯中無該存放器程序時, 那么存放器中的值保持 不變.查詢查詢信息規(guī)定了要預置存放器的類型,存放器尋址起始地址為 0000H ,存放器1所對應的地址為0000H o圖示2-19的例子是請求17號從機0040H.的值為178077833.AddrFunData start reg hiData start reg loData #of reg hiData #of reg loByte coun

34、tValue hiValue loValue hiValue loCRC hiCRC lo11H10H00H40H00H02H04H40H89H0A卜1 9DHXXHXXH圖示2-19預設多存放器-查詢響應圖2 - 20所示對于預置單存放器請求的正常響應是在存放器值改變以后將接收到的數 據傳送回去.AddrFunData start reg hiData start reg loData #of reg hiData #of reg loCRC16 hiCRC16 lo11H10H00H40H00H02HXXHXXH圖小2-20預設多奇存器響應2. 10報告從機標識功能碼17返回一個從機地址限

35、制器的類型,從機的當前狀態(tài),以及有關從機的其他說明,不支 持播送.查詢圖示2-21的例子是請求報告從機設備17的標識ID和狀態(tài).AddrFunCRC16hiCRC16lo11H11HXXHXXH圖示2-21報告從機標識-查詢響應圖2 -22所示正常響應格式,數據內容對應每臺限制器的類型.AddrFunByte CountSlave idRun Indicator StatusAdditfional DataCRC16 hiCRC16 lo11H11HXXHXXHXXHXXHXXHXXH圖示2-22報告從機標識-響應從機ID總結數據區(qū)第一個字節(jié)為Modicon限制器返回的從機 IDSlave I

36、DController0Micro 841 4842 184/3843 5848 8849 984特注:詳細信息見 Modbus協議英文版或中文版.第三章附錄附錄A : MODBUS全部功能碼ModBus網絡是一個工業(yè)通信系統,由帶智能終端的可編程序限制器和計算機通過公用線 路或局部專用線路連接而成.其系統結構既包括硬件、亦包括軟件.它可應用于各種數據采 集和過程監(jiān)控.下表 3-1是ModBus的功能碼定義.表3-1 ModBus功能碼功能碼名稱作用01讀取線圈狀態(tài)取小一組邏輯線圈的當前狀態(tài)ON/OFF)02讀取輸入狀態(tài)取小一組開關輸入的當前狀態(tài)ON/OFF)03讀取保持存放器在一個或多個保持

37、存放器中取得當前的二進制值04讀取輸入存放器在一個或多個輸入存放器中取得當前的二進制值05強置單線圈強置一個邏輯線圈的通斷狀態(tài)06預置單存放器把具體二進值裝入一個保持存放器07讀取異常狀態(tài)取彳導8個內部線圈的通斷狀態(tài),這 8個線圈的地址由 限制器決定,用戶邏輯可以將這些線圈定義,以說明 從機狀態(tài),短報文適宜于迅速讀取狀態(tài)08回送診斷校驗把診斷校驗報文送從機,以對通信處理進行評鑒09編程只用于484使主機模擬編程器作用,修改PC從機邏輯10控詢只用于484可使主機與f正在執(zhí)行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送11讀取事件計數可使主機發(fā)

38、出單詢問,并隨即判定操作是否成功,尤 其是該命令或其他應答產生通信錯誤時12讀取通信事件記錄可是主機檢索每臺從機的ModBus事務處理通信事件記錄.如果某項事務處理完成,記錄會給出有關錯誤13編程(184/384 484 584)可使主機模擬編程器功能修改PC從機邏輯14探詢(184/384 484 584)可使土機與正在執(zhí)行任務的從機通信,定期控詢該從機是否已完成其程序操彳僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送15強置多線圈強置一串連續(xù)邏輯線圈的通斷16預置多存放器把具體的二進制值裝入一串連續(xù)的保持存放器17報告從機標識可使主機判斷編址從機的類型及該從機運行指示燈 的狀態(tài)18(884

39、 和 MICRO 84 )可使主機模擬編程功能,修改PC狀態(tài)邏輯19重置通信鏈路發(fā)生非可修改錯誤后,是從機復位于狀態(tài),可重 置順序字節(jié)20讀取通用參數584L顯示擴展存儲器文件中的數據信息21寫入通用參數584L把通用參數寫入擴展存儲文件,或修改之22 64保存作擴展功能備用65 72保存以備用戶功能所 用留作用戶功能的擴展編碼73119非法功能120127保存留作內部作用128255保存用于異常應答ModBus網絡只是一個主機,所有通信都由他發(fā)出.網絡可支持247個之多的遠程附屬控 制器,但實際所支持的從機數要由所用通信設備決定.采用這個系統,各PC可以和中央主機交換信息而不影響各 PC執(zhí)行

40、本身的限制任務.表 3-2是ModBus各功能碼對應的數據類 型.表3-2 ModBus功能碼與數據類型對應表代碼功能數據類型01讀位02讀位03讀整型、字符型、狀態(tài)字、浮點型04讀整型、狀態(tài)字、浮點型05寫位06寫整型、字符型、狀態(tài)字、浮點型08N/A重復“回路反應信息15寫位16寫整型、字符型、狀態(tài)字、浮點型17讀字符型附錄B:不正常響應不正常響應:除播送外,主機向從機設備發(fā)送查詢并希望有一個正常響應,主機查詢中有可能產生4種事件:從機接收查詢,通訊錯誤正常處理信息,那么返回一個正常響應事件.由于通訊出錯,從機不能接收查詢數據,因而不返回響應.此時,主機依靠處理程序給 出查詢超時事件.假設

41、從機接收查詢,發(fā)現有 LRC或CRC通訊錯誤,并返回響應,此時,依靠主機處理 程序給出查詢超時事件.從機接收查詢,無通訊錯誤,但無法處理如讀不存在的線圈和存放器 時,向主機報告 錯誤的性質.不正常響應信息有 2個與正常響應不相同的區(qū)域:功能代碼區(qū):正常響應時,從機的響應功能代碼區(qū),帶原查詢的功能代碼.所有功能代 碼的MSB 0其值低于80H.不正常響應時,從機把功能代碼的MSB置為1,使功能代碼值大于80H,高于正常響應的值.這樣,主機應用程序能識別不正常響應事件,能檢查不正 常代碼的數據區(qū).數據區(qū):正常響應中,數據區(qū)含有 按查詢要求給出的數據或統計值,在不正常響應 中,數據區(qū)為一個不正常代碼

42、,它說明從機產生不正常響應的條件和原因.例:主機發(fā)出查詢,從機不正常響應.為十六進制數據.查詢:AddrFunDO startDO startDO #ofDO #ofCRC16CRC16reg hireg loregs hiregs loHiLo0AH01H04HA1H00H01HXXHXXH響應不正?;蚶釧ddrFunException CodeCRC16 HiCRC16 Lo0AH81H二02HXXHXXH圖3 -1 .不正常信息幀格式上例中,從機設備地址100AH,讀線圈狀態(tài)的功能代碼01,主機請求線圈狀態(tài)的地址為124504A1H.注意:只讀一個指定線圈,地址為 0001.假設從機中

43、不存在此線圈地址時,即以不正常代碼02,向主機返回一個不正常響應.說明為不合法地址.表3-3 ModBus的不正常代碼:代碼名稱含義01不合法功能代碼從機接收的是一種不能執(zhí)行功能代碼.發(fā)出查詢命令后,該代 碼指示無程序功能.02不合法數據地址接收的數據地址,是從機不允許的地址.03不合法數據查詢數據區(qū)的值是從機不允許的值.04從機設備故障從機執(zhí)行主機請求的動作時出現不可恢復的錯誤.05確認從機已接收請求處理數據,但需要較長的處理時間,為防止主 機出現超時錯誤而發(fā)送該確認響應.主機以此再發(fā)送一個“查 詢程序完成未決定從機是否已完成處理.06從機設備忙碌從機正忙于處理一個長時程序命令,請求主機在從

44、機空閑時發(fā)送信息.07否認從機不能執(zhí)行查詢要求的程序功能時,該代碼使用十進制13或14代碼,向主機返回一個“不成功的編程請求信息.主 機應請求診斷從機的錯誤信息.08內存奇偶校驗錯 誤從機讀擴展內存中的數據時,發(fā)現有奇偶校驗錯誤,主機按從 機的要求重新發(fā)送數據請求.附錄C: CRC校驗生成程序CRCI單函數如下:unsigned short CRC16(puchMsg, usDataLen)unsigned char *puchMsg ;/*要進行 CR或驗的消息 */unsigned short usDataLen ;/*消息中字節(jié)數 */(unsigned char uchCRCHi =

45、0xFF ; /*高 CRC節(jié)初始化 */unsigned char uchCRCLo = 0xFF ; /*低 CRC字節(jié)初始化 */unsigned ulndex ;/* CRC 循環(huán)中的索引 */ while (usDataLen-) /*傳輸消息緩沖區(qū) */(ulndex = uchCRCHi A *puchMsgg+ ; /* 計算 CRC */ uchCRCHi = uchCRCLo a auchCRCHiuIndex; uchCRCLo = auchCRCLouIndex;)return (uchCRCHi << 8 | uchCRCLo); )/* CRC高位字節(jié)值

46、表*/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, 0x8

47、0, 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

48、,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, 0x4

49、1,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

50、, 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低

51、位字節(jié)值表*/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, 0x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論