1 本文描述的的TCP通訊適用范圍
TCP通訊是眾多的S7-300/S7-400通訊方式之一,可以在:CPx43-1、集成PN口的CPU、調(diào)用套接字編寫(xiě)的程序、第三方支持開(kāi)發(fā)以太網(wǎng)通訊的設(shè)備之間相互通訊。
本文描述的TCP通訊,僅適用于CP343-1/CP443-1(支持TCP通訊的版本)之間,建立TCP connection,調(diào)用AG_Send / AG_Recv的情形。對(duì)于CPx43-1通過(guò)TCP連接接收其他設(shè)備發(fā)送的數(shù)據(jù),如果對(duì)方設(shè)備可以協(xié)調(diào)使用本文方法也可以使用。
CPx43-1的TCP通訊,在發(fā)送接收固定長(zhǎng)度數(shù)據(jù)時(shí)沒(méi)有任何問(wèn)題。但是在設(shè)備應(yīng)用過(guò)程中,往往有不同長(zhǎng)度的數(shù)據(jù)需要在兩個(gè)S7 PLC之間傳輸,如果不做處理,會(huì)出現(xiàn)接收數(shù)據(jù)錯(cuò)位或接收數(shù)據(jù)延遲超出預(yù)期時(shí)間。
解決的方法有多種,如設(shè)置通訊中可能出現(xiàn)的zui長(zhǎng)的數(shù)據(jù)長(zhǎng)度作為接收區(qū)(AG_Recv的RCV參數(shù))的固定長(zhǎng)度,其他小于該長(zhǎng)度的數(shù)據(jù)發(fā)送,也按此zui大長(zhǎng)度進(jìn)行發(fā)送(接收將出現(xiàn)多余字節(jié))。這種方法是值得*的。又如,可以設(shè)置接收區(qū)長(zhǎng)度為1字節(jié), 把對(duì)方發(fā)過(guò)來(lái)的數(shù)據(jù)逐字節(jié)逐字節(jié)的接收,也可以解決問(wèn)題,但是這種方法是不*的,因?yàn)檫@種方式會(huì)使TCP接收變得極其緩慢,遠(yuǎn)遠(yuǎn)低于對(duì)方發(fā)送的速度。
本文示例介紹另外一種方式。
2 示例使用的主要PLC模塊
CPU315站(接收端) | ||
CPU315F-2DP | 6ES7315-6FF01-0AB0 | V2.6 |
CP343-1 | 6GK7343-1EX30-0XE0 | V2.4 |
CPU319站(發(fā)送端) | ||
CPU319-3PN/DP | 6ES7315-6FF01-0AB0 | V2.6 |
CP343-1 Adv | 6GK7343-1GX21-0XE0 | V1.1 |
軟件: STEP 7 V5.5 SP1
3 示例工作機(jī)制
示例假定發(fā)送方可以自由定制發(fā)送數(shù)據(jù)的內(nèi)容及長(zhǎng)度,且zui大數(shù)據(jù)發(fā)送量小于接收CPx43-1的zui大TCP數(shù)據(jù)包長(zhǎng)度(如CP343-1的TCP數(shù)據(jù)包zui大為240字節(jié))。
實(shí)現(xiàn)的方法是,把一個(gè)數(shù)據(jù)包分割成2個(gè)部分接收,約定前部分為整包有效發(fā)送數(shù)據(jù)長(zhǎng)度,后部分為有效數(shù)據(jù)。示例的*部分按1字節(jié)作為長(zhǎng)度處理,發(fā)送方按此格式發(fā)送。
3.1 發(fā)送流程
發(fā)送方在發(fā)送之前,在AG_Send的Send參數(shù)*個(gè)字節(jié)加入數(shù)據(jù)長(zhǎng)度,后跟待發(fā)送數(shù)據(jù)串,Len參數(shù)為數(shù)據(jù)長(zhǎng)度加1個(gè)字節(jié), 然Act = True觸發(fā)發(fā)送。
3.2 接收流程
先把AG_Recv的RCV參數(shù)長(zhǎng)度設(shè)置為一個(gè)字節(jié)接收,NDR = True后,把RCV的長(zhǎng)度調(diào)整為接收到的字節(jié)所設(shè)定的長(zhǎng)度,再次啟動(dòng)接收,把有效數(shù)據(jù)完整的一次接收,這樣不會(huì)發(fā)生錯(cuò)位。
4 相關(guān)參考
示例中所涉及的TCP組態(tài)及基本編程,請(qǐng)參考下載中心文檔“通過(guò)CP343-1實(shí)現(xiàn)S7-300之間的以太網(wǎng)通訊”編號(hào)為A0020 ;對(duì)于ANY 指針的格式,請(qǐng)參考請(qǐng)參考下載中心文檔“S7-300和S7-400尋址”,編號(hào)F0215 。