- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
气体流量计实现流量累积功能
对于流量累计而言,看起来好像是个很简单的程序,但实质上还是有很多需要注意的地方。写累加程序不难,但要做到误差最小,就不是那么容易的事情了。简述如下。
引用 | 回复
| 管理
| 设为最佳回复
| 2010-08-19 19:15:19 12楼
老菜鸟
deshengwu
积分:7832帖子:232 注册:03-06-15
??[个人博客]???? [个人播客]??[加为好友]???? [发送消息]
1. 首先是采样时间采用的计时方式的问题。可能有些人会采用定时器(包括1ms/10ms/100ms/1s定时器及秒脉冲等)来作为采样周期--------这样会增大误差。
??????? 可以用计时器指令来来作为采样间隔时间,每次计时器到了设定值就采样一次。计时器的精度不可能高于它的时基,因此每次计时器超时和再次开始计时的时候,都要产生一个时基的正或负的误差。例如,10ms为一个时基的计时器预定计10次,其时间计算将是100ms正或负10ms。假设你采用100ms定时器来作为采样周期,那么在程序运行过程中,实际上的有效采样周期不是100ms,在这个基础上还包括了PLC的扫描周期的一部分(扫描周期过程包含如下内容。读取输入--------S7-200将实际输入的状态复制到过程映像输入寄存器;执行程序中的控制逻辑--------S7-200执行程序指令,并在不同的存储区存储数值;处理通讯请求--------S7-200执行通讯所需的所有任务;执行CPU自检诊断--------S7-200可确保固件、程序存储器和所有扩展模块正确工作;写入输出--------将存储在过程映像输出寄存器中的数值写入到实际输出。)。该方式的采样间隔时间是固定的,但实际采样时间不是定时器的时间,而是比定时器的时间大一些,因此累计值比实际值就会小一些。越累计越多,误差就越大。
??????? 诸如贝加莱、Sigmatek这样的使用C语言进行编程的PLC,它们的PLC中并无定时器T这个寄存器区,而是通过读取系统时钟来完成定时的。不过结果相同,一样的要产生误差。
??????? 当然,也可以采用一种技巧来减少因计时器精度带来的误差。我们采用长的时间计时来作。例如,10ms为一个时基的计时器预定计30000次,其时间计算将是300s正或负10ms。在这其中,我们可以预定一个采样间隔时间为10个时基(100ms)以上。每次程序扫描,处理器判断如果自从上次累积运算起,时间间隔超过预定时间(例如:100ms),就将这段时间乘以当前的瞬时流量值作为累加量。该方法的计算精度虽然高一些,但采样间隔时间却不是固定的了,而累计值比实际值仍然会小一些。越累计越多,误差就越大。
??????? 因此,该程序笔者采用了定时中断的计时方式来进行流量的累计。
引用 | 回复
| 管理
| 设为最佳回复
| 2010-08-19 19:17:42 13楼
老菜鸟
2. 其次,是采样间隔时间的数值问题。采样间隔时间越短,计算误差就越小,越逼近于实际值--------但永远都达不到实际值,只能说是越接近而已。可是,采样间隔时间越短就会增加PLC的运算次数。当这个采样时间太小(例如1ms),就会出现问题。
??????? 对于采用定时器来累计的情况,从上面第1条的叙述中可以看出,由于扫描周期的影响,累计值那就不是一点点的误差了,而是错误了!
??????? 对于采用定时中断来累计的情况,PLC占用了过多的资源去运行中断程序,可能导致主程序或其它子程序控制出现滞缓或者非预期问题的情况,还可能造成看门狗定时器溢出而造成问题。这个问题比较复杂些,这里就不讨论了。
??????? 对于这个问题,没有更好的解决方案,只求达到一个合理值就可以了,不用去追求非常非常高的精度!在实际工程应用中,典型的采样周期为100ms。该程序采用的采样周期就是100ms。
引用 | 回复
| 管理
| 设为最佳回复
| 2010-08-19 19:20:49 14楼
老菜鸟
3. 第三,是累计计算时的误差问题。
??????? 这里,先要说一下浮点数运算的问题。S7-200系列PLC仅支持单精度浮点数而不支持双精度浮点数,因此仅支持10进制的7位有效数字(如果要问为什么,说起来就比较麻烦一些,我在这里就不赘述了。如果需要,我可以单独发帖来说明这个问题)。
??????? 在累计流量比较大的情况下,小数点后面的尾数就少了--------两个要相加的数差别太大,就会造成误差!(这个问题解释起来也稍微有点麻烦。如果需要,我可以单独发帖来说明这个问题)累计的精度就越来越低了,误差也就越来越大了。为了避免出现这个问题,我们可以想办法使整个运算过程中小数和整数分开计算,且保证小数的有效数字最大可以达
文档评论(0)