如何对多重背景FB里的变量进行位寻址?

分享到:
252
下一篇 >

菜鸟:

现象:在一个被调用的多重背景FB里,一个IN类型的变量#Date_Type,根据#Date_Type的值对FB程序中某些数据按定义的类型处理。如果#Date_Type=1,数据按INT处理,如果#Date_Type=2,数据按REAL处理,等等。

问题:

1.我要怎么对#Date_Type进行位寻址? 是用指针的方式得到这个变量的**偏移地址?有简单的方式吗?我         用的是LAD,LAD和STL可以直接混用吗?如果要用指针的话我还是用比较指令好了,比较#Date_Type中的值得出标志位。

2.我知道S7-200中在子程序中可以直接L20.0,L20.1这样直接用。S7-300中可以类似这样用吗?S7-300中的局部数据L,应该怎么用?

奇侠:

你可以把输入数据传递给temp变量比如把一个word传给lw0,那么你就可以用L0.0~L1.7这16个位来表示这个word了。

菜鸟:

谢谢,帮我看看是下面这样吗?
      举例:实参 3,形参(IN类型) #Date_Type (数据类型INT)
          L      #Date_Type    //把实参的值“3”传递进来给#Date_Type,#Date_Type的值到累加器1.
          T     LW0                  //  累加器1的值到LW0. 这样L0.0=1,L0.1=1   

          用PLCSIM没有看到L0.0,L0.1为1. Q0.0,Q0.1没有变化,哪里理解不对?
  
          L     #Date_Type
          T     LW     0
           A     L      0. 0
          =     Q      0.0
          A     L      0.1
          =     Q      0.1
 


LB是可以的,但是LW不行,不知道什么原因。

奇侠:

1、可以位寻址,但是要用指针的方式
       L P##Date_Type
       LAR1
      TAR2
      +AR1
      下面就可以用A   [AR1,p#0.0]来位寻址了,不过要注意数据大小端的问题, [AR1,p#1.0]对应Date_Type*低位
     2、  
     L     #Date_Type
    T     LW     0
    A     L      1. 0
    =     Q      0.0
    A     L      1.1
     =     Q      0.1

你可能感兴趣: 工控菜鸟园 自动化系统 STL
无觅相关文章插件,快速提升流量