请专家帮我分析下程序

大家好,我做了一个求平均值的程序,但是运行后却显示错误。如下:
      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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 下午4:30
下一篇 2018年12月2日 下午4:31

相关推荐