上次給大家分享了S7-200 SMART的開放以太網通信,雖然可以實現SMART與第三方設備進行以太網通信,但是很多人始終覺得雙邊的通信程序書寫時較為麻煩,能不能實現單邊以太網通信呢?其實SMART還支持Modbus TCP通信,結合了TCP通信和Modbus RTU通信的優點,只是編寫Modbus TCP通信的庫并非軟件標配的功能,需要另外購買西門子公司開發的庫文件,最多包括8個客戶端庫和8個服務器庫。
1.MB_Client指令庫安裝
打開STEP 7-Micro/WIN SMART V2.2及以上版本軟件,鼠標右鍵項目樹的“庫”節點,并從快捷菜單中選擇“打開庫文件夾”,如圖1-1所示。
圖1-1打開庫文件夾
1)將MB_Client指令庫添加到打開的STEP 7-Micro/WINSMART庫文件夾中,如圖1-2所示。
圖1-2添加MB_Client指令庫
備注:STEP 7-Micro/WIN SMART庫文件夾一般存儲路徑為C:\Users\Public\Documents\Siemens\STEP7-MicroWIN SMART\Lib可以通過軟件修改。
關閉STEP 7-Micro/WIN SMART庫文件夾,然后鼠標右鍵項目樹的“庫”節點,并從快捷菜單中選擇“刷新庫”。刷新后,您可以看見“MB_Client”指令庫已經被添加到項目樹的庫節點下,如圖1-3所示。。MB_Server服務器庫添加方法類似。。
圖1-3
2.通信程序編寫
有了Modbus TCP通信庫后,只需要調用庫進行編程,使ModbusTCP通信程序變得非常簡單,首先看客戶端程序如何編寫:
1)建立連接,如圖1-4所示:
圖1-4建立連接
MBC_Connect指令各個參數定義如下:
·EN使能:必須保證每一掃描周期都被使能。
·Connect:啟動TCP 連接建立操作。
·Disconnect: 斷開TCP連接操作。
·ConnID: TCP 連接標識。
注意:Modbus TCP 屬于TCP通信,也是開放式用戶通信中的一種,所以ConnID參數不能與其他TCP、ISO-on-TCP、UDP通信相同。
·IPaddr1~IPaddr4: Modbus TCP 客戶端的IP地址,IPaddr1 是 IP 地址的最高有效字節,IPaddr4 是 IP 地址的最低有效字節。
·LocPort:本地設備上端口號。
·ConnectDone:Modbus TCP連接已經成功建立。
·Busy: 連接操作正在進行時。
·Error: 建立或斷開連接時,發生錯誤。
·Status:如果指令置位“Error”輸出,Status 輸出會顯示錯誤代碼。該錯誤代碼為參考開放式用戶通信庫指令錯誤代碼,具體請參考STEP 7-Micro/WIN SMART在線幫助
注意:每個 MB_Client指令庫只能創建一個Mdobus TCP連接,如果一個S7-200SMART需要連接多個Modbus TCP服務器,則需要購買多個名稱不同的MB_Client指令庫(例如MB_Client_0,MB_Client_1,MB_Client_2,MB_Client_3)
2)讀寫數據MBC_MSG,如圖1-4所示:
圖1-4讀寫數據
MBC_MSG指令各個參數定義如下:
·EN 使能:同一時刻只能有一條MB_Client_MSG指令使能,EN 輸入參數必須一直接通直到MB_Client_MSG 指令 Done 位被置 1。
·First讀寫請求:每一條新的讀寫請求需要使用信號沿觸發。
·RW讀寫請求:為 0 時,讀請求;為 1 時,寫請求。開關量輸出線圈和保存寄存器支持讀請求和寫請求,開關量輸入觸點和模擬量輸入通道只支持讀請求。
·Addr讀寫Modbus 服務器的Modbus 地址: 00001 至 0XXXX 為開關量輸出線圈;10001 至 1XXXX 為開關量輸入觸點; 30001 至 3XXXX 為模擬量輸入通道; 40001 至 4XXXX 為保持寄存器。
·Count讀寫數據的個數:對于Modbus 地址 0XXXX、1XXXX ,Count 按位的個數計算;對于 Modbus 地址 3XXXX、4XXXX ,Count 按字的個數計算;一個 MB_Client_MSG 指令最多讀取或寫入 120 個字或 1920 個位數據。
·DataPtr數據指針:參數 DataPtr 是間接地址指針,指向 CPU 中與讀/寫請求相關的數據的 V 存儲器地址。對于讀請求,DataPtr應指向用于存儲從 Modbus 服務器讀取的數據的第一個 CPU存儲單元。對于寫請求,DataPtr應指向要發送到 Modbus 服務器的數據的第一個 CPU 存儲單元。
·Done完成位:讀寫功能完成或者出現錯誤時,該位會自動置1。多條 MBC_MSG 指令執行時,可以使用該完成位激活下一條 MBC_MSG 指令的執行。
·Error:錯誤代碼,只有在 Done 位為1時錯誤代碼有效。
如下表1-5所示:
MB_Client錯誤代碼 | 描述 |
0 | 無錯誤 |
1 | TCP 發送數據錯誤 |
2 | TCP接收數據錯誤 |
3 | Modbus 接收響應超時 |
4 | 請求參數出錯:一個或多個輸入參數(“從站”(Slave)、“讀寫”(RW)、“地址”(Addr) 或“計數”(Count))被設置為非法值。 |
5 | TCP連接未成功建立 |
6 | Modbus 正忙于處理另一請求。 |
7 | Modbus響應出錯,接收到的響應與請求不符合。 |
8 | Modbus響應長度校驗錯誤。 |
101 | Modbus 服務器不支持該地址的請求功能。 |
102 | Modbus 服務器不支持數據地址:“地址”(Addr) 加上“計數”(Count) 的請求地址范圍超出服務器允許的地址范圍。 |
103 | Modbus服務器不支持數據類型:服務器設備不支持“地址”(Addr) 類型。 |
104 | Modbus服務器設備故障 |
表1-5MB_Client錯誤代碼
3)為MB_Client指令庫分配庫存儲器地址。
MB_Client指令庫需要占用 300個字節 V 存儲區用于庫存儲器地址分配。該庫存儲器分配地址不能與 MBC_MSG 指令參數DataPtr指向的 V 存儲器地址重疊,也不能與其它程序使用的地址有重疊,庫存儲器地址分配過程見圖1-5所示。
圖1-5為MB_Client分配庫存儲區
接下來就是服務端程序的編寫了:
注意:每個 MB_Server指令庫只能創建一個Mdobus TCP連接,如果一個S7-200 SMART 需要連接多個Modbus TCP 客戶端,則需要購買多個名稱不同的MB_Server指令庫(例如MB_Server_0,MB_Server_1,MB_Server_2)
1)建立與客戶端連接,如圖1-6所示:
圖1-6建立與客戶端連接
MBS_Connect指令各個參數定義如下:
·EN使能:必須保證每一掃描周期都被使能。
·Connect:啟動TCP 連接建立操作。
·Disconnect: 斷開TCP連接操作。
·ConnID: TCP 連接標識。
注意:Modbus TCP 屬于TCP通信,也是開放式用戶通信中的一種,所以ConnID參數不能與其他TCP、ISO-on-TCP、UDP通信相同。
·IPaddr1~IPaddr4: Modbus TCP 客戶端的IP地址,IPaddr1 是 IP 地址的最高有效字節,IPaddr4 是 IP 地址的最低有效字節。如果不指定伙伴 IP ,則可以設置為0.0.0.0 。
·LocPort:本地設備上端口號
MaxHold: 用于設置 Modbus 地址 4xxxx 或 4yyyyy 可訪問的 V 存儲器中的字保持寄存器數。
· HoldStart:間接地址指針,指向 CPU 中 V 存儲器中保持寄存器的起始地址,即40001從哪個地址開始。
· ConnectDone:Modbus TCP連接已經成功建立。
· Busy: 連接操作正在進行時。
· Error: 建立或斷開連接時,發生錯誤。
· Status:如果指令置位“Error”輸出,Status 輸出會顯示錯誤代碼。
MB_Server指令庫錯誤代碼如表1-7所示。
表 1-7 MB_Server錯誤代碼
2)收到客戶端發來的命令要進行應答,如圖1-8所示。
圖1-8服務器應答
3)為MB_Server指令庫分配庫存儲器地址。
MB_Server指令庫需要占用 300個字節 V 存儲區用于庫存儲器地址分配。該庫存儲器分配地址不能與 MBS_Connect 指令參數 HoadStart指向的 V 存儲器地址重疊,也不能與其它程序使用的地址有重疊,否則可能導致通信故障無法實現通信,庫存儲器地址分配過程見圖1-9所示。
圖1-9 為MB_Server庫分配存儲器
耐心看完本文的小伙伴們,恭喜你已經學會了S7-200SMART最新推出的Modbus TCP通信功能啦,是不是迫不及待的想去測試一下呢?
-
以太網
+關注
關注
40文章
5374瀏覽量
171094 -
西門子
+關注
關注
93文章
3008瀏覽量
115629 -
TCP
+關注
關注
8文章
1349瀏覽量
78985 -
S7-200
+關注
關注
13文章
407瀏覽量
50323
原文標題:西門子S7-200SMART原來還支持Modbus TCP通信
文章出處:【微信號:GKB1508,微信公眾號:工控幫】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論