1. S7通信簡介
S7通信是S7系列PLC基于MPI、PROFIBUS、ETHERNET網絡的一種優化的通信協議,主要用于S7300/400PLC之間的通信。SIMATIC S7- PN CPU包含一個集成的 PROFINET 接口,該接口除了具有 PROFINET I/O功能,還可以進行基于以太網的S7通信。SIMATIC S7- PN CPU支持無確認數據交換、確認數據交換和單邊訪問功能。功能塊的調用如圖1、圖2所示。
塊
S7-400
|
塊
S7-300
|
描述
|
簡要描述
|
SFB 8
|
FB 8
|
用于發送
|
無確認的快速數據交換,發送數據后無對方接收確認。
|
SFB 9
|
FB 9
|
用于接收
|
SFB 12
|
FB 12
|
用于發送
|
確認數據交換,發送數據后有對方接收確認。
|
SFB 13
|
FB 13
|
用于接收
|
SFB 14
|
FB 14
|
讀數據
|
單邊編程讀訪問。
|
SFB 15
|
FB 15
|
寫數據
|
單邊編程寫訪問。
|
表1
供應西門子6FC5111-0CA05-0AA0特價
圖1

圖2
要通過 S7-PN CPU 的 集成PROFINET 接口實現S7 通信,需要在硬件組態中建立連接。
2. 硬件及網絡組態
CPU采用兩個315-2PN/DP,使用以太網進行通信。供應西門子6FC5111-0CA05-0AA0特價
在STEP7中創建一個新項目,項目名稱為PN S7。插入兩個S7-300站,在硬件組態中,分別插入CPU 315-2 PN/DP。如圖3所示。

圖3供應西門子6FC5111-0CA05-0AA0特價
新建以太網,打開“NetPro”設置網絡參數,選中CPU,在連接列表中建立新的連接。如圖4所示。

圖4
然后雙擊該連接,設置連接屬性。在“General”屬性中塊參數ID = 1,這個參數即是下面程序中的參數“ID”。在SIMATIC 315PN-1中激活“Establish an active connection”,作為Client端,SIMATIC 315PN-2作為Server 端。
3. 軟件編程
3.1. 無確認數據交換
SFB/FB 8 "USEND" 向類型為“URCV”的遠程伙伴SFB/FB發送數據。執行發送過程而不需要和SFB/FB伙伴進行協調。也就是說,在進行數據傳送時不需要伙伴SFB/FB進行確認。
S7-300:在REQ的上升沿處發送數據。在REQ的每個上升沿處傳送參數R_ID、
ID和SD_1。在每個作業結束之后,可以給R_ID、ID和SD_1參數分配新數值。
S7-400:在控制輸入REQ的上升沿處發送數據。通過參數SD_1到SD_4來指向要
發送的數據,但并非都需要用到所有四個發送參數。
然而,必須確保參數SD_1到SD_4/SD_1和RD_1到RD_4/RD_1 (在相應通訊伙
伴SFB/FB "URCV" 上)所定義的區域在以下幾個方面保持一致:
? ®編號
? ®長度
? ®數據類型供應西門子6FC5111-0CA05-0AA0特價
參數R_ID必須在兩個SFB中完全相同。如果傳送成功完成,則通過狀態參數DONE來表示,此時其邏輯數值為1。
SFB/FB 9 "URCV" 從類型為“USEND”的遠程伙伴SFB/FB中異步接收數據,并
把接收到的數據復制到組態的接收區域內。
當程序塊準備好接收數據時,EN_R輸入處的邏輯值為1。可以通過EN_R=0來取
消一個已激活的作業。
S7-300:在EN_R的每個上升沿處應用參數R_ID、ID和RD_1。在每個作業結束
之后,可以給R_ID、ID和RD_1參數分配新數值。
S7-400:通過參數RD_1到RD_4來指向接收數據區。
必須確保參數RD_i/RD_1和SD_i/SD_1 (在相應通訊伙伴SFB/FB "USEND"
上)所定義的區域在以下幾個方面保持一致:
?® 編號
? ®長度
? ®數據類型。
通過NDR狀態參數邏輯數值為1來指示已經成功完成復制處理過程。參數R_ID必須在兩個SFB/FB上完全相同。
打開SIMATIC 315PN-1的OB1,在OB1中依次調用FB8,FB9如圖5、圖6所示:

圖5
程序中的參數說明見表2
參數
|
描述
|
數據類型
|
存儲區
|
描述
|
REQ
|
INPUT
|
BOOL
|
I、Q、M、D、L
|
上升沿觸發工作
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
連接ID
|
R_ID
|
INPUT
|
DWORD
|
I、Q、M、D、L、常數
|
連接號,相同連接號的功能塊互相對應發送/接收數據
|
DONE
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,發送完成
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,有故障發生
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
狀態代碼
|
S7-300:
SD_1
S7-400:
SD_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
M、D、T、Z I、Q、M、D、T、C
|
發送數據區
|
表2 FB8參數說明

圖6
程序中的參數說明見表3
參數
|
參數
|
數據類型
|
存儲區
|
描述
|
EN_R
|
INPUT
|
BOOL
|
I、Q、M、D、L、常數
|
為1時,準備接收
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
連接ID
|
R_ID
|
INPUT
|
DWORD
|
I、Q、M、D、L、常數
|
連接號,相同連接號的功能塊互相對應發送/接收數據
|
NDR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,接收完成
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,有故障發生
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
狀態代碼
|
S7-300:
RD_1
S7-400:
RD_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
M、D、T、Z I、Q、M、D、T、Z
|
接收數據區
|
表3 FB9參數說明供應西門子6FC5111-0CA05-0AA0特價
同樣,在SIMATIC 315PN-2的OB1中,調用FB8/FB9。通信雙方的“R_ID”均設為0。將SIMATIC 315PN-1的MB100-MB109賦值B#16#02,在SIMATIC 315PN-2中,將FB9的“EN_R”置1,然后在SIMATIC 315PN-1中,將FB8中“REQ”設置上升沿信號,此時SIMATIC 315PN-2的MB110-MB119接收到B#16#02。如圖7所示。

圖7
同理,將SIMATIC 315PN-2 的MB100-MB109賦值為B#16#03,SIMATIC 315PN-1的MB110-MB119接收到B#16#03。如圖8所示。

圖8
3.2. 確認數據交換
SFB/FB 12 "BSEND" 向類型為“BRCV”的遠程伙伴SFB/FB發送數據。通過這種
類型的數據傳送,更多的數據可以在通訊伙伴之間傳輸,超過任何其它用于組態的
S7連接的通訊SFB/FB所能傳輸的數據量,通過集成PN口的S7-400和S7-300是65534字節。
要發送的數據區是分段的。各個分段單獨發送給通訊伙伴。通訊伙伴在接收到最后
一個分段時對此分段進行確認,該過程與相應SFB/FB "BRCV" 的調用無關。在調用塊之后,當在控制輸入REQ上有上升沿時,發送作業被激活。發送用戶存儲區中的數據與處理用戶程序是異步執行的。
由SD_1指定起始地址和要發送數據的最大長度。可以通過LEN來確定數據域的作業指定長度。在這種情況下,LEN替換SD_1的長度區域。參數R_ID必須在相應的兩個SFB/FB上完全相同。如果在控制輸入R處有上升沿,則當前數據傳送將被取消。如果傳送成功完成,則通過將狀態參數DONE的數值設置為1來進行指示。如果狀態參數DONE或ERROR的數值為1,則在前一個發送處理結束之前,不能處理新的發送作業。
SFB/FB 13 "BRCV" 接收來自類型為“BSEND”的遠程伙伴SFB/FB的數據。在收
到每個數據段后,向伙伴SFB/FB發送一個確認幀,同時更新LEN參數。在塊調用完畢,并且在控制輸入EN_R數值為1之后,塊準備接收數據。可以通過EN_R=0來取消一個已激活的作業。供應西門子6FC5111-0CA05-0AA0特價
由RD_1指定起始地址和接收區的最大長度。由LEN指示已接收數據域的長度。
從用戶存儲區中接收數據與處理用戶程序是異步執行的。參數R_ID必須在相應的兩個SFB/FB上完全相同。通過狀態參數NDR的數值為1來指示所有數據段的無錯接收。接收到的數據保持不變,直到通過EN_R=1來重新調用SFB/FB 13為止。如果在數據的異步接收期間調用塊,則將引發一個警告,該警告通過STATUS參數輸出;如果當控制輸入EN_R數值為0時進行調用,則接收將被終止,并且SFB/FB將返回到它的初始狀態。
打開SIMATIC 315PN-1的OB1,在OB1中依次調用FB12,FB13如圖9、圖10所示:

圖9
程序中的參數說明見表4
參數
|
描述
|
數據類型
|
存儲區
|
描述
|
REQ
|
INPUT
|
BOOL
|
I、Q、M、D、L
|
上升沿觸發工作
|
R
|
INPUT
|
BOOL
|
I、Q、M、D、L、常數
|
復位,終止數據交換
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
連接ID
|
R_ID
|
INPUT
|
DWORD
|
I、Q、M、D、L、常數
|
連接號,相同連接號的功能塊互相對應發送/接收數據
|
DONE
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,發送完成
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,有故障發生
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
狀態代碼
|
SD_1
|
IN_OUT
|
ANY
|
S7-300:M、DS7-400:I、Q、M、D、T、Z
|
發送數據區
|
LEN
|
IN_OUT
|
WORD
|
I、Q、M、D、L
|
發送數據的長度
|
表4 FB12參數說明

圖10
程序中的參數說明見表5供應西門子6FC5111-0CA05-0AA0特價
參數
|
描述
|
數據類型
|
存儲區
|
描述
|
EN_R
|
INPUT
|
BOOL
|
I、Q、M、D、L、常數
|
為1時,準備接收
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
連接ID
|
R_ID
|
INPUT
|
DWORD
|
I、Q、M、D、L、常數
|
連接號,相同連接號的功能塊互相對應發送/接收數據
|
NDR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,接收完成
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,有故障發生
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
狀態代碼
|
RD_1
|
IN_OUT
|
ANY
|
S7-300:M、DS7-400:I、 Q、M、D、T、C
|
接收數據區
|
LEN
|
IN_OUT
|
WORD
|
I、Q、M、D、L
|
接收到的數據長度
|
表5 FB13參數說明
同樣,在SIMATIC 315PN-2的OB1中,調用FB12/FB13。通信雙方的R_ID設為0,LEN設為10,將SIMATIC 315PN-1的MB120-MB129賦值B#16#04,在SIMATIC 315PN-2中,將FB13的“EN_R”置1,然后在SIMATIC 315PN-1中,將FB12中“REQ”設置上升沿信號,此時SIMATIC 315PN-2的MB130-MB139接收到B#16#04。如圖11所示。

圖11
同理,將SIMATIC 315PN-2 的MB120-MB129賦值為B#16#05,SIMATIC 315PN-1的MB130-MB139接收到B#16#05。如圖12所示。

圖12
3.3. 單邊訪問
可以通過SFB/FB 14 "GET",從遠程CPU中讀取數據。
S7-300:在REQ的上升沿處讀取數據。在REQ的每個上升沿處傳送參數ID、ADDR_1和RD_1。在每個作業結束之后,可以分配新數值給ID、ADDR_1和RD_1參數。
S7-400:在控制輸入REQ的上升沿處啟動SFB。在此過程中,將要讀取的區域的相關指針(ADDR_i)發送到伙伴CPU。遠程伙伴返回此數據。在下一個SFB/FB調用處,已接收的數據被復制到組態的接收區(RD_i)中。必須要確保通過參數ADDR_i和RD_i定義的區域在長度和數據類型方面要相互匹配。
通過狀態參數NDR數值為1來指示此作業已完成。只有在前一個作業已經完成之后,才能重新激活讀作業。遠程CPU可以處于RUN或STOP工作狀態。如果正在讀取數據時發生訪問故障,或如果數據類型檢查過程中出錯,則出錯和警告信息將通過ERROR和STATUS輸出表示。
通過使用SFB/FB 15 "PUT",可以將數據寫入到遠程CPU。
S7-300:在REQ的上升沿處發送數據。在REQ的每個上升沿處傳送參數ID、ADDR_1和SD_1。在每個作業結束之后,可以給ID、ADDR_1和SD_1參數分配新數值。
S7-400:在控制輸入REQ的上升沿處啟動SFB。在此過程中,將指向要寫入數據的區域(ADDR_i)的指針和數據(SD_i)發送到伙伴CPU。 遠程伙伴將所需要的數據保存在隨數據一起提供的地址下面,并返回一個執行確認。必須要確保通過參數ADDR_i和SD_i定義的區域在編號、長度和數據類型方面相互匹配。
如果沒有產生任何錯誤,則在下一個SFB/FB調用時,通過狀態參數DONE來指示,其數值為1。只有在最后一個作業完成之后,才能再次激活寫作業。遠程CPU可以處于RUN或STOP模式。如果正在寫入數據時發生訪問故障,或如果執行檢查過程中出錯,則出錯和警告信息將通過ERROR和STATUS輸出表示。
打開SIMATIC 315PN-1的OB1,在OB1中依次調用FB14,FB15如圖13、圖14所示:

圖13
參數
|
描述
|
數據類型
|
存儲區
|
描述
|
REQ
|
INPUT
|
BOOL
|
I、Q、M、D、L
|
上升沿觸發調用功能塊
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
地址參數ID
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
接收到新數據
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
故障代碼
|
S7-300:
ADDR_1
S7-400:
ADDR_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
M、D
I、Q、M、D、
T、C
|
從通信對方的數據地址中讀取數據
|
S7-300:
RD_1
S7-400:
RD_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
S7-300:M、D
S7-400 I、Q、
M、D、T、C
|
本站接收數據地址
|
表6 FB14參數說明

圖14
參數
|
描述
|
數據類型
|
存儲區
|
描述
|
REQ
|
INPUT
|
BOOL
|
I、Q、M、D、L
|
上升沿觸發調用功能塊
|
ID
|
INPUT
|
WORD
|
M、D、常數
|
地址參數
|
DONE
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,發送完成
|
ERROR
|
OUTPUT
|
BOOL
|
I、Q、M、D、L
|
為1時,有故障發生
|
STATUS
|
OUTPUT
|
WORD
|
I、Q、M、D、L
|
故障代碼
|
S7-300:
ADDR_1
S7-400:
ADDR_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
M、D
I、Q、M、D、
T、C
|
通信對方的數據接收地址
|
S7-300:
SD_1
S7-400:
SD_i
(1 ≤ i ≤ 4)
|
IN_OUT
|
ANY
|
S7-300:M、D
S7-400 I、Q、
M、D、T、C
|
本站發送數據地址
|
表7 FB15參數說明
同樣,在SIMA