简述现场情况:现场总共有5条生产线,2台RGV,一条汇总输送线(生产线的料需要运到汇总输送线上),目前只写了一台RGV程序,RGV与总控是通过无线通讯,所以,我把生产线的请求接料信号进行了编号,例如,1号线请求接料位号=10,2号线请求接料位号=20.........,回到空闲工位为60, 以此为例,排好序后,做程序逻辑判断(PLC采用汇川AM403)。
这里我采用的计数的方法,利用一秒定时器,每过一秒进行加一,然后比较那条线计数最大,那首先去那条线。
首先,创建一秒逻辑定时器:
FB_1S定时器(IN:=(NOT FB_1S定时器.Q) , PT:= T#1S, Q=> , ET=> );
然后,根据逻辑判断,假如此条线有请求接料信号,用if语句,进行累计:
IF hb_1出垛输送请求接料 THEN
IF FB_1S定时器.Q THEN
vd_1号线请求接料计数 := vd_1号线请求接料计数+1;
END_IF
ELSE
vd_1号线请求接料计数 := 0;
END_IF
首先判断那条线的计数最大,此处我采用最大值函数,先求出最大值:
vd_5条工位计数最大值 := MAX(vd_1号线请求接料计数, vd_2号线请求接料计数,vd_3号线请求接料计数,vd_4号线请求接料计数,vd_5号线请求接料计数);
得出最大值后,在来判断最大值与那条线的计数相等,等于的就可以判断该去那条线接料,程序如下:
IF (hi_模式选择 =30) THEN //模式等于10,只负责5、4、3、2、1五个工位 AND (hi_2号RGV运行状态 =30)
IF (vd_5条工位计数最大值 = vd_1号线请求接料计数) AND (vd_1号线请求接料计数 >0) THEN
hi_判断前往工位 := 10;
ELSIF (vd_5条工位计数最大值 = vd_2号线请求接料计数) AND (vd_2号线请求接料计数 >0) THEN
hi_判断前往工位 := 20;
ELSIF (vd_5条工位计数最大值 = vd_3号线请求接料计数) AND (vd_3号线请求接料计数 >0) THEN
hi_判断前往工位 := 30;
ELSIF (vd_5条工位计数最大值 = vd_4号线请求接料计数) AND (vd_4号线请求接料计数 >0) THEN
hi_判断前往工位 := 40;
ELSIF (vd_5条工位计数最大值 = vd_5号线请求接料计数) AND (vd_5号线请求接料计数 >0) THEN
hi_判断前往工位 := 50;
ELSIF (vd_1号线请求接料计数 = 0) AND (vd_2号线请求接料计数 = 0) AND (vd_3号线请求接料计数 = 0) AND (vd_4号线请求接料计数 = 0) AND (vd_5号线请求接料计数 = 0) THEN
hi_判断前往工位 := 60; //模式等于60时,小车回到2号线位置
END_IF
END_IF
注意:在if语句中,“(vd_5条工位计数最大值 = vd_1号线请求接料计数) AND (vd_1号线请求接料计数 >0) ”,把条件“(vd_1号线请求接料计数 >0)”放进去,是为了防止当计数都等于0时,最大值也是0,在if elsif语句中,只要第一个满足,就不会判断后面的逻辑,所以得限制判断逻辑。