发布于 2011-11-21 20:56:46
4楼
楼主的疑问是有道理的,有时候确实会导致数据出现问题。
1 比如:主程序里执行vw0/vw2=vw4,中断里要根据VW4值的不同而执行不同的程序,PLC执行vw0/vw2=vw4的过程是这样的:
MOVW VW0, VW4
/I VW2, VW4
如果执行完第一句就执行了中断,那么就会导致问题的发生。
2 《200手册》和《西门子 S7-200 · LOGO! · SITOP 参考》对这个问题都有描述,描述如下:
问:中断服务程序有关的计算任务,为何会偶尔得出不正确的结果?
答:出现这种现象的原因多是在主(子)程序和中断程序之间传递数据的机制不当。
中断程序可能在任何时刻执行,如果此时主程序(或子程序)正在对中断程序使用的数据进行操作,其中间结果可能带入中断程 序,造成计算结果的变化;同样地,在中断程序中产生数据也对主(子)程序中的计算有类似影响。
解决办法是保证可能产生中间结果的数据不直接参与计算:
使用STL指令计算单个中断程序使用的数据
在梯形图(LAD)编程时,用MOV(传送)指令准备最后的数据(单个数据)
准备成批的数据时,先禁止中断,完成后再允许中断
简单的数据准备或者结果计算可直接放在中断程序中进行
详情请看《S7-200系统手册》的中断指令相关章节。
3 下载中心里曾经有个关于这方面的例子,但找不到了。
4 网友“醉书生”也发过类似的帖子,你自己找吧。