恭喜,你发布的帖子
发布于 2017-11-22 10:01:39
6楼
L #I_DB_NO //FC块输入数据,应该是个整数
T #T_WORD //放入临时变量
OPN DB [#T_WORD] // 根据输入数据打开相应的DB块
程序段2
L 0
T #T_Num // 程序段2是用到的一些中间临时变量清零初始化
L 0.000000e+000
T #T_Real
CLR
= #T_BOOL
//从此处开始是一个Loop循环,循环59次
L 59
Ne1: T #T_WORD
LAR1 P#0.0
L #T_WORD
L 1
-I
ITD
L 32
*D
+AR1
//此处乘以32再和地址寄存器AR1相加,根据AR1结构就是字节地址加4 32除以8等于4
结合下面的程序就是不断的用DB块中前面的数据覆盖后面的数据,DB块中总共60个实数类型数据,
32位的,所以字节地址间隔必须是4。
L DBD [AR1,P#0.0]
T DBD [AR1,P#4.0]
L #T_Real
+R
T #T_Real
//一开始还没有凑满60个数据的时候,后面的数据相加都是0
AN #T_BOOL
A(
L #T_Real
L 0.000000e+000
==R
)
JC N1
L #T_Num
L 1
+I
T #T_Num
//这个是计数次数,是有数据才开始计数,一开始可能刚开机没有数据的时候不计数。
SET
= #T_BOOL
N1: L #T_WORD
LOOP Ne1
LAR1 P#0.0
L #I_fLj
//这个可能就是最新的瞬时流量。写入数据块的第一个D,然后不断向后循环,把最旧的剔除掉
T DBD [AR1,P#0.0]
L #T_Real
+R
T #T_Real
L #T_Num
L 1
+I
T #T_Num
程序段3
L #T_Num
ITD
DTR
T #T_R
//这个地方是实际计数次数,已经是实数形式,这个程序上并没有看到它参与计算
L #T_Real
L 6.000000e+001
/R
//这个地方是所有值加起来除以60算平均值
L 3.600000e+000
//这个地方乘以3.6不知道什么意思?
*R
T #RET_VAL
//这个可能就是你要的值
然后这个程序用在300PLC没有问题,你说的显示为0,是哪个显示为0 ?
请填写推广理由:
分享
只看
楼主