广东湘恒智能科技有限公司
主营产品: 西门子PLC,西门子模块,西门子触摸屏,西门子变频器,西门子伺服电机驱动,电缆,西门子全系列
SIEMENS西门子伺服电机(授权)代理商-广东揭阳一级代理商
PLC程序,总共5个工位,判断首先去哪个工位接料

简述现场情况:现场总共有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语句中,只要第一个满足,就不会判断后面的逻辑,所以得限制判断逻辑。


展开全文
相关产品
拨打电话 微信咨询 发送询价