基於TCP/IP的Modbus工控協議

2021-02-23 時間之外沉浮事
一、乙太網的標準


乙太網是一種區域網。早期標準為IEEE 802.3,數據鏈路層使用CSMA/CD,10Mb/s速度物理層有:

(1)10 Base 5粗同軸電纜,RG-8,一段最長為500m;

(2)10 Base 2細同軸電纜,RG-58,一段最長為185m;

(3)10 Base T雙絞線,UTP或STP,一段最長為100m。

快速乙太網為100Mb/s,標準為802.3a,介質為100 Base Tx雙絞線、100 Base Fx光纖。

另外從距離而言,非屏蔽雙絞線(UTP)為100m,多模光纖可達2~3km,單模光纖可大於100km。千兆乙太網1000Mb/s為802.3z/802.3ab,萬兆乙太網10Gb/s為802.3ae。

 

二、工業乙太網與商用乙太網的區別


什麼是工業乙太網?技術上,它與IEEE802.3兼容,故從邏輯上可把商用網和工業網看成是一個乙太網,而用戶可根據現場情況,靈活裝配自己的網絡部件,但從工業環境的惡劣和抗幹擾的要求,設計者希望採用市場上可找到的乙太網晶片和媒介,兼顧考慮下述工業現場的特殊要求:首先要考慮高溫、潮溼、振動;二是對工業抗電磁幹擾和抗輻射有一定要求,如滿足EN50081-2、EN50082-2標準,而辦公室級別的產品未經這些工業標準測試,表1列出了一些常用工業標準。為改善抗幹擾性和降低輻射,工業乙太網產品多使用多層線路板或雙面電路板,且外殼採用金屬如鑄鋁屏蔽幹擾;三是電源要求,因集線器、交換機、收發器多為有源部件,而現場電源的品質又較差,故常採用雙路直流電或交流電為其供電,另外考慮方便安裝,工業乙太網產品多數使用DIN導軌或面板安裝;四是通信介質選擇,在辦公室環境下多數配線使用UTP,而在工業環境下推薦用戶使用STP(帶屏蔽雙絞線)和光纖。

 

三、TCP/IP

 

1. 為什麼使用TCP/IP?

 

最主要的一個原因在於它能使用在多種物理網絡技術上,包括區域網和廣域網技術。TCP/IP協議的成功很大程度上取決於它能適應幾乎所有底層通信技術。

20世紀80年代初,先在X.25上運行TCP/IP協議;而後又在一個撥號語音網絡(如電話系統)上使用TCP/IP協議,又有TCP/IP在令牌環網上運行成功;最後又實現了TCP/IP遠程分組無線網點與其他Internet網點間TCP/IP通信。所以TCP/IP協議極其靈活,具備連接不同網絡的能力。

另外,使用TCP/IP也簡化了OSI模型,因為它省略了表示層和會話層。如果現在把乙太網的物理層和數據鏈路層加到OSI模型就構成了基於乙太網的TCP/IP網,如圖1所示。用乙太網實現TCP/IP也是經濟的一種方式。

2. InternetProtocol(IP)

 

IP是Internet最基本的協議,用戶可從www.ietf.org下載RFC79來得到其文件,(要求評論RFC: Request For Comments:一系列備忘錄的名稱,包括概述、評價、意見、技術和研究,以及所提出的和被接受的網際網路標準)。

IP層主要目的是找到IP報文的「下一個連接點」,它可以是路由器、計算機、控制器甚至I/O,關鍵該設備須有自己的IP位址。凡在網絡層使用IP協議的網絡,都通過IP位址尋址,所以使用時首先要進行複雜的設置,每個節點至少需一個「IP位址」、一個「子網掩碼」、一個「默認網點」和一個「主機名」,如此複雜的設置,對於一些初識網絡的用戶來說的確帶來不便,不過隨著對網絡熟悉,有許多IP位址配置工具,可方便進行IP設置,甚至是自動設置。

IP是面向報文的協議,它獨立處理每個報文包,每個報文包必須含有完整的尋址信息。IP報文包的格式如圖2所示。

IP位址的類型共有4種(如圖3所示):A類用於處理超大型網絡,最多16387064個主機(1~126);B類網絡最多可有64516個主機(網絡地址的第一段為128~191);C類用於小型網絡,最多可有254個主機(網絡地址的第一段為192~223);D類用於多點播送,用於多目的信息的傳輸。全零(「0.0.0.0」)地址對應於當前主機,全1地址(「255.255.255.255」)是當前子網的廣播地址。

 

3. TransmissionControl Protocol (TCP)

 

TCP是基於傳輸層的協議(如圖4所示),協議文件可從RFC793得到,使用廣泛,面向連接的可靠協議。它能把報文分解為數段,在目的站再重新裝配這些段,支持重新發送未被收到的段,提供兩臺設備間的全雙工連接,允許它們高效地交換大量數據。TCP使用滑動窗口協議來高效使用網絡。由於TCP很少幹預底層投遞系統的工作,它適應各種投遞系統;且提供流量控制,能使各種不同速率的系統進行通信。報文段是TCP所使用的基本傳輸單元,用於傳輸數據或控制信息。

 

4. TCP埠

 

TCP是使用埠(Socket)號把信息傳到上層,為用戶提供不同服務,埠號跟蹤同一時間內通過網絡的不同會話。RFC1700中定義了眾所周知的特殊埠號,常用埠如表2所列。其中502埠是自動化公司唯一所擁有的埠號碼。

5. 協議(Protocal)的功能

 

組建網絡時,必須選擇一種網絡通信協議,使得用戶之間能相互進行「交流」。協議是網絡設備用來通信的一套規則,可理解為一種彼此都能聽懂的公用語言。如在網絡層使用IP協議,在傳輸層使用TCP協議,就構成了目前常用的TCP/IP協議,現在幾乎所有廠商和作業系統都支持它。同時,TCP/IP也是Internet的基礎協議。

 

如在應用層使用工業上事實標準的Modbus協議(如圖5所示),就構成了完整工業乙太網應用。

 

四、開放和標準的Modbus TCP


 

Modbus是開放協議,IANA(Internet Assigned NumbersAuthority, 網際網路編號分配管理機構)給Modbus協議賦予TCP埠502,Modbus協議可免費從www.Modbus.org得到。

 

Modbus是標準協議,它已提交給IETF(Internet Engineering TaskForce, 網際網路工程任務部),將成為Internet標準。因自1978年,工業自動化行業已安裝了百萬計串口Modbus設備和十萬計ModbusTCP/IP設備,擁有超過300個Modbus兼容設備廠商,還有90%的第三廠家I/O支持Modbus TCP/IP,所以是使用廣泛的事實標準。Modbus的普及得益於使用門坎很低,無論用串口還是用乙太網,硬體成本低廉,Modbus和Modbus TCP都可以免費得到,不需交任何費用,且在網上有很多免費資源,如C/C++、JAVA樣板程序、ActiveX控制項、各種測試工具等,所以用戶使用很方便。另外,幾乎可找到任何現場總線到Modbus TCP的網點,方便用戶實現各種網絡之間的互聯。

 

1. Modbus TCP/IP

 

如果使用TCP/IP乙太網的5層:

第一層:物理層,提供設備的物理接口,與市售的介質/網絡適配器相兼容;

第二層:數據鏈路層,格式化信號到源/目的硬體地址的數據幀;

第三層:網絡層,實現帶有32位IP位址的IP報文包;

第四層:傳輸層,實現可靠性連接、傳輸、查錯、重發、埠服務、傳輸調度;

第五層:應用層,Modbus協議報文。

 

2. Modbus TCP數據幀

 

在TCP/IP乙太網上傳輸,支持EthernetII和802.3兩種幀格式。圖6所示,Modbus TCP數據幀包含報文頭、功能代碼和數據3部分。

MBAP報文頭(MBAP、Modbus Application Protocol、Modbus應用協議)分4個域,共7個字節,如表3所示。

3. Modbus功能代碼

 

共有3種類型分別為:

 (1)公共功能代碼(如表4所示):已定義好的功能碼,保證其唯一性,由Modbus.org認可;

 (2)用戶自定義功能代碼有兩組,分別為65~72和100~110,無需認可,但不保證代碼使用的  唯一性。如變為公共代碼,需交RFC認可;(3)保留的功能代碼,由某些公司使用在某些傳統設備的代碼,不可作為公共用途。

功能代碼劃分:按應用深淺,可分為3個類別。

 類別0,對於客戶機/伺服器最小的可用子集:讀多個保持寄存器(fc.3);寫多個保持寄存器(fc.16)。

 類別1,可實現基本互易操作的常用代碼:讀線圈(fc.1);讀開關量輸入(fc.2);讀輸入寄存器(fc.4);寫線圈(fc.5);寫單一寄存器(fc.6)。

 類別2,用於人機界面、監控系統的例行操作和數據傳送功能:

 強制多個線圈(fc.15);讀通用寄存器(fc.20);寫通用寄存器(fc.21);屏蔽寫寄存器(fc.22);讀寫寄存器(fc.23)。

 

4. Modbus應用舉例

 

 讀寄存器(見表5)。

 Modbus TCP請求報文舉例(見表6)。

 Modbus TCP客戶端的實況。

 用Connect()命令建立目標設備TCP502埠的連接數據通信的過程:

     準備Modbus報文,包括7個字節的MBAP在內的請求;

     使用send()命令發送;

     在同一連接等待應答;

     同recv()讀報文,完成一次數據交換過程。

     當通信任務結束時,關閉TCP連接,使伺服器可以為其他服務。

  Modbus TCP的樣板程序

     用戶可通過網站www.transparent-factory.com下載到:

    JAVA的應用程式;

    基於Unix系統下,C的應用程式;

    基於Win32系統下,C的應用程式。

 Modbus TCP協議

 協議文本的英文版可從www. modbus.org下載,如需協議文本的中文版,可向施耐德電氣(中國)投資有限公司各地區辦事處索要。

 

五、使用TCP/IP Modbus的原因 


 

TCP/IP已成為信息行業的事實標準:世界上93%的網絡都使用TCP/IP,只要在應用層使用Modbus TCP,就可實現工業乙太網數據交換;

 易於與各種系統互連:可用於管理網、實時監控網及現場設備通信;

 網絡實施價格低廉:可全部使用通用網絡部件;

 用戶強烈要求:目前中國已把Modbus TCP作為工業網絡標準之一,用戶可免費獲得協議及樣板程序,可在Unix、Linux、Windows下運行,不需要專門驅動程序。在國外,Modbus TCP被國際半導體業SEMI定為網絡標準,國際水處理、電力系統也把它作為應用的事實標準,還有越來越多行業作為標準來用;

 高速的數據:用戶最關心的是所使用網絡的傳輸能力,100M乙太網的傳輸結果為:每秒4000個Modbus TCP報文,而每個報文可傳輸125個字(16bit),故相當於4000×125=500000個模擬量數據(8000000開關量!);

 廠家能提供完整解決方案:工業乙太網的接線元件,包括工業集成器、工業交換機、工業收發器、工業連接電纜。工業乙太網伺服器,包括遠程、分布式I/O掃描功能,設備地址IP的設置功能,故障設備在線更換。功能,分組的信息發布與訂閱功能,網絡動態監視功能,還有支持瘦客戶機的Web服務。

其他工控設備的支持:如工業用人機界面、變頻器、軟起動器、電動機控制中心、乙太網I/O、各種現場總線的網橋、甚至帶TCP/IPModbus的傳感器,都為用戶使用提供了方便。

相關焦點

  • Modbus和TCP究竟有什麼區別?
    這兩個協議即有區別又有密切的聯繫。它們的相結合,不但實現了基於modbus/tcp/IP協議遠程網絡通訊,促進了modbus在其對應領域中的使用。modbus協議主要應用於電氣自動化和過程控制,一般採用RS-232或RS-485的通信接口。不足之處,就是其傳輸距離短、速度慢,導致應用受到局限。
  • Modbus和TCP有什麼區別?
    這兩個協議即有區別又有密切的聯繫。它們的相結合,不但實現了基於modbus/tcp/IP協議遠程網絡通訊,促進了modbus在其對應領域中的使用。modbus協議主要應用於電氣自動化和過程控制,一般採用RS-232或RS-485的通信接口。不足之處,就是其傳輸距離短、速度慢,導致應用受到局限。
  • 工控安全入門之Modbus
    MODBUSModbus是20世紀70年代後期由Modicon(現為施耐德電氣)為了配合其可編程邏輯控制器(PLC)一起使用,創建的基於串行的控制協議。Modbus是最常見的工業控制協議,主要是因為Modbus是一種開放的簡單而強大的協議,可以在沒有任何版稅的情況下開放使用。自從引入Modbus以來,協議已被移植到乙太網上工作。
  • 工控安全入門之攻與防
    開發者通過提供一系列的通用工控協議,使得我們能夠非常快速地在我們的系統上構建一套複雜的工控基礎設施用於欺騙未知的攻擊者。Conpot一共支持bacnet、enip、guardian_ast、ipmi、kamstrup、misc、modbus、s7comm和snmp等10個協議。
  • 【案例】ABB機器人MODBUS TCP通訊案例
    如果在現場要和PLC進行通訊,而PLC支持的是MODBUS  TCP 通訊協議,ABB並沒有提供標準的MODBUS相關處理函數,要使用modbus/tcp,可以使用普通socket收發,按照modbus TCP格式進行數據傳輸。ABB工業機器人沒有專用的指令,因此只能作為客戶端。客戶端連接程序可以放在初始化程序中,每次運行連接一次即可。
  • 濤哥帶你學習 ModBus TCP 協議 (7) – 調試工具
    編者:Modbus TCP 是比較普及的一種標準通信協議,協議格式簡單易懂,特別適合學習底層通信協議開發。
  • Modbus TCP協議及上位機軟體編寫
    一、Modbus由MODICON公司於1979年開發,是一種工業現場總線協議標準。
  • Smod - modbus/SCADA 工控安全檢測工具
    項目地址https://github.com/enddo/smod項目簡介基於SCADA(過程控制網絡)系統從專有封閉的網絡協議,近年來已經向開源解決方案和TCP / IP網絡協議方向發展。Modbus / TCP協議就是一個這樣的解決方案,他免費提供公共事業實施智能電網應用,並且被廣泛應用於電力系統。
  • 寄存器PLC地址與寄存器modbus協議地址
    寄存器modbus協議地址指通信時使用的寄存器地址,在實際編程中,由於寄存器PLC地址前綴的區分作用,所以只需說明後4位數,而且需轉換為4位十六進位地址。例如PLC地址40001對應尋址地址0x0000,40002對應尋址地址0x0001,寄存器尋址地址一般使用16進位描述。再如,PLC寄存器地址40003對應協議地址0002,PLC寄存器地址30003對應協議地址0002。
  • tcp/ip學習筆記(1)-基本概念
    為什麼會有tcp/ip在世界上各地,各種各樣的電腦運行著各自不同的作業系統為大家服務,這些電腦在表達同一種信息的時候所使用的方法是千差萬別。就好像聖經中上帝打亂了各地人的口音,讓他們無法合作一樣。TCP/IP不是一個協議,而是一個協議族的統稱。裡面包括了IP協議,ICMP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的計算機終端做自由的交流了。tcp/ip協議分層提到協議分層,我們很容易聯想到ISO-OSI的七層協議經典架構,但是TCP/IP協議族的結構則稍有不同。如圖所示
  • 工控安全 : Modbus仿真環境搭建
    前言2004 年,中國國家標準委員會正式把 Modbus 作為了國家標準, 雖然 Modbus 協議獲得了廣泛的應用,但是在實現具體的工業控制系統時,安全問題在卻很少被注意到。所以,模擬器 Modbus Poll 就是 Master,Modbus Slave 就是 Slave安裝及使用官網下載軟體安裝包https://www.modbustools.com/download.html一個 ModbusPollSetup64Bit
  • 上位機基於C#通過TCP/IP和庫卡機器人通訊
    如果你沒有C#編程的相關基礎,可以先參考:從零開始基於西門子PLC用C#通過OPC編寫一套簡易車間能源信息系統(附代碼)因為本文不是介紹該軟體的安裝,所以就不多做解釋,下面的內容默認已經能用自帶的測試軟體獲取庫卡機器人發送過來的數據。
  • (7)基於TCP/IP的網絡通信應用程式(TCP-Client)
    作為全世界最優秀的開源作業系統,Linux內部已經集成了強大的網絡協議棧,並向應用層提供豐富的系統調用,開發者可以基於通用的系統調用接口,使用Linux內核提供的網絡功能。如果要分析Linux內部的網絡通信機制以及實現原理,相信不是一時半刻或片文隻字能描述清楚,一般的應用開發者可以通過網上搜索資料去了解一下,但在初學階段,不建議去深入研究。
  • Modbus協議概念最詳細介紹
    3.3 Modbus TCPModbus TCP 是在TCP/IP網絡上運行的Modbus的實現,旨在允許Modbus ASCII / RTU協議在基於TCP / IP的網絡上傳輸。Modbus / TCP將Modbus消息嵌入TCP / IP幀內。儘管實現起來非常簡單,但是與網絡相關的特性增加了一些挑戰。
  • 為什麼 TCP/IP 協議會拆分數據
    tcp-ip圖 1 - TCP/IP 協議簇當應用層協議使用 TCP/IP 協議傳輸數據時,TCP/IP 協議簇可能會將應用層發送的數據分成多個包依次發送,而數據的接收方收到的數據可能是分段的或者拼接的,所以它需要對接收的數據進行拆分或者重組。
  • 手把手教你寫Modbus-RTU協議(實戰篇)
    好了,下面開始進入我們今天的主題,今天為大家帶來Modbus-RTU協議的實現,作者前面發布過兩篇modbus的理論篇《手把手教你寫Modbus-RTU協議(理論篇)》和《向Modbus協議說"So Easy"!》(可在文末推薦閱讀中跳轉),大家可以先閱讀這兩篇文章掌握一些基本理論。
  • 【深度分析】VPNFilter:危及全球工控設備和辦公網絡的物聯網高級威脅
    /bin32/update.phpzuh3vcyskd4gipkm.onion/bin32/update.phptljmmy4vmkqbdof4.onion/bin32/update.php這兩種方式的請求都是通過ssl協議進行的。
  • 一個基於TCP協議的Socket通信實例
    作為當前最流行的NIO框架,Netty在網際網路領域、大數據分布式計算領域、遊戲行業、通信行業等獲得了廣泛的應用,一些業界著名的開源軟體也基於Netty的NIO框架構建,如Spark、RocketMQ、Dubbo、Elasticsearch等等。Netty的優點1、API使用簡單,有豐富的例子,開發門檻低。
  • 【AIoT】公網通:公網IP基於TCP連接調試
    地址:https://iot.digcore.cn/tcp/  公網通的特點是透傳,把基於TCP連接的所有客戶端進行互聯互通,把TCP傳輸層上的所有數據內容原封不動直接透傳轉發。埠狀態:設置顯示設備接入斷開狀態加時間戳:設置每條新消息前加時間戳發送方信息:設置顯示發送客戶端的IP和埠自動換行:設置每條新消息自動換行發送回顯:設置公網通Web頁面發出的數據回顯最後,再說一下公網通的主頁地址:https://iot.digcore.cn/tcp