發(fā)布時(shí)間:2019-08-24 來(lái)源:眾智博遠(yuǎn)
在通信的雙方都需要調(diào)用通信塊,一方調(diào)用發(fā)送塊,另一方就要調(diào)用接收塊來(lái)接收數(shù)據(jù)。這種通信方式適用S7-300/400 之間通信,發(fā)送塊是SFC65(X_SEND),接收塊是SFC66(X_RCV)。下面以舉例的形式說(shuō)明通信實(shí)現(xiàn)的過(guò)程:在STEP7 中創(chuàng)建兩個(gè)站STATION1 CPU 416 MPI 站為2,STATION2 CPU315-2DP MPI 站號(hào)為4,2 號(hào)站發(fā)送2包數(shù)據(jù)給4 號(hào)站,4 號(hào)站判斷后放在相應(yīng)的數(shù)據(jù)區(qū)中。在2 號(hào)站OB35 中調(diào)用SFC65,如果掃描時(shí)間太短,發(fā)送頻率太塊,對(duì)方?jīng)]有響應(yīng),將加重CPU 的負(fù)荷,在OB35 中調(diào)用發(fā)送塊,發(fā)送任務(wù)將間隔100MS 執(zhí)行一次。
參數(shù)中REQ 為發(fā)送請(qǐng)求為1 時(shí)發(fā)送。CONT 為1 表示連續(xù)占用通信資源,為0 時(shí),通信完成后釋放通信資源。DEST_ID 表示對(duì)方的MPI 地址。REQ_ID 表示一包數(shù)據(jù)的標(biāo)識(shí)符,標(biāo)識(shí)符自己定義,例子中兩包數(shù)據(jù)的標(biāo)識(shí)符分別為“1”,“2”。SD 表示發(fā)送區(qū),以指針的格式,例子中數(shù)據(jù)為DB1 中從DBX0.0 (DBB0) 以后76個(gè)字節(jié),發(fā)送區(qū)大為76 個(gè)字節(jié)。RET_VAL 表示發(fā)送的狀態(tài)BUSY 為1 時(shí)發(fā)送中止。在這個(gè)例子中M1.1,M1.3 為1 時(shí),CPU416 將發(fā)送標(biāo)識(shí)符為“1”和“2”的包數(shù)據(jù)給4號(hào)站CPU315-2DP。用戶(hù)可能會(huì)問(wèn)一個(gè)CPU 究竟可以和能幾個(gè)CPU 通信,這和CPU 的通信資源有關(guān)系,這也決定SFC 的調(diào)用的次數(shù),在選項(xiàng)手冊(cè)中,常常可以看到“動(dòng)態(tài)連接”的個(gè)數(shù),這個(gè)數(shù)字與SFC 的調(diào)用有關(guān),以上例作說(shuō)明,M1.1,M1.3 為1 時(shí),與4 號(hào)站的連接建立起來(lái),反之4號(hào)站發(fā)送,2 號(hào)站接收同樣建立一個(gè)連接,也就是說(shuō)兩個(gè)站通信,都需要發(fā)送和接收的情況下占用兩個(gè)動(dòng)態(tài)連接。
M1.1,M1.3 為0 時(shí),建立的連接并沒(méi)有釋放,須調(diào)用SFC69 釋放連接,在上例中M1.5為1 時(shí),與4 號(hào)站建立的連接斷開(kāi),如圖2 所示:
有的用戶(hù)編寫(xiě)多個(gè)連接時(shí),由于CPU 的資源有限,而不能通信,可以用這種方法檢測(cè)。在4 號(hào)站編寫(xiě)接收程序如下:
在OB1 中調(diào)用SFC66 (X_RCV),參數(shù)EN_DT 表示接收使能,RET_VAL 表示接收狀態(tài)字,REQ_ID 接收數(shù)據(jù)包的標(biāo)識(shí)符,NDA 為1 時(shí)指示有新的數(shù)據(jù)包,為0 則沒(méi)有,RD 表示接收區(qū),接收區(qū)放在DB1 中從DBB0 以后76 個(gè)字節(jié)中。例子中,接收塊只識(shí)別數(shù)據(jù)的標(biāo)識(shí)符,而不管是哪一個(gè)CPU 發(fā)送的,接收從2 號(hào)站CPU416 發(fā)送的兩包數(shù)據(jù),當(dāng)標(biāo)識(shí)符為“1” 時(shí),M1.3 為1,復(fù)制接收區(qū)的數(shù)據(jù)到DB2 前76 個(gè)字節(jié)中(調(diào)用SFC20),當(dāng)標(biāo)識(shí)符為“2” 時(shí),M1.4 為1,復(fù)制接收區(qū)的數(shù)據(jù)到DB3 前76 個(gè)字節(jié)中。