题主的这段代码来自S7-200 (Smart) 的编程。
先说答案,这段代码能实现200ms数据采集的。
题主的疑问来自对“中断”理解的不到位。
首先,这是两个程序块的代码:
一个是主程序(MAIN);一个是中断服务程序(名称为:INT_EX);
主程序三行代码分析:
1)MOVB 200,SMB34
解释:这行代码把SMB34的值变为200。SMB是时间中断0的时基,单位为毫秒。所以这行代码把时间中断0的时基设为200ms。
2)ATCH INT_EX,10
解释:这行代码把中断程序块INTEX和中断事件10联系起来,也就是说,一旦CPU检测到中断事件10发生了,就调用INT_EX来对中断进行处理。“中断事件10”是什么呢?其实就是时间中断0。看下图:
3)ENI
解释:全局范围内使能中断程序。在CPU启动后,中断默认是关闭的。需要使用ENI使能才能使用。
好了,这三行代码的前面还有一行代码:
LD SM0.1
SM 0.1为特殊存储区SMB0的第1位,仅在CPU上电的的第一个循环扫描周期为真。有了这行代码,其后的三行代码都是仅在第一个扫描周期执行的。也就是仅执行一次,相当于程序的初始化。
至此,主程序对中断做好了设置:CPU会每隔200ms调用一次INT_EX中断处理程序。
中断处理程序INT_EX:
1)LD SM0.0
解释:SM0.0 为特殊存储区SMB0的第0位,永远为真。
因此,它后面这行代码会继续执行。
2)MOVW AIW0,VW200
解释:这行代码把模拟量AIW0的值传输到VW200的地址,实现了数据的采集。
这样解释,看懂了吗?