使用 DB_ANY 數(shù)據(jù)類型 (S7-1200/1500)
DB_ANY 數(shù)據(jù)類型用來標(biāo)識(shí)任意數(shù)據(jù)塊。對(duì)于 S7-1200/1500 系列的 CPU,可以選擇訪問編程期間尚不可用的數(shù)據(jù)塊。為此,請(qǐng)?jiān)谠L問塊的塊接口中創(chuàng)建一個(gè) DB_ANY 數(shù)據(jù)類型的塊參數(shù)。數(shù)據(jù)塊名稱或先前分配給數(shù)據(jù)塊名稱的 DB_ANY 數(shù)據(jù)類型的變量將在運(yùn)行期間傳送到此參數(shù)??梢酝ㄟ^以下指令,處理數(shù)據(jù)塊中用符號(hào)表示的內(nèi)容:
VARIANT_TO_DB_ANY:將 VARIANT 轉(zhuǎn)換為 DB_ANY
DB_ANY_TO_VARIANT:將 DB_ANY 轉(zhuǎn)換為 VARIANT
有關(guān)這些指令的更多信息,請(qǐng)參見“基本指令 > STL/SCL > 轉(zhuǎn)換操作 > VARIANT”(Basic instructions > STL/SCL > Conversion operations > VARIANT)。
該過程具有以下優(yōu)勢(shì):不需要知道將要處理的數(shù)據(jù)塊就能創(chuàng)建程序代碼。
在本示例中需要使用以下對(duì)象:
編程示例
以下示例說明了如何使用 DB_ANY 數(shù)據(jù)類型:
沖孔機(jī)可以沖出各種各樣的幾何形狀。沖孔作業(yè)將傳送到機(jī)器,每個(gè)作業(yè)有特定的作業(yè)數(shù)據(jù)。作業(yè)數(shù)據(jù)的作業(yè)類型和數(shù)據(jù)值各有不同。
操作步驟 - 創(chuàng)建 PLC 數(shù)據(jù)類型
在第一個(gè)作業(yè)中,將在一塊金屬板上沖出一個(gè)圓孔。要使沖孔機(jī)能夠執(zhí)行此作業(yè),需要提供中心點(diǎn)坐標(biāo)以及圓孔的半徑??梢酝ㄟ^ PLC 數(shù)據(jù)類型 (UDT) 將這些作業(yè)數(shù)據(jù)一起傳送到?jīng)_孔機(jī)。
創(chuàng)建 PLC 數(shù)據(jù)類型“UDT_Hole”以傳送作業(yè)數(shù)據(jù):
在項(xiàng)目樹中,雙擊“PLC 數(shù)據(jù)類型”(PLC data types) 文件夾中的命令“新增數(shù)據(jù)類型”(Add new data type)。 這樣,將創(chuàng)建并打開一個(gè)用于創(chuàng)建 PLC 數(shù)據(jù)類型的新聲明表。 在 PLC 數(shù)據(jù)類型中聲明以下行: X-coordinate > REAL Y-coordinate > REAL Diameter > REAL ![]() ![]() |
在第二個(gè)作業(yè)中,將在一塊金屬板上沖出一個(gè)矩形。對(duì)于此作業(yè),需要提供兩個(gè)坐標(biāo),分別定義此矩形的左上角和右下角??梢酝ㄟ^ PLC 數(shù)據(jù)類型“UDT_RectangleWindowStatic”將這些作業(yè)數(shù)據(jù)一起傳送到?jīng)_孔機(jī)。
創(chuàng)建 PLC 數(shù)據(jù)類型“UDT_RectangleWindowStatic”:
在項(xiàng)目樹中,雙擊“PLC 數(shù)據(jù)類型”(PLC data types) 文件夾中的命令“新增數(shù)據(jù)類型”(Add new data type)。 這樣,將創(chuàng)建并打開一個(gè)用于創(chuàng)建 PLC 數(shù)據(jù)類型的新聲明表。 在 PLC 數(shù)據(jù)類型中聲明以下行: X1-coordinate > REAL Y1-coordinate > REAL X2-coordinate > REAL Y2-coordinate > REAL ![]() ![]() |
“UDT_RectangleWindowStatic”的作業(yè)數(shù)據(jù)只能用于沖出其邊沿分別與 x 和 y 軸平行對(duì)齊的矩形。
如果要沖出具有不同對(duì)齊設(shè)置的矩形(即不與 x 和 y 軸平行對(duì)齊),則需要其它 PLC 數(shù)據(jù)類型。例如,在其它 PLC 數(shù)據(jù)類型中,可以指定高度和寬度,以及矩形與 x 軸的角度。
創(chuàng)建 PLC 數(shù)據(jù)類型“UDT_RectangleWindowFlexible”:
在項(xiàng)目樹中,雙擊“PLC 數(shù)據(jù)類型”(PLC data types) 文件夾中的命令“新增數(shù)據(jù)類型”(Add new data type)。 這樣,將創(chuàng)建并打開一個(gè)用于創(chuàng)建 PLC 數(shù)據(jù)類型的新聲明表。 在 PLC 數(shù)據(jù)類型中聲明以下行: X-coordinate > REAL Y-coordinate > REAL Height > REAL Width > REAL Angle > REAL ![]() ![]() |
用于指定矩形中心位置的 x 軸和 y 軸坐標(biāo)。
操作步驟 - 創(chuàng)建數(shù)據(jù)塊
在下一部分,您將學(xué)習(xí)如何將簡(jiǎn)單的幾何形狀(其作業(yè)數(shù)據(jù)已在 PLC 數(shù)據(jù)類型中定義)傳送到?jīng)_孔機(jī)。沖孔作業(yè)在程序代碼中被細(xì)分成多個(gè)沖孔操作,這些沖孔操作由沖孔機(jī)連續(xù)執(zhí)行。沖孔機(jī)有一個(gè)十字工作臺(tái),金屬板將緊緊地夾在這個(gè)工作臺(tái)上??梢詫⑹止ぷ髋_(tái)沿 x 軸和/或 y 軸移動(dòng),就像在坐標(biāo)系中一樣。十字工作臺(tái)由兩個(gè)電機(jī)推動(dòng)。該工具有不同的印模用來在金屬板上沖出各種形狀,例如大小不同的圓形和矩形。該工具還可以最多旋轉(zhuǎn) 90 度來切出具有不同對(duì)齊角度的矩形。
現(xiàn)在,可使用 PLC 數(shù)據(jù)類型創(chuàng)建多個(gè)背景數(shù)據(jù)塊。之后,該背景數(shù)據(jù)塊將包含具體值,如圓孔的值。
創(chuàng)建背景數(shù)據(jù)塊“DB_OrderHole”:
雙擊“程序塊”(Program blocks) 文件夾下方的命令“添加新塊”(Add new block)。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 |
單擊“數(shù)據(jù)塊 (DB)”(Data block (DB)) 按鈕。 指定名稱“DB_OrderHole”。 選擇數(shù)據(jù)塊“UDT_Hole”作為類型。 單擊“確定”(OK)。 |
輸入相應(yīng)的起始值:
要制造特定的金屬板部件,例如控制柜的側(cè)面板,則將必需的幾何形狀加載到?jīng)_孔機(jī)。為此需要?jiǎng)?chuàng)建另一個(gè)包含數(shù)據(jù)塊列表的數(shù)據(jù)塊。
創(chuàng)建數(shù)據(jù)塊“DB_OrderList”:
雙擊“添加新塊”(Add new block) 命令。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 單擊“數(shù)據(jù)塊 (DB)”(Data block (DB)) 按鈕。 指定名稱“DB_OrderList”。 選擇“全局?jǐn)?shù)據(jù)塊”(Global DB) 作為該數(shù)據(jù)塊的類型。 單擊“確定”(OK)。 |
在數(shù)據(jù)塊中創(chuàng)建以下作業(yè)列表:
操作步驟 - 創(chuàng)建程序代碼
為每個(gè)作業(yè)類型,創(chuàng)建一個(gè)單獨(dú)的函數(shù)。在此,將沖孔作業(yè)細(xì)分為具體的各個(gè)沖孔操作,并包含在 ARRAY 中。
創(chuàng)建 PLC 數(shù)據(jù)類型“UDT_Punch”。 雙擊“PLC 數(shù)據(jù)類型”(PLC data types) 下方的命令“添加新數(shù)據(jù)類型”(Add new data type)。 將創(chuàng)建一個(gè)名為“UserDataType_x”的新 PLC 數(shù)據(jù)類型。 將 PLC 數(shù)據(jù)類型重命名為“UDT_Punch”。 在 PLC 數(shù)據(jù)類型中聲明以下行: Tool > DINT x > REAL y > REAL w > REAL ![]() ![]() 創(chuàng)建 ARRAY 數(shù)據(jù)塊“DB_PunchList”。 ![]() ![]() |
要為一個(gè)孔洞準(zhǔn)備沖孔作業(yè)并將其細(xì)分為具體的各個(gè)沖孔操作,則需創(chuàng)建一個(gè) SCL 函數(shù)并命名為“FC_PrepareHole”。
聲明該塊接口,如下所示:![]() ![]() 編寫以下程序代碼: ![]() ![]() |
要為一個(gè)窗口準(zhǔn)備沖孔作業(yè),則需通過一個(gè)函數(shù)將四個(gè)沖孔操作序列組合到一個(gè)沖孔作業(yè)中。創(chuàng)建一個(gè) SCL 函數(shù)并命名為“FC_PrepareWindowStatic”。
聲明該塊接口,如下所示:![]() ![]() 編寫以下程序代碼: ![]() ![]() |
要為一個(gè)可變矩形準(zhǔn)備沖孔作業(yè),則需通過一個(gè)函數(shù)將四個(gè)沖孔操作序列組合到一個(gè)沖孔作業(yè)中。創(chuàng)建一個(gè) SCL 函數(shù)并命名為“FC_PrepareWindowFlexible”。
聲明該塊接口,如下所示:![]() ![]() 編寫以下程序代碼: ![]() ![]() |
沖孔機(jī)現(xiàn)在應(yīng)該會(huì)開始處理作業(yè)。如果它已經(jīng)在處理作業(yè),則應(yīng)從作業(yè)列表中獲取下一個(gè)作業(yè)并進(jìn)行準(zhǔn)備。
創(chuàng)建一個(gè) SCL 函數(shù)塊。 雙擊“添加新塊”(Add new block) 命令。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 單擊“函數(shù)塊 (FB)”(Function block (FB)) 按鈕。 指定名稱“FB_PrepareNextOrder”。 聲明該塊接口,如下所示: ![]() ![]() 聲明全局變量“AllOrdersDone”: ![]() ![]() 編寫以下程序代碼: ![]() ![]() |
通過將當(dāng)前沖孔作業(yè)細(xì)分成幾個(gè)沖孔操作,為列表中的下一個(gè)作業(yè)做好了準(zhǔn)備。沖孔機(jī)必須能夠識(shí)別當(dāng)前正在處理哪個(gè)沖孔作業(yè)。
創(chuàng)建一個(gè) SCL 函數(shù)。 雙擊“添加新塊”(Add new block) 命令。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 單擊“函數(shù) (FC)”(Function (FC)) 按鈕。 指定名稱“FC_PrepareOrder”。 聲明該塊接口,如下所示: ![]() ![]() 編寫以下程序代碼: ![]() ![]() |
在 SCL 函數(shù)塊“FB_PrepareNextOrder”中調(diào)用 SCL 函數(shù)“FC_PrepareOrder”
之后,在 OB1 中調(diào)用“FB_PrepareNextOrder”:
除了上述的操作方式之外,還通過在預(yù)定義作業(yè)中使用數(shù)據(jù)塊“DB_OrderList”將作業(yè)加載到?jīng)_孔設(shè)備中,動(dòng)態(tài)生成作業(yè)列表。此外,也可選擇不同的作業(yè)列表。在執(zhí)行一個(gè)作業(yè)列表后,再將新的作業(yè)列表加載到?jīng)_孔設(shè)備中。為此,需額外編寫以下代碼:
為函數(shù)塊“FB_PrepareNextOrder”創(chuàng)建一個(gè)背景數(shù)據(jù)塊。
雙擊“程序塊”(Program blocks) 文件夾下方的命令“添加新塊”(Add new block)。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 單擊“數(shù)據(jù)塊 (DB)”(Data block (DB)) 按鈕。 指定名稱“DB_FB_PrepareNextOrder”。 選擇數(shù)據(jù)塊“FB_PrepareNextOrder”作為類型。 單擊“確定”(OK)。 |
如需交換作業(yè)列表,則需額外創(chuàng)建一個(gè) SCL 函數(shù):
創(chuàng)建 STL函數(shù)“FC_SwapOrderList”。 聲明該塊接口,如下所示: ![]() ![]() 聲明全局變量“NewModelNr”: ![]() ![]() 編寫以下程序代碼: ![]() ![]() |
創(chuàng)建數(shù)據(jù)塊“DB_OrderRepository”:
雙擊“程序塊”(Program blocks) 文件夾下方的命令“添加新塊”(Add new block)。 “添加新塊”(Add new block) 對(duì)話框隨即打開。 單擊“數(shù)據(jù)塊 (DB)”(Data block (DB)) 按鈕。 指定名稱“DB_OrderRepository”。 選擇“全局?jǐn)?shù)據(jù)塊”(Global DB) 作為該數(shù)據(jù)塊的類型。 單擊“確定”(OK)。 |
之后,在 OB1 中調(diào)用“FC_SwapOrderList”:
結(jié)果
以下示例說明了如何使用指令“DB_ANY_TO_VARIANT:將 DB_ANY 轉(zhuǎn)換為 VARIANT”來確定數(shù)據(jù)塊的 PLC 數(shù)據(jù)類型,以及如何據(jù)此選擇和執(zhí)行適當(dāng)?shù)暮瘮?shù)。
-
plc
+關(guān)注
關(guān)注
5039文章
14261瀏覽量
481041 -
cpu
+關(guān)注
關(guān)注
68文章
11187瀏覽量
221304 -
西門子
+關(guān)注
關(guān)注
98文章
3229瀏覽量
119360 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
237瀏覽量
14056
原文標(biāo)題:西門子博途:使用 DB_ANY 數(shù)據(jù)類型
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
詳解PLC的工作原理和數(shù)據(jù)類型
博世和西門子哪個(gè)好_博世和西門子的關(guān)系
西門子plc數(shù)據(jù)類型_西門子plc通訊方式

西門子PLC模擬量輸入輸出相關(guān)數(shù)據(jù)類型轉(zhuǎn)換

對(duì)于ANY數(shù)據(jù)類型及參數(shù)傳遞的詳細(xì)解析

編程語(yǔ)言SCL中ANY數(shù)據(jù)類型

S7-1200:DB_ANY類型
西門子博途F型PLC數(shù)據(jù)類型與標(biāo)準(zhǔn)PLC數(shù)據(jù)類型的差別
利用物通博聯(lián)工業(yè)網(wǎng)關(guān)實(shí)現(xiàn)西門子plc數(shù)據(jù)采集和控制

C#使用西門子S7協(xié)議讀寫PLC DB塊

西門子SCL-ANY數(shù)據(jù)類型

西門子博途中的SCL關(guān)系表達(dá)式
西門子博途中聲明STRUCT數(shù)據(jù)類型的變量
西門子博途:使用PLC數(shù)據(jù)類型 (UDT)

西門子PLC UDT數(shù)據(jù)類型的使用方法

評(píng)論