请教:FB的In输入类型问题

请教:
在论坛里,高手发的例子里看到这样的应用,就是FB的输入In里有一个变量的类型是array[0..127] of word,在西门子《如何参数化FB的IN_OUT区域的结构化数据类型并使用ARRAY变量调用》进行了学习,但是没明白输入是这种Array类型的变量,在程序中是如何使用的呢?

比如如下程序(alarm为in,同时类型是array[0..127] of word)
 L     P##Alarm
 T     #Pointer_Alarm
      ......
      ......
 L     #Pointer_Alarm
      LAR1  
      L     #Pointer_Alm
      +AR1  

      L     DIW [AR1,P#0.0]
      T     #Alarm_RD
此处是如何使用的alarm(in,类型是array[0..127] of word)变量呢?使用到底是什么呢?
请高手指点迷津,谢谢

最佳答案

1、此处是如何使用的alarm(in,类型是array[0..127] of word)变量呢?使用到底是什么呢?
正如《如何参数化FB的IN_OUT区域的结构化数据类型并使用ARRAY变量调用》所述:
如果 FB 的传递参数(IN_OUT)是一个复杂数据类型的变量,则它实际上是作为一个 6 字节的指针(48位)保存在背景数据块中的。这意味着它不再是一个变量,而是一个 6 字节的指针。从背景数据块中看,6 字节的指针的W0(第1个与第2个字节)是DB号,6 字节的指针中的W2、W4(第3个、第4个、第5个、第6个字)为有效地址。
2、举一例说明,例如上述文档中的例子:
alarm为in,同时类型是array[0..127] of word。
L     P##Alarm//取 6 字节的指针(48位)
+AR1//装入上述指针为地址指针。
L     W [AR1,P#0.0]//从指针中取DB号,6 字节的指针的W0(第一个字)是DB号
T  #DB_num//保存数据块号
AUF  DB[ #DB_num]//打开这个数据块
L    D [AR1,P#2.0]//6 字节的指针中的W2、W4为有效地址。
L  AR1/将上述6 字节的指针W2、W4有效地址装入地址指针,此后地址指针就指向该地址了
L  B [AR1,P#0.0]//按地址指针中指向地址的B0(第一个字节)装入累加器1.
2、熟练掌握指针寻址必读文档:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04)     》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
详见《step7编程之地址概念详解》连接:
http://www.plc365.com/jishu/57.html

提问者对于答案的评价:
谢谢

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc246203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 上午12:32
下一篇 2018年12月2日 上午12:33

相关推荐