国庆第一天,宅在家里。
整理一下有关定时器的资料。也是临时起意。也不打算翻资料。仅是把已认识的定时器写出来。想到哪写到哪,流水帐。若有谬误,请各位指正。
一、公共时基
定时有很多,T0-T255共256个,SMB34、SMB35定中断2个,还有一个32位长的BGN_ITIME,这样子算下来,共有259个。实际上微处理器中没有那么多硬件定时器。1ms分辨率的定时器是否有对应的硬件定时器,不清楚。但是10ms、100ms的定时器,应该全是软定时器。软定时器,就是由系统软件维护的,并非系统时钟实时计数。而且定时的增量也是公共的,所以1ms的定时器,中断方式误差可以控制在1ms以下,非中断方式可以控制在2ms以下。而10ms、100ms的误差,就难保证了,与扫描周期长短有关,也与具体的使用有关。
二、TONR、TON/TOF
1、TONR叫做保持型定时器,什么意思?就是说,TONR的定时器,当使能=off时,定时器暂停,当前状态保持在那,时间不再往上长,但也不复位。所以TONR可以累计时间。
2、TONR可以用R指令复位,英文手册上是这么说的,你看不出还有没有别的办法复位。但是翻成中文手册,变成“可以只使用”R指令复位,似乎暗含还有别的办法。若是“只可以使用”,那就绝了念了。
3、TON/TOF,使能=ON时,定时器走时;使能=off时,定时器就复位。
4、R指令可以复位所有T类定时器,但是S指令是不是可以置位T,没有试过。复位后的定时器,处于停止状态,不再计时,需要重新用指令启动。
5、可以直接对T定时器赋给定时计数值,赋值后其状态位是否立即有反应,没有研究。
二、1ms的定时器
1、SMB34、SMB35专供中断用,只有8位长。非中断方式能不能用,我想不起来。
2、T0、T64、T32、T96,T0/T64为TONR形式的,没有中断能力,T32/T96为TON/TOF形式的,有中断能力。
3、BGN_ITIME,一直自动在跑的定时器。是上电后开始跑,还是程序RUN之后开始跑,没有考证。我想这个不重要。就象增量型编码器,它的零点在哪不要要,我们关心的是两点之间间隔有多长。这是一个32位的定时器,32位1ms要49天才会计满,计满溢出再从0开始。有人担心在溢出时会对间隔的计算产生误差,其实不会。可以研究一下二进制的加减运算。但是计算间隔时间不要超过24天,即31位长度的表示范围。S7200中32位整数是个有符号数,第32位是符号位,不想碰那个符号位。24天足够长了,没必要去找麻烦。
4、BGN_ITIME是个公共定时器,程序的任何地方均可使用。一般在T类定时器不方便使用的地方,BGN_ITIME是最佳的定时方案。
5、T0/64/32/96,定时器的更新叫做随时更新,也就是时间每满1ms间隔,就更新一次定时的时间计数和状态。所以,此类定时器的使用,即使是同一扫描周期,不同地点、不同时间点,读到的状态与时间计数可能会不同。
三、10ms定时器
1、10ms类的只有T开头的定时器,是16位长的,计数值只有正数,所以只计到32767就停了。
2、10ms定时器的更新。当定时器处在运行(计时)状态时,在一次扫描开始前的某个时刻,把从上一次更新时刻到现在的时间增量,增减到该定时器的时间计数上,直至增到最大值或减至0,同时根据定时值更新定时状态(触点)值。
3、我把取定时器触点(定时状态)、取定时计数,叫做使用定时器。这个使用对定时器是没有影响的。也就是,定时器若是停着的,还是停;若是在走时的,还继续走。在同一扫描周期,使用多次同一定时器都是可以的,不管它在主程序、子程序、中断程序中,都允许。除非程序中有改变定时器状态的指令执行,否则同一定时器多次读到的内容都是一样的。
4、我把对定时器启动、复位、保持等指令,叫做操作定时器。操作定时器就可能改变定时器当前状态。使能=off,对运行中TON/TOF的定时器立即复位,对TONR不管定时器有没运行,执行之后都保持定时器不动。使能=on,对运行中的定时器,继续运行,对停止中的定时器,起动运行。
5、同一扫描周期中,可以对同一个定时器作重复(相同)操作,也可以作对抗性的操作。比如上一网络启动了定时器,下一个网络又把它复位了。这个就看你写程序的风格了。打个比方,总经理要出一个命令,跑到董事长那请示后再发出来,也可以总经理直接把命令发出来,董事长有权把它给取消了。后执行的网络比前执行的网络权限大。但是这个仅限于10ms的定时器,1ms和100ms效果就会不同。
四、100ms定时器
1、100ms类的只有T开头的定时器,是16位长的,计数值只有正数,所以只计到32767就停了。
2、100ms定时器的更新,是在指令执行到是才更新。什么叫执行到?是指操作类的指令被执行,不包括使用(读取)类的指令。也就是说,你取它的状态(触点)、定时计数值,并不会产生定时器更新效果。必须是用使能位去刺激它。如果程序不是每个扫描周期去刺激,这个会错过一些更新时刻,定时器就会变慢,比如间隔一个扫描周期刺激一次,定时器速度约为正常的50%。那么,如果同一扫描周期对同一定时器刺激多次,定时会加速。刺激两次,定时速度约为正常时的200%。
3、除了更新时刻带来的不同,其它的一些特性,和10ms是一样的。
晚餐时间了,就写到这吧。