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