我一直以为,当我组态FM350-1为硬件中断,且中断方式选择为“达到比较值1的上升沿”时,OB40就应该在当计数值达到比较值的时候执行一次。
比如,我如果设定比较值为1000,那当计数值为1000的瞬间,OB40执行。
而且我的编程思路也一直是这样的。
但是,前几天在一个现场处理问题时,出于工艺的要求,我在OB40中读取当前实际计数值,却发现实际情况并不是我理解的那样:
比如,我的比较值是:355348,但是在OB40中读到的实际值却小于这个值。我连续观测了十次,数值如下:355211、355220,355210、355324、355217、355328、355128、355070、355253、355230.
从这组数据可以看出实际值远小于比较值时,OB40就已经开始执行了。
是我的理解错了?还是这是FM350-1的一个BUG?或者,压根就是一个误导?
呵呵,要相信西门子,你在OB40里读到的数是从哪里读的?DB?外设地址?
读写是有偏差的,但是中断是正常调用的,在中断中可以去操作上一次的设定值。如果有条件,你可以用硬件锁存的方式做个记录,你就可以发现区别了!
我认可偏差。
我的分析是在OB40中读出的实际值应该比比较值稍大一点,因为考虑到读写周期的影响。
但现在的问题是实际值比比较值小,而且小的比较多。
或者,如果我在OB40中读外设地址的话,可能会更接近中断的概念。但没有机会试。
如果读外设地址两者接近的话,那说明FM350的背景数据块更新还是受读写周期影响的,滞后于实时数据。
我曾经以为这个数据块是实时更新的。