签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
不管是用300PLC还是博途1200或1500对于流量累积都会遇到累积数越大误差也会越来越大,直至累计数不动为止。这是因为浮点数在计算机中的存储机制造成的。
其实换个思路就可以解决这个问题,且能够很好的保证精度,就是将浮点数运算改为整数运算就可以完美解决这个问题。
可以看我图片。在ob30里设置循环时间为100ms,那么在fc块中计算时就除以36000.0 将整数和小数部分分别运算。完美解决。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1708184&b_id=50
西门子有标准的流量累计块,累计特精确,我都用好久了,参考连接
https://support.industry.siemens.com/cs/document/48799854/%E5%9C%A8step-7-(tia-portal)-%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E6%B5%81%E9%87%8F%E7%B4%AF%E7%A7%AF%E5%8A%9F%E8%83%BD%EF%BC%9F?dti=0&lc=zh-CN
这个算法有问题,因为内涵了很多限制条件在里面。
1、整数部分必须小于99999;看来你应该发现了整数大到千万甚至亿级别就不好使了;
2、小数部分,处理也有问题,如果 瞬时流量每次都在0.00000001甚至更小,这个算法也没用;
可以再考虑下,论坛里面有很多人讨论过,你也可以借鉴下kahan算法。
另外,inout的方式,不如索性换成FB块的stat,程序封闭性更好。当然如果介意背景数据块太多也可以忽略。
那个不是限于99999.到亿也没有问题,只要是在他的浮点数的取值范围内都可以呀。我是随便写的。。你也完全可以把那一段程序删掉呀。就是复位按钮也可以删掉不用呀。我感觉我这个思路是没有问题的。精度也是绝对没有问题的。
我做这样的累计都要声明:内部运算获得,仅供参考,涉及结算请以现场仪表累计为准。
双精度浮点数可以避免,
如果不要求精度那么高,比如一天能用好几万立方的流量
先做个比如1W的流量累积,每次大于1万的时候,用双整数就增加1,这样累积的值就超大了~
既然发在了1200版区,那干嘛不用LREAL呢
1200/1500的直接用双精度浮点数就是了,想当年还用16位单元做累计呢,都过去了,与时俱进吧,算不上什么了
双精度浮点数数值范围,完全可以满足累积要求,流量仪表自己累积数值也是有一个最大数值的
感谢分享,其实运算过程我一般用定时中断去做
step7中有没有类似的功能块?
累计误差在所难免,要想准确通讯读取把
遇到过好多客户要求,瞬时流量通过4-20MA传到PLC,累计流量PLC做累计,显示有偏差,但是必须要求完全一样,后来流量计+通讯了。
另外就是这个流量累计PLC做感觉还不如积算仪准确。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录