回复:AR2地址寄存器引发的FB问题

Letham

西门子1847工业学习平台

  • 帖子

    2032
  • 精华

    43
  • 被关注

    360

论坛等级:至圣

注册时间:2006-04-15

钻石 钻石 如何晋级?

发布于 2014-12-23 18:50:27

19楼

quote:以下是引用*在2014-12-23 16:15:19的发言:
感谢楼主letham为大家做的分享和精彩讲解,但我觉得其中有点小错误:
------“当我们在程序里进行调用FB块时,AR2寄存器类容被初始化为16#85000000.实际上在该FB期间AR2一直保持为16#85000000,当该FB块为一个“父FB块”时,在调用到“子FB块”时,AR2类容变为什么了?答案是在调用"子FB块"过程中AR2类容变为16#85000000+"子FB块"在“父FB块”中的偏移地址”-------其中的AR2内容应为“16#84000000”或“16#84000000+"子FB块"”。
那么在程序中怎么能正确获得背景数据的地址呢?那是因为CPU先执行了“LAR1 P##Bins”,此后的“+AR1 ”并不影响区域ID.再说下面程序再使用变址寻址时又是区域内寻址。所以程序能如愿执行。


对 是有点笔误,AR2内容为16#8500开始的,FB块内调用多重背景后,AR2内容会变成多重背景在FB背景DB块的偏移地址,比如P#DIX200.0,在多重背景调用结束后AR2内容会自动回到P#DIX0.0
这个过程是由CPU操作系统来做的。
但是你的理解有误,我不是想要说明是指针的存储区域的改变与否,在我的程序中AR1,AR2内容始终是P#DIX x.y。
LAR1 P##Bins;
这个语句 仅仅得到的是BINS在被多重背景调用的FB块中的首地址,但是多重背景FB没有自己的DB块,它正确执行,需要调用多重背景的FB块的背景DB块,但是多重背景FB的偏移地址很可能 不是从0开始的,所以为了 正确定位到 多重背景FB所使用的数据区,必须 加上AR2的内容,才能正确对应到DB块的数值,这就是TAR2,后+AR1目的所在,没有这2句,FB块直接调用 不会有任何问题!但以多重背景方式调用,就不会正确执行了!

所以 整个程序讨论的重点 和32位指针的区域ID 是否改变没有任何关系。
我可以
T W[AR1,P#0.0]
来做 ,它也不会出错。
人生就像一场旅行!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54660条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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