您现在所在的是:

西门子SIEMENS

回帖:2个,阅读:401 [上一页] [1] [下一页]
617
Jimmysheldon
文章数:4
年度积分:50
历史总积分:617
注册时间:2014/4/9
发站内信
发表于:2014/4/9 23:35:11
#0楼
编写一个计算功能的函数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中。 为什么,本来给的不就是开始地址吗,为什么还要再去找开始地址?
2401
gsxiaojian
文章数:170
年度积分:50
历史总积分:2401
注册时间:2007/11/29
发站内信
发表于:2014/4/9 23:55:48
#1楼
1.您不看别人的回帖?
2.对DB寻址,不打开DB块你怎么寻?
3.偏移p#2.0才是你所描述的后4个字节内部交叉指针,所以人家才帮你注释下
617
Jimmysheldon
文章数:4
年度积分:50
历史总积分:617
注册时间:2014/4/9
发站内信
发表于:2014/4/10 23:12:56
#2楼
回复 #1楼 gsxiaojian
谢谢 这段程序已经看懂了 不管怎样谢谢指点表情

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003