塊移動指令包括兩個:MOVE_BLK和MOVE_BLK_VARIANT,實際項目中都經(jīng)常被用到。比如設(shè)備作業(yè)結(jié)果的存儲及顯示功能就需要用到塊移動指令。通常采用這種邏輯:首先創(chuàng)建一個數(shù)據(jù)塊,在其中創(chuàng)建一個定長數(shù)組(比如可存放100條記錄)。每次設(shè)備作業(yè)流程結(jié)束后,將流程結(jié)果的數(shù)據(jù)作為一條記錄存放到數(shù)組中。
當需要查看某次作業(yè)結(jié)果的數(shù)據(jù)時,從數(shù)組中讀取相關(guān)的數(shù)據(jù)拷貝到臨時變量或某個特定變量中即可。這類存儲功能一般使用MOVE_BLK_VARIANT指令,因為它可以拷貝結(jié)構(gòu)體數(shù)據(jù)類型(設(shè)備流程結(jié)果一般內(nèi)容比較多,比如包括壓力、溫度、時間等等,多數(shù)采用結(jié)構(gòu)體變量存儲),而MOVE_BLK指令只能拷貝基礎(chǔ)數(shù)據(jù)類型(整數(shù)、實數(shù)等)。數(shù)據(jù)的寫入及讀取要設(shè)定相應(yīng)的指針變量,實際應(yīng)用中經(jīng)常因為指針錯誤導(dǎo)致讀寫錯誤。今天這篇文章我們介紹一下MOVE_BLK_VARIANT指令在使用中應(yīng)注意的問題。
MOVE_BLK_VARIANT指令位于【指令】任務(wù)卡的【基本指令】→【移動操作】中,使用梯形圖或功能塊圖編程時可以在這個位置將其拖放到函數(shù)或函數(shù)塊中。使用SCL語言編程時,可以直接輸入"MOVE"編輯器會自動提示,如下圖所示:
指令添加后的初始狀態(tài)如下圖所示:
指令參數(shù)含義如下:
SRC:可變(Variant)數(shù)據(jù)類型。源數(shù)據(jù),可以是數(shù)組或結(jié)構(gòu)體復(fù)雜數(shù)據(jù)類型;
COUNT:無符號雙整數(shù)(UDINT),要拷貝的記錄條數(shù);
SRC_INDEX:雙整數(shù)(DINT),源數(shù)據(jù)的索引;
DEST_INDEX:雙整數(shù)(DINT),目標數(shù)據(jù)的索引;
DEST:可變(Variant)數(shù)據(jù)類型。目標數(shù)據(jù),即源數(shù)據(jù)要拷貝到的目標區(qū)域;
說明:
無論數(shù)組的上、下限是如何定義,源數(shù)據(jù)和目標數(shù)據(jù)的索引都是從0開始計算的;
如果源數(shù)據(jù)或目標參數(shù)不是數(shù)組,則其相應(yīng)的索引值應(yīng)為0;
舉個例子:
假設(shè)存儲數(shù)組data的定義如下:
data[1..100] of typeResult //typeResult是用戶自定義數(shù)據(jù)類型
假設(shè)過程結(jié)果存放在變量tmpResult中。第一次將過程結(jié)果存放到存儲區(qū)數(shù)組中的代碼如下:
#return_value:=MOVE_BLK_VARIANT(SRC := #tmpResult, COUNT := 1, SRC_INDEX := 0, DEST_INDEX := 0, DEST => "db_storage".data);
注意這里“DEST_INDEX”的值為0,而數(shù)據(jù)則存放在數(shù)組的第一個元素中。由于該數(shù)組的下限為1,所以存放在data[1]中。假設(shè)定義的存放數(shù)據(jù)為data[10..110],則存放第一條記錄的“DEST_INDEX”的值仍然為0,由于該數(shù)組的下限為10,因此數(shù)據(jù)存放在data[10]中。
實際應(yīng)用中需要定義寫指針變量,隨著存入次數(shù)的變化修改寫指針的值,從而存放到數(shù)組的不同位置中。為了防止數(shù)據(jù)重復(fù)寫入,存儲應(yīng)在沿信號時進行。
基于上述描述我寫了一個簡單的數(shù)據(jù)寫入代碼,變量定義如下圖所示:
代碼如下圖所示:
這段代碼我已經(jīng)測試過了,包括數(shù)據(jù)寫滿后的情況,如下圖所示:
這篇文章最核心的內(nèi)容就是大家在使用MOVE_BLK_VARIANT指令時要記住其SRC_INDEX和DEST_INDEX的計算是從0開始的。感興趣的小伙伴可以把上述的代碼進行完善,然后完成數(shù)據(jù)讀取的代碼。
好吧,就先聊到這里。
-
SRC
+關(guān)注
關(guān)注
0文章
61瀏覽量
18317 -
SCL
+關(guān)注
關(guān)注
1文章
243瀏覽量
17453
原文標題:西門子SCL編程入門教程連載(22)——塊移動指令
文章出處:【微信號:方正智芯,微信公眾號:方正智芯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
變頻器的基礎(chǔ)知識及在使用中應(yīng)注意的問題
ATmega128在開發(fā)應(yīng)用中應(yīng)注意的問題
大型矩陣在工程使用中應(yīng)注意的問題
大型矩陣在工程使用中應(yīng)注意的問題
Variant類型的變量指令說明
介紹幾個常用MOVE系列指令
支持處理Variant類型的變量的指令說明
S7-1200填充塊指令(U)FILL_BLK使用說明
西門子S7-1200PLC塊移動指令MOVE_BLK操作
SIMATIC S7-1500 PLC存儲區(qū)移動指令與交換指令簡述

移動數(shù)據(jù)的編程示例

部分TIA集成指令處理的方法介紹

評論