恭喜,你发布的帖子
发布于 2017-04-17 13:40:58
2楼
链接一个帖子,供参考下:
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
请填写推广理由:
分享
只看
楼主