S7-1200 MODBUS TCP客戶端指令使用方法

S7-1200 Modbus TCP 通信指令塊


  STEP 7 V13 SP1 軟件版本中的 Modbus TCP 庫指令目前最新的版本已升至V4.0,該版本的使用需要具備以下兩個條件:


1. 軟件版本:STEP 7 V13 SP1及其以上

2. 固件版本:S7-1200 CPU 的固件版本V4.1


S7-1200 MODBUS TCP客戶端指令使用方法

圖1. Modbus TCP V4.0 版本指令塊


S7-1200 Modbus TCP 實驗環境


  下面以兩臺S7-1200之間進行 Modbus TCP 通信為例,詳細闡述客戶端與服務器側如何編程及通信的過程。表格列出了具體的實驗環境:


S7-1200 MODBUS TCP客戶端指令使用方法

表1. Modbus TCP 通信的實驗環境


S7-1200 MODBUS TCP客戶端指令使用方法

表2. Modbus TCP 通信雙方的基本配置


  硬件標識符是在“設備組態”中,雙擊 PROFINET 接口,然後在“屬性”中的“硬件標識符”中查看。


S7-1200 MODBUS TCP客戶端指令使用方法

圖2. S7-1200設備的PROFINET接口硬件標識符


S7-1200 Modbus TCP 客戶端編程


  S7-1200 客戶端側需要調用MB_CLIENT指令塊,該指令塊主要完成客戶機和服務器的TCP連接、發送命令消息、接收響應以及控制服務器斷開的工作任務。


  1. 將MB_CLIENT 指令塊在“ 程序塊 -> OB1 ”中的程序段裡調用,調用時會自動生成背景DB ,點擊確定即可。


S7-1200 MODBUS TCP客戶端指令使用方法

圖3. Modbus TCP 客戶端側指令塊


該功能塊各個引腳定義如下:


S7-1200 MODBUS TCP客戶端指令使用方法

表4. MB_CLIENT 各引腳定義說明


  2. CONNECT 引腳的指針類型


  第一步,先創建一個新的全局數據塊 DB2:


S7-1200 MODBUS TCP客戶端指令使用方法

圖4. 創建全局數據塊


  第二步,雙擊打開新生成的DB塊,定義變量名稱為“aa",數據類型為“TCON_IP_v4”(可以將 TCON_IP_v4 拷貝到該對話框中),然後點擊“回車”按鍵。該數據類型結構創建完畢。如圖5所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖5. 創建 MB_CLIENT 中的TCP連接結構的數據類型


  各個引腳定義說明如下:


S7-1200 MODBUS TCP客戶端指令使用方法

表4. TCON_IP_v4 數據結構的引腳定義


  本文遠程服務器的IP地址為192.168.0.4,遠程端口號設為502。所以客戶端側該數據結構的各項值為:


S7-1200 MODBUS TCP客戶端指令使用方法

圖6. MB_CLIENT 側 CONNECT 引腳數據定義


注意: CONNECT引腳的填寫需要用符號尋址的方式。


  3. 創建 MB_DATA_PTR 數據緩衝區


  第一步,創建一個全局數據塊 DB3,創建方法可以參考上面的圖3,數據塊的名稱如圖7所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖7. 生成的兩個DB塊名稱


  第二步,建議一個數組的數據類型,以便通信中存放數據,請參考圖8所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖8. MB_DATA_PTR 數據緩衝區結構


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


S7-1200 MODBUS TCP客戶端指令使用方法

圖9. 修改 DB 塊屬性為標準的塊結構


  4. 客戶端側完成指令塊編程


  調用 MB_CLIENT 指令塊,實現從 Modbus TCP 通信服務器中讀取2個保持寄存器的值,如圖10所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖10. MB_CLIENT 指令塊編程


  5. 將整個項目下載到S7-1200


  待Modbus TCP 服務器側準備就緒,給MB_CLIENT指令塊的REQ引腳一個上升沿,將讀取到的數據放入 MB_DATA_PTR引腳指定的DB 塊中。具體的實驗結果可以查看S7-1200 服務器側編程。


常見問題


S7-1200 MODBUS TCP客戶端指令使用方法

MB_CLIENT 指令的背景數據塊中的 "MB_Unit_ID" 有什麼功能?


  S7-1200 CPU 作為 Modbus TCP 客戶端與 Modbus TCP 服務器通信,當嘗試訪問比 Modbus TCP 服務器更低端的串行子網中的設備,會有報錯 "無法建立連接"。


  這種情況下, Modbus TCP 服務器作為 Modbus RTU 協議中的網關,"MB_Unit_ID" 參數相當於 Modbus RTU 協議中的從站地址。


  Modbus TCP 客戶端直接向 Modbus TCP 服務器發送請求,Modbus TCP 服務器通過識別 "MB_UNIT_ID" 參數,將請求轉發到從站設備。


  在 S7-1200 項目中,選擇系統塊,雙擊打開 MB_CLIENT 指令的背景數據塊“MB_CLIENT_DB”, 在靜態變量Static下可以找到 MB_Unit_ID (默認起始值16#FF,等於十進制 255)。如下圖 11 所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖 11. MB_Unit_ID


  例如,當 S7-1200 做客戶端與電腦上的 Modbus TCP 調試軟件 Modsim 通信時,會遇到如上“無法建立連接”的問題。


  這時,修改調試軟件 Modsim 中Device Id 為255,使之等於 MB_Unit_ID 的值,即可建立聯繫。如下圖 12 所示:


S7-1200 MODBUS TCP客戶端指令使用方法

圖 12. Device Id

S7-1200 MODBUS TCP客戶端指令使用方法


注意:如果 Modbus TCP 服務器無法更改 Device Id 的值, 則修改S7-1200 項目中MB_Unit_ID數值, 使雙方的參數一致。


分享到:


相關文章: