恭喜,你发布的帖子
发布于 2016-01-27 08:50:30
4楼
这个是我在另外一个问题里面回答的答案, 里面用到了SFC20 BLKMOV
源数据区 和目标数据区都是间接寻址
建议你看一下ANY指针的用法,可以实现非常灵活的功能
A I 0.0
FP M 70.0
JCN b
NOP 0
**I0.0 作为记录数据的触发条件
L L#620
SLD 3
T MD 60
L 32
a: T MW 50
L P##Last
LAR1
L W#16#1004
T LW [AR1,P#0.0]
L W#16#A
T LW [AR1,P#2.0]
L 3
T LW [AR1,P#4.0]
L MD 60
L P#DBX 0.0
OD
T LD [AR1,P#6.0]
L P##Next
LAR1
L W#16#1004
T LW [AR1,P#0.0]
L W#16#A
T LW [AR1,P#2.0]
L 3
T LW [AR1,P#4.0]
L MD 60
L P#DBX 20.0
OD
T LD [AR1,P#6.0]
CALL "BLKMOV"
SRCBLK :=#Last
RET_VAL:=MW30
DSTBLK :=#Next
L 0
T DB3.DBD 640
T DB3.DBD 644
T DB3.DBD 648
T DB3.DBD 652
T DB3.DBD 656
// 这个是将32号数组清零,可以要 也可以不要
L MD 60
L 160
-I
T MD 60
L MW 50
LOOP a
NOP 0
//这个循环用来把0到31号数组一次向后移位,是先从最开始被写进去的数据开始
L P##Send
LAR1
L W#16#1004
T LW [AR1,P#0.0]
L W#16#A
T LW [AR1,P#2.0]
L 2
T LW [AR1,P#4.0]
L P#DBX 0.0
T LD [AR1,P#6.0]
L P##First
LAR1
L W#16#1004
T LW [AR1,P#0.0]
L W#16#A
T LW [AR1,P#2.0]
L 3
T LW [AR1,P#4.0]
L P#DBX 0.0
T LD [AR1,P#6.0]
CALL "BLKMOV"
SRCBLK :=#Send
RET_VAL:=MW30
DSTBLK :=#First
//移位完成后将要记录的数据写入数据记录区的第一数组位置
请填写推广理由: