TAR1#Ar1s
TAR2#Ar2s
//———-STandardsignal
LP##StandardSignalPointer
LAR2
LAR1P##StASigPoint
LD[AR2,P#0.0]
TLD[AR1,P#0.0]
LD[AR2,P#4.0]
TLD[AR1,P#4.0]
LW[AR2,P#8.0]
TLW[AR1,P#8.0]
//LoadStandardsignal
//CopioidatiStandardSignal
CALL"BLKMOV"
SRCBLK:=#StaSigPoint
RET_VAL:=#error
DSTBLK:=#StandardSignal
LAR1#Ar1s
LAR2#Ar2
上面一段FC内的间接寻址,将P##StandardSignalPointer所指的地址拷贝到P##StaSigPoint,再从P##StaSigPoint拷贝到#StandardSignal。同样,P##DevicePointer—–P##DevSigPoint—-#Signal
但在这个FC内的最后还有一段长的程序
CALL"BLKMOV"
SRCBLK:=#StandardSignal
RET_VAL:=#error
DSTBLK:=#StaSigPoint
有把StandardSignal这个复杂的数据类型又传送给了StaSigpoint这个指针,但是不是没有传给StandardSignalPointer?但这个FC调用后,StandardSignalPointer所指的DB块内的数据变化了,请问是不需要再写程序了吗?就可以直接改变StandardSignalPointer所指的DB块内容?
问题补充:
我心飞翔,我上个问题就是你帮我回答的,我没把分给你,对不起,这次的分会是你的了,我今天突然想到一个问题,如果用这边间接寻址来将数据带入FC中运算,如果有A,B,C,3个变量,在FC内的程序是A=B+C,那么是不是当FC运算结束了,间接寻址带进来的数据也会相应变化,因为数据已经在FC内运算了啊。我这样理解对吗?
图片说明:







最佳答案
这是标准的ANY数据类型的传送程序,从你给的程序中只是#StandardSignal变量又传送给了#StaSigpoint变量,并没有传给#StandardSignalPointer,并且#StandardSignalPointer是输入变量,改变由外部控制。
你现在所写的程序看不出此块中有对#StandardSignalPointer变量赋值的程序,可能是其他块中有赋值程序。输入引脚变量的改变不再本身的块中控制。
补充:只要能帮助你就可以了,共同进步嘛。
如你所说,这3个变量都是以间接寻址方式访问的,在FC中执行运算后,计算结果会存到A对应的地址中,B、C对应的值没有变化。所以你的理解是对的。
提问者对于答案的评价:
谢谢,您两次的回答,是两次,谢谢
专家置评
已阅,最佳答案正确。