FC内的寻址

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

图片说明:

FC内的寻址    FC内的寻址    FC内的寻址    FC内的寻址   

最佳答案

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

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

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc231179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 上午4:58
下一篇 2018年12月1日 上午4:59

相关推荐