大家好,我做了一个求平均值的程序,但是运行后却显示错误。如下:
L 0 //初始化临时“和”
T #temp0 //
OPN DB 26
L #DB_NO //为采样的次数
m001: T #temp1 //
L DBD 0 //为所以的测量值,DB26.DBD0(实数型)是我的测量温度
L #temp0
+R
T #temp0
L #temp1
LOOP m001
L #temp0
L #DB_NO
/R
T #average
注:以上的IN,OUT数据类型我在FB块中定义的时候都是实数类型。临时变量也是实数类型。但是在OB35中调用,CPU马上停止。在OB1在调用,CPU虽不会停止,但是运算的average结果为65535(我以测量个数为20个来检验的)
问题补充:
还请指教,我第一次尝试着这么编写,多少会有错误,希望你能帮忙指出。我是在OB1中调用FB块的,之前在OB35中调用这个FB块,CPU停止了,后来才在OB1中调用这块的。不知可否帮我完善一下,谢谢!
最佳答案
1.首先是你的数据类型不匹配,temp0是实数,而DB_NO为整数,你用实数去除整数,肯定得不到正确答案,另外就算你把DB_NO转换为实数了,得到的结果还是DB26.DBD0(当前的采样值),并不是你想要的平均值。你的程序实际上就是执行了DB26.DBD0*DB_NO/DB_NO,因为你的循环都是在PLC的一个扫描周期内完成的。
2.要想求取平均值,必须在OB35或者OB1的多次扫描周期进行采样值的累加,然后按照累加次数求取平均值,不能用循环指令来做。
提问者对于答案的评价:
谢谢你的指点,从中获益良多
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc248954.html