1. 軟件版本: STEP 7 V13 SP1及其以上
2. 固件版本: S7-1200 CPU 的固件版本V4.1
圖1. Modbus TCP V4.0 版本指令塊
表1. Modbus TCP 通信的實(shí)驗環(huán)境
表2. Modbus TCP 通信雙方的基本配置
硬件標識符是在“設備組態(tài)”中,雙擊 PROFINET 接口,然后在“屬性”中的“硬件標識符”中查看。
圖2. S7-1200設備的PROFINET接口硬件標識符
1. 將MB_CLIENT 指令塊在“ 程序塊 -> OB1 ”中的程序段里調用,調用時(shí)會(huì )自動(dòng)生成背景DB ,點(diǎn)擊確定即可。
圖3. Modbus TCP 客戶(hù)端側指令塊
該功能塊各個(gè)引腳定義如下:

表4. MB_CLIENT 各引腳定義說(shuō)明
2. CONNECT 引腳的指針類(lèi)型
第一步,先創(chuàng )建一個(gè)新的全局數據塊 DB2:

圖4. 創(chuàng )建全局數據塊
第二步,雙擊打開(kāi)新生成的DB塊,定義變量名稱(chēng)為“aa',數據類(lèi)型為“TCON_IP_v4”(可以將 TCON_IP_v4 拷貝到該對話(huà)框中),然后點(diǎn)擊“回車(chē)”按鍵。該數據類(lèi)型結構創(chuàng )建完畢。如圖5所示:

圖5. 創(chuàng )建 MB_CLIENT 中的TCP連接結構的數據類(lèi)型
各個(gè)引腳定義說(shuō)明如下:

表4. TCON_IP_v4 數據結構的引腳定義
本文遠程服務(wù)器的IP地址為192.168.0.4,遠程端口號設為502。所以客戶(hù)端側該數據結構的各項值為:

圖6. MB_CLIENT 側 CONNECT 引腳數據定義
注意: CONNECT引腳的填寫(xiě)需要用符號尋址的方式。
3. 創(chuàng )建 MB_DATA_PTR 數據緩沖區
第一步,創(chuàng )建一個(gè)全局數據塊 DB3,創(chuàng )建方法可以參考上面的圖3,數據塊的名稱(chēng)如圖7所示:

圖7. 生成的兩個(gè)DB塊名稱(chēng)
第二步,建議一個(gè)數組的數據類(lèi)型,以便通信中存放數據,請參考圖8所示:

圖8. MB_DATA_PTR 數據緩沖區結構
注意: MB_DATA_PTR指定的數據緩沖區可以為DB塊或M存儲區地址中。DB塊可以為優(yōu)化的數據塊,也可以為標準的數據塊結構。若為優(yōu)化的數據塊結構,編程時(shí)需要以符號尋址的方式填寫(xiě)該引腳;若為標準的數據塊結構(可以右鍵單擊DB塊,“屬性”中將“優(yōu)化的塊訪(fǎng)問(wèn)”前面的勾去掉,如下圖9所示),需要以絕對地址的方式填寫(xiě)該引腳。本文以標準的數據塊(默認)為例進(jìn)行編程。

圖9. 修改 DB 塊屬性為標準的塊結構
4. 客戶(hù)端側完成指令塊編程
調用 MB_CLIENT 指令塊,實(shí)現從 Modbus TCP 通信服務(wù)器中讀取2個(gè)保持寄存器的值,如圖10所示:

圖10. MB_CLIENT 指令塊編程
5. 將整個(gè)項目下載到S7-1200
待Modbus TCP 服務(wù)器側準備就緒,給MB_CLIENT指令塊的REQ引腳一個(gè)上升沿,將讀取到的數據放入 MB_DATA_PTR引腳指定的DB 塊中。具體的實(shí)驗結果可以查看S7-1200 服務(wù)器側編程。
MB_CLIENT 指令的背景數據塊中的 'MB_Unit_ID' 有什么功能?
S7-1200 CPU 作為 Modbus TCP 客戶(hù)端與 Modbus TCP 服務(wù)器通信,當嘗試訪(fǎng)問(wèn)比 Modbus TCP 服務(wù)器更低端的串行子網(wǎng)中的設備,會(huì )有報錯 '無(wú)法建立連接'。
這種情況下, Modbus TCP 服務(wù)器作為 Modbus RTU 協(xié)議中的網(wǎng)關(guān),'MB_Unit_ID' 參數相當于 Modbus RTU 協(xié)議中的從站地址。
Modbus TCP 客戶(hù)端直接向 Modbus TCP 服務(wù)器發(fā)送請求,Modbus TCP 服務(wù)器通過(guò)識別 'MB_UNIT_ID' 參數,將請求轉發(fā)到從站設備。
在 S7-1200 項目中,選擇系統塊,雙擊打開(kāi) MB_CLIENT 指令的背景數據塊“MB_CLIENT_DB”, 在靜態(tài)變量Static下可以找到 MB_Unit_ID (默認起始值16#FF,等于十進(jìn)制 255)。如下圖 11 所示:

圖 11. MB_Unit_ID
例如,當 S7-1200 做客戶(hù)端與電腦上的 Modbus TCP 調試軟件 Modsim 通信時(shí),會(huì )遇到如上“無(wú)法建立連接”的問(wèn)題。
這時(shí),修改調試軟件 Modsim 中Device Id 為255,使之等于 MB_Unit_ID 的值,即可建立聯(lián)系。如下圖 12 所示:

圖 12. Device Id
注意:如果 Modbus TCP 服務(wù)器無(wú)法更改 Device Id 的值, 則修改S7-1200 項目中MB_Unit_ID數值, 使雙方的參數一致。
聯(lián)系客服