西門子810D擴展接口壞維修
西門子S7-300/400廣泛地使用S7通信,它主要用于S7-300/400 CPU之間的主一主通信、CPU與功能模塊( FM)之間、CPU與西門子的人機界面TP/OP(觸摸屏/操作員面板)和組態(tài)軟件WinCC之間的通信。S7通信可以用于PROFINET、工業(yè)以太網(wǎng)、PROFIBUS或MPI網(wǎng)絡(luò)。
使用S7通信功能需要組態(tài)PLC之間的連接。下載組態(tài)后S7連接被建立,在CPU進入STOP模式時連接被保持。在下載新組態(tài)之前,一直可以使用這些已組態(tài)的連接。
連接是指執(zhí)行通信的兩個通信伙伴之間的邏輯分配,而不是指兩個站之間物理媒體(例如電纜)的連接。同時可用的連接的個數(shù)受到CPU或CP可用的連接資源數(shù)的限制。
在CPU集成的第1個通信接口組成的MPI網(wǎng)絡(luò)的S7通信中,通過調(diào)用SFB/FB GET和PUT,S7-400 CPU可以作服務(wù)器,也可以作客戶機,對S7-300 CPU或別的S7-400 CPU的數(shù)據(jù)進行讀/寫操作。S7-400還可以調(diào)用SFB/FB USEND/URCV、BSEND/BRCV發(fā)送和接收數(shù)據(jù),在S7-400之間進行雙向通信(見表7-2)。
S7-300 CPU的MPI接口只能作S7通信的服務(wù)器,不能作通信的客戶機,即不能主動發(fā)送和接收數(shù)據(jù)。CPU集成的第2個通信口是DP通信口,沒有S7基本通信和S7通信功能。
S7-400的S7通信使用STEP 7程序編輯器左邊窗口的文件夾“\庫\Standard Libraries\System Function Blocks”中的SFB和SFC。S7-300的S7通信使用“\庫\SIMATIC_NET_CP\CP_300”文件夾中的FB和FC。
可傳輸?shù)挠脩魯?shù)據(jù)大長度取決于塊的類型和通信雙方的硬件種類(S7-300、S7-400或M7)。使用BSEND/BRCV,多能傳輸64 KB的數(shù)據(jù)塊。S7-300每次調(diào)用S7通信塊只能傳輸1個變量(即1個連續(xù)的地址區(qū)),S7-400多能傳輸4個變量。
除了上述的使用SFC 65“X_SEND”和SFC 66“X_RCV”的雙邊通信之外,還可以實現(xiàn)單邊通信。編寫程序的一方的CPU是客戶機,另一方作服務(wù)器,不需要編寫程序。客戶機是通信的主動方,服務(wù)器是被動方。
在S7基本通信中,S7-300或S7-400都可以作客戶機或服務(wù)器,S7-200只能作服務(wù)器。
在STEP 7中創(chuàng)建一個項目(見隨書光盤中的例程MPI_UC_2),生成兩個站,它們的CPU均為CPU 413-2DP。將它們連接到MPI網(wǎng)絡(luò)上,它們的MPI站地址分別為2和3。
下面是兩個站的OB1中的程序:
L DB2.DBW 74
T QW 4 //用對方的IW0控制本站的QW4
在單邊通信中,客戶機調(diào)用SFC 68“X_PUT”來寫服務(wù)器中的系統(tǒng)地址區(qū),調(diào)用SFC 67“X_GET”來讀取服務(wù)器中的數(shù)據(jù)。在讀取服務(wù)器數(shù)據(jù)時,客戶機首先要發(fā)送讀取命令給客戶機。為了減少發(fā)送讀、寫命令的次數(shù),應(yīng)在循環(huán)中斷組織塊OB35中調(diào)用SFC 68“X_PUT”和SFC 67“X_GET”。下面是客戶機的OB35中的程序:
程序段1:準備要發(fā)送的數(shù)據(jù)
L DB1. DBW0
+ 1
T DB1.DBW 0 //每100ms將DB1.DBW加1
L IW 0
T DB1.DBW 74 //用本站的IW0控制對方的QW0
程序段2:用SFC 68寫對方的數(shù)據(jù)區(qū)

CALL“X_PUT” //SFC 68
REQ :=M0.0 //寫數(shù)據(jù)使能信號
CONT :=TRUE //發(fā)送完成后保持連接
DEST_ID :=W#16#3 //對方的MPI地址
VAR_ADDR:=P#DB2.DBX0.0 BYTE 76 //對方的數(shù)據(jù)區(qū),即寫目的地址
SD :=P#DB1.DBX0.0 BYTE 76 //本站的發(fā)送數(shù)據(jù)區(qū)
RET_VAL :=MW2 //通信狀態(tài)字,返回的故障信息
BUSY :=M0.1 //為1時寫數(shù)據(jù)未完成
程序段3:用SFC 67讀對方的數(shù)據(jù)區(qū)
CALL“X_CET” //SFC 67
REQ :=M0.2 //讀數(shù)據(jù)使能信號
CONT :=TRUE //讀數(shù)據(jù)完成后保持連接
DEST_ID :=W#16#3 //對方的MPI站地址
VAR_ADDR:=P#DB1.DBX0.0 BYTE 76 //要讀取的對方數(shù)據(jù)區(qū)的地址
RET_VAL := MW4 //通信狀態(tài)字,返回的故障信息
BUSY :=M0.3 //為1時讀數(shù)據(jù)未完成
RD :=P#DB2.DB:0.0 BYTE 76 //讀取的數(shù)據(jù)在本站中的存儲地址
L DB2.DBW 74
T QW 0 //用對方的IW0控制本站的QW0
如果3號站用SFC 67“X_GET”和SFC 68“X_PUT”讀寫2號站的系統(tǒng)數(shù)據(jù)區(qū),可以使用與上面基本上相同的程序,只是需要將SFC中的DEST_ID(對方的MPI地址)改為W#16#2。SFC 69“X_ABORT”可以中斷上述例程中建立的連接。
在STEP 7中創(chuàng)建一個項目,生成兩個站,CPU均為CPU 315-2 DP(見圖7-16),將它們連接在MPI網(wǎng)絡(luò)中,它們的MPI站地址分別為2和3。要求將它們的DB 1中76B的數(shù)據(jù)發(fā)送到對方的DB 2。

圖7-16 SIMATIC管理器
通信的雙方都需要調(diào)用通信塊,一方調(diào)用發(fā)送塊來發(fā)送數(shù)據(jù),另一方調(diào)用接收塊來接收數(shù)據(jù)。這種通信方式適用于S7-300/400之間的通信。
如果在OB1中調(diào)用SFC 65“X_SEND”,發(fā)送的頻率太快,將加重CPU的負荷,因此在循環(huán)中斷組織塊OB35中調(diào)用SFC 65,每隔一定的時間間隔(默認值為100ms)調(diào)用一次SFC 65。下面是2號站的OB35中的程序:程序段1:準備要發(fā)送的數(shù)據(jù)
L DB1.DBW 0
+ 1
T DB1.DBW 0 //每100ms將DB1.DBW加1
L IW 0
T DB1. DBW 74 //用本站的IWO控制對方的QW4
程序段2:通過MPI發(fā)送數(shù)據(jù)
CALL″X_SEND″ //SFC 65
REQ :=M1.0 //發(fā)送請求,該參數(shù)為1時發(fā)送
CONT :=TRUE //發(fā)送完成后保持連接
DEST_ID :=W#16#3 //接收方的MPI地址
REQ_ID :=DW#16#1 //數(shù)據(jù)包標識符
SD :=P#DB1.DBX0.0 BYTE 76 //要發(fā)送的數(shù)據(jù)地址區(qū)指針,每次發(fā)送76B
RET_VAL:=MW10 //通信狀態(tài)字,返回的故障信息
BUSY :=M1.1 //為1時正在發(fā)送,為0時發(fā)送完成
輸入?yún)?shù)REQ(請求激活)是電平觸發(fā)的控制參數(shù),REQ為1時觸發(fā)任務(wù)。
數(shù)據(jù)包標識符REQ_ID用來識別發(fā)送的數(shù)據(jù)。它被發(fā)送端CPU的操作系統(tǒng)傳送到通信伙伴CPU的SFC 66“X_RCV”中。

下列情況需要在接收端使用參數(shù)REQ_ID:
1)如果需要發(fā)送的數(shù)據(jù)超過76B,可以將數(shù)據(jù)分為若干個數(shù)據(jù)包來發(fā)送,即多次調(diào)用SFC 65“X_SEND”。每次調(diào)用的接收方的MPI地址DEST_ID相同,但是數(shù)據(jù)包標識符REQ_ID不同。
2)不同的CPU調(diào)用SFC 65“X_SEND”發(fā)送數(shù)據(jù)到同一個通信對象。
在接收方調(diào)用SFC 66“X_RCV”時,根據(jù)接收到的數(shù)據(jù)包的標識符REQ_ID,將接收到的數(shù)據(jù)保存到不同的存儲區(qū)。
輸入?yún)?shù)CONT( Continue,繼續(xù))的值如果為1(TRUE),表示任務(wù)完成后繼續(xù)保持與通信伙伴的連接。如果要在兩個站之間周期性交換數(shù)據(jù),可以令CONT=1。CONT=1時建立的連接可以用SFC 69“X_ABORT”來終止。
如果在*次調(diào)用時選擇CONT=0,連接在數(shù)據(jù)傳輸完成后被終止。與一個新的通信伙伴交換數(shù)據(jù)時又可以使用該連接。這種方式可確保只是在實際使用時才占用連接資源。
下面是2號站的OB1中接收數(shù)據(jù)的程序:程序段1:從MPI接收數(shù)據(jù)
CALL"X_RCV” //SFC 66
EN_DT :=M0.0 //接收使能位
RET_VAL:=MW2 //接收狀態(tài)字,返回的錯誤代碼
REQ_ID :=MD4 //接收到的數(shù)據(jù)包的標識符
NDA :=M0.1 //為1時表示有新的數(shù)據(jù)包
RD :=P#DB2.DBX0.0 BYTE 76 //存放接收數(shù)據(jù)的地址指針
L DB2.DBW 74
T QW 411用對方的IW0控制本站的QW4
程序段2:斷開連接
CALL“X_ABORT" //SFC 69
REQ :=M0.2 //使能信號
DEST_ID :=W#16#3 //對方的MPI地址
RET_VAL:= MW8 //返回的錯誤信息
BUSY :=M0.3 //為1表示操作未完成
3號站的程序與2號站的相同,只是將SFC中的DEST_ID由W#16#3改為W#16#2。在運行時用變量表監(jiān)視發(fā)送和接收的第1個字DBW0和后一個字DBW74(見圖7-17)。為了觀察數(shù)據(jù)傳輸?shù)膭討B(tài)效果,將發(fā)送站的IW0送到DB1. DBW74,將接收到的后一個字DB2. DBW74傳送到QW4,相當于用發(fā)送站的IW0控制接收站的QW4。在運行時改變IW0的狀態(tài),觀察對方的QW4是否隨之而變。
圖7-17 變量表
在每100ms執(zhí)行一次的OB35中,將發(fā)送的第1個字DB1. DBW0加1。在運行時同時打開和觀察兩個站中的變量表,觀察發(fā)送的第1個字DB1. DBW0和對方接收到的第1個字DB2. DBW0是否基本上同步變化。由于數(shù)據(jù)傳輸?shù)难訒r,雙方對應(yīng)的數(shù)據(jù)不可能*同步。
在變量表中,通過修改M1.0、M0.0和M0.2的值,來控制數(shù)據(jù)的發(fā)送、接收和斷開連接。因為SFC 65的參數(shù)CONT為1(TRUE),發(fā)送完成后保持連接,可以周期性地傳輸數(shù)據(jù)。即使M1.0變?yōu)?/span>0狀態(tài),連接仍然保持??梢酝ㄟ^置位M0.2來使能SFC 69,斷開已建立的連接。斷開連接后,可以看到,在接收的數(shù)據(jù)中,DB2. DBW0停止變化。
SFC 69“X_ABORT”用來斷開一個由SFC”X_SEND”、“X_GET”或“X_PUT”建立的連接。如果上述SFC的工作已經(jīng)完成(BUSY=0),調(diào)用SFC 69“X_ABORT”后,通信雙方的連接資源被釋放。

西門子810D擴展接口壞維修