開題我們先羅列一下國内目前常見的
工業以太網協議以及主要廠家
Modbus TCP/IP
以及其他中立廠商
EtherNet/IP
ProfiNet
S7comm
EtherCAT
PowerLink
想必大家都知道在以太網還在以同軸電纜作為物理傳輸介質的時候,很多主流工業通訊方式還是串口,包括我們熟知的Modbus RTU,Can,MPI/PPI , 3964R, MB , DF1等等。
今天給大家講講這幾種工業以太網:
Modbus TCP/IP:首先我們來看Modbus TCP/IP, 直觀上看他還是Modbus協議,這個沒錯,Modbus TCP/IP是Modbus 協議的變體,将Modbus協議運行在了TCP/IP網絡上,連接端口是502,不需要校驗和計算,因為數據校驗在低層進行了;
還有幾種協議Modbus over TCP,Modbus over TCP/IP還有Modbus RTU/IP,這三種也是Modbus的變體,但是和Modbus TCP/IP協議最大的區别就是帶有了Modbus RTU的檢驗和。
目前也有很多人在研究Modbus UDP/IP,這和Modbus TCP/IP最大的區别在于可以提高實時性和通信效率。因為UDP是無連接協議,比TCP節約了大量網絡時間,但是可靠性和安全性不能保證。
首先,讓我們通過一段報文來理解Modbus TCP/IP,從OSI七層模型物理層到應用層
上圖我們可以清晰看到Modbus TCP/IP使用了OSI的物理層,數據鍊路層,網絡層,傳輸層以及應用層
物理層:
Frame 物理層的數據幀概況,線路307個字節,實際捕獲307個字節
數據鍊路層:
Ethernet II協議,以太網幀頭信息 (14個字節)
網卡MAC地址:
網絡層:
IP協議 IP包頭信息(20個字節)
傳輸層:
TCP協議 數據段的頭信息(20個字節)
應用層:
MBAP,Modbus 應用層的信息(253個字節)
詳細說明如下:
描述字節長度描述客戶端表示服務端表示事務識别号2字節Modbus 請求/響應任務的識别号由客戶端初始化時形成由接收到的請求信息複制協議識别号2字節0=Modbus 協議由客戶端初始化時形成由接收到的請求信息複制長度2字節後面的字節數量由客戶端發送請求時形成由服務端響應請求時形成設備識别号1字節連接的從站地址由客戶端初始化時形成由接收到的請求信息複制
關于設備識别号,對于Modbus TCP/IP協議該項默認255,但是如果該協議為Modbus Plus或者Modbus RTU等串口協議,通過串口服務器等轉換設備轉換後變為了Modbus RTU over TCP,則該項為Modbus 串口從站的設備地址。
Modbus:(246個字節)
在應用層Modbus的響應報文:
綜上内容一條完整modbus TCP/IP的構成如下:
以太網頭IP包頭數據段MBAP功能碼長度數據[0]數據[1]數據[2]......
以太網頭(14字節):
目的MAC地址(6字節)源MAC地址(6字節)類型(2字節)0x0800為IPv4
IP包頭(20字節)
版本(1字節)DSF(1字節)總長度(2字節)識别碼(2字節)标志字(1字節)段偏移(1字節)生存時間(1字節)協議(1字節)06=TCP錯誤校驗(2字節)源IP地址(4字節)目的IP地址(4字節)
數據段(20字節)
源端口(2字節)目的端口(2字節)序列号(4字節)确認号(4字節)數據段長度(1字節)Flag(1字節)窗口(2字節)校驗和(2字節)緊急指針(2字節)
後面即為Modbus TCP/IP部分信息;
Modbus TCP/IP數據結構:
Modbus TCP/IP為CS架構,Client不斷的像Server發出請求,Server端被動響應提供數據或者被寫入。讀寫的數據結構和Modbus RTU是一樣的,常見的如下四種:
序号描述地址讀寫權限1開關量輸入10001 或者 100001隻讀2模拟量輸入寄存器30001 或者 300001隻讀3線圈輸出00001 或者 000001讀寫4保持寄存器40001 或者 400001讀寫
根據以上四種數據類型,可以引申出常見的8個功能碼:
FC1讀取線圈的狀态FC5單個寫入線圈FC2讀取開關量輸入的狀态FC15連續寫入一組線圈FC3讀取保持寄存器的值FC6單個寫保持寄存器FC4讀取模拟量輸入寄存器的值FC16連續寫保持寄存器
但是實際上Modbus協議的功能碼遠不止如下8個;比如FC20和FC21就是對文件記錄的操作,其中FC20是讀取文件記錄,FC21是對文件進行寫操作。
Modbus TCP/IP Client/Server 模型:
Modbus TCP/IP工作過程:
Modbus TCP/IP和Modbus RTU ADU的區别:
Modbus RTU ADU:
從站地址功能碼數據CRC校驗
Modbus TCP/IP ADU:
Modbus 應用協議頭頭(MBAP Header)功能碼數據
其中兩點區别:1、沒有了CRC校驗2、從站地址(1個字節)變為了MBAP Header(七個字節)
最後給大家附上modbus錯誤代碼
錯誤代碼 |
說明 |
01 |
非法功能。對于服務器(或從站)來說,詢問中接收到的功能碼是不可允許的操作,可能是因為功能碼僅适用于新設備而被選單元中不可實現同時,還指出服務器(或從站)在錯誤狀态中處理這種請求,例如:它是未配置的,且要求返回寄存器值。 |
02 |
非法數據地址。對于服務器(或從站)來說,詢問中接收的數據地址是不可允許的地址,特别是參考号和傳輸長度的組合是無效的。對于帶有100個寄存器的控制器來說,偏移量96和長度4的請求會成功,而偏移量96和長度5的請求将産生異常碼02。 |
03 |
非法數據值。對于服務器(或從站)來說,詢問中包括的值是不可允許的值。該值指示了組合請求剩餘結構中的故障。例如:隐含長度是不正确的。modbus協議不知道任何特殊寄存器的任何特殊值的重要意義,寄存器中被提交存儲的數據項有一個應用程序期望之外的值。 |
04 |
從站設備故障。當服務器(或從站)正在設法執行請求的操作時,産生不可重新獲得的差錯。 |
05 |
确認。與編程命令一起使用,服務器(或從站)已經接受請求,并且正在處理這個請求,但是需要長持續時間進行這些操作,返回這個響應防止在客戶機(或主站)中發生超時錯誤,客戶機(或主機)可以繼續發送輪詢程序完成報文來确認是否完成處理。 |
06 |
從屬設備忙。與編程命令一起使用。服務器(或從站)正在處理長持續時間的程序命令。張服務器(或從站)空閑時,用戶(或主站)應該稍後重新傳輸報文。 |
08 |
存儲奇偶差錯。與功能碼20和21以及參考類型6一起使用,指示擴展文件區不能通過一緻性校驗。服務器(或從站)設法讀取記錄文件,但是在存儲器中發現一個奇偶校驗錯誤。客戶機(或主方)可以重新發送請求,但可以在服務器(或從站)設備上要求服務。 |
10 |
不可用網關路徑。與網關一起使用,指示網關不能為處理請求分配輸入端口至輸出端口的内部通信路徑。通常意味着網關是錯誤配置的或過載的。 |
11 |
網關目标設備響應失敗。與網關一起使用,指示沒有從目标設備中獲得響應。通常意味着設備未在網絡中。 |
未完待續
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!