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