有一段FB程序是这样写的
TAR2 #tTempAR2 // 临时变量 数据类型Dint
L P##iData // iData为输入变量,外部赋值为P#DB100.DBX0.0 BYTE 20
AD DW#16#FFFFFF
LAR1
NetWork 1 Generate Pointers 通用指针
LAR2 P##tPointer //临时变量 数据类型为ANY
L DIB [AR1.P#0.0] // 10 hex = S7 Data Type
T LB [AR2.P#0.0] // Transfer to Source pointer byte 0
L DIB [AR1.P#1.0] // 2 hex = byte data type
T LB [AR2.P#1.0] // Transfer to Source pointer byte 1
L DIW [AR1.P#2.0] // How many bytes to move
T LW [AR2.P#2.0] // Transfer to Source pointer bytes 2-3
T #tBCastDataLen
L DIW [AR1.P#4.0] // Load DB Number
T LW [AR2.P#4.0] // Transfer to Source pointer bytes 4-5
L DID [AR1.P#6.0] // Load start address of data
T LD [AR2.P#6.0] // Trasfer to Source Pointer bytes 6-9
LAR2 #tTempAR2 // Restore AR2
CALL "ST_BLKMOV"
SRCBLK :=#tPointer //临时变量 数据类型ANY
RET_VAL:=#tRetVal
DSTBLK :=#tHMI //临时变量 数据类型为UDT, 内部与DB100完全一致。
有几个问题需要请教:
AD DW#16#FFFFFF 是什么意思? 不能不双字与吗? 直接LAR1?
这段程序是将外部指针映射到FB的临时存储ANY变量吗? 最下面的SFC20 是不是有点多余?
大家都知道any数据类型有10个字节, 每个字节都有独立的含义。 用AD DW#16#FFFFFF,
想做什么呢?
Maybe just stupid question。 谢谢您的回复和帮助!