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