没有上程序,我来传一个吧。一直不喜欢在论坛里传程序,因为我认为渔比鱼有用。思路虽然简单,但要写一个完整的可调试的程序也是比较花时间的。这个才6个网络的破程序也耗小了我半个多小时,楼主参与下
S7-200 自带的系统定时器多达 256 个,在解决一些普通的定时需求时确实很方便,但它不是万能的。特别是在这个问题中,定时的任务数是可变的,不确定的,且随机发生,用系统定时器就会很烦琐。因系统定时器不支持间接寻址,每启动一个新的定时器,就必须有一条显式的定时器语句调用,在我们不知道确切的定时任务时,只能启用最大可能的定时数,这样会产生很多仅定时器号不同的“相同”代码。而且,当定时任务数超出系统定时器的个数时,系统定时器无法满足需求。
其实这个问题本身很简单,用系统定时器也可以解决问题。关键是采用什么样的算法和结构,以使代码量尽可能的少。
自控的要义在于“偷懒”,能够满足精度要求时,用尽可能简洁的代码达到相同目的,且尽可能保持良好的可扩展性。
对于这个问题,我们可以忘却系统定时器,用下面的方法来解决:
①建一个先进先出的表
②制作一个软定时器(视精度要求可用sm0.5、SMW22、或者BITIM指令)
③输入处理:每按一次启动,将定时器当前值追加到表中
④输出处理:软件定时器当前值减表头,计算已放时间
判断是否达到设定时间,若到,蜂鸣器输出提示,同时删除表中第一个值(先进先出)
这样可以突破系统定时器数目的限制。但表的长度是有限制的,如果还要同时放更多的产品,可指定一段内存,自建循环表,用两个指针分别指示表头和表尾,这样表的长度就只受V内存大小的限制了。
点击下载示例程序(MicroWIN V4SP5)
此程序大小仅140字节,可满足问题需求,详细说明见程序注释。
另,本程序只是展示一种思路,解决给出的问题,实际项目应用的话要考虑更多的细节。
以下说明由模板自动生成,属本文之一部分:
本文链接:
http://www.tuxw.cn/blog/article.asp?id=127 转载请保持完整并注明:转自 醉书生杂记 [
www.tuxw.cn]