BLKMOV:存儲區移動(SFC20)
使用“塊移動”指令,可將存儲區(源區域)的內容移動到其它存儲區(目標區域)。移動操作沿地址升序方向執行。可使用 ANY 指針定義源區域和目標區域。
移動操作的通用規則
源區域和目標區域不得重疊。如果源和目標區域長度不同,則只能移動較小長度的區域。
如果源區域小于目標區域,則將整個源區域的數據都寫入到目標區域中。而目標區域的其余字節則保持不變。
如果目標區域小于源區域,將寫滿整個目標區域。而忽略源區域的剩余字節。
如果復制 BOOL 數據類型的區域,則此區域的指定長度必須是 8 的整數倍,否則將無法執行指令。
移動字符串的規則
還可以使用“塊移動”指令移動 STRING 數據類型的源區域和目標區域。如果只有源區域為 STRING 數據類型,則移動字符串中實際包含的字符。有關實際和最大長度的信息,將寫入目標區域。如果源和目標區域都是 STRING 數據類型,則將目標區域中字符串的當前長度設置為實際移動的字符數。
如果要移動字符串實際長度和最大長度的信息,則需要以字節為單位將相關區域指定給 SRCBLK 和DSTBLK 參數。
函數值 (RET_VAL) INT 錯誤信息
0000 無錯誤
8092 源或目標區域只能在裝載存儲器中。
8xyy 有關錯誤的更多信息,
使用復雜參數類型ANY:
STEP 7以10個字節存儲參數類型ANY。當構造類型為ANY的參數時,必須確保所有10個字節都被占用,因為調用塊估計參數整個內容的值。例如,如果以字節4指定DB編號,也必須以字節6明確地指定存儲器區。
參數類型的ANY格式
對于參數類型,STEP 7存儲數據類型和參數的地址。重復因子始終是1。字節4、5和7始終是0。字節8和9指示定時器、計數器或塊的編號。
重復因子識別由參數類型ANY傳送的指示數據類型的數量。這意味著可以指定數據區,也可以和參數類型ANY結合使用數組和結構。STEP 7將數組和結構識別為數據類型的編號(借助重復因數)。例如,如果要傳送10個字,必須為重復因子輸入數值10,并且必須為數據類型輸入數值04。
地址以格式Byte.Bit存儲,此處字節尋址存儲在字節7的位0 - 2,節字8的位0 - 7,節字9的位3 - 7。位地址存儲在字節9的位0 - 2。
FUNCTION_BLOCK FB5
VAR_INPUT
Rob_A:POINTER;機器人的地址
pRobAAT Rob_A: STRUCT拆分地址
DBNR:WORD;
BZ:DWORD;
END_STRUCT;
END_VAR
VAR_OUTPUT
ST_ROB:ST_Rob;
END_VAR
VAR_TEMP
Adr_Rob_A:INT ;
AnyRob_A:ANY;
pRob_AAT AnyRob_A: STRUCT
SyntaxId:BYTE;// Byte 0
DataType:BYTE;// Byte 1
DataCount:WORD;// Byte 2+3
DBNR:WORD;// Byte 4+5
BZ:DWORD;// Byte 6
END_STRUCT;
AnyST_ROB:ANY;
pST_ROBAT AnyST_ROB: STRUCT
SyntaxId: BYTE;// Byte 0
DataType: BYTE;// Byte 1
DataCount:WORD;// Byte 2+3
DBNR:WORD;// Byte 4+5
BZ:DWORD;// Byte 6
END_STRUCT;
AnyST_ROB_A_Rob:ANY;
pST_ROB_A_RobAT AnyST_ROB_A_Rob: STRUCT
SyntaxId: BYTE;// Byte 0
DataType: BYTE;// Byte 1
DataCount:WORD;// Byte 2+3
DBNR:WORD;// Byte 4+5
BZ:DWORD;// Byte 6
END_STRUCT;
erg_SFC20:INT;用于SFC20的變量反饋點
END_VAR
VAR
END_VAR
Adr_Rob_A := WORD_TO_INT(DWORD_TO_WORD(SHR(IN:=pRobA.BZ,N:=3)));提取IO點地址
pRob_A.SyntaxId:= B#16#10;
pRob_A.DataType:= 02;
pRob_A.DataCount:= W#16#22;
pRob_A.DBNR:= pRobA.DBNR;
pRob_A.BZ:= pRobA.BZ;
AnyST_ROB := ST_ROB.A1_8_Folgespiegelung;DB塊首位
pST_ROB.SyntaxId:= B#16#10;
pST_ROB.DataType:= 02;
pST_ROB.DataCount:= W#16#22;
AnyST_ROB_A_Rob:= ST_ROB.A_Rob;
pST_ROB_A_Rob.SyntaxId:= B#16#10;
pST_ROB_A_Rob.DataType:= 02;
pST_ROB_A_Rob.DataCount:= W#16#22;
erg_SFC20 := BLKMOV(SRCBLK :=AnyRob_A
,DSTBLK:=AnyST_ROB
);傳輸機器人的輸出狀態
erg_SFC20 := BLKMOV(SRCBLK :=AnyST_ROB
,DSTBLK:=AnyST_ROB_A_Rob
);
END_FUNCTION_BLOCK
---------------------------------END--------------------------
審核編輯 :李倩
-
存儲
+關注
關注
13文章
4353瀏覽量
86105 -
參數
+關注
關注
11文章
1859瀏覽量
32393
原文標題:使用復雜參數類型
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
西部數據紀念移動存儲系列 20 周年里程碑,推出標志性產品全新限定版本
移動存儲介質不得在什么和什么之間交叉使用
華為SPN助力杭州移動5G-A全球標桿應用示范區建設
![華為SPN助力杭州<b class='flag-5'>移動</b>5G-A全球標桿應用示范<b class='flag-5'>區</b>建設](https://file1.elecfans.com/web2/M00/E7/38/wKgaomZGuv2AErS3AABoZL6uQug844.png)
PLC順序功能圖(SFC)編程深入解析
![PLC順序功能圖(<b class='flag-5'>SFC</b>)編程深入解析](https://file1.elecfans.com/web2/M00/C5/3D/wKgZomX7ra2ALsPCAAAOKQSACWE312.jpg)
如何估算S7-1500 CPU的裝載存儲區在SIMATIC存儲卡上的大小?
![如何估算S7-1500 CPU的裝載<b class='flag-5'>存儲</b><b class='flag-5'>區</b>在SIMATIC<b class='flag-5'>存儲</b>卡上的大小?](https://file1.elecfans.com/web2/M00/BF/A9/wKgaomW3BzCAMirzAAAuRNUNhMI080.png)
評論