引用楼主的题目:“一上电,Y11,Y12,Y13,Y14,Y15,Y16,Y17,Y20,Y21,Y22依次每隔一秒动作,再从Y22,Y21,......Y10每隔一秒依次复位,再循环往复,最少的编程步是多少?”
从输出位依次点亮的过程,对象是“Y11~Y22”这10个“位”,返回时,依次熄灯从Y22到Y10共计11个“位”,不对称。可能是楼主的笔误吧?
从题目自身看,每隔1秒依次动作的起点是Y11,终点是Y22(并不经过Y10)。没有经过“动作”的Y10,又何谈对它的“复位”?
以楼主的程序关于输出位的操作内容:“LD M8000 MOV K3M150 K3Y11” 来看,根本没有对Y10施行操作的作用。
因为“传送指令MOV ” 的目标操作数“K3Y11” 所指的全部操作对象为:Y11、Y12、Y13、Y14、Y15、Y16、Y17、Y20、Y21、Y22、Y23、Y24 这12个bit 。其中没有Y10 !所以,Y10不可能被操作!
由此可知:题目中的“一上电,Y11,Y12,Y13,Y14,Y15,Y16,Y17,Y20,Y21,Y22依次每隔一秒动作,再从Y22,Y21,......Y10每隔一秒依次复位”是个错误的“描述”!
№2楼出示的程序,从0到10这11步是没有必要的!
其“LD M8002 [ ZRST M149 M160 ] ” 要实现的目的是:为两个‘移位寄存器’准备12个‘干净’的 bit ,保证‘移位寄存器’正确的从指定的‘位’开始移位。
其实,这是没有必要的!我们都知道,FX系列中,M384 之前的‘继电器’(FX1s、FX1n:M0~M383 ;FX2n:M0~M499 )都在非保持区域内。
但凡非保持区域的‘继电器’,即便程序中不写对‘继电器’复位的命令,在PLC的上电开机之初,全都是清一色的‘OFF ’状态!还用得着我们再以‘开机脉冲M8002 ’对非保持型‘继电器’复位吗?!
再看其6到10步的程序:
LD M100
OR M8002
OUT M100
ANI M8000
OUT M110
这一片断所要实现的目的是:
为‘左移位寄存器’做一个始终都为ON的‘源': M100 ;
为‘ 右移位寄存器'做一个 始终都为OFF的‘源': M110 。
其实这也是没有必要的!
PLC的系统内核有现成的常ON的‘bit ’ M8000 ,直接引用M8000作左移位寄存器的‘源’不就成啦!还用得着我们自己再写程序另建立一个常ON的 ‘bit ’ 吗 !
同理,直接引用PLC系统内核现成的常OFF ‘bit ’M8001作‘右移位寄存器’的‘源’不就成啦!还用得着我们自己再写程序另建立一个常OFF的 ‘bit ’ 吗 !
对于常OFF ‘bit ’,在一定条件下,任意一个非保持区域内的‘继电器’都可以直接充当! 例如M110 ,只要程序中没有对M110施行由OFF变ON的操作,那么我们就完全可以不写对M110做“OFF运算”的指令,而直接采用M110作本题目中‘右移位寄存器’的常OFF的‘源’!
一点也不深奥,都是些基础的内容。
老王再给你讲解得细致一些!
我们为什么可以说如下片断a :
LDP M160
SET M102
RST M160
改成如下片断b :
LD M160
SET M102
RST M160
在实现本题目功能的程序中得到的逻辑结果是完全一样的呢?
在PLC编程中,“上升沿检出运算”(或称‘前沿接点运算’)是指‘接点信号由OFF切换为ON的第一个运算周期内有效’的运算!
№2楼的程序中使用这个“LDP M160 上升沿检出运算”的目的是只让M160的上升沿起作用,实时的将“移位寄存器”的向左移位切换为向右移位。
其实,在№2楼的程序里,这个M160的每一个ON状态自身就已经是符合PLC对“上升沿脉冲”定义的。
对实质上本身就是“短暂脉冲”的M160再施行“上升沿检出运算”完全是多余的!