请教:
在论坛里,高手发的例子里看到这样的应用,就是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