回复:FB多重背景调用的问题,是漏洞还是禁止这样使用??

YiMoon

西门子1847工业学习平台

  • 帖子

    1228
  • 精华

    36
  • 被关注

    87

论坛等级:至圣

注册时间:2005-04-14

黄金 黄金 如何晋级?

发布于 2013-02-28 12:47:21

11楼

quote:以下是引用晓星汝在2013-02-28 12:44:12的发言:
quote:以下是引用YiMoon在2013-02-28 12:33:54的发言:
quote:以下是引用youhm在2013-02-27 13:32:34的发言:
quote:以下是引用晓星汝在2013-02-27 13:20:16的发言:
quote:以下是引用youhm在2013-02-26 23:23:44的发言:
楼主这个问题是多重背景数据块使用中需要注意的一个地方,在多重背景调用的FB块里使用 L P##IN0这样获取变量IN0的地址是相对地址,并不是在多重背景数据块里的绝对地址,需要加上AR2里的偏移量才能得到真实的地址,你的代码可以改成
LAR1 AR2
L P##IN0
AD DW#16#FFFFFF
+AR1
L W [AR1,P#0.0]
T #TEMP1
L D [AR1,P#2.0]
T #TEMP2
OPN DB [#TEMP1]
L DBW [#TEMP2]
T #IN_OUT1

奇侠同志正解,谢谢。不过貌似 AD DW#16#FFFFFF这句多余?

的确多余了,+AR1只涉及累加器的低字。

怎么可能多余?
LAR1 AR2 // 得到的数据为DBX0.0(假设是第一个DB块,十六进制84000000)
L P##IN0 //得到的数据为DIX12.0(假设是其中一个参数地址,十六进制85000050)
AD DW#16#FFFFFF //与之后,就为12.0(不与的话,怎么相加,一个是DBX,一个是DIX,84000000 +85000050,加出来是什么了?如果与之后,84000000 + 50 =84000050,就刚好是DBX12.0)
+AR1 //AR1为DBX12.0
这里有个问题,背景数据块最后是用DIX来赋值,所以程序改一下
TAR2
AD DW#16#FFFFFF
LAR1 P##IN0
+AR1

嗯,都有道理,不过这样更稳妥些
TAR2
AD DW#16#7FFFF
L P##IN0
+D
LAR1
各位还有何高见没有呢


你这个是多余了,要么你用AR1来做,要么就用累加器做
你把最后一个LAR1删除,就是累加器的方法,加了LAR1,就是画蛇添足了
Keep calm and carry on!!!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。