MODBUS通訊協(xié)議_第1頁
MODBUS通訊協(xié)議_第2頁
MODBUS通訊協(xié)議_第3頁
MODBUS通訊協(xié)議_第4頁
MODBUS通訊協(xié)議_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、modbus通訊協(xié)議 目錄1.協(xié)議簡介42.接口方式43.協(xié)議格式43.1.rtu模式43.2.ascii模式:53.3.字符的連續(xù)傳輸53.4.幀類型63.4.1.請求幀63.4.2.應(yīng)答幀73.4.3.錯誤幀三種74.功能碼描述74.1.modbus功能碼74.2.元件的尋址方式描述74.3.錯誤代碼描述95.數(shù)據(jù)和控制碼的具體描述105.1.讀取線圈狀態(tài)(0x01 read coil status)105.2.讀取離散量輸入狀態(tài)(0x02 read input status)105.3.讀取寄存器(0x03 read holding registers)115.4.強置(寫)單線圈(0x

2、05 force single coil)115.5.預(yù)置(寫)單寄存器(0x06 preset single register)125.6.回送診斷校驗125.6.1.請求幀返回135.6.2.重新啟動通信選項135.6.3.從機進(jìn)入listen only 模式135.6.4.清計數(shù)器和診斷寄存器145.6.5.返回總線報文計數(shù)145.6.6.crc錯誤計數(shù)值155.6.7.返回從站異常差錯計數(shù)155.6.8.返回從站報文計數(shù)155.6.9.返回從站無響應(yīng)計數(shù)165.6.10.從站收到字符超限計數(shù)值165.7.強置(寫)多線圈(0x0f hex )force multiple coils17

3、5.8.預(yù)置(寫)多寄存器(10 hex) preset multiple registers175.9.故障響應(yīng)幀(0x80+功能碼)175.10.modbus通信控制舉例185.10.1.讀取雙字元件的處理185.10.2.讀取long int類型數(shù)據(jù)的處理195.10.3.對元件讀取的處理195.11.對廣播的描述201. 協(xié)議簡介modbus 協(xié)議是應(yīng)用于控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。本規(guī)范主要描述了modbus協(xié)議在gcm中的實現(xiàn)。通訊采用應(yīng)答方式,由主機發(fā)起請求,從機執(zhí)行請求并且應(yīng)答。gcm作為從

4、機通過地址設(shè)置加以區(qū)分, gcm系列plc自己組網(wǎng)時,最多允許30個從站,并且從機可設(shè)置地址范圍為131。gcm系列plc作為主站與其他設(shè)備(做從站)組網(wǎng),沒有地址范圍限制,但也最多允許30個從站。gcm系列plc支持廣播方式,廣播地址為00。2. 接口方式rs485或rs232接口:異步,半雙工。默認(rèn)數(shù)據(jù)格式: 8位數(shù)據(jù)位、偶校驗、一位停止位,19200 bps,rtu??稍O(shè)置為38,400波特率、19,200 bps、9,600 bps、4,800 bps、2,400 bps、1,200 bps;最高可設(shè)置波特率為38,400bps。數(shù)據(jù)域:支持2252個字節(jié)(asii模式)、252字節(jié)(

5、rtu模式)gcm系列plc有兩個通信口,其通信口0(也作為編程口)支持modbus從站,通信口1支持modbus主站和從站(可有后臺軟件設(shè)置)。3. 協(xié)議格式3.1. rtu模式起始(至少3.5個字符空閑)從機地址功能代碼數(shù)據(jù)crc高字節(jié)crc低字節(jié)結(jié)束(至少3.5個字符空閑)消息發(fā)送至少要以3.5個字符時間的停頓間隔開始。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標(biāo)定了消息的結(jié)束。一個新的消息可在此停頓后開始。整個消息幀必須作為一連續(xù)的流轉(zhuǎn)輸。如果在幀完成之前兩個字符間有超過1.5個字符時間的停頓時間,認(rèn)為幀錯誤,停止接收,清緩沖,直到通信主循環(huán)中,清錯誤標(biāo)志(與plc寄存器無

6、關(guān)),重新啟動接收。也就是要保證兩個幀間的間隔至少大于3.5個字符的時間,3.5個字符的時間與具體的通信波特率有關(guān),計算方法如下:假如通信波特率為19200,那么1.5個字符間隔 = 1/19200 *11*1.5*1000=0.86ms,3.5個字符間隔 = 1/19200 *11*3.5*1000=2ms。下面是請求幀為讀取1號機的002參數(shù)的數(shù)據(jù)幀:地址功能碼寄存器地址讀取字?jǐn)?shù)校驗和0x010x030x000x020x000x010x250xca下面是為1號機的響應(yīng)幀:地址功能碼應(yīng)答字節(jié)數(shù)寄存器內(nèi)容校驗和0x010x030x000x020x130x880xe90x5c3.2. ascii

7、模式:起始字符0x3a從機地址功能碼數(shù)據(jù)域lrc高字節(jié)lrc低字節(jié)結(jié)束字符0dh,0ahascii方式下:幀頭為“0x3a”,幀尾為”0x0d”0x0a”。消息中字符間發(fā)送的時間間隔最長不能超過1秒,否則接收的設(shè)備將認(rèn)為傳輸錯誤。在ascii方式下,數(shù)據(jù)字節(jié)全部以ascii碼方式發(fā)送,先發(fā)送高4位位元組,然后發(fā)送低4位位元組。例如:01,會傳輸30,31兩個ascii字符。此時數(shù)據(jù)采用lrc校驗,校驗涵蓋從從機地址到數(shù)據(jù)的信息部分。校驗和等于所有參與校驗數(shù)據(jù)的字符和(舍棄進(jìn)位位)的補碼+1。ascii方式modbus數(shù)據(jù)幀舉例如下:寫入4000(0xfa0)到從機1的內(nèi)部寄存器002如下表:l

8、rc校驗=(01+06+00+02+0x0f+0xa0)的補碼=0x48幀頭地址功能碼寄存器地址寫入內(nèi)容lrc校驗幀尾字符:010600020fa048crlfascii3a30313036303030313046413034380d0a地址域消息幀的地址域包含兩個字符(ascii)或8bit(rtu)。主設(shè)備通過將要聯(lián)絡(luò)的從設(shè)備的地址放入消息中的地址域來選通從設(shè)備。當(dāng)從設(shè)備發(fā)送回應(yīng)消息時,它把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個設(shè)備作出回應(yīng)。地址0是用作廣播地址,以使所有的從設(shè)備都能認(rèn)識。3.3. 字符的連續(xù)傳輸 當(dāng)消息在標(biāo)準(zhǔn)的modbus系列網(wǎng)絡(luò)傳輸時,每個字符或字節(jié)以如下

9、方式發(fā)送(從左到右): 最低有效位.最高有效位 ascii傳輸模式:采用10位傳輸,一定是7位的數(shù)據(jù)位,位序如下.有奇偶校驗 只能1個停止位啟始位1234567奇偶位停止位無奇偶校驗 必須是2個停止位啟始位1234567停止位停止位圖4. 位順序(ascii) rtu傳輸模式,采用11位傳輸,一定是8位數(shù)據(jù)位,位的序列是: 有奇偶校驗 啟始位12345678奇偶位停止位無奇偶校驗 啟始位12345678停止位停止位3.4. 幀類型modbus的幀結(jié)構(gòu)分為三種,請求幀、應(yīng)答幀、錯誤幀三種。主站的詢問可能有以下幾種情況:(1) 從站收到了無通訊錯誤的請求,并進(jìn)行正常處理,從站返回應(yīng)答(正常幀)(2

10、) 從站收到的請求,但有通訊錯誤,則不進(jìn)行返回,主站認(rèn)為超時(3) 從站收到了無通訊錯誤的請求,但不能處理這一通訊請求。則返回錯誤幀3.4.1. 請求幀功能代碼數(shù)據(jù)3.4.2. 應(yīng)答幀功能代碼數(shù)據(jù)功能碼域復(fù)制請求幀的功能碼3.4.3. 錯誤幀三種功能代碼錯誤代碼功能碼是截獲搜請求幀的功能碼0x80 4. 功能碼描述4.1. modbus功能碼我們支持的功能碼如下:功能碼名稱作用協(xié)議支持0x01讀取線圈狀態(tài)取得一組邏輯線圈的當(dāng)前狀態(tài)(on/off)0x 02讀取輸入狀態(tài)取得一組開關(guān)輸入的當(dāng)前狀態(tài)(on/off)0x 03讀取寄存器在一個或多個寄存器中取得當(dāng)前的二進(jìn)制值0x 05強置(寫)單線圈寫

11、一個邏輯線圈的通斷狀態(tài)0x 06預(yù)置(寫)單寄存器把具體二進(jìn)值裝入一個數(shù)據(jù)寄存器0x 08回送診斷校驗把診斷校驗報文送從機,以對通信處理進(jìn)行評鑒0x0f強置(寫)多線圈強置(寫)一串連續(xù)邏輯線圈的通斷0x10預(yù)置(寫)多寄存器把具體的二進(jìn)制值裝入一串連續(xù)的寄存器4.2. 元件的尋址方式描述位元件的尋址0000100256 y0y377 (discrete output)按八進(jìn)制存儲(y0-y7,y10-y17)0120101456 x0x377 (discrete input) 按八進(jìn)制存儲0200104000 m0m1999 (discrete m relay) 0440104656 sm0

12、sm255 (discrete m relay)0600106992 s0s991 (discrete s relay) 0800108256 t0t255 (status of t0t255) 0920109456 c0c255 (status of c0c255) 離散量輸入的尋址(針對x位元件)00001-00256字元件的尋址0000108000 d0d7999 0800108256 sd0sd255 0850108516 z0z150900109256 t0t255 (current value of t0t255) 0950109700 c0c199 (current value

13、of c0c199,16-bit) 0970109812 c200c255 (current value of c200c255,32-bit) 以上的地址是面向用戶地址,例如觸摸屏,輸入邏輯地址1,對地址0尋址(發(fā)送按照協(xié)議地址0發(fā)送);但是當(dāng)用戶使用gcm系列的plc作主站,需要自己組織發(fā)送的數(shù)據(jù)報文,那么用戶需要輸入實際的協(xié)議地址,例如用戶需要讀取y0,y0的協(xié)議地址是0,用戶需要組的幀01 01 00 00 00 01,第一個01是地址(可設(shè)的),第二個01功能碼,接下來的00 00表示起始地址(y0的地址),00 01是讀取的個數(shù)1個。(1)讀寫元件功能碼和與內(nèi)存映射:功能碼功能碼名

14、稱modicon數(shù)據(jù)地址可操作元件類型注釋01讀線圈0:xxxxy、x、m、sm、s、t、c讀位02讀離散量輸入1:xxxxx讀位03讀保存寄存器4:xxxxd、sd、z、t、c讀字05寫單個線圈0:xxxxy、m、sm、s、t、c寫位06寫單個寄存器4:xxxxd、sd、z、t、c寫字15寫多個線圈0:xxxxy、m、sm、s、t、c寫位16寫多個寄存器4:xxxxd、sd、z、t、c寫字注:0表示線圈,1表示離散量輸入,4表示寄存器,xxxx表示范圍1-9999,每一種類型有獨立的邏輯地址范圍就是1-9999(協(xié)議地址是從0開始的),0、1、4并不具備物理上的意義,不參加實際的尋址。用戶不

15、應(yīng)該使用05、15功能碼對x元件寫入,如果用戶執(zhí)行了這樣的操作,即使范圍和數(shù)據(jù)都是允許的,系統(tǒng)也不會執(zhí)行任何操作。(2)plc元件與modbus傳輸中的協(xié)議地址的對應(yīng)關(guān)系:元件類型物理元件協(xié)議地址支持的功能碼注釋yy0-y377(八進(jìn)制)共256點0000-025501、05、15輸出的狀態(tài)xx0-x377(八進(jìn)制)共256點1200-014550000-025501、05、1502輸入的狀態(tài),支持兩種地址mm0-m19992000-399901、05、15smsm0-sm2554400-465501、05、15ss0-s9916000-699101、05、15tt0-t2558000-825

16、501、05、15t元件的狀態(tài)cc0-c2559200-945501、05、15c元件的狀態(tài)dd0-d79990000-799903、06、16sdsd0-sd2558000-825503、06、16zz0-z158500-851503、06、16tt0-t2559000-925503、06、16t元件的當(dāng)前值cc0-c1999500-969903、06、16c元件(word)的當(dāng)前值cc200-c2559700-981103、16c元件(dword)的當(dāng)前值注:協(xié)議地址與modicon的數(shù)據(jù)的邏輯地址有對應(yīng)關(guān)系,協(xié)議地址是從0開始,modicon的數(shù)據(jù)的邏輯地址是從1開始的,也就是說協(xié)議地址

17、+1=modicon的數(shù)據(jù)的邏輯地址,例如:m0協(xié)議地址是2000,它對應(yīng)的modicon的數(shù)據(jù)的邏輯地址是0:2001,在實際對m0的讀寫是通過協(xié)議地址完成,例如對m2000元件的讀取幀(主站發(fā)出):01 01 07 d0 00 01 fd 4701代表站號;01代表功能碼;07 d0 代表起始地址,07d0的十進(jìn)制為2000;00 01 代表讀取的元件個數(shù);fd 47 是crc校驗碼;特別注意:對sd、sm的寫入是要看sd、sm的讀寫屬性(參看編譯規(guī)約),如果該特殊元件不是可寫入的,從站對該報文不作處理,但會返回正確的應(yīng)答。4.3. 錯誤代碼描述異常代碼異常代碼意義實現(xiàn)0x01非法功能碼。

18、0x02非法寄存器地址。0x03非法數(shù)據(jù)。5. 數(shù)據(jù)和控制碼的具體描述5.1. 讀取線圈狀態(tài)(0x01 read coil status)讀取從站的位元件的狀態(tài),不支持廣播。最多支持2000個位元件。參考軟元件的地址劃分,每次讀取的元件類型為1類,例如不能在一幀中將x和y元件(兩種類型)一起讀回來;讀取該類軟元件的地址和數(shù)據(jù)范圍不能超過協(xié)議中規(guī)定的范圍,例如:y元件的協(xié)議地址范圍00000255( y0y377),如果讀取的起始地址是1,讀取的元件個數(shù)是256,則會返回地址錯誤(異常碼02),因為從1起始的y元件只有255個;讀取的起始地址是0,讀取的元件個數(shù)是257,則會返回數(shù)據(jù)錯誤(異常碼

19、03),因為讀取元件的個數(shù)超過了256,實際只定義了256個y元件;讀取的起始地址為0,讀取元件的個數(shù)是256則會返回256個元件的狀態(tài);而在讀取m元件時,m元件的協(xié)議地址范圍是20003999(m0m1999),如果讀取的起始地址是2000,那么讀取的元件個數(shù)是2000個就會返回2000個m元件的狀態(tài)。也就是必須保證讀取的元件是實際定義的(在范圍內(nèi))。(1) 請求幀 addressfunction code(01h)起始地址元件個數(shù)校驗碼(crc或lrc)hlhl(2)響應(yīng)幀如果讀取的地址不是8的倍數(shù),剩下的位由0填充(由高位開始填充)。addressfunction code(01h)nu

20、mber of byte read讀取的元件個數(shù)(字節(jié)數(shù))(n)read data讀取的數(shù)據(jù)no.1 read data讀取的數(shù)據(jù)no.n校驗碼(crc或lrc)b7 b6b5b4 b3b2 b1 b05.2. 讀取離散量輸入狀態(tài)(0x02 read input status)讀取從站的位元件的狀態(tài),不支持廣播。最多支持256個位元件(目前的型號只定義256個x元件)。(2) 請求幀 addressfunction code(02h)起始地址元件個數(shù)校驗碼(crc或lrc)hlhl(2)響應(yīng)幀如果讀取的地址不是8的倍數(shù),剩下的位由0填充(由高位開始填充)。addressfunction cod

21、e(02h)number of byte read讀取的元件個數(shù)(字節(jié)數(shù))(n)read data讀取的數(shù)據(jù)no.1 read data讀取的數(shù)據(jù)no.n校驗碼(crc或lrc)b7 b6b5b4 b3b2 b1 b05.3. 讀取寄存器(0x03 read holding registers)讀取寄存器是讀取從站的數(shù)據(jù)(字)寄存器值,(最多可以有125個數(shù)據(jù)寄存器)。不支持廣播。(1) 請求幀 addressfunction code(03h)起始地址元件個數(shù)校驗碼(crc或lrc)hlhl(2)響應(yīng)幀addressfunction code(03h)number of byte read讀

22、取的元件個數(shù)(字節(jié)數(shù))(n)read data讀取的數(shù)據(jù)no.1 read data讀取的數(shù)據(jù)no.n校驗碼(crc或lrc)hlhl5.4. 強置(寫)單線圈(0x05 force single coil)強置(寫)單線圈是向從站寫入位元件值,與編程協(xié)議的強制不同。允許廣播(broadcast),即寫入所有從站的相同元件。最多支持1個位元件。請求幀 addressfunction code(05h)起始地址寫入的元件值校驗碼(crc或lrc)hlhl注:寫入元件的值為0xff00(on,1)或者0x0000(off,0)(2)響應(yīng)幀響應(yīng)幀是請求幀的重復(fù)。addressfunction cod

23、e(05h)起始地址寫入的元件值校驗碼(crc或lrc)hlhl5.5. 預(yù)置(寫)單寄存器(0x06 preset single register)強置(寫)單寄存器是向從站寫入字元件值,與編程協(xié)議的強制不同。允許廣播(broadcast),即寫入所有從站的相同元件。最多支持1個字元件。請求幀 addressfunction code(06h)起始地址寫入的元件值校驗碼(crc或lrc)hlhl(2)響應(yīng)幀響應(yīng)幀是請求幀的重復(fù)。addressfunction code(06h)起始地址寫入的元件值校驗碼(crc或lrc)hlhl5.6. 回送診斷校驗回送診斷校驗,可以得到診斷寄存器并得到通訊

24、錯誤信息。診斷碼0x00return query data請求幀返回0x 01restart comm option重啟通信選項0x 04force listen only mode從機進(jìn)入listen only 模式0x0a clear ctrs and diagnostic reg清除計數(shù)器和診斷寄存器0x0breturn bus message count返回總線報文計數(shù)0x0creturn bus comm. error count返回總線crc錯誤計數(shù)0x0dreturn bus exception error cnt返回從站異常差錯計數(shù)0x0ereturn slave messag

25、e count返回從站報文計數(shù)0x0freturn slave no response cnt返回從站無響應(yīng)計數(shù)0x12return bus char. overrun cnt返回總線字符超限計數(shù)5.6.1. 請求幀返回(1) 請求幀 addressfunction code(0x08h)功能字碼任意字符校驗碼(crc或lrc)(0x00h)(0x00h)hl(2)響應(yīng)幀將請求幀原樣返回addressfunction code(0x08h)功能字碼任意字符校驗碼(crc或lrc)(0x00h)(0x00h)hl注:作為主站能發(fā)送的任意字符長度為2,作為從站接收任意字符只受幀長度的限制。5.6.

26、2. 重新啟動通信選項當(dāng)收到該幀時,可以將plc帶出只聽模式。(支持廣播幀)(1) 請求幀當(dāng)數(shù)據(jù)域正常為0x00 00或者0xff 00。 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)0x00h0x01hhl(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)0x00h0x01hhl5.6.3. 從機進(jìn)入listen only 模式從站進(jìn)入listen only模式,命令都不執(zhí)行,也不作回應(yīng),從站只認(rèn)重新啟動通信選項命令,并且當(dāng)收到該命令后,從站進(jìn)入在線模式。(支持廣播幀)(1) 請求幀 add

27、ressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x04h)0x00h0x00h(2)響應(yīng)幀無返回5.6.4. 清計數(shù)器和診斷寄存器清除所有的計數(shù)器(支持廣播幀)。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0ah)0x00h0x00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0ah)0x00h0x00h5.6.5. 返回總線報文計數(shù)記錄從上一次啟動、清除計數(shù)器或加電之后,從站

28、在到的所有主站發(fā)出的報文總數(shù),不包括crc錯誤的報文。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0bh)0x00h0x00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0bh)hl5.6.6. crc錯誤計數(shù)值記錄從上一次啟動、清除計數(shù)器或加電之后,從站在到的crc錯誤的數(shù)量。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0ch)0x00h0x00h

29、(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0ch)hl5.6.7. 返回從站異常差錯計數(shù)記錄從上一次啟動、清除計數(shù)器或加電之后,從站檢測到的異常差錯數(shù)量,也包括廣播報文中的檢測到的差錯。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0dh)0x00h0x00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0dh)hl5.6.8. 返回從站報文計數(shù)記錄從上一

30、次啟動、清除計數(shù)器或加電之后,從站收到的對從站尋址的報文數(shù)目。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0eh)0x00h0x00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0eh)hl5.6.9. 返回從站無響應(yīng)計數(shù)記錄從上一次啟動、清除計數(shù)器或加電之后,從站沒有返回的報文數(shù)量。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0fh)0x00h0x

31、00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x0fh)hl5.6.10. 從站收到字符超限計數(shù)值記錄從上一次啟動、清除計數(shù)器或加電之后,由于收到的字符超限導(dǎo)致無法尋址的的報文數(shù)量。(1) 請求幀 addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x12h)0x00h0x00h(2)響應(yīng)幀addressfunction code(0x08h)功能字碼數(shù)據(jù)域校驗碼(crc或lrc)(0x00h)(0x12h)hl5.7. 強置(寫)多線圈(0x0f hex

32、 )force multiple coils最多能寫1968個(0x07b0),根據(jù)元件的定義范圍有變化。支持廣播。(1) 請求幀 addressfunction code(0fh)起始地址元件個數(shù)字節(jié)數(shù)(n)寫入元件值no.1 寫入元件值no.n校驗碼(crc或lrc)hlhlb7 b6b5b4 b3b2 b1 b0(2)響應(yīng)幀addressfunction code(0fh)起始地址元件個數(shù)校驗碼(crc或lrc)hlhl5.8. 預(yù)置(寫)多寄存器(10 hex) preset multiple registers最多寫120個寄存器(0x78)支持廣播。(1) 請求幀 addressf

33、unction code(0x10h)起始地址元件個數(shù)字節(jié)數(shù)(n)寫入元件值no.1 寫入元件值no.n校驗碼(crc或lrc)hlhlhlhl(2)響應(yīng)幀addressfunction code(0x10h)起始地址元件個數(shù)校驗碼(crc或lrc)hlhl5.9. 故障響應(yīng)幀(0x80+功能碼)響應(yīng)幀:addressfunction code(功能碼)錯誤代碼(見前)校驗碼(crc或lrc)功能碼是截獲搜請求幀的功能碼0x80指令的錯誤代碼:異常代碼異常代碼意義0x01非法功能碼。0x02非法寄存器地址。0x03數(shù)據(jù)個數(shù)錯誤。5.10. modbus通信控制舉例modbus從站不主動發(fā)送任何

34、報文,只有接收到對本地的信息后才根據(jù)具體情況看是否響應(yīng)主站的報文。從站僅支持modbus功能碼01,02,03,05,06,08,15,16,其余的均以不合法的功能碼響應(yīng)(除廣播幀)。5.10.1. 讀取雙字元件的處理c元件的當(dāng)前計數(shù)值為字元件或雙字元件,c200-c255為雙字元件,對c200-c255的讀寫也是通過讀寫寄存器的功能碼(03、16)來完成,每兩個寄存器的地址對應(yīng)一個c雙字元件,讀寫時只能成對的讀取寄存器。例如讀取c200-c202三個c雙字元件rtu幀:01 03 25 e4 00 06 8e f325 e4 為起始地址970000 06 表示讀取6個元件8e f3 為校驗碼

35、返回的數(shù)據(jù)中9700 9791 兩個地址表示c200的內(nèi)容,9700為高16bit,9701為低16bit。在讀取雙字元件時如果讀取的開始地址不是偶數(shù),會返回錯誤代碼非法地址,如果讀取的個數(shù)不是偶數(shù),會返回錯誤代碼非法的數(shù)據(jù)。例如:主站發(fā)送:01 03 25 e5 00 04 5e f2 主站發(fā)送讀取開始地址是25 e5(十進(jìn)制9701)的四個字元件,從站響應(yīng):01 83 02 c0 f1從站應(yīng)答:非法的數(shù)據(jù)地址從站發(fā)送:01 03 25 e4 00 05 ce f2主站讀取開始地址是25e4的5個字元件從站應(yīng)答:01 83 03 01 31從站返回非法的數(shù)據(jù)5.10.2. 讀取long in

36、t類型數(shù)據(jù)的處理plc元件的存儲方式,一個long int 類型,可能存在兩個d元件內(nèi),例如:d3,d4存一個long int型的數(shù),emerson plc認(rèn)為d3存儲的是高16位,d4存儲的是低16位,當(dāng)主站通過modbus讀取long int數(shù)據(jù)時,讀回數(shù)據(jù)后也應(yīng)該按照emerson plc對long int的存儲原則重組32位的數(shù)據(jù)。float的存儲原則等同于long int的存儲原則。5.10.3. 對元件讀取的處理除了08功能碼,其他支持的功能碼都是對元件讀寫的,原則上講最多允許一幀讀2000個位元件,寫1968個位元件 ,讀取125個字元件,寫120個字元件。但由于實際的協(xié)議地址對不同的元件是分開的,不連續(xù)(例如y377的協(xié)議地址是255,x0的協(xié)議地址是1200),因此在對元件的讀寫操作時,一次讀取的元件只能是一種類型的元件,而讀取元件的最多數(shù)目也與實際定義的元件個數(shù)有關(guān)系,例如讀取y元件,y0-y377,協(xié)議地址范圍0-255,對應(yīng)的modicon的數(shù)據(jù)的邏輯地址是1-256,在讀取y元件時最多允許讀取256個元件,舉例如下:注:從站的地址

溫馨提示

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

評論

0/150

提交評論