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

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

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

評(píng)論