展开查看
以下是引用Letham在2015-09-26 10:21:17的发言 >15楼:我们公司以前的 程序的计时,也是通过楼主所说的方法来做的。如果程序扫描周期太大还是有些弊端的。
我们现在 已经不再使用这种方案了,我们现在采用的程序的上一次循环时间来进行,程序内部的计时了。每次调用程序时,把主循环的上一次扫描时间,存入一个内存,同时把上一次 扫描时间 进入一个队列里面(比如长度为4)。
因为,我们的程序非常大,同时上位机和plc之间的通讯量 也非常大,所以导致扫描周期会非常长,上位机操作响应速度也会降低,同时会影响某些程序的执行(比如通过普通的DI点来计算电机转速),为了解决这种情况,我们采取了,将原来在OB1一个周期执行完的程序,分成2次或者4次调用的方式(本来打算是降低OB35的中断周期,后来还是被我们否定了这个方案),因此我的系统需要存储最近4次的扫描周期值,来进行程序内部的计时,将需要 快速处理的程序,每个OB1周期都调用,不需要快速扫描的程序 分配到4个周期内调用,这样减少循环中断的使用。
采用博图对1500采用这种方法 进行内部计时的编程方法,需要将主循环的 “优化访问方式”取消掉。
虽然,采用 上一次 循环时间来进行计时 ,不是非常非常正确,但由于它的时间是精确到毫秒级的,所以也满足我们的要求,经过拆分程序的调用,我们可以把扫描周期 控制在100毫秒以内。
你说的是对的,如果程序太大,这种计时方式得不到较小的时基,计时就没那么精确了,OB1当程序经常大于200ms时,有可能丢掉脉冲计数,就要采用500ms的脉冲去计时,如果此时要求100ms的,只能放在中断里去执行了。但是大部分的电机阀门的计时其实秒级都够用了。没必要100ms.200ms的时基。