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