回复:FOR循环里面定时器问题

小oo鱼

  • 帖子

    70
  • 精华

    3
  • 被关注

    2

论坛等级:侠客

注册时间:2009-12-10

普通 普通 如何晋级?

发布于 2012-12-17 22:04:48

16楼

quote:以下是引用Automann在2012-02-11 12:51:06的发言:
这里有的帖子我看不懂,只好用最笨的办法,运行和监控楼主的程序。为了便于观察,我把定时器的设定值改为30000。
下面是我看到的现象:
1)接通I0.0的常开触点,定时器的当前值以100为单位增大,实际的定时时间为30s(30000/100=300ms)。因此定时器线圈指令不应放在循环程序里。
2)30s后,T37的常开触点闭合,每个扫描周期VW102的值加100。
3)断开I0.0的触点,VW102的值保持不变。接通I0.0的触点,VW102的值在保持值的基础上继续增大。
4)因为T37的线圈用SM0.0控制,它的线圈不会断开,T37不能复位。
上述现象的解释如下:
1)作为应用指令,FOR指令的调用条件不满足时(I0.0为0状态),循环程序不会被执行(一次也没有执行),其中的定时器指令也没有执行,因此它的当前值和VW102的值保持不变。
2)作为普通的定时器,T37在它的线圈指令被执行时进行定时。循环条件满足时,每次扫描要执行100次T37的线圈指令,因此T37的定时速度比普通情况要快100倍。
3)30s后,T37的常开触点闭合,每个扫描周期要执行100次“+I”指令,所以每个扫描周期VW102的值加100。
4)任何情况T37的线圈都不会断电,所以它的当前值不会回零。这个例子提示我们,除了考虑定时器线圈通电工作,一定要考虑定时器复位的条件,否则你的定时器就只能用一次。

我有个疑问:上电的首次扫描中FOR NEXT循环体肯定循环执行了N次(这里是100),并且当前值为N+1了,按照手册上的说法“每执行一次循环体,当前计数值增加1,并且将其结果同
终值作比较, 如果大于终值,那么终止循环。如果程序进入FOR--NEXT循环时,栈顶值为1,则当程序退出FOR--NEXT循环时,栈顶值也将为1”,那么第一个扫描周期后的循环体起码是不循环的,不管其栈顶值为1是否是每扫描周期执行一次或不执行(这是我假设的);而实际的结果是T37的定时速度比普通情况要快100倍,每个扫描周期VW102的值加100,这是循环了100的原因,那是不是就是说FOR使能的从上电开始的每个扫描周期都循环了100次(FOR使能条件为SM0.0的话),如果是这样的话这就意味这FOR指令的INDX不能循环,也意味这手册的阐述有误。我的说法对吗?求解。。。
LD SM0.0
MOVD 0, AC0 //这里一直把0传送到AC0,为什么没有把AC0清0?求解。。。
MOVD &VB200, AC1
LD SM0.0
FOR VW300, 1, 20
LD SM0.0
+I *AC1, AC0
+D 2, AC1
NEXT
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33298条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。