| 作者 | 主题 |
|---|---|
|
LDQQ 游侠 经验值:489 发帖数:218 精华帖:1 |
楼主
主题:关于定时器的复位问题
想请教一下高手们,关于定时器S_ODT的复位的问题,我在主程序OB1中调用自己编写的FC功能块,在FC中使用了定时器S_ODT,当在OB1中调用FC功能块的条件不满足时,但FC功能块中的程序并没有执行完,在下一次当调用条件再符合时,FC中的程序会接着上次中止的部分继续执行,我想在每一次调用FC功能块的时候,(无论是在FC功能块中程序执行完后,然后再次调用,还是在FC功能块中程序还没有执行完,但调用条件已经不满足时,当条件再次满足时继续FC功能块中的程序)保证定时器S_ODT是从设定值开始倒计时的,请教有过这样经验的高手帮忙!
|
|
东方红一红 版主 经验值:16855 发帖数:6779 精华帖:50 |
楼
主题:回复:关于定时器的复位问题
仅从实现某单一逻辑功能来看,指令如何用以及用什么指令是无所谓好坏优劣的,任智之见不过是个人偏好而已。只有在系统模型的层面才能决定优劣取舍。
一个程序系统的水平主要就体现在系统的模型框架方面。编程着手应该从模型开始,而不是具体的逻辑语句。就像建大厦是先搭楼体骨架,后墙体、再装修。 从程序的可读、易懂、维护、调试等方面的要求出发,程序的每个指令或逻辑的处理以及数据的传递都应该是明确而且明示的,否则条件发生变化时,尤其是变化的组合多样化,这些指令或逻辑处理的边界条件就会混乱不清,起码达不到一览无遗,这种编程方式很容易形成逻辑BUG或死区,一则错难查,而则错难纠。所以本人非常赞同“逻辑程序最好让OB1每个周期都扫描到”这个原则。 mars ld同行的程序就出现了某段程序在某些条件下,CPU对这段程序是失控的,不管不问,因此当CPU在新的条件下进入这段程序时,程序员自己都不知道CPU是如何处理的。 所以改指令之前先梳理清晰你的系统模型。
知其道,用其妙!
|
|
西门子PLC学员 侠士 经验值:1709 发帖数:686 精华帖:5 |
楼
主题:回复:关于定时器的复位问题
班主的批评不错,本人得益非浅.其实条件调用功能或功能块时,当条件不满足时,这个功能或功能块,在CPU扫描到这个位置时,是不会进去扫描这个功能或功能里面的程序的,而是跳过直接扫描下一个语句.那你这个功能或功能块里的所有的变量会保持刚调用之前的状态.除非里面的变量给其他的功能或功能块调用并刷新.所以你的定时器及其它变量是保持在刚调用前的状态的.
我以前曾做过一个试验,就是在S7-300CPU的OB100中编了个语句: AN Q0.7 =Q0.7 只要是这个Q0.7仅在这使用,Q0.7是保持常亮的. 这说明了在S7-300程序中,一个程序块不被扫描时,其中的变量是保持原态的. 班主意思说得很明白了,尽量少用条件调用功量或功量块.调用条件要做在功能或功量块里面. 说白了就是,让系统扫描到你的每个逻辑条件并及时刷新,不要留下死角让系统扫描不到. 楼主的工艺要求每个时期只有一个步骤在进行,这与CPU的扫描是没有冲突的.因为只要逻辑条件满足的才被执行,不满足的就不被执行.扫描时只不过是每个周期不断地刷新你的逻辑结果而已.并不是说扫描到你的程序就一定执行,是不是?
学如逆水行舟,不进则退
|