技术论坛

关于定时器的复位问题

作者 主题
游侠

经验值: 522
发帖数: 251
精华帖: 1
关于定时器的复位问题


只看楼主 只看精华 2007-08-29 16:27:05
想请教一下高手们,关于定时器S_ODT的复位的问题,我在主程序OB1中调用自己编写的FC功能块,在FC中使用了定时器S_ODT,当在OB1中调用FC功能块的条件不满足时,但FC功能块中的程序并没有执行完,在下一次当调用条件再符合时,FC中的程序会接着上次中止的部分继续执行,我想在每一次调用FC功能块的时候,(无论是在FC功能块中程序执行完后,然后再次调用,还是在FC功能块中程序还没有执行完,但调用条件已经不满足时,当条件再次满足时继续FC功能块中的程序)保证定时器S_ODT是从设定值开始倒计时的,请教有过这样经验的高手帮忙!
 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=364416&b_id=4

侠士

经验值: 1592
发帖数: 699
精华帖: 5
回复:关于定时器的复位问题


只看楼主 只看精华 2007-08-29 22:45:32
有很多复位方法,如在程序的任一地方用R Tx(x为定时器号)即可达到使定时器复位的效果.
学如逆水行舟,不进则退
以下网友喜欢您的帖子:

  
版主

经验值: 55067
发帖数: 16437
精华帖: 315
回复:关于定时器的复位问题


只看楼主 只看精华 2007-08-29 23:11:49
逻辑程序最好让OB1每个周期都扫描到,这样就不会发生你所说的问题了
Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游侠

经验值: 522
发帖数: 251
精华帖: 1
回复:关于定时器的复位问题


只看楼主 只看精华 2007-08-30 10:34:45
先谢谢各位的答复!
再请教!
1.斑竹所说的逻辑程序最好让OB1每个周期都扫描到,我想问是只要将逻辑程序放在OB1中,无论每次执行与否都可以吗?还是必须保证在OB1每个周期逻辑程序都执行啊?
2.二楼的说的在程序的任一地方用R Tx(x为定时器号)即可达到使定时器复位的效果,我想问的是要在每一次执行逻辑程序时,保证S_ODT是从设定时间值倒计时的,在逻辑程序执行过程中,当由于执行条件不符逻辑程序突然中止,致使定时器还没有执行完就停止了,在这种情况下,当执行条件再次符合时,逻辑程序继续执行,此时定时器还可以从新从设定值开始倒计时。再请教!

 
以下网友喜欢您的帖子:

  
至圣

经验值: 39988
发帖数: 8433
精华帖: 389
回复:关于定时器的复位问题


只看楼主 只看精华 2007-08-30 15:06:40
必须保证在OB1每个周期逻辑程序都执行。

天生不宜做胜利者,自来没有胜利的欲望,只是不甘失败,十分十分不甘心失败。木心
以下网友喜欢您的帖子:

  
版主

经验值: 55067
发帖数: 16437
精华帖: 315
回复:关于定时器的复位问题


只看楼主 只看精华 2007-08-31 20:24:29
quote:以下是引用mars_ld在2007-08-30 10:34:45的发言:
先谢谢各位的答复!
再请教!
1.斑竹所说的逻辑程序最好让OB1每个周期都扫描到,我想问是只要将逻辑程序放在OB1中,无论每次执行与否都可以吗?还是必须保证在OB1每个周期逻辑程序都执行啊?
2.二楼的说的在程序的任一地方用R Tx(x为定时器号)即可达到使定时器复位的效果,我想问的是要在每一次执行逻辑程序时,保证S_ODT是从设定时间值倒计时的,在逻辑程序执行过程中,当由于执行条件不符逻辑程序突然中止,致使定时器还没有执行完就停止了,在这种情况下,当执行条件再次符合时,逻辑程序继续执行,此时定时器还可以从新从设定值开始倒计时。再请教!



1.在OB1中并不代表每个周期都能被扫描到,比如定时器所在的FC或FB是被条件调用的.
2.我比较反感这种编程方式,有点像贴狗皮膏药,哪儿疼贴哪儿.
Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
侠士

经验值: 1592
发帖数: 699
精华帖: 5
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-01 00:16:44
我本意是说,对于定时器是可以用外部复位指令进行复位的,并且与定时器的复位R端的的效果是一样,不但可以定时器的开关位复位也同时清除当时定时值并重新加载TV值.
对于哪一个指令,西门子既然设计了出来,就说明有其用途,就看怎么去用好它.如果在编程的时候为了简化程序而得到同样的效果,为什么不用它呢?
像楼主这种条件调用功能的情况,其实每一次调用这个功能前先复位其中的定时器而让其重新工作又有何不可呢?或者非要修改原来的功能,将其定时器的R端变成形参再加以调用复位呢?
楼主希望得到的是处理方法,班主如有好方法不妨直接说出来,不要卖关子,让人猜来猜去.
学如逆水行舟,不进则退
以下网友喜欢您的帖子:

  
侠士

经验值: 1745
发帖数: 606
精华帖: 1
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-01 09:06:58
先不说什么逻辑程序;
lz要的是复位定时器,2楼已经讲了,我补充下。
比如lz的fc中用到是定时器15,除了本身在fc中对其定时器的复位R端外,也可以在其他程序中给该定时器复位,比如当给fc的条件满足时给个上升沿来复位他。
A XXX
FP M0.1
R T15

 
以下网友喜欢您的帖子:

  
版主

经验值: 11708
发帖数: 5541
精华帖: 47
回复:关于定时器的复位问题
精华帖


只看楼主 只看精华 2007-09-01 09:40:10
仅从实现某单一逻辑功能来看,指令如何用以及用什么指令是无所谓好坏优劣的,任智之见不过是个人偏好而已。只有在系统模型的层面才能决定优劣取舍。
一个程序系统的水平主要就体现在系统的模型框架方面。编程着手应该从模型开始,而不是具体的逻辑语句。就像建大厦是先搭楼体骨架,后墙体、再装修。
从程序的可读、易懂、维护、调试等方面的要求出发,程序的每个指令或逻辑的处理以及数据的传递都应该是明确而且明示的,否则条件发生变化时,尤其是变化的组合多样化,这些指令或逻辑处理的边界条件就会混乱不清,起码达不到一览无遗,这种编程方式很容易形成逻辑BUG或死区,一则错难查,而则错难纠。所以本人非常赞同“逻辑程序最好让OB1每个周期都扫描到”这个原则。


mars ld同行的程序就出现了某段程序在某些条件下,CPU对这段程序是失控的,不管不问,因此当CPU在新的条件下进入这段程序时,程序员自己都不知道CPU是如何处理的。

所以改指令之前先梳理清晰你的系统模型。


知其道,用其妙!
以下网友喜欢您的帖子:

  
奇侠

经验值: 6872
发帖数: 5350
精华帖: 25
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-01 20:07:36
你这个程序估计是你一开始就下手编了,而且是没有想清楚的时候就编程
既然条件调用 那么一开始要对子程序进行初始化,不能就那么随意调用
同样的 如果你把条件判断加入到FC或者FB里面,效果就不一样咯,你会很容易知道你的计时器是怎么工作的了
怎么论坛改成这样了??
以下网友喜欢您的帖子:

  
侠士

经验值: 1592
发帖数: 699
精华帖: 5
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-01 22:37:45
本人对“逻辑程序最好让OB1每个周期都扫描到”不太明白.不是提倡结构化编程吗?对于不符合当前使用的功能或功能块里面的逻辑程序一定要让OB1扫描到吗?那不是浪费OB1的扫描时间吗?那跟线性化编程又有什么区别呢?那条件调用的功能或功能块岂不是不能在OB1中使用?请各位高手再指教?
学如逆水行舟,不进则退
以下网友喜欢您的帖子:

  
版主

经验值: 55067
发帖数: 16437
精华帖: 315
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-02 21:16:52
会写几个FC/FB就叫结构化编程啦?
结构化编程也不应该影响OB对逻辑程序的扫描,这是完全的不同的概念.
PLC的逻辑控制语言起源于继电器控制逻辑,硬件的逻辑电路在软件上我们可以等效认为是全扫描的,从系统的稳定性考虑,逻辑程序虽然可能分布在不同的子程序中,但其执行应该和线性化程序被全扫描的效果是一致的,其时序也应该是固定的,而条件调用的逻辑程序是无法保证逻辑时序的一致性的,从而容易导致控制性能的不稳定.
Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游侠

经验值: 555
发帖数: 480
精华帖: 1
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-03 21:13:36
quote:以下是引用Zane在2007-09-02 21:16:52的发言:
会写几个FC/FB就叫结构化编程啦?
结构化编程也不应该影响OB对逻辑程序的扫描,这是完全的不同的概念.
PLC的逻辑控制语言起源于继电器控制逻辑,硬件的逻辑电路在软件上我们可以等效认为是全扫描的,从系统的稳定性考虑,逻辑程序虽然可能分布在不同的子程序中,但其执行应该和线性化程序被全扫描的效果是一致的,其时序也应该是固定的,而条件调用的逻辑程序是无法保证逻辑时序的一致性的,从而容易导致控制性能的不稳定.

精彩的解释!
1.我是新手 2.我不聪明 3.以上两点如有疑义,本人拥有最终解释权
以下网友喜欢您的帖子:

  
游侠

经验值: 522
发帖数: 251
精华帖: 1
回复:关于定时器的复位问题!!!!!!!再请教!!!!!!


只看楼主 只看精华 2007-09-04 10:22:37
首先谢谢各位前辈的帮忙!!!!
我接触到程序也没有多长时间还算个新手!
看了各位的回复,确实使我对编程又有了一个新的认识,我没有经过系统化正式的学习过编程,所以只能摸索的写一些程序,效果并不太好。既然提到了如何编程,那我就再请教一下Zane,要保障OB1扫描到所有的程序,那有些FC,FB并不需要每个OB1扫描周期都需要执行的,必须要保证其执行条件满足时才执行,这算是工艺的要求啊,在这种情况下没办法保障OB1扫描到所有的程序,那该怎么办啊?
请教!
再有就是我个人认为由于程序执行的速度很快,每个步骤的执行不容易控制,所以我想保证每个时期只有一个步骤在执行,用上一个步骤的完结来启动下一个步骤的执行,这样能够很好的控制步骤,我这样做,可以吗?
诚心请教高手!!!!!
 
以下网友喜欢您的帖子:

  
侠士

经验值: 1592
发帖数: 699
精华帖: 5
回复:关于定时器的复位问题
精华帖


只看楼主 只看精华 2007-09-04 22:15:55
班主的批评不错,本人得益非浅.其实条件调用功能或功能块时,当条件不满足时,这个功能或功能块,在CPU扫描到这个位置时,是不会进去扫描这个功能或功能里面的程序的,而是跳过直接扫描下一个语句.那你这个功能或功能块里的所有的变量会保持刚调用之前的状态.除非里面的变量给其他的功能或功能块调用并刷新.所以你的定时器及其它变量是保持在刚调用前的状态的.
我以前曾做过一个试验,就是在S7-300CPU的OB100中编了个语句:
AN Q0.7
=Q0.7
只要是这个Q0.7仅在这使用,Q0.7是保持常亮的.
这说明了在S7-300程序中,一个程序块不被扫描时,其中的变量是保持原态的.
班主意思说得很明白了,尽量少用条件调用功量或功量块.调用条件要做在功能或功量块里面.
说白了就是,让系统扫描到你的每个逻辑条件并及时刷新,不要留下死角让系统扫描不到.
楼主的工艺要求每个时期只有一个步骤在进行,这与CPU的扫描是没有冲突的.因为只要逻辑条件满足的才被执行,不满足的就不被执行.扫描时只不过是每个周期不断地刷新你的逻辑结果而已.并不是说扫描到你的程序就一定执行,是不是?
学如逆水行舟,不进则退
以下网友喜欢您的帖子:

  
游侠

经验值: 522
发帖数: 251
精华帖: 1
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-05 13:54:25
谢谢各位前辈的帮忙!受益菲浅
 
以下网友喜欢您的帖子:

  
版主

经验值: 55067
发帖数: 16437
精华帖: 315
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-05 23:50:25
quote:以下是引用mars_ld在2007-09-04 10:22:37的发言:
首先谢谢各位前辈的帮忙!!!!
我接触到程序也没有多长时间还算个新手!
看了各位的回复,确实使我对编程又有了一个新的认识,我没有经过系统化正式的学习过编程,所以只能摸索的写一些程序,效果并不太好。既然提到了如何编程,那我就再请教一下Zane,要保障OB1扫描到所有的程序,那有些FC,FB并不需要每个OB1扫描周期都需要执行的,必须要保证其执行条件满足时才执行,这算是工艺的要求啊,在这种情况下没办法保障OB1扫描到所有的程序,那该怎么办啊?
请教!
再有就是我个人认为由于程序执行的速度很快,每个步骤的执行不容易控制,所以我想保证每个时期只有一个步骤在执行,用上一个步骤的完结来启动下一个步骤的执行,这样能够很好的控制步骤,我这样做,可以吗?
诚心请教高手!!!!!


我说的是逻辑程序尽量作到OB1全扫描,但有些算术运算或数据处理的程序完全可以根据需要来决定是条件调用还是无条件调用,事实上有些程序是必须条件调用的,比如一些数据的移位处理,PID等.
另外,逻辑程序被周期扫描,并不一定要输出执行,而是根据条件是否满足才输出执行的,即使是所谓的顺序控制(或称步进控制),其逻辑也应该是被全扫描更好一些,因为一些安全自锁信号(如某个电机的紧急停车)需要被尽快及时地处理,而不是等到下一个条件满足周期才响应.
当然,事物不是绝对的,对于初学者来说,遵循这条原则是比较有帮助的,而且这也适用与普遍的逻辑控制,当你们不断的进步,对于PLC的逻辑控制有着更深一层的了解和理解后,你们也可以在一些特定的场合尝试编写一些条件调用的逻辑程序,比如大量的逻辑是在中断中处理的,有点类似于计算机语言中所谓基于事件的编程,这样的编程就是看你考虑得是否周全,即使在这时候,OB1周期全扫描的概念对于一些基础的逻辑的处理还是很重要的.
Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游侠

经验值: 540
发帖数: 155
精华帖: 4
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-07 15:07:04
To“西门子PLC学员”网友:
--------------------------------------------------------------------
......所以你的定时器及其它变量是保持在刚调用前的状态的。
--------------------------------------------------------------------
我是这样理解你的意思的:当调用的条件不满足时,FC或FB中变量(包括定时器)的状态保持不变,无论OB1扫描过多少个周期。
我写了一小段程序检测了一下,发现当调用条件不满足时,FC中的定时器(我用的是SD定时器)只要其启动条件满足(即SD指令之前的RLO为1),此定时器会继续定时,而其它变量则保持不变。
小程序清单如下:
OB1
A I2.0
CC FC1

FC1
AN I0.0
L S5T#20S
SD T0
A T0
= Q4.0
执行此程序,接通I2.0,然后断开约20秒,再接通,那么Q4.0会马上亮,且此时即使再断开I2.0,Q4.0仍会保持亮。
不知是否我对你所说的“定时器”的理解有误?
 
以下网友喜欢您的帖子:

  
游士

经验值: 152
发帖数: 64
精华帖: 0
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-11 09:25:04
OB1
A I0.2
CC FC1

FC1
....


要把它改为
OB1
CALL FC1

FC1
A I0.2
.....

是不是这样做更合适

 
以下网友喜欢您的帖子:

  
侠士

经验值: 1169
发帖数: 675
精华帖: 1
回复:关于定时器的复位问题


只看楼主 只看精华 2007-09-17 12:54:35
呵呵,个人认为调用条件最好写在FC/FB中,这样不管他执不执行,在每个周期都扫描到,不会出现程序错乱的现场,这是我编程中摸索出来的,看了各位的回复,收益匪浅!
当然,当你编程达到一定的高度,对PLC扫描的认识达到比较高的水平时,可以使用条件调用
努力工作,快乐生活!
以下网友喜欢您的帖子:

  
收起
关于定时器的复位问题
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。