“四选一”程序是《自学自会plc指令——三菱fx2n编程技术及应用》(莫操君编著)的一个试验模型,它是实际问题的提炼,描述的是:
给定四个输入x0、x1、x2、x3,四个输出y0、y1、y2、y3;每个输入对应一个输出,但每次最多仅允许一个输出接通;四个输入中,每次仅有一个接通,才允许有对应输出。
并且,假定当输入x0~x3全部断开时,输出y0~y3保持前一状态不变;参见表1。
表1输入输出的一一对应关系
序号
输入
输出
说明
备注
1
x0
y0
x0单个接通、y0接通
输出y0~y3中,不允许有两个或两个以上同时接通
2
x1
y1
x1单个接通、y1接通
3
x2
y2
x2单个接通、y2接通
4
x3
y3
x3单个接通、y3接通
当输出是继电器、接触器信号时,虽然在外电路中,可以通过互锁等连结方式,来保证输入信号的唯一性,但作为plc程序,仍必须考虑信号的正确与否,以保证在接线错误、程序调试时强制接通元件等情况下,系统能够正常工作。
所以,对于该问题的编程思路,可以是:
(1)判断信号是否正确;
(2)根据输入信号状态决定输出。
而且假定,当先有一个输入接通(例如x0)、对应输出y0接通时,x0不断开、再接通x1时,输出状态保持不变,即:y0接通、y1~y3断开。
而为了简化问题,当再次只有一个输入接通时,其动作情况暂不作要求,可以是立即转换到对应输出;实际编程时,可根据系统情况作出规定。
1.判别是否只有一个输入接通
对于输入信号数量的判别,《自学自会plc指令——三菱fx2n编程技术及应用》(下称文献[1])分别用sum、add、for、ld=、inc等指令进行了介绍。
按照文献[1]的思想,试验时可以寻求一个问题的不同解法,以熟悉指令和积累编程经验,故本文试用移位指令来进行编程,参见图1。
图1程序,当x0~x3中,只有一个接通时,m100接通;而当有两个或两个以上接通时,m20接通,m100断开。由于本问题,仅需要判断是否只有一个输入接通,而不需要具体数量,故图1程序能够满足使用要求。
800)this.width=800>
但是对于图1的程序,随着输入接通个数的增加,m11、m12、m13均可以接通。
为了方便使用,如果设想,当只有一个输入接通时、则仅m10接通,而两个输入接通时、仅m11接通,三个输入接通时、仅m12接通,四个输入接通时、仅m13接通,能否做到呢?为此,试编制一个程序如图2所示。
800)this.width=800>
图2中,为便于试验观察,特设定y4~y7作为m10~m13的动作指示。手头没有plc时,也可以用软件仿真来验证结果。
这样,当图1中的m100接通、或者图2中的m10接通,就表示输入信号正确,允许有对应输出继电器接通。
于是,可以进行第2步的程序编制了。