欢迎来到天天文库
浏览记录
ID:57187599
大小:25.50 KB
页数:12页
时间:2020-08-05
《累计流量(西门子程序).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、累计流量(西门子程序)FUNCTION"FLUXbase":VOIDVAR_IN_PUT PV:REAL; //瞬时流量 CYC:REAL; //采样时间(MS) PLL:REAL; //最小瞬时流量END_VARVAR_IN_OUT OV_ER1:REAL; //累计偏差 OV_ER2:REAL; //累计偏差 PV_ALT:REAL; //上周期瞬时流量 OV:REAL; //流量累积输出END_VARVAR_TEMP tmpReal1:
2、REAL; tmpReal2:REAL; OValt:REAL;END_VARBEGIN OValt:=OV; IFPV>=PLLTHEN tmpReal1:=PV*(CYC/3.6E+6)+OV_ER1; tmpReal2:=tmpReal1+OV_ER2; OV :=tmpReal2 +OValt; OV_ER1:=OV_ER2-tmpReal2+tmpReal1; OV_ER2:=OValt-OV+tmpReal2; ELS
3、E OV:=OValt; END_IF; IFOV>=1.e+009THEN OV:=0.e+000; END_IF; END_FUNCTION这是我的累积计算,程序简单,精度也比较高 OValt =1.0e+006tmpReal2 =0.1OV = OValt + tmpReal2 = 1.0e+006+0.1= 1.0e+006OV_ER2:=OValt-OV+tmpReal2=1.0e+006-1.0e+006 +0.1=0.1 qlhcco2008-5-1318:36:36我把我的家底都抖给
4、你了,这是浮点数在执行加减法时产生的误差,我把每次运算的误差再加的本次的积分里,不管再小的数,累加定量以后,他就可以加到OV里了,所以我的这个算法不会因为OV值大了而不能累积。你可以模拟一下,有偏差变量和没有偏差变量的区别。你会发现其中的奥妙了。 yzdatou2008-5-147:11:04模拟了一下确实是对的。谢谢ls指教。你的思路很独特,受教了。 qlhcco2008-5-149:56:14我这个思路也不是完全是我自己的,其实是我在研究SETP7FB41的PID功能是发现的,最后我就应用在累积计算的算法里了 yzdatou2008-5-14
5、19:20:34很佩服你的钻研精神,自愧弗如。另外,我思考再三,仍然要给你来个鸡蛋里面挑骨头,呵呵。假定累积量越来越大,最终达到8位数,而实际有效数字仅7位,那么这个累计量的个位数将不再变化了。 qlhcco2008-5-150:07:57确实是这样的,这是由于浮点数的问题,这个问题不是不可以解决,dint型数据可以显示;可以将OV结果转换为DINT类型数据,OV_ER2也转换成DINT类型数据,OV(dint)+OV_ER2(dint)=OUT(显示用)该输出不用于计算只是用于显示。你认为如何? yzdatou2008-5-1516:26:57
6、你说的没错。我就是用dint类型变量来存储累积量,再用一个real变量存储小于1的累积量到1就进位。FUNCTION_BLOCKFB618//TITLE='LEIJI'//know_how_protectVERSION:'6.0'AUTHOR:nyjNAME:nyjFAMILY:china{S7_m_c:='true'}//BlockParametersVAR_INPUT //InputParametersTongDaoDiZhi{S7_m_c:='true'}:WORD:=0;//AIadressXunHuanShiJian{S7_m_c:='
7、true'}:REAL:=100;//unit:msLiangcheng{S7_m_c:='true'}:REAL:=0.0;//m3/h(max),t/h(max)QingLing{S7_m_c:='true';S7_string_0:='false';S7_string_1:='true'}:BOOL:=0;//backtozeroEND_VARVAR_OUTPUT //OutputParametersShunShiZhi{S7_m_c:='true'}:REAL;//m3/h,t/hLeiJiZhi{S7_m_c:='true'}:DINT
8、;//m3,tEND_VARVAR_IN_OUTLeiJiHH:DINT:=0;//(1e--??ee)LeiJiH:DINT:=0;/
此文档下载收益归作者所有