簡介
在以下示例中,在 S7-1500 系列的兩個(gè) CPU 間創(chuàng)建一個(gè)編程連接,并將一個(gè)字符串從 CPU 1 發(fā)送到 CPU 2。待發(fā)送字符串的數(shù)據(jù)類型為 STRING。
要求
兩個(gè) S7-1500 系列的 CPU 通過 PROFINET 進(jìn)行互連,它們之間的連接尚未組態(tài)。
基于“屬性 > 保護(hù)”(Properties > Protection) 中的低保護(hù)級別,可確保每個(gè) CPU 都可進(jìn)行讀寫訪問。
CPU 1 中的程序
在全局?jǐn)?shù)據(jù)塊中,創(chuàng)建 9 個(gè)變量存儲(chǔ)“TSEND_C”的數(shù)據(jù)。
創(chuàng)建函數(shù)塊“SLI_FB_TSEND_C”,并在該函數(shù)塊中創(chuàng)建以下局部變量。
程序段 1:互連“TSEND_C”指令的參數(shù),如下所示:但請勿互連參數(shù) CONNECT。
程序段 2:保存 TSEND_C 的錯(cuò)誤狀態(tài),如下所示。
TSEND_C 的組態(tài)
要互連參數(shù) CONNECT,可通過“屬性 > 組態(tài)”(Properties > Configuration) 打開指令“TSEND_C”的向?qū)А?/p>
對 TSEND_C 的組態(tài)進(jìn)行如下設(shè)置:
輸入字段 | 條目 |
---|---|
端點(diǎn) |
在下拉列表中,選擇作為發(fā)送方和接收方的 CPU。 系統(tǒng)將自動(dòng)輸入接口、子網(wǎng)和地址。 |
連接數(shù)據(jù) |
在下拉列表中選擇“新建”(New),為每個(gè) CPU 創(chuàng)建一個(gè)數(shù)據(jù)塊。 該數(shù)據(jù)塊用于存儲(chǔ)連接數(shù)據(jù)。數(shù)據(jù)塊的名稱可任意設(shè)置。 為 CPU 1(本地 CPU)建立主動(dòng)連接。 |
連接類型 |
選擇條目“TCP”。 這意味著,連接建立時(shí)使用“TCP”協(xié)議的以太網(wǎng)連接。 |
組態(tài)模式 |
選擇條目“使用程序塊”(Use program block)。 這意味著,將通過編程連接建立連接。 |
連接 ID |
在該通信連接中,輸入任意一個(gè)選定的連接 ID。 該連接 ID 在項(xiàng)目中尚未分配。 |
伙伴端口 | 輸入一個(gè)伙伴端口值。該值必須 >=2000。 |
CPU 2 中的程序
在全局?jǐn)?shù)據(jù)塊中,創(chuàng)建 10 個(gè)變量存儲(chǔ)“TRCV_C”的數(shù)據(jù)。
創(chuàng)建函數(shù)塊“SLI_FB_TRCV_C”,并在該函數(shù)塊中創(chuàng)建以下局部變量。
程序段 1:互連“TRCV_C”指令的參數(shù),如下所示:但請勿互連參數(shù) CONNECT。
程序段 2:保存 TRCV_C 的錯(cuò)誤狀態(tài),如下所示。
TRCV_C 的組態(tài)
對 TRCV_C 的組態(tài)進(jìn)行如下設(shè)置:
說明 連接數(shù)據(jù) 組態(tài) TSEND_C 后,已創(chuàng)建了一個(gè)數(shù)據(jù)塊(“SLI_cDB_Connector”),并帶有為各個(gè) CPU 存儲(chǔ)的連接數(shù)據(jù)。如果不希望創(chuàng)建新的數(shù)據(jù)塊并輸入連接數(shù)據(jù),也可直接使用創(chuàng)建的數(shù)據(jù)塊(“SLI_cDB_Connector”)。 如果要選擇已創(chuàng)建的數(shù)據(jù)塊,則這些數(shù)據(jù)塊必須位于“項(xiàng)目樹”(project tree) 的“程序塊 > 系統(tǒng)塊”(Program blocks > System blocks) 中。 |
連接建立的操作過程
要在 RUN 模式下建立通信連接,請按以下步驟操作:
對于 TRCV_C,將參數(shù) EN_R 更改為“1”。 對于 TRCV_C,將參數(shù) CONT 更改為“1”。 對于 TSEND_C,將參數(shù) REQ 更改為“1”。 對于 TSEND_C,將參數(shù) CONT 更改為“1”。 |
終止連接的操作過程
要在 RUN 模式下終止通信連接,請按以下步驟操作:
對于 TSEND_C,將參數(shù) CONT 更改為“0”。 對于 TSEND_C,將參數(shù) REQ 更改為“0”。 對于 TRCV_C,將參數(shù) CONT 更改為“0”。 對于 TRCV_C,將參數(shù) EN_R 更改為“0”。 |
CPU 1 的行為
輸入?yún)?shù) REQ(“start”)返回信號(hào)狀態(tài)“TRUE”時(shí),啟動(dòng)指令“TSEND_C”。輸入?yún)?shù) CONT(“comControl”)中的信號(hào)狀態(tài)為“TRUE”時(shí),“TSEND_C”指令將在 CPU 1 與 CPU 2 間創(chuàng)建一個(gè)通信連接。為此,可通過輸入?yún)?shù) CONNECT(或數(shù)據(jù)塊“SLI_cDB_Connector”)檢索該連接數(shù)據(jù)。
進(jìn)行多次調(diào)用時(shí),“TSEND_C”指令將傳送輸入?yún)?shù) DATA(“sendData”)處檢測到的數(shù)據(jù)記錄。數(shù)據(jù)記錄傳送成功時(shí),輸出參數(shù) DONE(“#statDone”)的信號(hào)狀態(tài)為“TRUE”,且輸出參數(shù) STATUS(“status”)的值為“0000”。由于輸出參數(shù)的值僅在有效時(shí)才顯示,因此 DONE(“#statDone”)的成功狀態(tài)將保存在變量“done”中。
將該數(shù)據(jù)記錄發(fā)送到 CPU 2 后,將繼續(xù)監(jiān)視該通信連接(狀態(tài)為“7004”)。輸出參數(shù) ERROR(“error”)或變量“memErrStatus”)可用于指示本示例中的執(zhí)行過程是否出錯(cuò)。
CPU 2 的行為
輸入?yún)?shù) EN_R(“start”)返回信號(hào)狀態(tài)“TRUE”時(shí),啟動(dòng)指令“TRCV_C”。輸入?yún)?shù) CONT(“comControl”)中的信號(hào)狀態(tài)為“TRUE”時(shí),“TRCV_C”指令將在 CPU 2 與 CPU 1 間創(chuàng)建一個(gè)通信連接。為此,可通過輸入?yún)?shù) CONNECT(或數(shù)據(jù)塊“SLI_cDB_Connector”)檢索該連接數(shù)據(jù)。
進(jìn)行多次調(diào)用時(shí),“TRCV_C”指令將接收所傳送的數(shù)據(jù)記錄。該數(shù)據(jù)記錄將記錄在參數(shù) DATA(“rcvData”)中。數(shù)據(jù)記錄傳送成功時(shí),輸出參數(shù) DONE(“done”)的信號(hào)狀態(tài)為“TRUE”,且輸出參數(shù) STATUS(“status”)的值為“0000”。并通過輸出參數(shù) RCVD_LEN(“#statRcvLen”),確定 BYTE 中實(shí)際傳送的數(shù)據(jù)記錄長度。僅當(dāng)傳送成功時(shí),才顯示該值。之后,將檢查“0”。
由于輸出參數(shù)的值僅在有效時(shí)才顯示,因此請進(jìn)行以下操作步驟:
將“#statRcvLen”的值保存在“rcvLen”中。
將“#statDone”的值保存在“done”中。
將“#status”的值保存在“memErrStatus”中。
CPU 2 接收到該數(shù)據(jù)記錄后,將繼續(xù)監(jiān)視該通信連接(狀態(tài)為“7006”)。輸出參數(shù) ERROR(“error”)或變量“memErrStatus”)可用于指示本示例中的執(zhí)行過程是否出錯(cuò)。
-
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211799 -
西門子
+關(guān)注
關(guān)注
94文章
3039瀏覽量
115889 -
編程
+關(guān)注
關(guān)注
88文章
3616瀏覽量
93740 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62633 -
S7-1500
+關(guān)注
關(guān)注
3文章
300瀏覽量
6409
原文標(biāo)題:西門子博途:發(fā)送函數(shù)的編程示例
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論