登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:有一段Pointer数据类型指针的程序求助

点击:407 回复:2

编写一个计算功能的函数FC3,输入首地址“In_Data”及连续浮点格式变量的个数"NO"后,输出几个变量的平均值"OUT_VAL"
OB1中调用函数FC3程序如下:
CALL FC 3
In_Data:=P#M100.0
NO:=4
OUT_VAL:=MD20
FC3接口参数
数据接口       名称          数据类型            地址
IN                   In_Data   Pointer
IN                   NO            INT
OUT               OUT_VAL  Real
TEMP             BLOCK_NO  INT             0.0
TEMP            NO_TEMP       INT           2.0.
TEMP            ADD_TEMP     REAL       4.0
L  0
T  #ADD_TEMP
L  P##In_Data
LAR1
L 0
L W[AR1,P#0.0]
==I
JC M1
T #BLOCK_NO
OPN DB[#BLOCK_NO]
M1: L  D[AR1,P#2.0]
LAR1
L 0
L#NO
==I
JC END
NO: T #NO_TEMP
        L  D[AR1, P#0.0]
        L  #ADD_TEMP
       +R
       T   #ADD_TEMP
        +AR1 P#4.0
         L  #NO_TEMP
         L #NO_TEMP
         LOOP NO
         L  #ADD_TEMP
         L  #NO
         DTR
         /R
         T #OUT_VAL
     END:  NOP  0
这段程序有几个地方看不懂
1.       L 0
          L W[AR1,P#0.0]
          ==I
通过这两句程序判断#In_Data是否为DB块,为什么?(程序提示是参考POINTER的数据格式)
2.       T #BLOCK_NO
          OPN DB[#BLOCK_NO]
程序提示是说如果判定其为DB块,则需要打开DB块,为什么要打开该DB块,对程序有什么用处?
3.   M1: L  D[AR1,P#2.0]
程序提示说是找出计算数据区的开始地址,POINTER数据中,后四个字节包含内部交叉指针,将P#100.0装载到AR1中。 为什么,本来给的不就是开始地址吗,为什么还要再去找开始地址?
14-04-09 23:35
1.您不看别人的回帖?
2.对DB寻址,不打开DB块你怎么寻?
3.偏移p#2.0才是你所描述的后4个字节内部交叉指针,所以人家才帮你注释下
14-04-09 23:55
谢谢 这段程序已经看懂了 不管怎样谢谢指点表情
14-04-10 23:12

工控新闻

更多新闻资讯