楼上几位,可能我的描述不太清楚,我把我的应用环境描述一下:
应用环境为传送带检测
X0为传送带入口处感知产品的光电传感器输入信号,Y0为良品的分类器(气嘴吹气)的触发信号。
我希望的动作是这样的:
产品经整列来到传送带入口处,X0检测到产品,经过一定延时后,触发检验装置,当检验装置给出良品信号后,产品流到分类器位置(Y0),并被吹至良品工位,如果不良品的话,检验装置没有任何输出,不良品经过Y0时也不会触发,并继续往下流,流至不良品工位。
如果是单件流的话非常简单,但问题是,在第一个产品还没有流到Y0的位置时,可能第二个活已经进来了,也就是说,在一个产品周期里可能有好几个活在流里了。
图片看一下可能比较清楚。
你这个和坛子上前几天讨论的那个汽车门喷漆生产线算法一模一样,还要简单些。
不复杂。
但你的系统还差个东西,传送带从动轴上安装一个编码器,用于检测传送带的速度,这个速度检测至关重要,因为你的传送带可能会变速运行。
需要精确的知道以下个距离参数,检验器到吹气头的距离L1。比如我们对系统的精度为1mm,传送带编码器精度为1mm/p(1毫米每个脉冲)。
取1个长度为L1/1mm的寄存器组A,比如长度为100mm,那么就有A1----A100。
当皮带开始运转时,每转过1mm就把检验器的状态读一次,结果存放到A1,下一个1mm脉冲到来就把A1移动到A2,再把检验器状态读到A1。总之,每转过1mm,就把A向后移动一次,这样不管皮带转动速度快慢,A1-----A100中的数据就是皮带从检验器到吹气装置这段皮带上物品的映射。至于产品距离变化与否,根本无需考虑。
比如检测器检测良品状态为1,不良品为0,那么吹气头只需要检测A100的数据,如果为1则吹气,为0则不吹气。
这样问题就搞定了。实际编程时比如有5米的距离,就会有5000个数据,如果每次都要移动5000次的话显然不方便,PLC速度也跟不上,那么就可以不移动数据,而只移动寄存器组的指针,每转1mm,指针就向后移动一次,把指向的数据取出来,这个数据就是吹气头的应该的状态,又把当前检测器的数据写入这个位置。指针指向A5000后,下一个1mm又跳会到A1。就这样循环下去。
当然,当距离比较远时这种方法会比较耗费PLC的资源。
其实也还有其它的方法来做,仍然以5米的距离为例。比如这段距离上的物品数量为有限个数时,比如最大也就不过50个物品。那么也可以取50个计数器C1---C50(不是真的使用PLC的计数器资源,可以用寄存器数据+1和大小判断来模拟计数器),我们把C理解为一个牌子,就像你在单位表现好,年底来了老板给的支票。每经过一个物体时我们就判断他是否是良品,是良品就发给他一个支票(计数器)。从C0开始,直到C50。当物品到达喷气口后(银行),有C(支票)的就交给给检验器,检验器就把C(支票)收了,并给你钱(开气)。
当然,没有支票的不用管他,随皮带到废品站。
被银行收了的牌子有还到检验器那里发给即将到来的物品。
现在就来看如何来运行的。比如物品W1经过检验器,被判断为良品,那么就把C1给他。现在开始,皮带每转过1mm,就把C1+1。
假如皮带运行20mm后(此时C1=20了),又一个物品W2到来,被判断为不良品,对于这种不认真工作的人,我们不管他,不发给他牌牌。
皮带又运行了10mm(此时C1=30了),又来一个物品W3,被皮带为良品,那么就把C2给他。和C1一样,每转给1mm,就把C2+1。
如此,如此,,,,
当第一个物品C1=5000时,证明到达喷气口了,开动喷口把他吹到良品区。
仅仅过了10mm,那个W2由于没有C,所以喷口不动作。
这下明白了吧。