作者 | 主题 |
---|---|
萌新一号 游侠 经验值:389 发帖数:55 精华帖:0 |
楼主 2020-05-03 20:06:17
主题:看了yzs贴后 ,探讨以下300PLC的 SD 指令奇怪现象 今天下午参考了一下 yzs 的帖子,是关于PLC的常见编程问题的总结,收益颇丰,感谢这位坛友以下是链接 http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1610509&b_id=4 其中有一条我不是很理解,就一直在做实验 图中提到了是扫描程序顺序对逻辑结果的影响,但我的理解是按照扫描周期来说,我的经验是自上到下,扫描完整个周期再正式执行入plc(说的有些糙了,希望各位能指点),按道理来说,如果T1接通,那么定时器应该断电,且后面的程序也会收到T1定时器的影响,为此我自己用博图做了一些仿真。 我选择了单次扫描周期来做这个实验,PLC的仿真也是10ms一次,方便观察,也将定时器调整为10ms。 开始执行程序,执行了N次,结果也如yzs所给,下边的计数器只会执行以此后无效 这种情况我越发迷惑,我改变了运行的方法 , 以下是我执行的几种情况 ,供各位参考 第一种 :只要是和计时器在同一个逻辑支路就会正常计数,但是在下面就不行 第二种方法 : 指令位于计时器的上面也有效 , 这让我更加有些迷茫 , 难道定时器指令只有半个有效周期吗,哈哈哈哈 我换成其他指令都是正常的扫描周期执行指令 , 只有定时器SD会出现奇怪的现象 我的猜疑是 定时器单位 T n ,存如内存映射映像区和其他的不一样 , 但是又说不上那不一样;以上是我一名初学者的疑惑,还望各位前辈能探讨一番 , 给我解惑解惑 , 这个问题困惑了我一整天 |
Zane 版主 经验值:76091 发帖数:19115 精华帖:378 |
3楼 2020-05-05 16:33:10
主题:回复:看了yzs贴后 ,探讨以下300PLC的 SD 指令奇怪现象 这个问题的实质就是对PLC逻辑运算寄存器RLO及其堆栈的理解的问题,以及定时器访问的一般逻辑问题。因此,我在原贴中就留下了是否有“放之四海而皆准”的编程方法的提问,可惜应者寥寥,而原贴楼主持否定建议。 原想在我的一个编程专题中说一下的,但楼主既已提出了,我就提前就这部分内容答复一下。 计数器C的计数条件是输入条件的的上升沿变化 上图逻辑,C1的逻辑条件是定时器T1保存在RLO堆栈中的值,所以C1能检测到输入值的变化,从而正常工作。 C2的逻辑条件是T1的实时状态值,因为上图的逻辑,C2是只能检测到一次输入值的变化,定时器的T1的上电后首次出发,以后就再也无法检测到输入值的上升沿变化了。 从上面的分析看出,只有在RLO堆栈中才能检测到T1的状态变化,在正常OB1扫描中是无法检测到T1的状态变化的,这就给编程带来的诸多不便。 因此,使用定时器状态去复位定时器的做法本身就是一种不可取的编程方法,我认为是编程上的一些陋习,其根本原因就是不愿意多使用中间标志位,一个字“懒”!
Zane
注册自动化系统工程师
Always save before download
|
Zane 版主 经验值:76091 发帖数:19115 精华帖:378 |
4楼 2020-05-05 17:09:34
主题:回复:看了yzs贴后 ,探讨以下300PLC的 SD 指令奇怪现象 我不止一次讲过,PLC编程就是八股文,就是套路,所以本例的逻辑亦是如此,有固定的编程方法(套路),而且是放之四海而皆准的,与品牌系列亦无关! 其核心意义就是,OB1扫描的逻辑程序,要检测任何标志位的逻辑状态变化,至少要2个扫描周期。 大道至简,掌握了这些道理,还用担心自己的程序会不可靠吗?
Zane
注册自动化系统工程师
Always save before download
|