SFC67/68使用方法
劉玉蓉
發(fā)布于2014-10-31 17:39
5
0
標簽:
看了一下SFC67、68的幫助文檔,說“SD必須與通信伙伴上的VAR_ADDR長度相同”,可是在哪里定義數(shù)據(jù)長度啊,比如s7-200里面,VB0-VB100,前30個用于讀出,后70個用于寫入,怎么定義讀寫區(qū)域啊(至少用DP的時候,配置時就配置好幾個字節(jié)讀幾個字節(jié)寫了);另外如果跟兩個200站通信,同時用兩套SFC67/68指令可以嗎(用DEST_ID區(qū)分),兩套指令的REQ和CONT一直為1可以嗎
問題補充:
bob wu:您的答案很詳細,您的意思是收到busy=0后要取消req信號嗎?我還想問,就是收到busy=0后仍然保持req=1可以嗎,即req不論busy狀態(tài),常on對通信有無影響
佳答案
一般通過調(diào)用SFC67/68實現(xiàn)無組態(tài)的MPI的通信,適合S7-400PLC、S7-300PLC、S7-200PLC之間的通信。下面以S7-200與S7-300之間的無組態(tài)MPI通信為例來說明,一般S7-200與S7-300之間只能采用單邊無組態(tài)通信方式,即僅在S7-300
在X_PUT(SFC68)發(fā)送數(shù)據(jù)的指令,通過SFC68將數(shù)據(jù)寫入不在同一個本地S7站的通信伙伴。在通信伙伴上沒有相應的SFC68,必須確保由SD(本機的數(shù)據(jù)區(qū),數(shù)據(jù)類型為ANY,在發(fā)送CPU上,既S7-300PLC上)定義的發(fā)送區(qū)和由VAR_ADDR參數(shù)(對方的數(shù)據(jù)區(qū),數(shù)據(jù)類型為ANY,在通信伙伴上,這里是指S7-200)定義的接收區(qū)長度相同,并且數(shù)據(jù)類型相匹配。
一般若對S7-200的V區(qū)讀寫,則在S7-300中定義S7-200的V區(qū),須用DB1代替,用指針間接尋址方式進行。如你想讀出S7-200中VB0以后的30個字節(jié)并且放到S7-300的MB20以后的30個字節(jié)中,需要調(diào)用系統(tǒng)功能SFC67,在參數(shù)VAR_ADDRESS(對方數(shù)據(jù)區(qū),指S7-200)中設定S7-200的地址區(qū)為:P#DB1.DBX0.0 BYTE 30, 在參數(shù)RD(本機的數(shù)據(jù)區(qū),指S7-300)中設定S7-300的地址區(qū)為P#MB20.0 BYTE30.
同樣如果將S7-300的MB40以后的70個字節(jié)寫入7-200中VB31以后的70個字節(jié)中,需要調(diào)用系統(tǒng)功能SFC68,在參數(shù)VAR_ADDR中定義S7-200的地址區(qū):P#DB1.DBX31.0 BYTE 70, 在參數(shù)SD中設定S7-300D的地址區(qū)為P#MB40.0 BYTE 70;
一般S7-300/400可以同時作為客戶機和服務器,而S7-200只能作為服務器。如果想實現(xiàn)S7-300/400與兩個S7-200站通信,在通過REQ=1調(diào)用相應SFC67/68之后,激活讀寫作業(yè)。此后可以繼續(xù)調(diào)用SFC67/68, 兩套指令的REQ和CONT可以一直為1,直到參數(shù)BUSY=0 指示接收到應答為止