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