作为一种编程语言总得要有一些语法的约定嘛,不能一遇到某些约定就说是“条条框框太多”。其实,在一些按顺序进行的“工序”控制的场合,SFC程序也是有它的一些优点的。对于复杂的机械顺序动作,单用通常的梯形图来对其他人表达控制原理的话,将是困难的。用SFC图来表达就显得容易些。每道工序中设备所起的作用以及整个控制流程都能表达得通俗易懂。因此有利于维护、规格修改,和故障排除等。而且,在STL片断之内的梯形图逻辑关系也完全是通常梯形图一样的规律!
我也没有常用SFC的习惯,谈不上对SFC熟悉。是<luw816>网友在实践中遇到了这个问题,把它贴出来向网友们求助(请参阅他的求助贴《帮忙找下问题》)。通过交流,<luw816>网友也能自己写出可以避免<plsy>指令在SFC程序里出现“隔轮有效”问题的程序来。
参见《帮忙找下问题》第64帖的内容:
<luw816>网友知道是知道把plsy移到SFC程序外面能解决“隔轮有效”问题。但是,他还是有一点疑问:
“那么plsy用到步进顺控中为啥会发生这么种情况啊?”(如下所示《帮忙找下问题》第72帖中的疑问)
为了让新手能够理解这个<PLSY>指令在SFC程序中的“隔轮有效”问题的成因,我想给他进一步的从原理上讲清楚。这时有人却阻拦说“又是图,又是说明,还不知(《帮忙找下问题》一帖的<luw816>)楼主能否看得明白”:
“又是图,又是说明”怎么啦?科技交流,有时候单用文字很难表达清其原理,图文并茂是这网上交流最好的方法!图形和文字互为补充,让网友能够从原理上把问题搞得水清理白的。不但知其然,而且还知其所以然。以后遇到这类问题就能举一反三。难道这样不好吗?!
我们不否认最早(在《帮忙找下问题》第37楼)提醒:“把PLSY移到S0之前”的人是<yjig>网友!但是,<yjig>网友并没有把<PLSY>指令“隔轮有效”的成因从“原理”上讲出来,只是怀疑<PLSY>指令在SFC程序中不能正常运行,才提出把<PLSY>指令移到S0之前去试探一下还有没有“隔轮有效”的问题。
(请参见下图所示的《帮忙找下问题》中<yjig>网友的几个帖子内容:)
要知道,即便你试探着把<PLSY>指令移放到S0之前就碰巧的解决了这个“隔轮有效”的毛病,你若没从原理上去分析其成因,那你仍然是“只知其然,而不知其所以然”!所以你就不能举一反三的从理论上得到提高。
用某个方法盲目的去试探,与已经明确知道用这个方法将会得到什么效果而胸有成竹的、有的放矢的去运用这个方法,有着级别段位的差异!
《注意事项》之条款②明确表述:“脉冲输出指令的‘再次启动’必须待M8147 / M8148 经过1次以上的OFF演算,方能再次执行。” 我们再来看《FX1s,FX1n,FX2n,FX2nc编程手册》第4章、第98页有这样的内容:“●如果STL触点接通,则与其相连的回路动作;如果STL触点断开,则与其相连的回路不动作。但是在一个扫描周期以后,不再执行指令(跳转状态)。”请网友们千万注意:编写这个《编程手册》的先生语文不够好,把后面一句话表达得不够准确。我认为它应该表达成:“但是,刚断开STL触点的片断要在一个扫描周期以后才不再执行指令(相似于跳转状态)”。
我们就把这两个特点(<PLSY>指令的“再启动”特点和SFC程序的STL片断转移特点)结合起来就可以正确解释本主题帖所讨论的“SFC程序里用上<PLSY>指令,分别在FX1s、FX2n系列PLC上运行有不同的表现,造成这个‘差别’的‘原理’是什么?”的问题了!
为了使我们的讨论更简单明确,我们仍用№4楼所示的仅只两个“工序”的SFC程序来深入讨论:
我们把<PLSY>指令从STL 片断中移出来放在非SFC程序的部分,其目的就为了让<PLSY>指令在每一个周期里都能被程序扫描。在<PLSY>指令原来所在的STL片断OFF期间,让移出来的<PLSY>指令做“OFF运算”,以建立<PLSY>指令“再次启动有效”的前提条件。
我们这样有明确“目标”的把<PLSY>指令移放到STL片断之外。并不是等于在“抄袭”<yjig>网友“把【PLSY K5 K0 Y0】放到程序的最前端(SO之前),看看顺控是否影响脉冲输出”的试探方法!这“STL片断之外”的概念不单是“S0之前”,它还包括“RET 之后”。
“把<PLSY>指令移放到STL片断之外”的另一个做法如下图所示:
只要我们从原理上弄懂了<PLSY>指令在STL片断中发生“隔轮有效”的成因,即便我们不采用这个“将<PLSY>指令移放到STL片断范围之外”的方法,我们也是能够圆满解决这个“隔轮有效”毛病的!
“隔轮有效”的成因是<PLSY>指令在SFC程序中所处的“工序”转移之后没有进行<PLSY>指令的“OFF运算”。所以,对于那些处理<PLSY>指令“再启动”需要有前提条件的PLC(譬如 FX1s)来说,<PLSY>指令未经“OFF运算”就不能在“偶数轮次”中,再次启动<PLSY>指令的“脉冲输出”。
所以,我们在<PLSY>指令的驱动条件上设定一个“OFF运算”的环节,为<PLSY>指令的“再启动”建立必要的“前提条件”。即可圆满解决“隔轮有效”的毛病!
具体做如下图所示:
“工序”S20的任务执行完毕之后“转移条件X0”成立,于是“工序”进入第2轮将“工序”S0再次选通,“工序”S20随即自动关断。请网友们注意:S20关断后,与之连通的输出Y1的“ON”状态还要持续一个扫描周期才会OFF,我们就是利用SFC程序的这一个特点让S0片断中的<PLSY>指令有一个周期的“OFF运算”!