亚洲a片一区二区电影妇科医生,在线看片免费人成视频影院看,精品人妻无码一区二区三区潘金莲,午夜无码喷水A片www,国产精品无码av一区二区三区

歡迎您訪問河南省納禾自動化系統有限公司官方網站! 控制工程、物聯網、機器人、智能制造
咨詢熱線:0371-60298207 13383812899
您的位置:首頁 > 新聞動態 > 行業動態

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

發布日期:2022-08-12 15:31:59   來源:行業動態   瀏覽量:

今(jin)(jin)天(tian)來聊一(yi)聊Modbus,先(xian)看看今(jin)(jin)天(tian)的(de)主(zhu)要內容: 

01 術(shu)語(yu)解讀 

02 背景 

03 協議原理(li) 

04 傳(chuan)輸(shu)方式(shi) 

05 Modbus RTU與(yu)Modbus ASCII有什么區別(bie) 

06 Modbus TCP及(ji)其注意點 

07 功能碼作用 

08 Modbus協議安(an)全分析

 
 

01 術語解讀

 

校驗碼:校驗碼通常是一組數字的最后一位,由前面的數字通過某種運算得出,用以檢驗該組數據的正確性。代碼作為數據在向計算機或其它設備進行輸入時,容易產生輸入錯誤,為了減少這種輸入錯誤,編碼專家發明了各種校驗檢錯方法,并依據這些方法設置了校驗碼。常用的校驗有:累加和校驗SUM、字節異或校驗XOR、縱向冗余校驗LRC、循環冗余校驗CRC……

 

離散量輸入:主要用來讀取單個位的數據,如IO的狀態;

 

線圈:開關輸出信號,主要用來寫入單個位的數據,與離散量構成組成對位的操作;

 

輸入寄存器:主要用來讀取16位,也就是兩個字節的數據;

 

保持寄存器:主要用來寫入16位的數據;

 

PLC:可編程邏輯控制器,是一種采用一類可編程的存儲器,用于其內部存儲程序和執行邏輯運算、順序控制、定時、計數與算術操作等面向用戶的指令,并通過數字或模擬式輸入/輸出控制各種類型的機械或生產過程。

 

串口通信:隨著計算機系統的應用和微機網絡的發展,通信功能越來越顯得重要。這里所說的通信是指計算機與外界的信息交換。因此,通信既包括計算機與外部設備之間,也包括計算機和計算機之間的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現成的電話網進行信息傳送,因此特別適合于遠距離傳輸。對于那些與計算機相距不遠的人-機交換設備和串行存儲的外部設備如終端、打印機、邏輯分析儀、磁盤等,采用串行方式交換數據也很普遍。在實時控制和管理方面,采用多臺微機處理機組成分級分布控制系統中,各 CPU 之間的通信一般都是串行方式。所以串行接口是微機應用系統常用的接口。許多外設和計算機按串行方式進行通信,這里所說的串行方式,是指外設與接口電路之間的信息傳送方式,實際上CPU 與接口之間仍按并行方式工作。

 

串口:串口是計算機上一種非常通用設備通信的協議,不要與通用串行總線Universal Serial Bus(USB)混淆。大多數計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的通信協議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協議也可以用于獲取遠程采集設備的數據。

 

串口通信(xin)的概念(nian)非(fei)常(chang)簡單,串口按位(bit)發送和接收字節(jie)。盡管比(bi)按字節(jie)(byte)的并行(xing)通信(xin)要慢,但是(shi)串口可(ke)(ke)以在使(shi)用(yong)(yong)一根(gen)線(xian)發送數(shu)據的同時用(yong)(yong)另一根(gen)線(xian)接收數(shu)據。它很簡單并且(qie)能(neng)夠實現遠距離通信(xin)。比(bi)如IEEE488定義并行(xing)通行(xing)狀態時,規定設(she)(she)備線(xian)總常(chang)不(bu)得超(chao)過(guo)20米(mi),并且(qie)任意兩個設(she)(she)備間的長(chang)度(du)不(bu)得超(chao)過(guo)2米(mi);而對(dui)于(yu)串口而言,長(chang)度(du)可(ke)(ke)達1200米(mi)。 

 

典型(xing)地,串口用(yong)于(yu)(yu)ASCII碼字(zi)符的(de)(de)傳輸。通(tong)信(xin)使(shi)用(yong)3根線(xian)完(wan)成:地線(xian)、發(fa)送和(he)接(jie)收(shou)。由(you)于(yu)(yu)串口通(tong)信(xin)是異步(bu)的(de)(de),端口能(neng)夠在一根線(xian)上發(fa)送數(shu)據(ju)同時在另一根線(xian)上接(jie)收(shou)數(shu)據(ju)。其他線(xian)用(yong)于(yu)(yu)握手,但是不是必(bi)須的(de)(de)。串口通(tong)信(xin)最重要的(de)(de)參(can)數(shu)是波(bo)特率、數(shu)據(ju)位(wei)、停止位(wei)和(he)奇(qi)偶校驗。對于(yu)(yu)兩個進行通(tong)行的(de)(de)端口,這(zhe)些參(can)數(shu)必(bi)須匹配:

 

a. 波(bo)特(te)率(lv)(lv)(lv):這是(shi)一個衡量通(tong)信速(su)度的(de)參數。它表(biao)示每秒(miao)鐘(zhong)傳送的(de)bit的(de)個數。例如300波(bo)特(te)表(biao)示每秒(miao)鐘(zhong)發送300個bit。當我(wo)們提到時鐘(zhong)周期時,我(wo)們就(jiu)是(shi)指波(bo)特(te)率(lv)(lv)(lv)。例如如果協議需要4800波(bo)特(te)率(lv)(lv)(lv),那么(me)時鐘(zhong)是(shi)4800Hz。這意味著串口通(tong)信在數據線上的(de)采(cai)樣率(lv)(lv)(lv)為(wei)4800Hz。通(tong)常電話(hua)線的(de)波(bo)特(te)率(lv)(lv)(lv)為(wei)14400,28800和36600。波(bo)特(te)率(lv)(lv)(lv)可以遠(yuan)遠(yuan)大于這些值,但是(shi)波(bo)特(te)率(lv)(lv)(lv)和距離成反比。高波(bo)特(te)率(lv)(lv)(lv)常常用于放置的(de)很(hen)近的(de)儀器間的(de)通(tong)信,典型的(de)例子就(jiu)是(shi)GPIB設(she)備的(de)通(tong)信。


b. 數據(ju)位(wei)(wei):這是(shi)(shi)(shi)衡量通(tong)信中(zhong)實(shi)際數據(ju)位(wei)(wei)的參數。當計算機發送(song)一(yi)個信息(xi)包,實(shi)際的數據(ju)不會是(shi)(shi)(shi)8位(wei)(wei)的,標準(zhun)的值是(shi)(shi)(shi)5、7和8位(wei)(wei)。如(ru)何設(she)置取(qu)決于(yu)(yu)你想傳送(song)的信息(xi)。比如(ru),標準(zhun)的ASCII碼是(shi)(shi)(shi)0~127(7位(wei)(wei))。擴展的ASCII碼是(shi)(shi)(shi)0~255(8位(wei)(wei))。如(ru)果數據(ju)使用簡單的文(wen)本(標準(zhun) ASCII碼),那么每個數據(ju)包使用7位(wei)(wei)數據(ju)。每個包是(shi)(shi)(shi)指(zhi)(zhi)一(yi)個字(zi)節,包括開始/停(ting)止位(wei)(wei),數據(ju)位(wei)(wei)和奇(qi)偶(ou)校驗(yan)位(wei)(wei)。由(you)于(yu)(yu)實(shi)際數據(ju)位(wei)(wei)取(qu)決于(yu)(yu)通(tong)信協(xie)議(yi)的選(xuan)取(qu),術語“包”指(zhi)(zhi)任何通(tong)信的情況。


c. 停(ting)(ting)止(zhi)位:用于(yu)表(biao)示(shi)單個包(bao)的(de)(de)最(zui)后一位。典型的(de)(de)值為1,1.5和(he)2位。由(you)于(yu)數據(ju)是在(zai)(zai)傳輸線上定時(shi)的(de)(de),并(bing)且每一個設備有其自己(ji)的(de)(de)時(shi)鐘,很(hen)可能在(zai)(zai)通信中(zhong)兩臺(tai)設備間出現了小小的(de)(de)不同(tong)步(bu)。因此停(ting)(ting)止(zhi)位不僅僅是表(biao)示(shi)傳輸的(de)(de)結束(shu),并(bing)且提供計(ji)算(suan)機校正時(shi)鐘同(tong)步(bu)的(de)(de)機會。適(shi)用于(yu)停(ting)(ting)止(zhi)位的(de)(de)位數越多(duo),不同(tong)時(shi)鐘同(tong)步(bu)的(de)(de)容忍程度越大,但(dan)是數據(ju)傳輸率(lv)同(tong)時(shi)也(ye)越慢。


d. 奇(qi)偶(ou)(ou)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)位:在串(chuan)口通(tong)信中一(yi)種(zhong)簡單(dan)的(de)檢錯(cuo)方式。有(you)(you)四(si)種(zhong)檢錯(cuo)方式:偶(ou)(ou)、奇(qi)、高(gao)和(he)(he)低(di)。當然沒有(you)(you)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)位也是(shi)(shi)可(ke)以的(de)。對于(yu)偶(ou)(ou)和(he)(he)奇(qi)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)的(de)情況,串(chuan)口會(hui)設置(zhi)(zhi)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)位(數(shu)據(ju)位后面(mian)的(de)一(yi)位),用一(yi)個值確(que)保傳輸(shu)的(de)數(shu)據(ju)有(you)(you)偶(ou)(ou)個或(huo)者奇(qi)個邏(luo)(luo)輯(ji)高(gao)位。例如(ru)(ru),如(ru)(ru)果數(shu)據(ju)是(shi)(shi)011,那么(me)對于(yu)偶(ou)(ou)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan),校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)位為(wei)0,保證邏(luo)(luo)輯(ji)高(gao)的(de)位數(shu)是(shi)(shi)偶(ou)(ou)數(shu)個。如(ru)(ru)果是(shi)(shi)奇(qi)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan),校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)位1,這樣就有(you)(you)3個邏(luo)(luo)輯(ji)高(gao)位。高(gao)位和(he)(he)低(di)位不(bu)(bu)真正的(de)檢查(cha)數(shu)據(ju),簡單(dan)置(zhi)(zhi)位邏(luo)(luo)輯(ji)高(gao)或(huo)者邏(luo)(luo)輯(ji)低(di)校(xiao)(xiao)(xiao)(xiao)驗(yan)(yan)(yan)。這樣使得接(jie)收(shou)設備能(neng)夠知道一(yi)個位的(de)狀(zhuang)態(tai),有(you)(you)機會(hui)判斷是(shi)(shi)否(fou)有(you)(you)噪聲干擾(rao)了(le)通(tong)信或(huo)者是(shi)(shi)否(fou)傳輸(shu)和(he)(he)接(jie)收(shou)數(shu)據(ju)是(shi)(shi)否(fou)不(bu)(bu)同步。

 

圖片

02 背景

圖片

早在(zai)1971年,Modicon公(gong)司首次(ci)推出了Modbus協議,ModbusRTU和Modbus ASCII誕生于此。后(hou)來施(shi)耐德電(dian)氣(SchneiderElectric)收購(gou)了Modicon公(gong)司,并在(zai)1997年推出了ModbusTCP協議。2004年,中國(guo)(guo)國(guo)(guo)家標(biao)準委(wei)員會(hui)正式(shi)把Modbus作為了國(guo)(guo)家標(biao)準,開啟了Modbus為中國(guo)(guo)工業通信做貢(gong)獻的(de)時代。

 

通(tong)過(guo)此協(xie)議,控(kong)制(zhi)(zhi)器(qi)相互之間、控(kong)制(zhi)(zhi)器(qi)經由網(wang)絡和(he)(he)其(qi)它(ta)設備之間可以(yi)通(tong)信。Modbus協(xie)議具有標準、開放(fang),可以(yi)支持多種電氣接口,數據幀格(ge)式簡單緊(jin)湊,數據傳輸(shu)量大、實(shi)時性(xing)好等特點,在工業控(kong)制(zhi)(zhi)系統(tong)中得到(dao)了(le)廣泛的應用(yong)(yong),已經成為通(tong)用(yong)(yong)工業標準。深入分析(xi)Modbus協(xie)議實(shi)現原理和(he)(he)其(qi)安全性(xing)對提高工控(kong)系統(tong)安全性(xing)有著重要的現實(shi)意(yi)義。

 

ModbusRTU和ModbusASCII主要用于串行通信領(ling)域,而ModbusTCP則常(chang)用于以太網通信。現(xian)在,Modbus已經成為工業領(ling)域通信協議標準,并且現(xian)在是工業電子(zi)設備之間相當(dang)常(chang)用的連接方式。

圖片

03 協議原理

圖片

Modbus使用(yong)一(yi)種簡(jian)單的MasterandSlave主從協議(yi)(客(ke)(ke)戶機(ji)/服務(wu)(wu)器協議(yi))進(jin)行通(tong)(tong)信。客(ke)(ke)戶機(ji)作為(wei)主站,向服務(wu)(wu)器發(fa)送請(qing)求(qiu)(qiu)(qiu);服務(wu)(wu)器(從站)接到(dao)請(qing)求(qiu)(qiu)(qiu)后,對(dui)請(qing)求(qiu)(qiu)(qiu)進(jin)行分析并作出應答。其中(zhong)使用(yong)的通(tong)(tong)信幀被稱為(wei)應用(yong)數(shu)據單元(Application Data Unit,ADU),它包括通(tong)(tong)信地址(zhi)段、功能(neng)代碼段、數(shu)據段和校驗(yan)段,如下圖:

 

一般(ban)使(shi)用(yong)上,監控系(xi)統(tong)(HMI)都為Master,PLC、電表(biao)、儀表(biao)等(deng)都為Slave,HMI系(xi)統(tong)一直PollingSlave的各種(zhong)relayandregister最(zui)新數值,然后做(zuo)顯(xian)示及各種(zhong)邏(luo)輯計算(suan)及控制調(diao)整等(deng)處理。

 

其中,功(gong)能代(dai)碼段和(he)數據(ju)段組合稱為(wei)(wei)協議數據(ju)單(dan)元(Protocol Data Unit or Protocol Description Unit),PDU)。功(gong)能代(dai)碼段占用一個字(zi)節,取值(zhi)范圍為(wei)(wei)1~255,其中128~255為(wei)(wei)保(bao)留值(zhi),用于(yu)異常消息應答報文。1~127為(wei)(wei)功(gong)能代(dai)碼編號(hao),其中65~72和(he)100~110為(wei)(wei)用戶自定義編碼。

 

圖片

04 傳輸方式

 

Modbus 協(xie)議是一種(zhong)應用層報(bao)(bao)文傳(chuan)輸協(xie)議,包括ASCII、RTU、TCP三種(zhong)報(bao)(bao)文類(lei)型(xing),協(xie)議本身并沒(mei)有(you)定義物理層,只是定義了控(kong)制器能(neng)夠(gou)認(ren)識和使(shi)用的消息(xi)結構(gou),而不管它們是經過(guo)何種(zhong)網(wang)絡(luo)進行通信(xin)的。

 

Modbus 協(xie)議使用串口傳(chuan)輸時(shi)可以(yi)選(xuan)擇RTU或ASCII模(mo)式,并規定了消息、數據(ju)結構(gou)、命令和應答方式并需要對數據(ju)進行校驗。ASCII 模(mo)式采用LRC校驗,RTU模(mo)式采用16 位CRC校驗。通過以(yi)太(tai)網傳(chuan)輸時(shi)使用TCP,這種模(mo)式不(bu)使用校驗,因(yin)為TCP協(xie)議是一個面向(xiang)連接的可靠協(xie)議。

 

05 Modbus RTU與Modbus ASCII有什么區別圖片

 

Modbus是一(yi)種應用層(ceng)協議,它定義了與基礎網(wang)絡無關的(de)數(shu)據單元(ADU),可(ke)以在以太(tai)網(wang)(TCP/IP)或串(chuan)行鏈路(lu)上(shang)(shang)(RS232、RS485等)進行通信(xin)(以太(tai)網(wang)ADU和串(chuan)行ADU略有(you)不同)。在串(chuan)行鏈路(lu)上(shang)(shang),Modbus協議有(you)兩種傳輸模(mo)式——ASCII模(mo)式和RTU模(mo)式。其(qi)中(zhong)(zhong),ASCII是英文(wen)“American Standard Code for Information Interchange”的(de)縮(suo)寫,中(zhong)(zhong)文(wen)翻譯為“美(mei)國國家(jia)信(xin)息交換(huan)標準編碼”;RTU是英文(wen)“ Remote Terminal Unit”的(de)縮(suo)寫,中(zhong)(zhong)文(wen)翻譯為“遠程終端設備”。

 

首先,讓我們來看看Modbus的工作原理。

 

Modbus采用主(zhu)從(Master-Salve)通信模(mo)式,僅(jin)有主(zhu)設(she)備(bei)(Master)能對(dui)傳(chuan)輸進行初(chu)始化,從設(she)備(bei)(Slave)根據主(zhu)設(she)備(bei)的(de)請求進行應答。典型的(de)主(zhu)設(she)備(bei)包括現場儀(yi)表和顯示面板,典型的(de)從設(she)備(bei)為可編程邏輯控制(zhi)器(PLC)。

 

在串行鏈(lian)路的(de)主(zhu)從(cong)通(tong)信中,Modbus主(zhu)設備(bei)可以連接一個或N(最(zui)大(da)為247)個從(cong)設備(bei),主(zhu)從(cong)設備(bei)之間的(de)通(tong)信包(bao)括單(dan)播模式和(he)廣播模式。

 

在廣播模(mo)式中,Modbus主設(she)備(bei)可同時(shi)向多個從(cong)設(she)備(bei)發送請求(qiu)(qiu)(設(she)備(bei)地址0用(yong)于廣播模(mo)式),從(cong)設(she)備(bei)對(dui)廣播請求(qiu)(qiu)不進行響應。

 

在單(dan)播模式中,主設(she)備(bei)發送請(qing)(qing)求(qiu)至某個(ge)特定的(de)從(cong)設(she)備(bei)(每個(ge)Modbus從(cong)設(she)備(bei)具有唯一地址(zhi)),請(qing)(qing)求(qiu)的(de)消息幀中會包含功能代(dai)碼和數據,比如功能代(dai)碼“01”用來讀取離散(san)量線圈的(de)狀(zhuang)態。從(cong)設(she)備(bei)接(jie)到請(qing)(qing)求(qiu)后(hou),進行應答并把(ba)消息反饋(kui)主設(she)備(bei)。

 

圖片

 

在主從設備的(de)通信中,可以使用ASCII模(mo)式(shi)(shi)或(huo)者RTU模(mo)式(shi)(shi)。在ASCII(AmericanStandard Code for Information Interchange)傳輸模(mo)式(shi)(shi)下,消息(xi)幀以英文(wen)冒號(hao)(hao)(hao)(“:”,ASCII3A Hex)開(kai)始,以回車和換號(hao)(hao)(hao)(CRLF,ASCII 0D and 0A Hex)符號(hao)(hao)(hao)結束,允(yun)許的(de)傳輸的(de)字(zi)符集為(wei)十六進制的(de)0~9和A~F;網絡中的(de)從設備監視傳輸通路上是否有英文(wen)冒號(hao)(hao)(hao)(“:”),如果(guo)有的(de)話(hua),就對消息(xi)幀進行解碼,查看消息(xi)中的(de)地(di)址是否與自(zi)己的(de)地(di)址相(xiang)同,如果(guo)相(xiang)同的(de)話(hua),就接收其中的(de)數(shu)據;如果(guo)不(bu)同的(de)話(hua),則不(bu)予理會。

 

圖片

 

在(zai)ASCII模(mo)(mo)式(shi)(shi)(shi)下,每個8位(wei)的(de)(de)(de)字(zi)(zi)節(jie)被(bei)拆分成兩(liang)個ASCII字(zi)(zi)符進行(xing)發(fa)送,比(bi)如十六進制(zhi)數0xAF ,會(hui)被(bei)分解成ASCII字(zi)(zi)符“A”和“F”進行(xing)發(fa)送,發(fa)送的(de)(de)(de)字(zi)(zi)符量比(bi)RTU增(zeng)加一倍。ASCII模(mo)(mo)式(shi)(shi)(shi)的(de)(de)(de)好處是(shi)允許兩(liang)個字(zi)(zi)符之(zhi)間(jian)間(jian)隔的(de)(de)(de)時(shi)間(jian)長達1s而不(bu)引發(fa)通信(xin)故障(zhang),該模(mo)(mo)式(shi)(shi)(shi)采用縱向冗(rong)余校(xiao)驗(yan)(Longitudinal Redundancy Check ,LRC)) 的(de)(de)(de)方法來檢(jian)驗(yan)錯誤(wu),當控制(zhi)器(qi)設為(wei)在(zai)Modbus 網絡上以RTU 模(mo)(mo)式(shi)(shi)(shi)通信(xin),消息中的(de)(de)(de)每個8Bit 字(zi)(zi)節(jie)都包(bao)含兩(liang)個4 Bit 的(de)(de)(de)十六進制(zhi)字(zi)(zi)符,這種模(mo)(mo)式(shi)(shi)(shi)沒有開始和結(jie)束標記(ji)。其優(you)點是(shi): 在(zai)同樣(yang)的(de)(de)(de)波特率下,可傳送更(geng)多的(de)(de)(de)數據。

 

在RTU(RemoteTerminal Unit)模式(shi)下(xia),每個字節可以傳輸兩(liang)個十(shi)(shi)六進(jin)(jin)制字符(fu),比如十(shi)(shi)六進(jin)(jin)制數0xAF,直接以十(shi)(shi)六進(jin)(jin)制0xAF(二(er)進(jin)(jin)制:10101111)進(jin)(jin)行發(fa)送(song),因此它的發(fa)送(song)密(mi)度(du)比ASCII模式(shi)高(gao)一倍;RTU模式(shi)采用循環冗余校驗(CRC),下(xia)面是(shi)對RTU模式(shi)的總結:

 

具體格式(shi)如下圖所(suo)示(shi):

 

圖片

圖片

06 Modbus TCP及其注意點圖片

 

6.1 主機和從機、服務端和客戶端

 

在modbus協議中(zhong):主機發送modbus請(qing)求,從(cong)(cong)機根(gen)據(ju)請(qing)求內(nei)容向主機返回響應。在modbus協議中(zhong),主機總是主動方,從(cong)(cong)機總是被動方。

 

在(zai)網絡(luo)應用中:在(zai)網絡(luo)應用中存(cun)在(zai)客(ke)戶端(duan)(duan)和服務(wu)(wu)器(qi)端(duan)(duan),客(ke)戶端(duan)(duan)(例如(ru)瀏(liu)覽器(qi))發送請(qing)求到服務(wu)(wu)器(qi),服務(wu)(wu)器(qi)向客(ke)戶端(duan)(duan)返回內容(rong)(例如(ru)HTML文本(ben))。

 

在modbus tcp中(zhong):主(zhu)機(ji)是(shi)客戶端(duan),而從機(ji)是(shi)服(fu)務器端(duan)。千萬不要以為服(fu)務器端(duan)重要,主(zhu)機(ji)也重要,所以主(zhu)機(ji)就是(shi)服(fu)務器端(duan)。

 

6.2 是否可以多主機

 

通過前面的(de)(de)分(fen)析,主(zhu)機(ji)(ji)為(wei)客戶端那么(me)modbustcp支持多(duo)個(ge)主(zhu)機(ji)(ji),在一(yi)個(ge)   局域網中可存(cun)在多(duo)個(ge)主(zhu)機(ji)(ji)和(he)多(duo)個(ge)從機(ji)(ji)。從機(ji)(ji)的(de)(de)連(lian)接能力(連(lian)接主(zhu)機(ji)(ji)的(de)(de)數   量)由uIP的(de)(de)最大TCP連(lian)接個(ge)數決定。

 

6.3 modbus TCP協議簡述

 

modbus TCP和modbus RTU基本相同,但是也存在一(yi)些(xie)區別:

 

a.從機地(di)(di)址(zhi)變得不再重要,多數情況(kuang)下忽略。從某種意義上(shang)說從機地(di)(di)址(zhi)被IP地(di)(di)址(zhi)取代;

b.CRC校(xiao)驗(yan)變得不(bu)再重要(yao),甚(shen)至(zhi)可以(yi)忽略。由(you)于TCP數據包(bao)中已經存在(zai)校(xiao)驗(yan),為(wei)了不(bu)重復造(zao)輪子,modbus TCP干脆(cui)取(qu)消了CRC校(xiao)驗(yan)。

 

TCP 模(mo)式是(shi)為(wei)了讓Modbus 數(shu)據順利在以(yi)太網上傳(chuan)輸產生的(de),使用(yong)TCP502 端口。該協(xie)議(yi)(yi)(yi)物理層,數(shu)據鏈(lian)路層,網絡層,傳(chuan)輸層都是(shi)基于TCP 協(xie)議(yi)(yi)(yi),只在應用(yong)層,將(jiang)Modbus 協(xie)議(yi)(yi)(yi)修改后封裝(zhuang)進(jin)(jin)去(qu); 接收端將(jiang)該TCP 數(shu)據包(bao)拆封后,重新獲得(de)原始Modbus 幀(zhen),然后按照Modbus 協(xie)議(yi)(yi)(yi)規范進(jin)(jin)行解析,并將(jiang)返回(hui)的(de)數(shu)據包(bao)重新封裝(zhuang)進(jin)(jin)TCP 協(xie)議(yi)(yi)(yi)中,返回(hui)到發送端。與串行鏈(lian)路傳(chuan)輸的(de)數(shu)據格式不同,TCP 模(mo)式去(qu)除了附加(jia)地址和校驗,增加(jia)了報文頭(tou),其具(ju)體格式如圖4所(suo)示。

 

圖片

 

在modbus TCP中包含一個MBAP頭,該頭包含以下幾個部分:

 

區(qu)域 長度 描述 客戶端 服務(wu)器

傳輸標(biao)志

2字(zi)節

MODBUS 請求和響應傳(chuan)輸(shu)過程中序列號(hao)

客戶端(duan)生成

應答時(shi)復制(zhi)該值

協議(yi)標(biao)志(zhi)

2字節

Modbus協議默認為0

客(ke)戶端生成

應(ying)答時復(fu)制(zhi)該值

長度

2字節(jie)

剩余部分的長度

客戶端(duan)生成(cheng)

應答時由服務器端生成

單(dan)元標志

1字節

從機標志(zhi)(從機地址)

客戶端生成

應答時復制該值

 

注意:

a.傳輸標志(zhi)可理解為序(xu)列號,防止 MODBUS TCP通(tong)信錯位,例如(ru)后(hou)(hou)發(fa)(fa)生(sheng)的(de)響應(ying)先(xian)到(dao)了主機,而早發(fa)(fa)生(sheng)的(de)響應(ying)后(hou)(hou)到(dao)主機;

b.單元標(biao)志可(ke)理解為(wei)從(cong)機地址,此時已(yi)經不(bu)再重(zhong)要(yao)。

 

6.4 modbus tcp 和 TCP IP的關系

 

modbus TCP可以理解為發生在TCP上的應用層(ceng)協議(yi),既然是TCP協議(yi)那么(me)一個完整的MODBUSTCP報(bao)文必然包括TCP首(shou)部(bu),IP首(shou)部(bu)和Ethernet首(shou)部(bu)。

 

圖片

07 功能碼作用

圖片

啟動Modbus事務處理的(de)客戶機創建(jian)Modbus應用(yong)數(shu)據單元。功能碼(PDU中的(de))向服(fu)務器(qi)指示將執行哪種操作。

 

用一個字節(jie)編碼(ma)Modbus數據(ju)單元的功能(neng)碼(ma)域。有(you)效范圍是十制制1-255(128-255為異常響(xiang)應保留)。當從客戶機向服(fu)務器發送報文時,功能(neng)碼(ma)域通過服(fu)務器執行(xing)哪種操作。

 

從客(ke)戶機(ji)向服務(wu)器發送的報文數據域包(bao)(bao)括附加(jia)信息(xi),服務(wu)器使用(yong)這個信息(xi)執行功能碼定義的操作。這個域還包(bao)(bao)括離散項目(mu)和寄存器地(di)址、處理項目(mu)的數量(liang)以(yi)及(ji)域中(zhong)的實際數據字節數。

 

在(zai)某種請求中,數據域可以是不存在(zai)的,在(zai)此(ci)情況下服務器(qi)不需要任(ren)何附加信息。功能碼僅(jin)說明操(cao)作。

 

功能碼的類型:

 

功(gong)(gong)能(neng)(neng)(neng)碼(ma)主(zhu)要分為(wei)有效功(gong)(gong)能(neng)(neng)(neng)碼(ma)、異常(chang)(chang)功(gong)(gong)能(neng)(neng)(neng)碼(ma)和(he)錯誤功(gong)(gong)能(neng)(neng)(neng)碼(ma)。如(ru)果(guo)在一(yi)個(ge)正(zheng)(zheng)確(que)接(jie)收(shou)Modbus ADU中,不出現與請求Modbus功(gong)(gong)能(neng)(neng)(neng)有關的差錯,那么服務器(qi)至客戶機的響應(ying)數據(ju)(ju)會包含請求中的正(zheng)(zheng)常(chang)(chang)功(gong)(gong)能(neng)(neng)(neng)碼(ma)。如(ru)果(guo)出現與請求Modbus功(gong)(gong)能(neng)(neng)(neng)有關的差錯,那么響應(ying)數據(ju)(ju)會包含一(yi)個(ge)異常(chang)(chang)碼(ma)和(he)錯誤碼(ma)。

 

例如,客戶機(ji)能夠讀一(yi)組(zu)離散(san)量輸(shu)出(chu)或輸(shu)入的開(kai)/關(guan)狀態,或者用(yong)戶能夠讀/寫一(yi)組(zu)寄存(cun)器數(shu)據內容。當服務器對(dui)客戶機(ji)響(xiang)應(ying)時,它使用(yong)功(gong)能碼域來指示正常(無(wu)差錯(cuo)(cuo))響(xiang)應(ying)或出(chu)現某種差錯(cuo)(cuo)(稱為異常響(xiang)應(ying))。對(dui)于(yu)一(yi)個正常響(xiang)應(ying)來說,服務器僅(jin)對(dui)原始功(gong)能碼響(xiang)應(ying)。

 

對于(yu)異(yi)常(chang)響應,服務器返(fan)回一個與客戶(hu)機等同(tong)的碼(ma),設置該原始功(gong)能碼(ma)的最高有效(xiao)位為邏輯1,并(bing)加(jia)該異(yi)常(chang)碼(ma)后增加(jia)錯誤碼(ma),以通(tong)知(zhi)客戶(hu)機異(yi)常(chang)原因。

 

有效功能碼:

 

有效功(gong)能碼(ma)有二十(shi)幾(ji)種(zhong)(zhong),但是(shi)一般使(shi)(shi)用上都以(yi)1、2、3、4、5、6、15、16等八種(zhong)(zhong)最為常用,以(yi)及另外特殊使(shi)(shi)用的(de)20、21兩種(zhong)(zhong),此為General Reference Register,絕大(da)部份的(de)Modbus設備并不會提(ti)供此Register。于PLC上主要的(de)控制數據(ju)有下列四種(zhong)(zhong)型式。此八種(zhong)(zhong)功(gong)能碼(ma)就是(shi)處理這些(xie)控制資料,詳細說明如(ru)下各點:

 

控制數據四種型式:

 

DI:DigitalInput(數(shu)字輸(shu)入,離散輸(shu)入),一個地址一個數(shu)據位,用戶(hu)只能讀取它的狀態,不能修改。以一個 bit表示 On/Off,用來記(ji)錄控制信號的狀態輸(shu)入,例如:開關,接(jie)觸(chu)點,馬達運轉,超限switch…等等。于PLC上被稱(cheng)為Input relay、input coil等。

 

DO:DigitalOutput(數字輸(shu)出(chu),線圈輸(shu)出(chu)),一個(ge)地址一個(ge)數據位(wei),用戶可以(yi)(yi)置位(wei)、復位(wei),可以(yi)(yi)回讀狀(zhuang)態。以(yi)(yi)一個(ge) bit表示(shi) On/Off,用來輸(shu)出(chu)控制信號,以(yi)(yi)激活或(huo)停止馬達,警(jing)鈴(ling),燈光…等等。于PLC上(shang)被稱(cheng)為Output relay、Output coil等。

 

AI:Analog Input(模擬輸(shu)入(ru),輸(shu)入(ru)寄存(cun)器),一個地址16位數(shu)據,用(yong)戶(hu)只能讀,不能修改,,以16 bits integer表(biao)示一個數(shu)值(zhi),用(yong)來記錄(lu)控制信(xin)號的數(shu)值(zhi)輸(shu)入(ru),例如(ru):溫度、流(liu)量(liang)、料量(liang)、速度、轉速、文件板開(kai)度、液位、重(zhong)量(liang)…等(deng)等(deng)。于(yu)PLC上被稱為Input register。

 

AO:AnalogOutput(模擬輸出,保持寄存器(qi)),一(yi)個地址16位數(shu)據(ju),用戶可以(yi)(yi)寫,也可以(yi)(yi)回讀,以(yi)(yi)16 bits integer表示一(yi)個數(shu)值(zhi),用來輸出控(kong)制信號的數(shu)值(zhi),例如(ru):溫度、流量、速度、轉(zhuan)速、文件板(ban)開度、飼料量…等等設定值(zhi)。于PLC上被(bei)稱為Output register、Holding register。

 

圖片圖片

 

08 Modbus協議安全分析

圖片

Modbus 協(xie)(xie)議是(shi)典(dian)型(xing)的工(gong)控網協(xie)(xie)議,研究其安(an)全(quan)(quan)性(xing)對(dui)于加強工(gong)業(ye)控制網絡(luo)的安(an)全(quan)(quan)性(xing)有(you)重(zhong)要意(yi)義。一(yi)般來說,協(xie)(xie)議安(an)全(quan)(quan)性(xing)問題可以分為兩(liang)種(zhong)(zhong),一(yi)種(zhong)(zhong)是(shi)協(xie)(xie)議自身的設計和描(miao)述引起的安(an)全(quan)(quan)問題; 另一(yi)種(zhong)(zhong)是(shi)協(xie)(xie)議的不正確實現引起的安(an)全(quan)(quan)問題。Modbus 協(xie)(xie)議也存在著這兩(liang)方面的問題。

 

8.1Modbus 協議的固有問題

 

絕(jue)大多數工(gong)控協議(yi)在設計(ji)之(zhi)初,僅(jin)僅(jin)考慮了功能實(shi)現、提高效率、提高可(ke)靠性(xing)等(deng)方面,而沒(mei)考慮過安(an)全性(xing)問(wen)題。Modbus 協議(yi)也不(bu)例外,盡(jin)管其已(yi)經(jing)成(cheng)為事(shi)實(shi)上的工(gong)業標準(zhun)。從前面原理分析可(ke)以看出(chu)其本身的安(an)全性(xing)問(wen)題是: 缺乏認證、授權、加密等(deng)安(an)全防護機制和功能碼(ma)濫(lan)用(yong)問(wen)題。

 

(1)缺(que)乏認證

認(ren)證的(de)(de)目的(de)(de)是保(bao)證收到(dao)的(de)(de)信(xin)(xin)息來自(zi)合(he)法的(de)(de)用(yong)戶,未認(ren)證用(yong)戶向設備(bei)發送(song)控制命令不會(hui)被(bei)執行。在(zai)Modbus 協議通信(xin)(xin)過(guo)程(cheng)中,沒(mei)有(you)任(ren)何認(ren)證方(fang)面的(de)(de)相關定(ding)義,攻擊者只需要找(zhao)到(dao)一(yi)個(ge)(ge)合(he)法的(de)(de)地址(zhi)就可以(yi)使用(yong)功能(neng)碼就能(neng)建立一(yi)個(ge)(ge)Modbus 通信(xin)(xin)會(hui)話,從而擾亂(luan)整個(ge)(ge)或者部分(fen)控制過(guo)程(cheng)。

 

(2)缺乏授權

授權(quan)是保證不同(tong)的(de)特權(quan)操作(zuo)需(xu)要由(you)擁有(you)不同(tong)權(quan)限的(de)認(ren)證用(yong)(yong)戶(hu)(hu)來完成,這樣(yang)可大大降低(di)誤(wu)操作(zuo)與內部攻擊的(de)概率。目前(qian),Modbus 協議沒有(you)基(ji)于角色的(de)訪(fang)問控制(zhi)機制(zhi),也沒有(you)對用(yong)(yong)戶(hu)(hu)分類,沒有(you)對用(yong)(yong)戶(hu)(hu)的(de)權(quan)限進行(xing)劃(hua)分,這會(hui)導致任(ren)意用(yong)(yong)戶(hu)(hu)可以執行(xing)任(ren)意功能(neng)。

 

(3)缺乏加密(mi)

加密可以保證通(tong)信過程中(zhong)(zhong)雙方的信息不被第三(san)方非法獲取。Modbus 協(xie)議通(tong)信過程中(zhong)(zhong),地址(zhi)和命令(ling)全部(bu)采用明(ming)文(wen)傳(chuan)輸,因此數(shu)據可以很(hen)容(rong)易的被攻擊(ji)者(zhe)捕獲和解(jie)析,為攻擊(ji)者(zhe)提供便利。

 

(4)功能(neng)碼濫(lan)用

功(gong)能碼是(shi)Modbus 協議中的一項重要(yao)內容,幾乎所有的通(tong)信都(dou)(dou)包含(han)功(gong)能碼。目前,功(gong)能碼濫用是(shi)導致Modbus 網絡(luo)異常(chang)的一個主要(yao)因素。例(li)如不(bu)合法報(bao)文長度(du),短周期的無用命令(ling),不(bu)正確的報(bao)文長度(du),確認(ren)異常(chang)代碼延遲等都(dou)(dou)有可能導致拒絕服務攻(gong)擊(ji)。

 

8.2協議實現產生的問題

 

雖然Modbus 協議獲得了(le)廣泛(fan)的(de)(de)應(ying)用,但(dan)是在實(shi)現具(ju)體的(de)(de)工業控制系統(tong)時,開發(fa)者(zhe)并不具(ju)備安全知識或(huo)者(zhe)沒有意(yi)識到安全問題。這樣就(jiu)導(dao)致了(le)使用Modbus 協議的(de)(de)系統(tong)中可(ke)能存在各種各樣的(de)(de)安全漏洞。

 

(1)設計安(an)全問題(ti)

Modbus 系統(tong)(tong)開發者重點(dian)關注的是其功能實(shi)現(xian)(xian)問題(ti)(ti),安全(quan)問題(ti)(ti)在設(she)計時(shi)很少被注意到。設(she)計安全(quan)是指(zhi)設(she)計時(shi)充分考慮(lv)安全(quan)性,解決(jue)Modbus 系統(tong)(tong)可能出現(xian)(xian)的各種(zhong)異(yi)常和非法(fa)操作等問題(ti)(ti)。比如在通信(xin)過程中,某個節點(dian)被惡(e)意控制(zhi)后發出非法(fa)數據,就需要考慮(lv)這些數據的判別和處(chu)理問題(ti)(ti)。

 

(2)緩沖(chong)區溢出漏洞

緩(huan)沖區(qu)溢出是指在向(xiang)緩(huan)沖區(qu)內填充數(shu)據時(shi)超過(guo)了緩(huan)沖區(qu)本(ben)身(shen)的(de)容量導致溢出的(de)數(shu)據覆(fu)蓋在合法(fa)數(shu)據上(shang),這是在軟(ruan)件開發中最常(chang)見(jian)也是非常(chang)危(wei)險(xian)的(de)漏洞,可以(yi)導致系統(tong)(tong)崩潰,或(huo)者被(bei)攻擊(ji)者利用來(lai)控制(zhi)系統(tong)(tong)。

 

Modbus 系統開發者大(da)多不(bu)具備安(an)全開發知識,這樣就(jiu)會產生(sheng)很多的緩沖區溢出漏洞(dong),一旦被惡意者利(li)用會導致(zhi)嚴重的后(hou)果(guo)。

 

(3)Modbus TCP 安全問題

目前,Modbus 協(xie)議已經可以(yi)在(zai)通用計算機和(he)通用操(cao)作(zuo)系(xi)統(tong)上實現(xian),運行于TCP /IP 之(zhi)上以(yi)滿足發展(zhan)需要。這樣,TCP /IP 協(xie)議自身(shen)存在(zai)的安(an)全問(wen)題不可避免(mian)地會(hui)影響到工控網絡安(an)全。非法(fa)網絡數據獲取,中間人(ren),拒絕服務, IP 欺騙,病毒木馬(ma)等在(zai)IP 互聯(lian)網中的常用攻擊手段都會(hui)影響Modbus 系(xi)統(tong)安(an)全。

 

8.3安全建議

 

目前,Modbus 系統(tong)(tong)采取的(de)安(an)全防護(hu)措施普(pu)遍不足,這里參考信(xin)息(xi)安(an)全業內研究(jiu)并結合工(gong)控系統(tong)(tong)自身的(de)安(an)全問題,提出了一些安(an)全建議(yi),能(neng)夠有(you)效(xiao)地降低工(gong)業控制(zhi)系統(tong)(tong)面臨的(de)威脅(xie)。

 

(1)從源頭開(kai)始

工(gong)控網絡漏洞,很大(da)一部分是其實現(xian)過程出(chu)現(xian)的(de)(de)(de)漏洞。如果(guo)從源(yuan)頭開(kai)始控制,從Modbus 系統(tong)的(de)(de)(de)需求(qiu)設計、開(kai)發實現(xian)、內(nei)部測試和(he)部署等階段,全生命周期的(de)(de)(de)介入安(an)全手段,融入安(an)全設計、安(an)全編碼以及安(an)全測試等技術,可以極大(da)地(di)消除(chu)安(an)全漏洞,降低整(zheng)個Modbus 系統(tong)的(de)(de)(de)安(an)全風險(xian)。

 

(2)異常行為檢測

異常(chang)(chang)行(xing)為(wei)(wei)(wei)(wei)(wei)代表(biao)著可能發生威脅,不(bu)管是有沒有攻擊者,因此開發針對(dui)Modbus 系統的專用異常(chang)(chang)行(xing)為(wei)(wei)(wei)(wei)(wei)檢測(ce)設備可以極(ji)大提高(gao)工控網絡的安全(quan)性(xing)。針對(dui)Modbus 系統,首先要(yao)分析其存在的各(ge)種操作行(xing)為(wei)(wei)(wei)(wei)(wei),依據“主體,地點,時間,訪(fang)問(wen)方式(shi),操作,客(ke)體”等行(xing)為(wei)(wei)(wei)(wei)(wei)描述成一個(ge)六元組模型(xing); 進而(er)分析其行(xing)為(wei)(wei)(wei)(wei)(wei)是否屬(shu)于異常(chang)(chang); 最終決定采取記錄(lu)或(huo)者報(bao)警等措施。

 

(3)安全審計(ji)

Modbus 的安全(quan)審計(ji)就是對協議數據進行深度解(jie)碼分(fen)析,記錄操作的時(shi)間、地點、操作者和操作行為等關鍵信(xin)息(xi),實現對Modbus 系(xi)統的安全(quan)審計(ji)日(ri)志(zhi)記錄和審計(ji)功能(neng),從(cong)而提供安全(quan)事(shi)件爆發后的時(shi)候追查能(neng)力。

 

(4)使用網絡安全設備

使用(yong)入(ru)(ru)侵防(fang)御(yu)和(he)防(fang)火墻等(deng)網(wang)絡安全(quan)設備(bei)(bei)。防(fang)火墻是一個串(chuan)行(xing)設備(bei)(bei),通過設置,只允許特定(ding)的(de)(de)地(di)(di)址(zhi)訪問服務(wu)端,禁止外部地(di)(di)址(zhi)訪問Modbus 服務(wu)器(qi),可(ke)以(yi)(yi)有(you)效的(de)(de)防(fang)止外部入(ru)(ru)侵; 入(ru)(ru)侵防(fang)御(yu)設備(bei)(bei)可(ke)以(yi)(yi)分析Modbus協議的(de)(de)具體操作(zuo)(zuo)內(nei)容,有(you)效地(di)(di)檢測并(bing)阻(zu)止來自內(nei)部/外部的(de)(de)異常操作(zuo)(zuo)和(he)各種(zhong)滲透(tou)攻(gong)擊(ji)行(xing)為(wei),對(dui)內(nei)網(wang)提供保護(hu)功能。

 

本文(wen)來源(yuan)于(yu)網(wang)絡(luo),版權(quan)歸原作(zuo)者(zhe)所有(you),但(dan)因轉(zhuan)(zhuan)載眾多,無(wu)法(fa)確(que)認原作(zuo)者(zhe),故僅標(biao)明轉(zhuan)(zhuan)載來源(yuan)。

 

上一篇:施耐德電氣開放自動化平臺初體驗(4)

下一篇:施耐德電氣開放自動化平臺初體驗(3)

相關推薦