TAR1 #Ar1s
TAR2 #Ar2s
// ----------Standard signal
L P##StandardSignalPointer
LAR2
LAR1 P##StaSigPoint
L D [AR2,P#0.0]
T LD [AR1,P#0.0]
L D [AR2,P#4.0]
T LD [AR1,P#4.0]
L W [AR2,P#8.0]
T LW [AR1,P#8.0]
// Load Standard signal
// Copio i dati Standard Signal
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对应的值没有变化。所以你的理解是对的。
提问者对于答案的评价:
谢谢,您两次的回答,是两次,谢谢
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc231179.html