登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:讨论一下,10个灯,每隔一秒亮一个,哪种是最精简的PLC程序

点击:19789 回复:31

请教各位高手:
    近日闲来无事,给自己找点事做,请各位抽空指点一二:
     RT,10个灯,每隔一秒亮一个
    这个功能倒是很容易实现,
最基本的第一个方法,堆一些定时器就可以了达到目的。
首先给各位陪个不是,我描述和写的都没表述清楚,
正常的逻辑是这样的,
第一个灯亮(保持为1直至停止),隔1s,第二个灯开始亮(保持为1直至停止),再隔1秒,第三个灯亮(保持为1直至停止),如此循环,
到最后是十个灯全亮; 按下停止,全灭。
我后来写的程序都是置位的指令。
所以,移位只能是亮一个灯,我想实现的是逐个点亮,而且每个均保持常亮直至停止。

第二个方法是一个定时器,一个计数器,
启动之后就开始定时,隔1s,计数器+1,
再隔1s,计数器再+1,
如此往复,也可以实现功能。
第三种方法,
我想用西门子300 的PLC,
在子程序FC1中编辑时间延时的程序,
OB1中调用FC1,
启动后,
第一个灯亮,调用FC1,隔1s
第二个灯亮后,再调用FC1,再隔1s
。。。
如此往复,上电后,第一次启动,由于FC1中计时器都为0,可以实现循环,
第二次已启动,其他灯都会亮
期间我尝试在调用结束后,将FC1中的时间清零,效果也不明显.
OB1 的程序段:
确保每次调用FC1时,都是不同的定时器
只需注意last_start和 nextstart
附件
附件
附件
FC1
附件
其他的方法,也可以用移位的指令来实现,
静待高手指点~~~
谢谢
最后修改:2012/11/30 21:22:37
12-11-30 10:18
呵呵;程序能达到你的要求即可,不必纠结于用了多少步,用了什么提令;
12-11-30 12:30
用移位最简单了..
12-11-30 13:54

引用 蓝天月亮 在 2012/11/30 13:54:16 发言【内容省略】

12-11-30 13:58

引用 蓝天月亮 在 2012/11/30 13:54:16 发言【内容省略】

期待你的程序
12-11-30 14:11
像这种程序还是觉得移动指令来的要方便些
12-11-30 14:53
大家都说位移好,哪位大侠画出来让我们新手学习学习。谢谢了!
12-11-30 15:01
使用计数器+比较指令快捷些:
附件:
[本地下载]
12-11-30 15:09

引用 lvjun7258 在 2012/11/30 15:09:34 发言【内容省略】

我的第二种方法是类似于这么做的,
只不过你的Q0.0  Q0.1 Q0.2...需要置位,
如果不置位的话,就只是闪一下了~~~
不过,
写程序总是比那些说空话的强多了
呵呵表情
12-11-30 15:25
你的第一种堆定时器实质上与第三种是一样的,第三种输入不同的定时器不就是堆定时器的方法么。
而第二种方式也就是使用编码译码指令。
上面的大虾已经说过了,移位指令,这里使用腾控的PLC给你做个8个灯循环点亮的例子,10个也类似,100个也差不多,只不过大于32位的使用位数组来实现而已。
之所以使用腾控,因为腾控给我寄了一个样机,另外腾控符合IEC61131-3标准,即使转换到其他厂牌也异常方便,不清楚你是否看得懂。
首先给灯输出赋初值:
附件
然后每秒移位,最后判断值等于第9个灯亮时,那么就给输出赋值。
附件
这里必须BS一下国产品腾控,他们的实际继电器输出并不能使用诸如三菱KnY或者西门子这种QW的方式输出,这是腾控的曲线,同样的程序,你可以在富士,研华甚至于菲尼克斯上使用毫无问题,如果使用三菱来编写,可能更简单,用西门子300系列的话,你也可以依样画葫芦。
Good Luck~
12-11-30 15:58

上一页下一页

工控新闻

更多新闻资讯