现场去多了,就会遇到各式各样的问题,有的比较简单,有的比较复杂(多个原因叠加是比较难解决的)。现场问题一定是由各种原因造成的。只要按部就班,循序渐进的对问题进行分析和测试,通常都可以解决的(除产品自身的原因外,自身原因也是可以通过测试验证的)。经常听人说有的现场问题很奇怪,究其原因,可能获知的信息不全,例如现场操作人员不了解PLC,故障描述往往就会漏掉了一些关键点。也可能自己的思路被人带偏了,例如,有人说,现场PLC DB1中保持的数据丢失了,而DB2中的数据没有丢失,是不是CPU受到干扰,正好干扰到DB1,结果DB1中的数据就丢失了。这样的问题描述往往都是从现场人员的描述中提炼再转达给你的,信息失真的同时也带有别人的猜测,如果你信了,就会按照别人的思路去思考问题而陷入迷局,这也和自己没有全面思考这个问题有关。下面分享三个案例,这三个案例都与CPU的更换有关,更换CPU后就出现问题了,让我们一起分析一下这些奇怪的问题。
案例1:
这个案例是一个C7的改造项目,西门子最早推出C7/S7/M7,M7可能过于超前淘汰了。C7是西门子操作面板+S7 PLC集成一体的控制器,节省空间,PLC与操作面板也不需要连接线。不清楚是不是要淘汰,现场要求将C7换成S7-300 PLC和新的操作面板,真是合久必分呀。
现场除了面板的分辨率变化了,需要重新布置一下各元素的位置和大小外,PLC没有任何改变,连移植都算不上,就是旧S7-300换成新S7-300了,程序直接下载就完成了。
设备运行后,现场调试工程师说出问题了,操作面板显示的值不正确了。我第一反应就是连接的变量是否正确,需要确认一下数据源的值是否正确,结果在PLC的变量监控表监控,数值也是不正确的,这样可以排除操作面板变量连接的问题。又换回C7,问题消除了。有人说是不是C7与现在PLC的处理机制发生变化了?我一听,这是往沟里带的节奏呀!
都是S7-300的CPU,处理程序当然是一样的,唯一的区别就是新CPU比旧CPU扫描周期快了好几倍,数值显示有问题一定是程序的BUG。这下麻烦了,设备更换的总费用不包括解决程序BUG的费用,但是不解决问题就不能交工呀,所以还必须解决遗留的问题。在家里看了看程序,没有前因后果的,又不在现场,没有人解释一下这些变量的出处,脑子就大了。只能想一个简单的方法屏蔽程序的BUG了,我让现场工程师查看一下旧CPU的循环周期,然后再查看一下新CPU的循环周期,之间相差了几十毫秒。然后让现场工程师在新CPU中增加 “WAIT” 指令,让新CPU的循环周期变慢,与旧CPU的循环周期相当就可以了。添加“WAIT” 指令也不需要考虑扫描变慢而影响工艺的控制要求,因为原来就是这样的。指令增加后,数值显示正常了。现场工程师最后查看程序也找到了问题的原因,这个显示的数值是一个计算结果,数据源来自一个传感器,CPU一个扫描周期采样一次并记录,然后计算出两个周期采样值的差值,最后用这个差值再计算得到需要的显示值。传感器输出值的变化率比较低,原来旧CPU的扫描周期也比较慢,正好每一个周期都能采集到不同的数值,这样差值就不会为0。而新CPU扫描快了好几倍,经常两次或者三次采集的数值是相同,结果差值就为0了。使用0再进行计算,就会导致显示的值不正确了。
问题的原因归根结底就是源程序有BUG,应该使用一个时间中断采样并计算差值,总不能说CPU性能提高了反而不能使用了吧!这也是一个评判程序有问题的原则。现场调试时间有限,也不想在这个问题上耗费太多的时间,使用简单的方法处理这个问题何乐而不为呢!即使找出问题的所在也不好解决,因为你也不知道到底多长时间采样一次才是最合适的。