BLKMOV:存儲(chǔ)區(qū)移動(dòng)(SFC20)
使用“塊移動(dòng)”指令,可將存儲(chǔ)區(qū)(源區(qū)域)的內(nèi)容移動(dòng)到其它存儲(chǔ)區(qū)(目標(biāo)區(qū)域)。移動(dòng)操作沿地址升序方向執(zhí)行。可使用 ANY 指針定義源區(qū)域和目標(biāo)區(qū)域。
移動(dòng)操作的通用規(guī)則
源區(qū)域和目標(biāo)區(qū)域不得重疊。如果源和目標(biāo)區(qū)域長(zhǎng)度不同,則只能移動(dòng)較小長(zhǎng)度的區(qū)域。
如果源區(qū)域小于目標(biāo)區(qū)域,則將整個(gè)源區(qū)域的數(shù)據(jù)都寫入到目標(biāo)區(qū)域中。而目標(biāo)區(qū)域的其余字節(jié)則保持不變。
如果目標(biāo)區(qū)域小于源區(qū)域,將寫滿整個(gè)目標(biāo)區(qū)域。而忽略源區(qū)域的剩余字節(jié)。
如果復(fù)制 BOOL 數(shù)據(jù)類型的區(qū)域,則此區(qū)域的指定長(zhǎng)度必須是 8 的整數(shù)倍,否則將無(wú)法執(zhí)行指令。
移動(dòng)字符串的規(guī)則
還可以使用“塊移動(dòng)”指令移動(dòng) STRING 數(shù)據(jù)類型的源區(qū)域和目標(biāo)區(qū)域。如果只有源區(qū)域?yàn)?STRING 數(shù)據(jù)類型,則移動(dòng)字符串中實(shí)際包含的字符。有關(guān)實(shí)際和最大長(zhǎng)度的信息,將寫入目標(biāo)區(qū)域。如果源和目標(biāo)區(qū)域都是 STRING 數(shù)據(jù)類型,則將目標(biāo)區(qū)域中字符串的當(dāng)前長(zhǎng)度設(shè)置為實(shí)際移動(dòng)的字符數(shù)。
如果要移動(dòng)字符串實(shí)際長(zhǎng)度和最大長(zhǎng)度的信息,則需要以字節(jié)為單位將相關(guān)區(qū)域指定給 SRCBLK 和DSTBLK 參數(shù)。
函數(shù)值 (RET_VAL) INT 錯(cuò)誤信息
0000 無(wú)錯(cuò)誤
8092 源或目標(biāo)區(qū)域只能在裝載存儲(chǔ)器中。
8xyy 有關(guān)錯(cuò)誤的更多信息,
使用復(fù)雜參數(shù)類型ANY:
STEP 7以10個(gè)字節(jié)存儲(chǔ)參數(shù)類型ANY。當(dāng)構(gòu)造類型為ANY的參數(shù)時(shí),必須確保所有10個(gè)字節(jié)都被占用,因?yàn)檎{(diào)用塊估計(jì)參數(shù)整個(gè)內(nèi)容的值。例如,如果以字節(jié)4指定DB編號(hào),也必須以字節(jié)6明確地指定存儲(chǔ)器區(qū)。
參數(shù)類型的ANY格式
對(duì)于參數(shù)類型,STEP 7存儲(chǔ)數(shù)據(jù)類型和參數(shù)的地址。重復(fù)因子始終是1。字節(jié)4、5和7始終是0。字節(jié)8和9指示定時(shí)器、計(jì)數(shù)器或塊的編號(hào)。
重復(fù)因子識(shí)別由參數(shù)類型ANY傳送的指示數(shù)據(jù)類型的數(shù)量。這意味著可以指定數(shù)據(jù)區(qū),也可以和參數(shù)類型ANY結(jié)合使用數(shù)組和結(jié)構(gòu)。STEP 7將數(shù)組和結(jié)構(gòu)識(shí)別為數(shù)據(jù)類型的編號(hào)(借助重復(fù)因數(shù))。例如,如果要傳送10個(gè)字,必須為重復(fù)因子輸入數(shù)值10,并且必須為數(shù)據(jù)類型輸入數(shù)值04。
地址以格式Byte.Bit存儲(chǔ),此處字節(jié)尋址存儲(chǔ)在字節(jié)7的位0 - 2,節(jié)字8的位0 - 7,節(jié)字9的位3 - 7。位地址存儲(chǔ)在字節(jié)9的位0 - 2。
建立一個(gè)存儲(chǔ)機(jī)器人信號(hào)的功能塊FB5
FUNCTION_BLOCK FB5
VAR_INPUT
Rob_A:POINTER; 機(jī)器人的地址
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的變量反饋點(diǎn)
END_VAR
VAR
END_VAR
Adr_Rob_A := WORD_TO_INT(DWORD_TO_WORD(SHR(IN:=pRobA.BZ,N:=3))); 提取IO點(diǎn)地址
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
);傳輸機(jī)器人的輸出狀態(tài)
erg_SFC20 := BLKMOV(SRCBLK := AnyST_ROB
,DSTBLK:= AnyST_ROB_A_Rob
);
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29533瀏覽量
211735
原文標(biāo)題:SCL 練習(xí)提取IO地址并傳輸
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
制作一個(gè)簡(jiǎn)易的機(jī)器人
智能搬運(yùn)機(jī)器人的功能介紹-鷗鵬科技
發(fā)現(xiàn)一個(gè)好機(jī)器人,《機(jī)器人的中秋祝福》中的機(jī)器人有眼部投影功能哦
西門子PLC編程功能塊FB和功能FC的不同之處是什么
S7-SCL功能塊(FB)的結(jié)構(gòu)

控制KUKA安全機(jī)器人的PLC標(biāo)準(zhǔn)功能塊FB 292

西門子PLC系統(tǒng)功能塊和系統(tǒng)功能
淺析FB420的用法-專用于PM277控制屏的夾具功能塊

西門子PLC FB41中PID功能塊說(shuō)明和調(diào)整方法
調(diào)用功能塊(FB或SFB)
功能塊(FB)的結(jié)構(gòu)介紹
普通電機(jī)功能塊的封裝

VASS 標(biāo)準(zhǔn)機(jī)器人的附加功能

評(píng)論