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