免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Modbus 通訊協(xié)議 (RTU傳輸模式)
第一章          Modbus協(xié)議簡介
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。
此協(xié)議定義了一個控制器能認(rèn)識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。
當(dāng)在一Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯誤檢測的方法。
協(xié)議在一根通訊線上使用應(yīng)答式連接(半雙工),這意味著在一根單獨的通訊線上信號沿著相反的兩個方向傳輸。首先,主計算機(jī)的信號尋址到一臺唯一的終端設(shè)備(從機(jī)),然后,在相反的方向上終端設(shè)備發(fā)出的應(yīng)答信號傳輸給主機(jī)。 協(xié)議只允許在主計算機(jī)和終端設(shè)備之間,而不允許獨立的設(shè)備之間的數(shù)據(jù)交換,這就不會在使它們初始化時占據(jù)通訊線路,而僅限于響應(yīng)到達(dá)本機(jī)的查詢信號。
1. 1  傳輸方式
傳輸方式是一個信息幀內(nèi)一系列獨立的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限規(guī)則,以RTU模式在Modbus總線上進(jìn)行通訊時,信息中的每8位字節(jié)分成2個4位16進(jìn)制的字符,每個信息必須連續(xù)傳輸下面定義了與Modebus 協(xié)議– RTU方式相兼容的傳輸方式。
代碼系統(tǒng)
·   8位二進(jìn)制,十六進(jìn)制數(shù)0...9,A...F
·   消息中的每個8位域都是一個兩個十六進(jìn)制字符組成
每個字節(jié)的位
·   1個起始位
·   8個數(shù)據(jù)位,最小的有效位先發(fā)送
·   1個奇偶校驗位,無校驗則無
·   1個停止位(有校驗時),2個Bit(無校驗時)
錯誤檢測域
·   CRC(循環(huán)冗長檢測)
1.2      協(xié)議
當(dāng)信息幀到達(dá)終端設(shè)備時,它通過一個簡單的“口”進(jìn)入尋址到的設(shè)備,該設(shè)備去掉數(shù)據(jù)幀的“信封”(數(shù)據(jù)頭),讀取數(shù)據(jù),如果沒有錯誤,就執(zhí)行數(shù)據(jù)所請求的任務(wù),然后,它將自己生成的數(shù)據(jù)加入到取得的“信封”中,把數(shù)據(jù)幀返回給發(fā)送者。返回的響應(yīng)數(shù)據(jù)中包含了以下內(nèi)容:終端從機(jī)地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請求數(shù)據(jù)(Data)和一個校驗碼(Check)。發(fā)生任何錯誤都不會有成功的響應(yīng)。
1.2.1          信息幀
Address
Function
Data
Check
8-Bits
8-Bits
N x 8-Bits
16-Bits
圖 1 – 1 . 信息幀格式
特注:Modbus信息幀所允許的最大長度為256個字節(jié),即N的范圍是大于等于零且小于等于252(N{0,252})。
即,所有的數(shù)據(jù)一共256個,數(shù)據(jù)剩下253個。
1.2.2          地址(Address)域
信息幀地址域(信息地址)在幀的開始部分,由8位組成,有效的從機(jī)設(shè)備地址范圍0-247(十進(jìn)制),各從機(jī)設(shè)備的尋址范圍為1-247。主機(jī)把從機(jī)地址放入信息幀的地址區(qū),并向從機(jī)尋址。從機(jī)響應(yīng)時,把自己的地址放入響應(yīng)信息的地址區(qū),讓主機(jī)識別已作出響應(yīng)的從機(jī)地址。
地址0為廣播地址,所有從機(jī)均能識別。當(dāng)Modbus協(xié)議用于高級網(wǎng)絡(luò)時,則不允許廣播或其它方式替代。
1.2.3          功能(Function)域
信息幀功能域代碼告訴了被尋址到的終端執(zhí)行何種功能。有效碼范圍1-225(十進(jìn)制) ,有些代碼是適用于所有控制器,有些適應(yīng)于某種控制器,還有些保留以備后用。有關(guān)功能代替碼的全部內(nèi)容見附錄A。
當(dāng)主機(jī)向從句發(fā)送信息時,功能代碼向從機(jī)說明應(yīng)執(zhí)行的動作。如讀一組離散式線圈或輸入信號的ON/OFF狀態(tài),讀一組寄存器的數(shù)據(jù),讀從機(jī)的診斷狀態(tài),寫線圈(或寄存器),允許下截、記錄、確認(rèn)從機(jī)內(nèi)的程序等。當(dāng)從機(jī)響應(yīng)主機(jī)時,功能代碼可說明從機(jī)正常響應(yīng)或出現(xiàn)錯誤(即不正常響應(yīng)),正常響應(yīng)時,從句簡單返回原始功能代碼;不正常響應(yīng)時,從機(jī)返回與原始代碼相等效的一個碼,并把最高有效位設(shè)定為“1”。
如,主機(jī)要求從機(jī)讀一組保持寄存器時,則發(fā)送信息的功能碼為:
0000 0011 (十六進(jìn)制03)
若從機(jī)正確接收請求的動作信息后,則返回相同的代碼值作為正常響應(yīng)。發(fā)現(xiàn)錯時,則返回一個不正常響信息:
1000 0011(十六進(jìn)制83)
從機(jī)對功能代碼作為了修改,此外,還把一個特殊碼放入響應(yīng)信息的數(shù)據(jù)區(qū)中,告訴主機(jī)出現(xiàn)的錯誤類型和不正常響應(yīng)的原因,不正常響應(yīng)見附錄B。主機(jī)設(shè)備的應(yīng)用程序負(fù)責(zé)處理不正常響應(yīng),典型處理過程是主機(jī)把對信息的測試和診斷送給從機(jī),并通知操作者。表 1 – 1列出了所有設(shè)備常用的功能碼、它們的意義及它們的初始功能。
表 1 – 1 常用功能碼
代碼
名稱
作用
01
讀取線圈狀態(tài)
取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF)
02
讀取輸入狀態(tài)
取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)
03
讀取保持寄存器
在一個或多個保持寄存器中取得當(dāng)前的二進(jìn)制值
04
讀取輸入寄存器
在一個或多個輸入寄存器中取得當(dāng)前的二進(jìn)制值
05
強(qiáng)置單線圈
強(qiáng)置一個邏輯線圈的通斷狀態(tài)
06
預(yù)置單寄存器
放置一個特定的二進(jìn)制值到一個單寄存器中
07
讀取異常狀態(tài)
取得8個內(nèi)部線圈的通斷狀態(tài)
15
強(qiáng)置多線圈
強(qiáng)置一串連續(xù)邏輯線圈的通斷
16
預(yù)置多寄存器
放置一系列特定的二進(jìn)制值到一系列多寄存器中
17
報告從機(jī)標(biāo)識
可使主機(jī)判斷編址從機(jī)的類型及該從機(jī)運行指示燈的狀態(tài)
1.2.4          數(shù)據(jù)域
數(shù)據(jù)域包含了終端執(zhí)行特定功能所需要的數(shù)據(jù)或者終端響應(yīng)查詢時采集到的數(shù)據(jù)。這些數(shù)據(jù)的內(nèi)容可能是數(shù)值、參考地址或者極限值。他由數(shù)據(jù)區(qū)有2個16進(jìn)制的數(shù)據(jù)位(2的8次方256),數(shù)據(jù)范圍為00-FF(16進(jìn)制)。例如:功能域碼告訴終端讀取一個寄存器,數(shù)據(jù)域則需要指明從哪個寄存器開始及讀取多少個數(shù)據(jù),內(nèi)嵌的地址和數(shù)據(jù)依照類型和從機(jī)之間的不同能力而有所不同。若無錯誤出現(xiàn),從機(jī)向主機(jī)的響應(yīng)信息中包含了請求數(shù)據(jù),若有錯誤出現(xiàn),則數(shù)據(jù)中有一個不正常代碼,使主機(jī)能判斷并作出下一步的動作。數(shù)據(jù)區(qū)的長度可為“零”以表示某類信息。
1.2.5          錯誤校驗域
該域允許主機(jī)和終端檢查傳輸過程中的錯誤。有時,由于電噪聲和其它干擾,一組數(shù)據(jù)在從一個設(shè)備傳輸?shù)搅硪粋€設(shè)備時在線路上可能會發(fā)生一些改變,出錯校驗?zāi)軌虮WC主機(jī)或者終端不去響應(yīng)那些傳輸過程中發(fā)生了改變的數(shù)據(jù),這就提高了系統(tǒng)的安全性和效率,出錯校驗使用了16位循環(huán)冗余的方法,即CRC校驗。
錯誤檢測域包含一16Bits值(用兩個8位的字符來實現(xiàn))。錯誤檢測域的內(nèi)容是通過對消息內(nèi)容進(jìn)行循環(huán)冗長檢測方法得出的。CRC域附加在消息的最后,添加時先是低字節(jié)然后是高字節(jié)。故CRC的高位字節(jié)是發(fā)送消息的最后一個字節(jié)。
1.2.6          字符的連續(xù)傳輸
當(dāng)消息在標(biāo)準(zhǔn)的Modbus系列網(wǎng)絡(luò)傳輸時,每個字符或字節(jié)按由左到右的次序方式發(fā)送:
最低有效位(LSB)...最高有效位(MSB)。
位的序列是:
有奇偶校驗
啟始位
1
2
3
4
5
6
7
8
奇偶位
停止位
無奇偶校驗
啟始位
1
2
3
4
5
6
7
8
停止位
停止位
圖 1 –2 .  位順序(RTU)
1.3   錯誤檢測
1、奇偶校驗
用戶可以配置控制器是奇或偶校驗,或無校驗。這將決定了每個字符中的奇偶校驗位是如何設(shè)置的。
如果指定了奇或偶校驗,“1”的位數(shù)將算到每個字符的位數(shù)中(ASCII模式7個數(shù)據(jù)位,RTU中8個數(shù)據(jù)位)。例如RTU字符幀中包含以下8個數(shù)據(jù)位:1 1 0 0 0 1 0 1
整個“1”的數(shù)目是4個。如果便用了偶校驗,幀的奇偶校驗位將是0,便得整個“1”的個數(shù)仍是4個。如果便用了奇校驗,幀的奇偶校驗位將是1,便得整個“1”的個數(shù)是5個。
如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進(jìn)行校驗檢測。代替一附加的停止位填充至要傳輸?shù)淖址麕小?div style="height:15px;">
2、CRC檢測
RTU方式時,采用CRC方法計算錯誤校驗碼,CRC校驗傳送的全部數(shù)據(jù)。它忽略信息中單個字符數(shù)據(jù)的奇偶校驗方法。
循環(huán)冗余校驗(CRC)域占用兩個字節(jié),包含了一個16位的二進(jìn)制值。CRC值由傳送設(shè)備計算出來,然后附加到數(shù)據(jù)幀上,接收設(shè)備在接收數(shù)據(jù)時重新計算CRC值,然后與接收到的CRC域中的值進(jìn)行比較,如果這兩個值不相等,就發(fā)生了錯誤。
CRC開始時先把寄存器的16位全部置成“1”,然后把相鄰2個8位字節(jié)的數(shù)據(jù)放入當(dāng)前寄存器中,只有每個字符的8位數(shù)據(jù)用作產(chǎn)生CRC,起始位,停止位和奇偶校驗位不加到CRC中。
在生成CRC時,每個8位字節(jié)與寄存器中的內(nèi)容進(jìn)行異或,然后將結(jié)果向低位移位,高位則用“0”補(bǔ)充,最低位(LSB)移出并檢測,如果是1,該寄存器就與一個預(yù)設(shè)的固定值進(jìn)行一次異或運算,如果最低位為0,不作任何處理。
上述處理重復(fù)進(jìn)行,知道執(zhí)行完了8次移位操作,當(dāng)最后一位(第8位)移完以后,下一個8位字節(jié)與寄存器材的當(dāng)前值進(jìn)行異或運算,同樣進(jìn)行上述的另一個8次移位異或操作,當(dāng)數(shù)據(jù)幀中的所有字節(jié)都作了處理,生成的最終值就是CRC值。
生成一個CRC的流程為:
1、       預(yù)置一個16位寄存器為0FFFFH(全1),稱之為CRC寄存器。
2、       把數(shù)據(jù)幀中的第一個8位字節(jié)與CRC寄存器中的低字節(jié)進(jìn)行異或運算,結(jié)果存回CRC寄存器。
3、       將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測。
4、       如果最低位為0:重復(fù)第3步(下一次移位)。
如果最低位為1:將CRC寄存器與一個預(yù)設(shè)的固定值(0A001H)進(jìn)行異或運算。
5、       重復(fù)第3步和第4步直到8次移位。這樣處理完了一個完整的八位。
6、       重復(fù)第2步到第5步來處理下一個八位,直到所有的字節(jié)處理結(jié)束。
7、       最終CRC寄存器得值就是CRC的值。
CRC值附加到信息時,低位在先,高位在后。查閱附錄C中的一個實例,它詳細(xì)說明了CRC的校驗。
第二章  Modbus數(shù)據(jù)和控制功能詳解
Modbus信息中的所有數(shù)據(jù)地址以零作為基準(zhǔn),各項數(shù)據(jù)的第一個數(shù)據(jù)地址的編號為0。若無特殊說明在此節(jié)文中用+進(jìn)制值表示,圖中的數(shù)據(jù)區(qū)則用十六進(jìn)制表示。
圖2--1為一個例子,說明了Modbus的查詢信息,圖2--2為正常響應(yīng)的例子,這兩例子中的數(shù)據(jù)均是16進(jìn)制的,也表示了以RTU方式構(gòu)成數(shù)據(jù)幀的方法。
主機(jī)查詢是讀保持寄存器,被請求的從機(jī)地址是06,讀取的數(shù)據(jù)來自地址40108保持寄有器。注意,該信息規(guī)定了寄存器的起始地址為0107 (006BH)。
從機(jī)響應(yīng)返回該功能代碼,說明是正常響應(yīng),字節(jié)數(shù)“Byle count”中說明有多少個8位字節(jié)被返回。它表明了附在數(shù)據(jù)區(qū)中8位字節(jié)的數(shù)量,當(dāng)在緩沖區(qū)組織響應(yīng)信息時,“字節(jié)數(shù)”區(qū)域中的值應(yīng)與該信息中數(shù)據(jù)區(qū)的字節(jié)數(shù)相等。如RTU方式時,63H 用一個字節(jié)(01100011)發(fā)送。8個位為一個單位計算“字節(jié)數(shù)”,它忽略了信息幀用組成的方法。
Addr
Fun
Data start reg hi
Data start reg lo
Data #of regs hi
Data #of regs lo
CRC16
hi
CRC16
lo
06H
03H
00H
6BH
00H
01H
XXH
XXH
圖 2 – 1 Modbus的查詢信息
Addr
Fun
Byte
count
Data1
hi
Data1
Lo
Data 2
hi
Data2
lo
Data3
hi
Data3
lo
CRC16
hi
CRC16
lo
06H
03H
06H
02H
2BH
00H
00H
00H
63H
XXH
XXH
圖 2 – 2 Modbus的響應(yīng)信息
2.1  讀取線圈狀態(tài)(功能碼01)
讀取從機(jī)離散量輸出口(DO,0X類型)的 ON/OFF 狀態(tài),不支持廣播。
查詢
查詢信息規(guī)定了要讀的起始線圈和線圈量,線圈的起始地址為0000H,1-16個線圈的尋址地址分為0000H –0015H(DO1=0000H,DO2=0001H,依此類推)。
圖 2 – 3 的例子是從地址為17的從機(jī)讀取DO1至DO6的狀態(tài)。
Addr
Fun
DO start reg hi
DO start reg lo
DO #of regs hi
DO #of regs lo
CRC16
hi
CRC16
lo
11H
01H
00H
00H
00H
06H
XXH
XXH
圖 2 – 3 讀取線圈狀態(tài)----查詢
響應(yīng)
響應(yīng)信息中的各線圈的狀態(tài)與數(shù)據(jù)區(qū)的每一位的值相對應(yīng),即每個DO占用一位(1 = ON, 0= OFF),第一個數(shù)據(jù)字節(jié)的LSB為查詢中的尋址地址,其他的線圈按順序在該字節(jié)中由低位向高位排列,直至8個為止,下一個字節(jié)也是從低位向高位排例。若返回的線圈數(shù)不是8的倍數(shù),則在最后的數(shù)據(jù)字節(jié)中的剩余位至字節(jié)的最高位全部填0,字節(jié)數(shù)區(qū)說明全部數(shù)據(jù)的字節(jié)數(shù)。
圖2 – 4所示為線圈的輸出狀態(tài)響應(yīng)的實例。
Addr
Fun
Byte count
Data
CRC16  hi
CRC16  lo
11H
01H
01H
2AH
XXH
XXH
數(shù)據(jù)
0
0
0
0
0
0
DO2
DO1
MSB
7
6
5
4
3
2
LSB
圖 2 – 4讀取線圈狀態(tài)----響應(yīng)
2.2  讀取輸入狀態(tài)(功能碼02)
讀取從機(jī)離散量輸入信號(DI,0X類型)的ON/OFF狀態(tài),不支持廣播。
查詢
查詢信息規(guī)定了要讀的輸入起始地址,以及輸入信號的數(shù)量。輸入的起始地址為0000H,1-16個輸入口的地址分別為0-15(DO1=0000H,DO2=0001H,依此類推)。
圖 2 – 5 的例子是從地址為17的從機(jī)讀取DI1到DI16的狀態(tài)。
Addr
Fun
DI start
addr  hi
DI start
addr  lo
DI num
hi
DI num
lo
CRC16
hi
CRC16
lo
11H
02H
00H
00H
00H
10H
XXH
XXH
圖 2 – 5讀取輸入狀態(tài)----查詢
響應(yīng)
響應(yīng)信息中的各輸入口的狀態(tài),分別對應(yīng)于數(shù)據(jù)區(qū)中的每一位值,1 = ON; 0 = OFF,第一個數(shù)據(jù)字節(jié)的LSB為查詢中的尋址地址,其他輸入口按順序在該字節(jié)中由低位向高位排列,直至8個位為止。下一個字節(jié)中的8個輸入位也是從低位到高位排列。若返回的輸入位數(shù)不是8的倍數(shù),則在最后的數(shù)據(jù)字節(jié)中的剩余位直至字節(jié)的最高位全部填零。字節(jié)數(shù)區(qū)說明了全部數(shù)據(jù)的字節(jié)數(shù)。
圖2 – 6 所示為讀數(shù)字輸出狀態(tài)響應(yīng)的實例。
Addr
Fun
Byte count
Data1
Data2
CRC16 hi
CRC16 lo
11H
02H
02H
33H
CCH
XXH
XXH
數(shù)據(jù) 1
DI8
DI7
DI6
DI5
DI4
DI3
DI2
DI1
MSB                                       LSB
數(shù)據(jù) 2
DI16
DI15
DI14
DI13
DI12
DI11
DI10
DI9
MSB                                             LSB
圖 2 – 6讀取輸入狀態(tài)----響應(yīng)
2.3  讀取保持寄存器(功能碼03)
讀取從機(jī)保持寄存器(4X類型)的二進(jìn)制數(shù)據(jù),不支持廣播。
查詢
查詢信息規(guī)定了要讀的保持寄存器起始地址及保持寄存器的數(shù)量,保持寄存器尋址起始地址為0000H,寄存器1-16所對應(yīng)的地址分別為0000H –0015H。
圖2 – 7 的例子是從17號從機(jī)讀3個采集到的基本數(shù)據(jù)U1、U2、U3,U1的地址為0000H, U2的地址為0001H,U3的地址為0002H。
Addr
Fun
Data start
addr  hi
Data start
addr lo
Data #of
regs hi
Data #of
regs lo
CRC16
hi
CRC16
lo
11H
03H
00H
00H
00H
03H
XXH
XXH
圖 2 – 7讀取保持寄存器----查詢
響應(yīng)
響應(yīng)信息中的寄存器數(shù)據(jù)為二進(jìn)制數(shù)據(jù),每個寄存器分別對應(yīng)2個字節(jié),第一個字節(jié)為高位值數(shù)據(jù),第二個字節(jié)為低位數(shù)據(jù)。
圖 2 – 8的例子是讀取U1,U2,U3(U1=03E8H,U2=03E7H,U3=03E9H)的響應(yīng)。
Addr
Fun
Byte
count
Data1
hi
Data1
Lo
Data 2
hi
Data2
lo
Data3
hi
Data3
lo
CRC16
hi
CRC16
lo
11H
03H
06H
03H
E8H
03H
E7H
03H
E9H
XXH
XXH
圖 2 – 8讀取保持寄存器----響應(yīng)
2.4   讀取輸入寄存器(功能碼04)
讀取從機(jī)輸入寄存器(3X類型)中的二進(jìn)制數(shù)據(jù),不支持廣播。
查詢
查詢信息規(guī)定了要讀的寄存器的起始地址及寄存器的數(shù)量,尋止起始地址為0,寄存器1-16所對應(yīng)的地址分別為0000H –0015H。
圖 2 – 9的例子是請求17號從機(jī)的0009寄存器。
Addr
Fun
DO addr
hi
DO addr
lo
Data #of
regs hi
Data #of
regs lo
CRC16
hi
CRC16
lo
11H
04H
00H
08H
00H
01H
XXH
XXH
圖 2 – 9讀取輸入寄存器----查詢
響應(yīng)
響應(yīng)信息中的寄存器數(shù)據(jù)為每個寄存器分別對應(yīng)2個字節(jié),第一個字節(jié)為高位數(shù)據(jù),第二個字節(jié)為低位數(shù)據(jù)。
圖 2 – 10的例子寄存器30009中的數(shù)據(jù)用000AH 2個字節(jié)表示。
Addr
Fun
Byte
count
Data
hi
Data
Lo
CRC16
hi
CRC16
lo
11H
04H
02H
00H
0AH
XXH
XXH
圖 2 – 10讀取輸入寄存器----響應(yīng)
2.5   強(qiáng)置單線圈(功能碼05)
強(qiáng)制單個線圈(DO,0X類型)為ON或OFF狀態(tài),廣播時,該功能可強(qiáng)制所有從機(jī)中同一類型的線圈均為ON或OFF狀態(tài)。
該功能可越過控制器內(nèi)存的保護(hù)狀態(tài)和線圈的禁止?fàn)顟B(tài)。線圈強(qiáng)制狀態(tài)一直保持有效直至下一個控制邏輯作用于線圈為止??刂七壿嬛袩o線圈程序時,則線圈處于強(qiáng)制狀態(tài)。
查詢
查詢信息規(guī)定了需要強(qiáng)制一個單獨線圈的類型,線圈的起始地址為0000H,1-16個線圈的尋址地址分為0000H –0015H(DO1=0000H,DO2=0001H,依此類推)。
由查詢數(shù)據(jù)區(qū)中的一個常量,規(guī)定被請求線圈的ON/OFF狀態(tài), FF00H值請求線圈處于ON狀態(tài),0000H值請求線圈處于OFF狀態(tài),其它值對線圈無效,不起作用。
圖示 2-11的例子是請求17號從機(jī)開DO1的On狀態(tài)。
Addr
Fun
DO addr
hi
DO addr
lo
Value
hi
Value
lo
CRC16
hi
CRC16
lo
11H
05H
00H
00H
FFH
00H
XXH
XXH
圖示 2-11強(qiáng)制單線圈----查詢
響應(yīng)
圖2 – 12所示為對這個命令請求的正常響應(yīng)是在DO狀態(tài)改變以后傳送接收到的數(shù)據(jù)。
Addr
Fun
DO addr
hi
DO addr
lo
Value
hi
Value
lo
CRC16
hi
CRC16
lo
11H
05H
00H
00H
FFH
00H
XXH
XXH
圖示 2-12強(qiáng)制單線圈----響應(yīng)
2.6 預(yù)置單寄存器(功能碼06)
把一個值預(yù)置到一個保持寄存器(4X類型)中,廣播時,該功能把值預(yù)置到所有從機(jī)的相同類型的寄存器中。
該功能可越過控制器的內(nèi)存保護(hù)。使寄存器中的預(yù)置值保持有效。只能由控制器的下一個邏輯信號來處理該預(yù)置值。若控制邏輯中無寄存器程序時,則寄存器中的值保持不變。
查詢
查詢信息規(guī)定了要預(yù)置寄存器的類型,寄存器尋址起始地址為0000H,寄存器1所對應(yīng)的地址為0000H。
圖示 2-13的例子是請求17號從機(jī)0040H.的值為2717。
Addr
Fun
Data start
reg  hi
Data start
reg lo
Value
hi
Value
lo
CRC
hi
CRC
lo
11H
06H
00H
40H
0AH
9DH
XXH
XXH
圖示 2-13預(yù)設(shè)單寄存器----查詢
響應(yīng)
圖2 – 14所示對于預(yù)置單寄存器請求的正常響應(yīng)是在寄存器值改變以后將接收到的數(shù)據(jù)傳送回去。
Addr
Fun
Data start
reg  hi
Data start
reg lo
Value
hi
Value
lo
CRC
hi
CRC
lo
11H
06H
00H
40H
0AH
9DH
XXH
XXH
圖示 2-14預(yù)設(shè)單寄存器----響應(yīng)
2.7讀取異常狀態(tài)(功能碼7)
讀從中機(jī)中8個不正常狀態(tài)線圈的數(shù)據(jù),某些線圈號已在不同型號的控制器中預(yù)定義,而其它的線圈由用戶編程,作為有關(guān)控制器的狀態(tài)信息,如“machine ON/OFF”,“heads retraced”,(縮回標(biāo)題),“safeties satisfied”(安全性滿意),“errorconditions”(存在錯誤條件)或其它用戶定義的標(biāo)志等。該功能碼不支持廣播。
該功能代碼為存取該類信息提供了一種簡單的方法,不正常線圈的類型是已知的(在功能代碼中不需要線圈類型) 預(yù)定義的不正常線圈號如下:
控制器型號                 線圈                 設(shè)定
M84,184/384,584,984           1-8                    用戶定義
484                          257                  電池狀態(tài)
258-264             用戶定義
884                          761                   電池狀態(tài)
762                   內(nèi)存保護(hù)狀態(tài)
763                   R10工況狀態(tài)
764-768         用戶預(yù)定義
查詢
圖示 2-15的例子是請求讀從機(jī)設(shè)備17中的不正常狀態(tài)。
Addr
Fun
CRC16  hi
CRC16  lo
11H
07H
XXH
XXH
圖示 2-15讀取異常狀態(tài)----查詢
響應(yīng)
正常響應(yīng)包含 8 個不正常的線圈狀態(tài),為一個數(shù)據(jù)字節(jié),每個線圈一位。LSB對應(yīng)為最低線圈類型的狀態(tài)。
圖2 – 16所示按查詢要求返回響應(yīng):
Addr
Fun
DO Data
CRC16  hi
CRC16  lo
11H
07H
6DH
XXH
XXH
圖示 2-16讀取異常狀態(tài)----響應(yīng)
該例子中,線圈數(shù)據(jù)為 6DH (二進(jìn)制0110 ,1101),從左到右 (最高位至最低位) 的線圈狀態(tài)分別為: OFF – ON – ON – OFF – ON –ON – OFF – ON。若控制器型號為 984,這些位表示線圈 8 至 1 的狀態(tài);若控制器型號為 484 則表示線圈 264 至 257 的狀態(tài)。
2.8 強(qiáng)置多線圈(功能碼15)
按線圈的順序把各線圈 (DO,0X 類型) 強(qiáng)制成 ON 或 OFF。廣播時,該功能代碼可對各從機(jī)中相同類型的線圈起強(qiáng)制作用。
該功能代碼可越過內(nèi)存保護(hù)和線圈的禁止?fàn)顟B(tài)線圈。保持強(qiáng)制狀態(tài)有效,并只能由控制器的下一個邏輯來處理。若無線圈控制邏輯程序時,線圈將保持強(qiáng)制狀態(tài)。
查詢
查詢信息規(guī)定了被強(qiáng)制線圈的類型,線圈的起始地址為0000H,1-16個線圈的尋址地址分為0000H –0015H(DO1=0000H,DO2=0001H,依此類推)。
查詢數(shù)據(jù)區(qū)規(guī)定了被請求線圈的 ON/OFF 狀態(tài),如數(shù)據(jù)區(qū)的某位值為“1”表示請求的相應(yīng)線圈狀態(tài)為ON,位值為“0”,則為OFF狀態(tài)。
圖示 2-17例子為請求從機(jī)設(shè)備 17 中一組 10 個線圈為強(qiáng)制狀態(tài),起始線圈為 20 (則尋址地址為 19 或 13H),查詢的數(shù)據(jù)為 2 個字節(jié),CD01H (二進(jìn)制 11001101 0000 0001) 相應(yīng)線圈的二進(jìn)制位排列如下:
Bit:
1
1
0
0
1
1
0
1
0
0
0
0
0
0
0
1
Coll:
27
26
25
24
23
22
21
20
-
-
-
-
-
-
29
28
傳送的第一個字節(jié) CDH 對應(yīng)線圈為 27-20,  LSB 對應(yīng)線圈 20,傳送的第二個字節(jié)為 01H,對應(yīng)的線圈為 29-28, LSB 為繼圈 28,其余未使用的位均填“0”。
Addr
Fun
DO addr
hi
DO addr
lo
Data #of
reg  hi
Data #of
reg lo
Byte
count
Value
hi
Value
lo
CRC
hi
CRC
lo
11H
0FH
00H
13H
00H
0AH
02H
CDH
01H
XXH
XXH
圖示 2-17強(qiáng)置多線圈----查詢
響應(yīng)
正常響應(yīng)返回從機(jī)地址,功能代碼,起始地址以及強(qiáng)制線圈數(shù)。
圖2 – 18對上述查詢返回的響應(yīng)。
Addr
Fun
DO addr
hi
DO addr
lo
Data #of
reg  hi
Data #of
reg lo
CRC16
hi
CRC16
lo
11H
0FH
00H
13H
00H
0AH
XXH
XXH
圖示 2-18強(qiáng)置多線圈----響應(yīng)
2.9預(yù)置多寄存器(功能碼16)
把數(shù)據(jù)按順序預(yù)置到各 (4X類型) 寄存器中,廣播時該功能代碼可把數(shù)據(jù)預(yù)置到全部從機(jī)中的相同類型的寄存器中。
該功能代碼可越過控制器的內(nèi)存保護(hù),在寄存器中的預(yù)置值一直保持有效,只能由控制器的下一個邏輯來處理寄存器的內(nèi)容,控制邏輯中無該寄存器程序時,則寄存器中的值保持不變。
查詢
查詢信息規(guī)定了要預(yù)置寄存器的類型,寄存器尋址起始地址為0000H,寄存器1所對應(yīng)的地址為0000H。
圖示 2-19的例子是請求17號從機(jī)0040H.的值為178077833。
Addr
Fun
Data start
reg  hi
Data start
reg lo
Data #of
reg  hi
Data #of
reg lo
Byte
count
Value
hi
Value
lo
Value
hi
Value
lo
CRC
hi
CRC
lo
11H
10H
00H
40H
00H
02H
04H
40H
89H
0AH
9DH
XXH
XXH
圖示 2-19預(yù)設(shè)多寄存器----查詢
響應(yīng)
圖2 – 20所示對于預(yù)置單寄存器請求的正常響應(yīng)是在寄存器值改變以后將接收到的數(shù)據(jù)傳送回去。
Addr
Fun
Data start
reg  hi
Data start
reg lo
Data #of
reg  hi
Data #of
reg lo
CRC16
hi
CRC16
lo
11H
10H
00H
40H
00H
02H
XXH
XXH
圖示 2-20預(yù)設(shè)多寄存器----響應(yīng)
2.10報告從機(jī)標(biāo)識(功能碼17)
返回一個從機(jī)地址控制器的類型,從機(jī)的當(dāng)前狀態(tài),以及有關(guān)從機(jī)的其他說明,不支持廣播。
查詢
圖示 2-21的例子是請求報告從機(jī)設(shè)備 17 的 標(biāo)識ID 和狀態(tài)。
Addr
Fun
CRC16  hi
CRC16  lo
11H
11H
XXH
XXH
圖示 2-21報告從機(jī)標(biāo)識----查詢
響應(yīng)
圖2 – 22所示正常響應(yīng)格式,數(shù)據(jù)內(nèi)容對應(yīng)每臺控制器的類型。
Addr
Fun
Byte
Count
Slave ID
Run Indicator Status
Additfional
Data
CRC16
hi
CRC16
lo
11H
11H
XXH
XXH
XXH
XXH
XXH
XXH
圖示 2-22報告從機(jī)標(biāo)識----響應(yīng)
從機(jī) ID 總結(jié)
數(shù)據(jù)區(qū)第一個字節(jié)為 Modicon 控制器返回的從機(jī) ID
Slave ID               Controller
0                                                    Micro 84
1                                                    484
2                                                    184/384
3                                                    584
8                    884
9                    984
特注:詳細(xì)信息見Modbus協(xié)議英文版或中文版。
第三章  附錄
附錄A:MODBUS全部功能碼
ModBus網(wǎng)絡(luò)是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機(jī)通過公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。下表3--1是ModBus的功能碼定義。
表3--1 ModBus功能碼
功能碼
名稱
作用
01
讀取線圈狀態(tài)
取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF)
02
讀取輸入狀態(tài)
取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)
03
讀取保持寄存器
在一個或多個保持寄存器中取得當(dāng)前的二進(jìn)制值
04
讀取輸入寄存器
在一個或多個輸入寄存器中取得當(dāng)前的二進(jìn)制值
05
強(qiáng)置單線圈
強(qiáng)置一個邏輯線圈的通斷狀態(tài)
06
預(yù)置單寄存器
把具體二進(jìn)值裝入一個保持寄存器
07
讀取異常狀態(tài)
取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定,用戶邏輯可以將這些線圈定義,以說明從機(jī)狀態(tài),短報文適宜于迅速讀取狀態(tài)
08
回送診斷校驗
把診斷校驗報文送從機(jī),以對通信處理進(jìn)行評鑒
09
編程(只用于484)
使主機(jī)模擬編程器作用,修改PC從機(jī)邏輯
10
控詢(只用于484)
可使主機(jī)與一臺正在執(zhí)行長程序任務(wù)從機(jī)通信,探詢該從機(jī)是否已完成其操作任務(wù),僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送
11
讀取事件計數(shù)
可使主機(jī)發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時
12
讀取通信事件記錄
可是主機(jī)檢索每臺從機(jī)的ModBus事務(wù)處理通信事件記錄。如果某項事務(wù)處理完成,記錄會給出有關(guān)錯誤
13
編程(184/384 484 584)
可使主機(jī)模擬編程器功能修改PC從機(jī)邏輯
14
探詢(184/384 484 584)
可使主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢該從機(jī)是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送
15
強(qiáng)置多線圈
強(qiáng)置一串連續(xù)邏輯線圈的通斷
16
預(yù)置多寄存器
把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器
17
報告從機(jī)標(biāo)識
可使主機(jī)判斷編址從機(jī)的類型及該從機(jī)運行指示燈的狀態(tài)
18
(884和MICRO 84)
可使主機(jī)模擬編程功能,修改PC狀態(tài)邏輯
19
重置通信鏈路
發(fā)生非可修改錯誤后,是從機(jī)復(fù)位于已知狀態(tài),可重置順序字節(jié)
20
讀取通用參數(shù)(584L)
顯示擴(kuò)展存儲器文件中的數(shù)據(jù)信息
21
寫入通用參數(shù)(584L)
把通用參數(shù)寫入擴(kuò)展存儲文件,或修改之
22~64
保留作擴(kuò)展功能備用
65~72
保留以備用戶功能所用
留作用戶功能的擴(kuò)展編碼
73~119
非法功能
120~127
保留
留作內(nèi)部作用
128~255
保留
用于異常應(yīng)答
ModBus網(wǎng)絡(luò)只是一個主機(jī),所有通信都由他發(fā)出。網(wǎng)絡(luò)可支持247個之多的遠(yuǎn)程從屬控制器,但實際所支持的從機(jī)數(shù)要由所用通信設(shè)備決定。采用這個系統(tǒng),各PC可以和中心主機(jī)交換信息而不影響各PC執(zhí)行本身的控制任務(wù)。表3--2是ModBus各功能碼對應(yīng)的數(shù)據(jù)類型。
表3--2 ModBus功能碼與數(shù)據(jù)類型對應(yīng)表
代碼
功能
數(shù)據(jù)類型
01
02
03
整型、字符型、狀態(tài)字、浮點型
04
整型、狀態(tài)字、浮點型
05
06
整型、字符型、狀態(tài)字、浮點型
08
N/A
重復(fù)“回路反饋”信息
15
16
整型、字符型、狀態(tài)字、浮點型
17
字符型
附錄B:不正常響應(yīng)
不正常響應(yīng):
除廣播外,主機(jī)向從機(jī)設(shè)備發(fā)送查詢并希望有一個正常響應(yīng),主機(jī)查詢中有可能產(chǎn)生4種事件:
¨  從機(jī)接收查詢,通訊錯誤正常處理信息,則返回一個正常響應(yīng)事件。
¨  由于通訊出錯,從機(jī)不能接收查詢數(shù)據(jù),因而不返回響應(yīng)。此時,主機(jī)依靠處理程序給出查詢超時事件。
¨  若從機(jī)接收查詢,發(fā)現(xiàn)有 (LRC或CRC) 通訊錯誤,并返回響應(yīng),此時,依靠主機(jī)處理程序給出查詢超時事件。
¨  從機(jī)接收查詢,無通訊錯誤,但無法處理(如讀不存在的線圈和寄存器)時,向主機(jī)報告錯誤的性質(zhì)。
不正常響應(yīng)信息有2個與正常響應(yīng)不相同的區(qū)域:
功能代碼區(qū):正常響應(yīng)時,從機(jī)的響應(yīng)功能代碼區(qū),帶原查詢的功能代碼。所有功能代碼的MSB為0(其值低于80H)。不正常響應(yīng)時,從機(jī)把功能代碼的MSB置為1,使功能代碼值大于80H,高于正常響應(yīng)的值。這樣,主機(jī)應(yīng)用程序能識別不正常響應(yīng)事件,能檢查不正常代碼的數(shù)據(jù)區(qū)。
數(shù)據(jù)區(qū):正常響應(yīng)中,數(shù)據(jù)區(qū)含有(按查詢要求給出的) 數(shù)據(jù)或統(tǒng)計值,在不正常響應(yīng)中,數(shù)據(jù)區(qū)為一個不正常代碼,它說明從機(jī)產(chǎn)生不正常響應(yīng)的條件和原因。
例:主機(jī)發(fā)出查詢,從機(jī)不正常響應(yīng)。(為十六進(jìn)制數(shù)據(jù))。
查詢:
Addr
Fun
DO start reg hi
DO start reg lo
DO #of regs hi
DO #of regs lo
CRC16
Hi
CRC16
Lo
0AH
01H
04H
A1H
00H
01H
XXH
XXH
響應(yīng)(不正?;蚶猓?div style="height:15px;">
Addr
Fun
Exception Code
CRC16
Hi
CRC16
Lo
0AH
81H
02H
XXH
XXH
圖 3 – 1 . 不正常信息幀格式
上例中,從機(jī)設(shè)備地址10(0AH),讀線圈狀態(tài)的功能代碼(01),主機(jī)請求線圈狀態(tài)的地址為1245(04A1H)。注意:只讀一個指定線圈,地址為(0001).
若從機(jī)中不存在此線圈地址時,即以不正常代碼(02),向主機(jī)返回一個不正常響應(yīng)。說明為不合法地址。
表3--3 ModBus的不正常代碼:
代碼
名稱
含義
01
不合法功能代碼
從機(jī)接收的是一種不能執(zhí)行功能代碼。發(fā)出查詢命令后,該代碼指示無程序功能。
02
不合法數(shù)據(jù)地址
接收的數(shù)據(jù)地址,是從機(jī)不允許的地址。
03
不合法數(shù)據(jù)
查詢數(shù)據(jù)區(qū)的值是從機(jī)不允許的值。
04
從機(jī)設(shè)備故障
從機(jī)執(zhí)行主機(jī)請求的動作時出現(xiàn)不可恢復(fù)的錯誤。
05
確認(rèn)
從機(jī)已接收請求處理數(shù)據(jù),但需要較長的處理時間,為避免主機(jī)出現(xiàn)超時錯誤而發(fā)送該確認(rèn)響應(yīng)。主機(jī)以此再發(fā)送一個“查詢程序完成”未決定從機(jī)是否已完成處理。
06
從機(jī)設(shè)備忙碌
從機(jī)正忙于處理一個長時程序命令,請求主機(jī)在從機(jī)空閑時發(fā)送信息。
07
否定
從機(jī)不能執(zhí)行查詢要求的程序功能時,該代碼使用十進(jìn)制13或14代碼,向主機(jī)返回一個“不成功的編程請求”信息。主機(jī)應(yīng)請求診斷從機(jī)的錯誤信息。
08
內(nèi)存奇偶校驗錯誤
從機(jī)讀擴(kuò)展內(nèi)存中的數(shù)據(jù)時,發(fā)現(xiàn)有奇偶校驗錯誤,主機(jī)按從機(jī)的要求重新發(fā)送數(shù)據(jù)請求。
///////////////////////////////////////////////////////////////
功能碼
描述
是否支持廣播
起始地址
備注
01
讀線圈狀態(tài)DO
不支持
0000H
讀離散量輸出口(0X類型)狀態(tài)
02
讀輸入位狀態(tài)DI
不支持
0000H
讀離散量輸入信號(0X類型)狀態(tài)
03
讀保持寄存器
不支持
0000H
讀保持寄存器數(shù)據(jù)
04
讀輸入寄存器
不支持
0000H
讀輸入寄存器(3X類型)數(shù)據(jù)
05
強(qiáng)制單個線圈DO
支持
0000H
強(qiáng)制單個線圈(0X類型)狀態(tài)
06
預(yù)置單個保持寄存器
支持
0000H
置保持寄存器(4X類型)中
07
讀不正常狀態(tài)
不支持
08
診斷(見第3章)
不支持
0000H
09
程序 484
0000H
沒查到
10
查詢 484
0000H
沒查到
11
通訊事件控制
不支持
12
通訊事件記錄
不支持
13
程序控制器
0000H
沒查到
14
查詢控制器
0000H
沒查到
15
強(qiáng)制多個線圈DO
支持
0000H
強(qiáng)制各線圈 (0X 類型)狀態(tài)
16
預(yù)置多個保持寄存器
支持
0000H
置保持寄存器(4X類型)中
17
報告從機(jī) ID
不支持
18
程序 884/M84
0000H
沒查到
19
通訊鏈路復(fù)位
0000H
沒查到
20
讀通用參考值
不支持
0000H
擴(kuò)展寄存器(6X類型)
21
寫通用參考值
不支持
0000H
擴(kuò)展寄存器(6X類型)
22
掩碼寫入4X類型寄存器
不支持
0000H
保持寄存器(4X類型)
23
讀/寫4X類型寄存器
不支持
0000H
保持寄存器(4X類型)
24
讀FIFO查詢數(shù)據(jù)
不支持
0000H
保持寄存器(4X類型)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
完整的Modbus指南
Modbus功能碼一覽
淺談
CCLINK IE轉(zhuǎn)MODBUS-TCP網(wǎng)關(guān)cclink ie field basic模塊
(三)Modbus RTU協(xié)議使用說明
干貨分享:Modbus 通訊數(shù)據(jù)格式及協(xié)議功能碼詳解!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服