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

已锁定

dakaer

  • 帖子

    81
  • 精华

    0
  • 被关注

    23

论坛等级:侠圣

注册时间:2014-01-27

普通 普通 如何晋级?

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

3588

5

2017-04-17 10:58:26

 

如果在FB1、FB2中使用POINTER或ANY数据类型指针进行拆分时,不考虑在多重背景DB块中的位置,将会造成错误,例如在FB1中定义输入接参数FB1_POS,数据类型为POINTER,在FB1中的程序如下:

      L     P##FB1_POS        //指向存储地址指针FB1_POS首地址。       

      LAR1                    //存储于地址寄存器1中。 

      L     D [AR1,P#2.0]     //装载实参赋值的地址指针,并传送到

                                 MD20中。

      T     MD    20

同样在FB2中定义输入接参数FB2_POS,数据类型为POINTER,在FB2中的程序如下:

      L     P##FB2_POS        //指向存储地址指针FB2_POS首地址。       

      LAR1                    //存储于地址寄存器1中。 

      L     D [AR1,P#2.0]     //装载实参赋值的地址指针,并传送到

                                MD24中。

      T     MD    24

在FB10中,将FB1、FB2作为静态变量使用, FB10的接口参数为

 

数据接口      名称     数据类型     地址

 STAT      FB1_POS    FB1          0.0

 STAT      FB2_POS    FB2          6.0

   

FB10的程序如下:

      CALL  #FB1_POS         //调用FB1,赋值地址指针P#M100.0。

       FB1_POS:=P#M 100.0

 

      CALL  #FB2_POS         //调用FB2,赋值地址指针P#M120.0。

       FB2_POS:=P#M 120.0

 

在OB1中调用FB10,并生成DB10,程序如下:

         CALL  FB    10 , DB10  //调用FB10,生成DB10。

 

结果:

希望将P#100.0赋值到MD20中,将P#120.0赋值到MD24中,但程序执行后MD20和MD24存储的地址指针同为P#M100.0,这是由于FB1中的指令 L P##FB1_POS与FB2中的指令L P##FB2_POS同时指向多重背景数据块DB10中FB1接口数据区的首地址DB10.DBX0.0,以地址DB10.DBX0.0开始的POINTER指针变量存储的地址指针为P#M100.0;

解决办法:

      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

 

 

FB块在多重数据块中的寻址问题。红字的解决办法没看明白,能否详细认真讲解。 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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