本人使用s7-200 smart ,用高速计数器(HC0)记录增量编码器变化,程序逻辑简化如下:
子程序开始记录一次HC0的值(beforeValue),当CV等于PV时,有一个中断,中断子程序,在子程序结束前记录一次HC0的值(doneValue),然后在主程序读取HC0的值(nowValue)。子程序执行过程中,使用物理的方式使得编码器在变化中;子程序结束,编码器也同时停止(停止物理设备)。
一般情况下,beforeValue 小于 doneValue,doneValue 等于 nowValue。例如:beforeValue=10,doneValue=20,nowValue=20。
但,不知道什么情况下,beforeValue 小于 doneValue,doneValue 不等于 nowValue。例如:beforeValue=10,doneValue=20,nowValue=-100。
HC0的值 突然跳变了,而且多数为负数,其绝对值与doneValue 相差甚远。
由于这个情况不知能什么情况下出现,不能重新问题,所以不能跟踪变量的变化。
个人分析:
编码器出问题。
1.1. 编码器Z相跳变,导致编码器归零。此时,HC0应该为0才是。 所以否定。
1.2. 编码器AB相跳变,导致高速计数器错误读取数据。若是,HC0的值不应该跳变等太大,最多在正负1~30变化。但实际情况是跳变太大。 所以否定。
高速计数出器问题。
会不会高速计数器在某种情况下,不再根据编码器的输入而变化?因为HC0是可以直接赋值的。检查程序代码,虽然有对CV赋值,但逻辑上不存在问题,出现的数值也不是我程序定义的值。
请求各位大神,分享一下经验,是否遇到过这样的问题?
这个问题简单来说,高速计数器HCO的值,应该是直线增长,然后在编码器复位是突变为0,然后再直线增长的。而在不知道什么情况下,HC0的值突然没有规律地跳变了,然后继续直线增长。