当前位置: 主页 > PLC控制

FC内的寻址

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内运算了啊。我这样理解对吗?

图片说明:

FC内的寻址FC内的寻址 FC内的寻址FC内的寻址 FC内的寻址FC内的寻址 40cd607c4748fbca31be751a8747bca6FC内的寻址

最佳答案

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

提问者对于答案的评价:
谢谢,您两次的回答,是两次,谢谢

专家置评

已阅,最佳答案正确。

  • 关注微信

猜你喜欢

微信公众号