odbus協議是一項應用層報文傳輸協議,包括ASCII、RTU、TCP三種報文類型。標準的Modbus協議物理層接口有RS232、RS422、RS485和以太網接口,采用master/slave方式通信。Modbus設備可分為主站(Master)和從站(slave),主站只有一個,從站有多個,主站向各從站發送請求幀,從站給予響應。在使用TCP通信時,主站為client端,主動建立連接;從站為server端,等待連接。對于這三種通信在數據模型和功能調用上都是相同的,只有封裝方式是不同的。Modbus TCP協議是一個運行在TCP/IP網絡連接中的一種協議,與傳統的串口方式相比,MODBUS TCP插入一個標準的MODBUS報文頭到 TCP報文中,不再帶有差錯校驗和地址域,如圖1所示。MBAP為報文頭,長度為7字節,組成如下表1。
圖1. Modbus 報文幀
表1.報文頭MBAP
內容 | 解釋 |
---|---|
事務處理標識(2Bytes) | 可以理解為報文的序列號,一般每次通信之后就要加1以區別不同的通信數據報文。 |
協議標識符(2Bytes) | 00 00表示ModbusTCP協議。 |
長度(2Bytes) | 表示接下來的數據長度,單位為字節。 |
單元標識符(1Byte) | 可以理解為設備地址。 |
SIMATIC S7-1500 ModbusTCP 通信使用要求
從TIA Portal V12 SP1開始軟件中增加了S7-1500的Modbus TCP塊庫(V3.0及以上版本),用于S7-1500與支持Modbus TCP的通信伙伴進行通信,如下圖2所示。S7-1500支持ModbusTCP指令的所有庫版本,在用戶程序中調用和參數化"MB_CLIENT"和"MB_SERVER"指令。
"MB_CLIENT"指令通過CPU 或 CM/CP 的本地接口作為ModbusTCP客戶端進行通信,無需要任何額外的硬件支持。使用"MB_CLIENT"指令在客戶端和服務器之間建立連接,發送請求和接收響應,并控制斷開連接。
"MB_SERVER"指令通過CPU 或 CM/CP 的本地接口作為ModbusTCP服務器進行通信,無需要任何額外的硬件支持。"MB_SERVER"指令處理ModbusTCP客戶端的連接請求,接收Modbus客戶端的請求并發送響應消息。
圖2. 通信指令
Modbus TCP 實驗環境和內容
在本應用實例中,通過以下產品進行Modbus TCP編程,實現了S7-1500通過CP1543-1分別作為客戶端和服務器與第三方測試軟件進行通信。
軟件:
TIA V16 Professional
Modbus Poll
Modbus Slave
硬件:
CPU 1511-1 PN V2.8
CP 1543-1 V2.2
Modbus TCP 通信程序
1、CP1543-1作為服務器
1.1、打開 TIA Portal V16軟件,新建一個項目命名為 "ModbusTCP",在項目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,為CP1543-1以太網接口新建一個子網并設置 IP地址為 "192.168.0.3",如下圖 3 所示。
圖3. 分配IP地址
1.2、在 CPU1511-1PN的 OB1組織塊中添加Modbus TCP Server功能塊 "MB_SERVER",軟件將提示會為該 FB塊增加一個背景數據塊,本例中為 DB1"MB_SERVER_DB",如下圖4所示。接下來為指令塊分配引腳,各引腳的具體含義如下表 2 所示。
圖4. 指令創建
1.3、保持性寄存器存儲區與"MB_SERVER"管腳參數"MB_HOLD_REG"進行映射,對于線圈、離散輸入、輸入寄存器等通過功能塊均已經與 S7-1500的過程映像區進行了映射,其映射地址對應如表 3 所示。
表3.CPU的Modbus地址映射表
Modbus功能 | S7-1500 CPU | ||||
---|---|---|---|---|---|
功能碼 | 功能 | 數據區 | 地址空間 | 數據區 | CPU地址 |
01 | 讀取:位 | Output | 1~9999 | 過程映像輸出 | Q0.0~Q1249.6 |
02 | 讀取:位 | Input | 10001~19999 | 過程映像輸入 | I0.0~I1249.6 |
03 | 讀取:Word | 保持性寄存器 | 40001~49999 400001~465535 | 全局數據(DB、過程映像、M區) | 與指令引腳MB_HOLD_REG關聯 |
04 | 讀取:Word | Input | 30001~39999 | 過程映像輸入 | IW0~IW19996 |
05 | 寫入:位 | Output | 1~9999 | 過程映像輸出 | Q0.0~Q1249.6 |
06 | 寫入:Word | 保持性寄存器 | 40001~49999 400001~465535 | 全局數據(DB、過程映像、M區) | 與指令引腳MB_HOLD_REG關聯 |
15 | 寫入:位 | Output | 1~9999 | 過程映像輸出 | Q0.0~Q1249.6 |
16 | 寫入:Word | 保持性寄存器 | 40001~49999 400001~465535 | 全局數據(DB、過程映像、M區) | 與指令引腳MB_HOLD_REG關聯 |
1.4、使用上述指令實現CP1543-1為Modbus TCP的 Server與通信伙伴建立通信,通過表2可知CONNECT參數的設定有兩種方式,下面分別介紹這兩種方式如何創建CONNECT參數。
(1)使用TCON_IP_v4結構創建連接參數。
添加一個全局數據塊用于匹配功能塊"MB_SERVER"的管腳"CONNECT",本例中為數據塊DB2(塊名稱:MB_CONNECT),打開該數據塊,創建變量 "MB_Server",手動在數據類型框中輸入"TCON_IP_v4",并將該變量關聯到功能塊"MB_SERVER"的管腳參數"CONNECT"上,如下圖5所示。數據類型“TCON_IP_V4”的各參數含義及本例中設置如下表4所示。
圖5. 創建“TCON_IP_V4”類型的CONNECT參數
表4."TCON_IP_V4"數據類型的參數設置
TCON_IP_v4結構 | 含義 | 本例為 SERVER時的設置 |
---|---|---|
InterfaceID | 本地接口的硬件標識符(參見圖 6)。 | 259 |
ID |
引用該連接(取值范圍:1 到 4095)。 該參數將唯一確定 CPU 中的連接。指令 "MB_SERVER"的每個實例必須使用唯一的 ID。該 ID 還不得被不同通信類型的其他指令同時使用。 |
1 |
ConnectionType | 連接類型,對于 TCP,選擇 11(十進制)。不允許使用其它連接類型。如果使用了其它連接類型(如 UDP),該指令的 STATUS 參數將輸出相應的錯誤消息。 | 16#0B |
ActiveEstablished | 建立連接的方式所對應的 ID,對于被動連接建立,應選擇 FALSE。 | False |
RemoteAddress |
連接伙伴的 IP 地址,例如 192.168.0.1: addr[1] = 192 addr[2] = 168 addr[3] = 0 addr[4] = 1 如果指令"MB_SERVER"要接受來自任何連接伙伴的連接請求,應將"0.0.0.0" 用作 IP 地址。 |
0.0.0.0 |
RemotePort |
遠程連接伙伴的端口號(取值范圍:1 - 49151)。 如果指令"MB_SERVER"要接受來自遠程伙伴任何端口的連接請求,應將"0"用作端口號。 |
0 |
LocalPort |
本地連接伙伴的端口號(取值范圍:1 - 49151)。 此 IP 端口號定義 Modbus 客戶端連接請求中要監視的 IP 端口。默認值為 502。 |
502 |
圖6. 硬件接口標識符
(2)通過"網絡視圖"創建TCP連接后,再使用TCON_Configured結構創建連接參數。
在"網絡視圖"窗口,左上側選擇"連接"按鈕,選擇”TCP連接“,然后在CPU上點擊鼠標"右鍵"并選擇"添加新連接"。如下圖7所示。
圖7. 添加新連接
在"添加新連接"窗口中,"類型"選擇為"TCP連接",伙伴選擇"未指定",本地接口選擇"CP1543-1,以太網接口_1[X1]",分配本地連接ID,服務器為被動連接,點擊 "添加"創建TCP 連接,如下圖8所示。
圖8. 創建TCP連接
"TCP_連接_1"為建立的連接,選中該連接,在屬性的"地址詳細信息"中可以設置該TCP 連接的相關信息,如下圖9所示。
圖9. TCP連接參數設置
添加一個全局數據塊用于匹配功能塊"MB_SERVER"的管腳"CONNECT",本例中為數據塊DB2(塊名稱:MB_CONNECT),打開該數據塊,創建變量 "MB_Server",手動在數據類型框中輸入"TCON_Configured",并將該變量關聯到功能塊"MB_SERVER"的管腳參數"CONNECT"上,如下圖10所示。數據類型“TCON_Configured”的各參數含義及本例中設置如下表5所示。
圖10. 創建“TCON_Configured”類型的CONNECT參數
表5."TCON_Configured"數據類型的參數設置
TCON_Configured結構 | 含義 | 本例為 SERVER時的設置 |
---|---|---|
InterfaceID | 本地接口的硬件標識符(參見圖 6)。 | 259 |
ID |
引用該連接(取值范圍:1 到 4095)。 ID 在 CPU 范圍內必須是唯一的。ID 還不得被不同通信類型的其他指令同時使用。輸入現有連接的連接 ID。 |
256(16#100) |
ConnectionType | 連接類型,對于組態連接,選擇 254(十進制)。 | 254 |
1.5、仿真軟件設置,如下圖11所示。
圖11. 仿真軟件連接設置
1.6、測試結果
圖12. 測試結果
2、CP1543-1 作為客戶端
2.1、打開 TIA Portal V16軟件,新建一個項目命名為 "ModbusTCP",在項目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,為CP1543-1以太網接口新建一個子網并設置 IP地址為 "192.168.0.3",如上圖 13 所示。
圖13. 分配IP地址
2.2、在 CPU1511-1PN 的 OB1組織塊中添加Modbus TCP Client功能塊 "MB_CLIENT",軟件將提示會為該 FB塊增加一個背景數據塊,本例中為 DB1"MB_CLIENT_DB",如下圖14所示。接下來為指令塊分配引腳,各引腳的具體含義如下表 6 所示。
圖14. 指令創建
2.3、參數 MB_MODE、MB_DATA_ADDR 和 MB_DATA_LEN 的組合定義了 MB_MODE 值為 0、1 和 2 時,當前 Modbus 消息中所用的 Modbus 功能代碼,對應關系如下表7所示。
MB_MODE 中包含有關讀寫操作的信息。MB_MODE=0:讀取,MB_MODE=1 和 2:寫入(注:MB_MODE=2 時,Modbus 功能 15 和 05 或 Modbus 功能 16 和 06 無區別。)
MB_DATA_ADDR 中包含有關待讀取/寫入的目標信息,以及“MB_CLIENT”指令用于計算遠程地址的地址信息。
MB_DATA_LEN 包含要讀/寫的值的數量。
2.4、使用上述指令實現CP1543-1為Modbus TCP的 Client與通信伙伴建立通信,通過表6可知CONNECT參數的設定有兩種方式,下面分別介紹這兩種方式如何創建CONNECT參數。
(1)使用TCON_IP_v4結構創建連接參數。
添加一個全局數據塊用于匹配功能塊"MB_CLIENT"的管腳"CONNECT",本例中為數據塊DB2(塊名稱:MB_CONNECT),打開該數據塊,創建變量 "MB_CLIENT",手動在數據類型框中輸入"TCON_IP_v4",并將該變量關聯到功能塊"MB_CLIENT"的管腳參數"CONNECT"上,如下圖15所示。數據類型“TCON_IP_V4”的各參數含義及本例中設置如下表8所示。
圖15. 創建“TCON_IP_V4”類型的CONNECT參數
表8."TCON_IP_V4"數據類型的參數設置
TCON_IP_v4結構 | 含義 | 本例為 SERVER時的設置 |
---|---|---|
InterfaceID | 本地接口的硬件標識符(參見圖 16)。 | 259 |
ID |
引用該連接(取值范圍:1 到 4095)。 該參數將唯一確定 CPU 中的連接。指令 "MB_CLIENT"的每個實例必須使用唯一的 ID。 |
1 |
ConnectionType | 連接類型,對于 TCP,選擇 11(十進制)。不允許使用其它連接類型。如果使用了其它連接類型(如 UDP),該指令的 STATUS 參數將輸出相應的錯誤消息。 | 16#0B |
ActiveEstablished | 建立連接的方式所對應的 ID,對于被動連接建立,應選擇 FALSE。 | TRUE |
RemoteAddress |
連接伙伴(Modbus 服務器)的 IP 地址,例如,192.168.0.1: addr[1] = 192 addr[2] = 168 addr[3] = 0 addr[4] = 1 |
192.168.0.100 |
RemotePort |
遠程連接伙伴的端口號(取值范圍:1 - 49151)。 使用客戶端通過 TCP/IP 協議與其建立連接并最終通信的服務器的 IP 端口號(默認值:502)。 |
502 |
LocalPort | 本地連接伙伴的端口號:端口號:1 至 49151;任意端口:“0” 。 | 0 |
圖16. 硬件接口標識符
(2)通過"網絡視圖"創建TCP連接后,再使用TCON_Configured結構創建連接參數。
在"網絡視圖"窗口,左上側選擇"連接"按鈕,選擇”TCP連接“,然后在CPU上點擊鼠標"右鍵"并選擇"添加新連接"。如下圖17所示。
圖17. 添加新連接
在"添加新連接"窗口中,"類型"選擇為"TCP連接",伙伴選擇"未指定",本地接口選擇"CP1543-1,以太網接口_1[X1]",分配本地連接ID,服務器為被動連接,點擊 "添加"創建TCP 連接,如下圖18所示。
圖18. 創建TCP連接
"TCP_連接_2"為建立的連接,選中該連接,在屬性的"地址詳細信息"中可以設置該TCP 連接的相關信息,如下圖19所示。
圖19. TCP連接參數設置
添加一個全局數據塊用于匹配功能塊"MB_CLIENT"的管腳"CONNECT",本例中為數據塊DB2(塊名稱:MB_CONNECT),打開該數據塊,創建變量 "MB_CLIENT",手動在數據類型框中輸入"TCON_Configured",并將該變量關聯到功能塊"MB_CLIENT"的管腳參數"CONNECT"上,如下圖20所示。數據類型“TCON_Configured”的各參數含義及本例中設置如下表9所示。
圖20. 創建“TCON_Configured”類型的CONNECT參數
表9."TCON_Configured"數據類型的參數設置
TCON_Configured結構 | 含義 | 本例為CLIENT時的設置 |
---|---|---|
InterfaceID | 本地接口的硬件標識符(參見圖 6)。 | 259 |
ID |
引用該連接(取值范圍:1 到 4095)。 輸入現有連接的連接 ID。 |
256(16#100) |
ConnectionType | 連接類型,對于組態連接,選擇 254(十進制)。 | 254 |
1.5、仿真軟件設置,如下圖21所示。
圖21. 仿真軟件連接設置
圖22. 參數設置
1.6、測試結果
圖23. 測試結果
常見問題
1、CP1543-1可以與串口進行ModbusTCP通信嗎?
如果 S7-1500 作為 Modbus TCP 客戶端與 Modbus TCP 服務器通信,并且嘗試訪問比 Modbus TCP 服務器更低端的串行子網中的設備,那么在此情形下會有報錯 "無法建立連接"。這種情況下,就要使用 "MB_CLIENT" 參數了。"MB_UNIT_ID" 參數相當于 Modbus RTU 協議中的從站地址。如果將 Modbus TCP 服務器當做 Modbus RTU 協議中的網關,那么從站設備可以通過 "MB_UNIT_ID" 參數來識別。Modbus TCP 客戶端直接向Modbus TCP 服務器發送請求,而Modbus TCP 服務器通過 "MB_UNIT_ID" 參數將請求轉發到從站設備。
審核編輯:湯梓紅
-
通信
+關注
關注
18文章
6175瀏覽量
137370 -
MODBUS
+關注
關注
28文章
2007瀏覽量
78962 -
TCP
+關注
關注
8文章
1397瀏覽量
80392 -
SIMATIC
+關注
關注
1文章
231瀏覽量
16196
原文標題:Modbus TCP 通信概述
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Modbus TCP通信報文解析

Modbus TCP轉Modbus RTU的實現
組態王modbus通信用法教程modbus-rtu、modbus-tcp***康通信配置步驟
力控modbus通信方法modbus-tcp、modbus-rtu***康通信配置步驟
基于Modbus TCP協議實現PC機與PLC的串行通信

Modbus/TCP通訊配置

Modbus RTU和Modbus TCP的區別
ModBus RTU 與 ModBus TCP
Modbus TCP通訊概述
S7-1200集成PN接口MODBUS TCP通信概述

MODBUS TCP 轉 CANOpen

評論