西门子工业支持中心,以专业共创价值!
西门子工业支持中心,以专业共创价值!
在2016年时公司的一款新产品研发出来一直销售至今,其中控制器采用200smart ,触摸屏为Smart700,从产品方案、设计、调试到后续升级等都是本人负责。
产品出来一直正常销售都未出现任何问题,直到去年才有一个客户反馈流量记录不对,时而不累计,时而累计,但实时流量又显示正常,当时第一反应不应该出现这种奇怪问题啊?其他客户没有提出这样问题。会不会是PLC出问题了?触摸屏问题?传感器问题?满脑子都是各种疑问,但排查还是先从软着手,马上调出触摸屏和PLC程序看看,怀疑是不是数据类型搞错了,导致溢出之类的,暂时没有发现问题,又继续排查是否流量计出问题了,经排查也没有问题。最后实在没找到原因,通过与用户沟通同意,将累计流量清零了,嘿,恢复正常了。再次调出程序看了一遍,仍然没有问题。认为这个就是个案特殊问题,也就没有在意了。
直到今年上年再次陆续有客户提出累计流量不再累计或累计不准的问题,才觉得问题的严重性了,感觉到应该是软件编程BUG导致此问题了。再次调出程序研究,始终没有发现问题,找不到任何原因。以下是PLC程序切图,VD820是每秒的流量浮点数,VD824是每秒累加一次结果。
实在没法把手册找出来慢慢翻看,终于在手册上找到一句话“计算涉及到包含非常大和非常小数字的一长串数值时,计算结果可能不准确”。此时终于真相大白,也明白了为何出现这种情况。
可是产品都卖了几年了,现在才出来这样问题需要高昂的售后成本,也是犯了非常严重的错误。出了问题就得处理,解决办法两种,一是客户对持续累计量要求不高采用清零的办法。二是用户需要保存显示持续累计流量的,只能更新程序了,为了降低售后成本,只能采用邮寄远程下载模块给客户,让客户配合一下将程序远程升级更新。
总结:1、产品开发出来,没有完整的测试,包括对累计流量进行模拟测试。
2、对200smart细节问题没有吃透,还是自己技术能力问题,有待提高。
3、经此事件造成不小的售后问题,同时也对公司造成了一定的负面影响。以此在今后职业生涯警醒自己。希望同行引以为戒!
PS:本人也从事单片机开发,从最初汇编语言到现在C语言,对底层还是有所了解。但是就想不明白PLC为何会有这样的问题,底层逻辑机制是怎样的,如果有大神明白请解释一下。
1、不管是什么类型的累积,机械的、电子的都有上限。理应在说明书中标注:最大累计值。
2、计量最小单位(物理量)是由传感器最小感量决定的。相同存储长度(单精度双精度浮点、整数长整数)整数要比浮点实数可累计值更大。也更容易进位。
3、浮点实数只用在HMI(人机界面)显示上。
https://baike.baidu.com/item/%E5%8D%95%E7%B2%BE%E5%BA%A6%E6%B5%AE%E7%82%B9%E6%95%B0
看看百度百科里面的浮点数格式介绍
在手册里面的数据类型也有相关介绍呢
我说两句,单板机和PLC都是电子芯片,物理材质是一样的;可以实现同样的事情;但两者的服务对象不一样,要实现的功能也不一样;单板机是为某单一功能或者某一类功能而专门开发的,所以可以实现这一功能的最佳途径,你可以直接使用就行了;而PLC却不是,他是大范围的做出许多基本功能,提供给你做一件事情的好多方法,你不可以拿来就用,而需要做二次组合,去实现你要的功能;而这种组合是多种,就看编程人员的水平了。
就流量累计而言,专门的流量累积单片机你可专门开发,避免累计的错误,为了避免错误,你可以做各种改进去实现这个功能,但你的单片机也注定只能做流量累计,再也做不了任何别的事情;PLC采用逐次采样,累加求和,如果你只有一个和,每次往和上加,就会出现你说的问题(和越来越大,加数却很小,差了数量级);但PLC却不是专门给你来做流量累计的,它能做的事情太多了,何况你的编程方法也不一定是用PLC 做流量累计的最佳方法,PLC也可以做出比较准确的流量累计。
问题就是浮点数中小数精度是随着整数部分变大而逐渐变小的,当浮点数特别大的时候跟一个特别小的数累加就把小数舍掉了。解决方法有两种,一种是分级累加,一种是取整累加。
请填写推广理由: