//初始化
IF init = FALSE THEN
// 初始化
init := 1 ;
//45 Y数组 BOOL[8] [OFF发料Y OFF分拣Y OFF送料Y OFF取料Y OFF摆取Y OFF摆放Y OFF升降Y OFF夹料Y] [OFF发料Y OFF分拣Y OFF送料Y OFF取料Y OFF摆取Y OFF摆放Y OFF升降Y OFF夹料Y] 不保持 私有 Y0
(*Y数组[0] BOOL OFF 发料Y Y0
Y数组[1] BOOL OFF 分拣Y Y1
Y数组[2] BOOL OFF 送料Y Y2
Y数组[3] BOOL OFF 取料Y Y3
Y数组[4] BOOL OFF 摆取Y Y4
Y数组[5] BOOL OFF 摆放Y Y5
Y数组[6] BOOL OFF 升降Y Y6
Y数组[7] BOOL OFF 夹料Y Y7*)
//复位
ZRST(Y数组[0],Y数组[7]);
Y数组[2] := 1;//初始化处于送料状态
Y数组[4] := 1;//处于摆动取料状态
ELSE
//发料送料M时候触发定时任务 定时1秒确保 取料完成在发料
(*TONR(IN := 触发定时,PT := 1000,
R := 停止 ,Q => 定时完成 ,ET => 当前定时时间 );*)
IF 启动M AND 物料检测 = FALSE AND 移动气缸放料到位 AND
摆动气缸取料到位 AND 升降气缸上升到位 AND 夹指气缸松开到位 THEN
IF 物料检测 AND 发料气缸送料到位 THEN //摆放盘出去有料并且送料到位则去移动取料
移动取料M := 1;
ELSIF 物料检测 THEN //否则如果有物料检测则触发移动送料
发料送料M := 1;
移动取料M := 1;
ELSE
发料取料M := 1;//否则触发发料取料
END_IF;
END_IF;
IF 发料取料M AND not 物料检测 AND 移动气缸放料到位 AND
摆动气缸取料到位 AND 升降气缸上升到位 AND 夹指气缸松开到位 THEN //如果发料取料 并且无物料检测去取料位
Y数组[0] :=1;//取料气缸置为1
IF 手自动切换M THEN
发料送料M :=1;//触发下一步送料
END_IF;
发料取料M := 0;//复位发料取料
ELSIF 发料送料M AND 物料检测 AND 移动气缸放料到位 AND
摆动气缸取料到位 AND 升降气缸上升到位 AND 夹指气缸松开到位 AND 发料气缸取料到位 THEN// 如果发料触发定时发料
IF 金属检测 THEN//并且有金属 分拣气缸触发 没有金属触发复位
分拣Y := 1;
ELSE
分拣Y := 0;
END_IF;
Y数组[0] :=0;
//如果发料送料到位后复位发料送料置为等待夹取
ELSIF 发料送料M AND 物料检测 AND 夹指气缸松开到位 AND 升降气缸上升到位 AND 发料气缸送料到位 AND 发料气缸送料到位 THEN
等待夹取M := 1;
发料送料M := 0;
END_IF;
//如果步骤移动取料并且有物料检测 夹指处于松开状态 则移动取料并且跳转到下一步下降取料 复位移动取料
IF 移动取料M AND 物料检测 AND 夹指气缸松开到位 AND 升降气缸上升到位 THEN
Y数组[3] := 1;
Y数组[2] := 0;
IF 手自动切换M THEN
下降取料M :=1;
END_IF
移动取料M := 0;
//如果到下降取料步骤并且移动取料到位 则触发下降取料 并且触发下一步去复位当前步骤
ELSIF 下降取料M AND 物料检测 AND 夹指气缸松开到位 AND 移动气缸取料到位 and 等待夹取M THEN
Y数组[6] := 1;
下降取料M := 0;
IF 手自动切换M THEN
夹料取料M := 1;
END_IF
启动M := 0;
//移动和下降取料到位夹取
ELSIF 夹料取料M AND 夹料取料M AND 移动气缸取料到位 AND 升降气缸下降到位 AND 等待夹取M THEN
Y数组[7] :=1;
夹料取料M := 0;
等待夹取M := 0;
IF 手自动切换M THEN
上升送料M := 1;
END_IF
//加料取料到位 触发上升送料
ELSIF 上升送料M AND 夹指气缸夹紧到位 AND 移动气缸取料到位 AND 升降气缸下降到位 THEN
Y数组[6] := 0;
上升送料M := 0;
IF 手自动切换M THEN
移动送料M := 1;
END_IF
//上升送料到位触发移动送料
ELSIF 移动送料M AND 夹指气缸夹紧到位 AND 移动气缸取料到位 AND 升降气缸上升到位 THEN
Y数组[2] := 1;
Y数组[3] := 0;
移动送料M := 0;
IF 手自动切换M THEN
摆动送料M := 1;
END_IF
ELSIF 摆动送料M AND 夹指气缸夹紧到位 AND 移动气缸放料到位 AND 升降气缸上升到位 THEN
Y数组[5] := 1;
Y数组[4] := 0;
摆动送料M := 0;
IF 手自动切换M THEN
下降送料M := 1;
END_IF
ELSIF 下降送料M and 夹指气缸夹紧到位 AND 移动气缸放料到位 AND 摆动气缸放料到位 THEN
Y数组[6] := 1;
下降送料M := 0;
IF 手自动切换M THEN
松开送料M := 1;
END_IF
ELSIF 松开送料M AND 夹指气缸夹紧到位 AND 移动气缸放料到位 AND 摆动气缸放料到位 AND 升降气缸下降到位 THEN
Y数组[7] := 0;
松开送料M := 0;
IF 手自动切换M THEN
回原点M :=1;
END_IF
ELSIF 回原点M AND 夹指气缸松开到位 THEN
Y数组[5] := 0;
Y数组[4] := 1;
Y数组[6] := 0;
IF 手自动切换M THEN
启动M :=1;
END_IF
END_IF;
END_IF;