大家好!
如下程序的FC1分别调用了两次,FC1的功能是把staty_any输入的数据库的值复制到DBNO指定的数据库里面,例如程序段1就是把DB1的10个BYTE复制到DB2里面,这个程序执行的结果是正确的
到了第二段程序同样也是调用了FC1 目的同样是把DB1的10个BYTE复制到DB3里面这里要说明一下,DB1里面一共只有10个BYTE再没有其他数据了所以使用了符号寻址的方式直接调用DB1了
但是第二段程序的执行是不正确的,大家知道为什么吗?

这个图片的IN是FC1的输入

这个图片的TEMP是FC1的L区或者说TEMP临时数据区

下面是FC1里面编写的程序
L P##srart_any
LAR1
L W [AR1,P#0.0]
T #ttq
L D [AR1,P#2.0]
T #tttq
L D [AR1,P#6.0]
LAR1 P##any_sfc
T D [AR1,P#6.0]
L #tttq
T D [AR1,P#2.0]
L #ttq
T W [AR1,P#0.0]
以上程序的目的是把start_any的输入指针赋值给 TEMP 区的#any_sfc指针
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LAR1 P##arte_sfc
L B#16#10
T B [AR1,P#0.0]
L B#16#2
T B [AR1,P#1.0]
L 10
T W [AR1,P#2.0]
L #DBNO
T W [AR1,P#4.0]
L DW#16#84000000
T D [AR1,P#6.0]
红色///////到这里的程序是定义一个ANY指针#arte_sfc 要把数据拷贝到这个ANY指针指向的DB数据库里面
调用SFC20
CALL "BLKMOV"
SRCBLK :=#any_sfc //要拷贝的数据ANY指针
RET_VAL:=#ret_val1
DSTBLK :=#arte_sfc//数据目的地的ANY指针
SET
SAVE