【动作描述】

(1)按下启动按钮X0,每隔0.3秒依次启动Y0,Y1,Y2,Y3… … Y40。
(2)按下停止按钮,电机逆序熄灭。
(3)为了程序足够简洁,不使用入门的常规写法,需要使用变址寄存器Z

【前置基础】

(1)变址寄存器:变址寄存器Z可以通过与其他编程元件组合,通过更改变址寄存器的数值可以达到更改与其组合的软元件地址的特殊寄存器。
比如以下程序当按下X0按钮时,Z0里面保存的数据就是0,那么Y0Z0这个元件的地址就是Y0。
当按下X1时,Z0里面保存的数据就是2,那么Y0Z0这个元件的地址就是Y2。
当按下X2时,Z0里面保存的数据就是5,那么Y0Z0这个元件的地址就是Y5。
(更加详细的内容可以登陆基础培训网,学习完整的知识点)

【程序编写及思路】

(1) 启动程序
X0按钮作为启动,按下第一次交替输出指令ALT M0,让M0由断开变为导通,M0是启动标志位,在M0的常开触点的条件下,执行定时器T0 K3,0.3秒过后T0就被自身的常闭触点断开,复位了,复位之后,它的常开触点右开始闭合重新定时,这样每隔0.3秒定时器T0就动作一次。
我们利用X0的上升沿去触发置位指令,第一次Z0保存的数据等于0,Y0Z0的地址时Y0,点亮了Y0,然后顺便给Z0自加了1,等于1;第二次T0导通时,由于Z0等于1,Y0Z0的地址变成了Y1,这个时候SET Y0Z0点亮的时Y1,以此类推,下一次点亮Y3,直到点亮到Y40时,Y40常开闭合,把定时器T0和变址寄存器Z0复位,同时置位M1,M1的常闭触点断开置位和变址寄存器加一的程序,Y点启动到此位置
(2) 停止程序。
X0按下第二次,ALT指令让其由导通变为断开
这时M0的下降沿会有一个导通的信号,给Z0赋值赋了K32(这时有些同学会说了,为什么Y40不是给Y40而是Y32。这个是因为Y点是8进制的,Y7后面就是Y10,那么假如我们给Z0给了一个K8的数据,那么对应的地址应该是Y10而不是Y8,所以按照这个顺序去算,Y40应该是第32个点),由于M0断开了,所以它的常闭触点就会闭合,我们用与之前同样的定时器的方法触发T1,每隔0.3秒就是触发T1一次。下面我们利用T1的上升沿去复位对应的Y点,第一次复位的是Y40,然后让Z0自减1;第二次,由于Z0的数据减1变成K31,这个时候复位的是Y37,同样的道理Y点不断地往低编号去复位。直到Z0等于0时,复位结束,这个时候我们复位掉M1这个点。
上面这样的程序存在2个问题,就是Y0停下了,T1还在不断地计数,Z0还在往下减,这个时候在定时器的位置加了一个[