恭喜,你发布的帖子
发布于 2017-03-30 14:57:44
4楼
各位工程师。前两天论坛上有个帖子《关于用户使用带计时器的子程序多次同时调用产生失控现象》,不知道各位是不是有留意到。大致内容是:在200系列里,当多次调用带定时器的子程序时,因为定时器编号在同一周期反复使用,使得计时失控,最后得不到我们想要的效果。我看了一下内容,西门子的技术人员建议我们自己编程,通过定时中断产生一个时基,从而将计时改为计数,以此来避免计时器的反复使用。我对此的编程思路是:当程序里开始有调用子程序的时候,启动定时中断,开始在每次进入中断的时候,复位中断定时器,并且同时让一个寄存器自加1.比如,我要产生10MS时基的定时器,那么就每隔10MS进入一次中断,让寄存器自加1,同时复位中断定时器,使得中断可以反复进行。这样,最后我们需要的延时,就转化为寄存器的数值X10 ms.ok.这样子似乎没什么问题,但是,如果第一个调用的子程序还在处于接通状态时,我们从另一个地方也同时使用这个子程序,此时,一样做到计时的效果,但问题在于,我们的定时中断是在第一次调用子程序时启动的,第二次调用子程序的时间,我们是不确定性的,有可能中断定时器刚开始从0计,我们启用第二次调用子程序,有可能中断定时器在9MS的时候,我们才启用第二次调用,这样子的话,第二个子程序的定时就会有0-10MS的误差,再加上扫描周期,这个误差会超过10MS.因为,我现在开贴,与各位工程师共通探讨,还有什么方法能降低这个误差?
这是现在编程最常用的模式
适合对全局程序进行周期控制
请填写推广理由:
分享
只看
楼主