回复:FB块在多重数据块中的寻址问题。红字的解决办法没看明白,能否详细认真讲解。

dakaer

  • 帖子

    81
  • 精华

    0
  • 被关注

    23

论坛等级:侠圣

注册时间:2014-01-27

普通 普通 如何晋级?

发布于 2017-04-17 13:40:58

2楼

展开查看
以下是引用艾星落尘在2017-04-17 13:13:05的发言 >1楼

链接一个帖子,供参考下:

http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1189908&b_id=4&s_id=0&num=22#anch

主要的问题,也是和这里说的一样;

大家知道在SIMENES PLC中有2个地址寄存器,AR1和AR2,以及2个数据块寄存器DB,DI。其中AR2地址寄存器和DI数据块寄存器相对特殊,主要用在FB中进行寻址。当我们在程序里进行调用FB块时,AR2寄存器类容被初始化为16#85000000.实际上在该FB期间AR2一直保持为16#85000000,当该FB块为一个“父FB块”时,在调用到“子FB块”时,AR2类容变为什么了?答案是在调用"子FB块"过程中AR2类容变为16#85000000+"子FB块"在“父FB块”中的偏移地址。但这个问题和程序出错又有什么关系了?
:) 因为在“子FB块”我以 LAR1 P##Bins; 语句取出的Bins的起始地址仅仅是在”子FB块“中的偏移地址。如果“在FB块”在“父FB块”以多重背景方式调用时,我们应该为该偏移地址再加上“子FB块”在“父FB块”中的偏移地址。
说到这里我想大家应该也明白问题所在了。因此我将上面代码稍作修改,程序即可正确执行了。

您看他这个解决办法对吗?直接把解决办法的程序放到FB1功能块里为什么不行呢?

解决办法:

      T AR2                 //将偏移地址传送到累加器1中。

      L     DW#16#FFFFFF   //过滤地址区,如将P#M20.0变为P#20.0。

      AD   

      L     P##FB1_POS     //将偏移地址与FB1_POS首地址相加并装载到

                             AR1中。

      +D   

      LAR1                 //得到FB1在多重背景DB块中的首地址。

      L     D [AR1,P#2.0]  //将P#M100.0装载到MD20中。

      T     MD    20

慢慢来。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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