| 作者 | 主题 |
|---|---|
|
雷电 游民 经验值:118 发帖数:59 精华帖:0 |
楼主
主题:S7-200的高速计数是否不稳定?总是不定期的出现错误。
我用CPU S7-224的HSC0和HSC4两路高速计数,两个光栅尺输入脉冲信号给HSC0
和HSC4,光栅尺为25线,根据工艺需要我在TP170A上为HSC0设定7个长度值,每到达一个设定的长度值时触发一个不同的动作,现在出现一个不定期的故障现象,即运行几次循环以后,可能是几次也可能是几百次,HSC0的预制值就被改写成我在TP170A上的设置值,而不是我在程序中把其乘以25线以后赋给SMD42的值,同时也不再调用中断,但是还能计数。请问各位高手这是为什么?
雷电
|
|
shine 至圣 经验值:19820 发帖数:8803 精华帖:39 |
楼
主题:回复:S7-200的高速计数是否不稳定?总是不定期的出现错误。
是你程序的问题。
中断程序可能在一个扫描周期的任意时间执行,如果计算预制值的时候被中断,最后结果就可能出错。 ORGANIZATION_BLOCK MAIN:OB1 TITLE=PROGRAM COMMENTS BEGIN Network 1 LD SM0.1 MOVB 100, SMB34 ATCH INT_0, 10 ENI Network 2 LD SM0.0 MOVW +5, MW0 MOVW +10, MW2 Network 3 LD SM0.0 MOVW MW0, MW4 //如果中断程序在这被触发,则MW6就是5而不是50了。 *I MW2, MW4 END_ORGANIZATION_BLOCK INTERRUPT_BLOCK INT_0:INT0 TITLE=INTERRUPT ROUTINE COMMENTS BEGIN Network 1 LD SM0.0 MOVW MW4, MW6 END_INTERRUPT_BLOCK 解决办法1: 将Network 3做如下修改 Network 3 LD SM0.0 MOVW MW0, MW8 *I MW2, MW8 movw mw8 mw4 解决办法2: 将Network 3做如下修改 Network 3 LD SM0.0 disi //禁止中断,保证在ENI指令之前的程序不会被中断打断 MOVW MW0, MW4 *I MW2, MW4 eni |