(*********************************程序急停后处理*********************************)
(*
IF NOT GVL.bEMGS
THEN //模块状态的复位
Mode.AMacA3Mode.bIniting := FALSE;
Mode.AMacA3Mode.bInitOK := FALSE;
Mode.AMacA3Mode.bAlone := FALSE;
Mode.AMacA3Mode.bAloneRunning := FALSE;
Mode.AMacA3Mode.bAutoHandMode := FALSE;
//自动运行标志的复位
bAMacA3ModeAuto := FALSE;
//吸真空 破真空的关闭
//各模块信号对接的信号复位
//托盘当前数目的复位
//各程序控制流程标志的复位
Mode.AMacA3Mode.iInit := 0;
Mode.AMacA3Mode.iAutoRunning[0] := 0;
//停料标志的复位
END_IF
*)
(*********************************自动线可运动处理***********************************)
Mode.AMacA3Mode.bAutoMacMoveSafe := NOT IOVar.Cyl_A3_Fixed.In.CylHome OR
NOT IOVar.Cyl_A3_Rise.In.CylHome;
(*********************************程序托盘处理*************************************)
(*********************************程序单独运行处理*********************************)
IF Mode.AMacA3Mode.bAlone
THEN
GVL.bAutoRunning R= TRUE;
GVL.bAutoHandMode S= TRUE;
Mode.AMacA3Mode.bUnAloneRunning R= TRUE;
END_IF
Mode.AMacA3Mode.bAloneRunning S= NOT Mode.AMacA3Mode.bAlarm AND
GVL.bEMGS AND
Mode.AMacA3Mode.bAlone AND
NOT Mode.AMacA3Mode.bAutoHandMode AND
Mode.AMacA3Mode.bInitOK AND
Mode.AMacA3Mode.bGOTRunButton AND
NOT GVL.bAutoRunning;
Mode.AMacA3Mode.bAloneRunning R= Mode.AMacA3Mode.bAlarm OR
NOT GVL.bEMGS OR
NOT Mode.AMacA3Mode.bAlone OR
Mode.AMacA3Mode.bAutoHandMode OR
NOT Mode.AMacA3Mode.bInitOK OR
Mode.AMacA3Mode.bGOTStopButton OR
GVL.bAutoRunning;
(*********************************程序非单独整机自动运行处理*********************************)
// 自动运行处理
Mode.AMacA3Mode.bUnAloneRunning S= NOT GVL.bAutoHandMode AND
NOT Mode.AMacA3Mode.bAlarm AND
Mode.Line.bInitOK AND
GVL.bRunButton AND
NOT GVL.b_Tips_ModeInAlone;
Mode.AMacA3Mode.bUnAloneRunning R= GVL.bAutoHandMode OR
Mode.AMacA3Mode.bAlarm OR
NOT Mode.Line.bInitOK OR
GVL.bStopButton OR
GVL.b_Tips_ModeInAlone
;
(*********************************模块报警处理*********************************)
Mode.AMacA3Mode.bAlarm := IOVar.Cyl_A3_Fixed.Out.CylAlarm OR
IOVar.Cyl_A3_Rise.Out.CylAlarm OR
GVL.b_Alarm_A3_HightNG
;
(*********************************报警解除处理*********************************)
GVL.b_Alarm_A3_HightNG R= GVL.bClearAlarm OR Mode.AMacA3Mode.bGOT_ClearAlarm;
(*********************************调用节拍功能快*********************************)
FBModeCycleTime(bCycleTime:= Mode.AMacA3Mode.bAutoMacTellModeStart, bAutoRunning:= bAMacA3ModeAuto, uiCycleTime=> Mode.AMacA3Mode.uiCycleTime);
(*********************************当前模块自动运行处理*********************************)
bAMacA3ModeAuto := (Mode.AMacA3Mode.bAlone AND Mode.AMacA3Mode.bAloneRunning ) OR
(NOT Mode.AMacA3Mode.bAlone AND Mode.AMacA3Mode.bUnAloneRunning);
(*********************************A机台A3模块延时处理*********************************)
// 升降气缸压合治具到位后
TonDelay[0]( IN:=IOVar.Cyl_A3_Rise.Out.CylA AND
IOVar.Cyl_A3_Rise.In.CylMotion,
PT:=UINT_TO_TIME(PG.ui_A3_Mode_TiemDelay[0])
);
// 升降气缸压合治具到位后检测时长
TonDelay[1]( IN:=IOVar.Cyl_A3_Rise.Out.CylA AND
IOVar.Cyl_A3_Rise.In.CylMotion,
PT:=UINT_TO_TIME(PG.ui_A3_Mode_TiemDelay[1])
);
(*********************************A机台A3模块复位流程*********************************)
CASE Mode.AMacA3Mode.iInit OF
0:
//单独运行的复位程序
IF Mode.AMacA3Mode.bGOTInit AND
Mode.AMacA3Mode.bAlone AND
NOT Mode.AMacA3Mode.bInitOK
THEN Mode.AMacA3Mode.bIniting := TRUE;
Mode.AMacA3Mode.bInitOK := FALSE;
Mode.AMacA3Mode.iInit := SEL(Mode.AMacA3Mode.bAlone AND NOT Mode.AMacA3Mode.bAutoHandMode AND NOT Mode.AMacA3Mode.bAlarm,0,10);
END_IF
//整机运行的复位程序
IF GVL.bInitButton AND
NOT Mode.AMacA3Mode.bInitOK
THEN
Mode.AMacA3Mode.bIniting := TRUE;
Mode.AMacA3Mode.bInitOK := FALSE;
Mode.AMacA3Mode.iInit := SEL(NOT GVL.bAutoHandMode AND NOT GVL.bAlarm,0,10);
END_IF
10://定位气缸 升降气缸回原
Mode.AMacA3Mode.bIniting S= TRUE;
IOVar.Cyl_A3_Fixed.In.CylPLCa R= TRUE;
IOVar.Cyl_A3_Rise.In.CylPLCa R= TRUE;
IF Mode.AMacA3Mode.bIniting AND
NOT IOVar.Cyl_A3_Fixed.In.CylPLCa AND
IOVar.Cyl_A3_Fixed.In.CylHome AND
NOT IOVar.Cyl_A3_Rise.In.CylPLCa AND
IOVar.Cyl_A3_Rise.In.CylHome
THEN
Mode.AMacA3Mode.iInit := SEL((Mode.AMacA3Mode.bAlone AND NOT Mode.AMacA3Mode.bAutoHandMode AND NOT Mode.AMacA3Mode.bAlarm)OR (NOT GVL.bAutoHandMode AND NOT GVL.bAlarm),10,100);
END_IF
100://复位完成
Mode.AMacA3Mode.bIniting R= TRUE;
Mode.AMacA3Mode.bInitOK S= TRUE;
Mode.AMacA3Mode.iInit := 0;
END_CASE
(*********************************A机台A3治具压合兼高度检测循环*********************************)
CASE Mode.AMacA3Mode.iAutoRunning[0] OF
0:// 等待自动运行
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,0,10);
10:// 等待主线体通知运行
IF Mode.AMacA3Mode.bAutoMacTellModeStart OR
(Mode.AMacA3Mode.bGotSimulationTellModelStart AND Mode.AMacA3Mode.bAlone)
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,10,20);
END_IF
20:// 空
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,20,30);
30:// 判定治具左右穴是否有盆架
Mode.AMacA3Mode.bGotSimulationTellModelStart R= TRUE;
// 单模块开启:单模块运行下,A3小车定位气缸动作
IF Mode.AMacA3Mode.bAlone
THEN
IOVar.Cyl_A3_Fixed.In.CylPLCa S= TRUE;
IF IOVar.Cyl_A3_Fixed.In.CylPLCa AND
IOVar.Cyl_A3_Fixed.In.CylMotion
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,30,40);
END_IF
END_IF
// 单模块关闭:
IF NOT Mode.AMacA3Mode.bAlone AND
IOVar.Cyl_A3_Fixed.In.CylPLCa AND
IOVar.Cyl_A3_Fixed.In.CylMotion
THEN
//模块开启运行,左右穴有盆架
IF PG.b_A3_ModeUse AND
(Mode.AMacA3Mode.b_F4_Left_Frame_Have OR
Mode.AMacA3Mode.b_F4_Right_Frame_Have)
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,30,40);
END_IF
//模块没有开启运行,左右穴没有盆架
IF NOT PG.b_A3_ModeUse OR
(NOT Mode.AMacA3Mode.b_F4_Left_Frame_Have AND
NOT Mode.AMacA3Mode.b_F4_Right_Frame_Have)
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,30,10000);
END_IF
END_IF
40:// 升降气缸下降
IOVar.Cyl_A3_Rise.In.CylPLCa S= IOVar.Cyl_A3_Rise.In.CylHome;
IF IOVar.Cyl_A3_Rise.In.CylPLCa AND
IOVar.Cyl_A3_Rise.In.CylMotion AND
TonDelay[0].Q
THEN
// 不是单模块单独运行,则不需要进行高度的判定
IF NOT Mode.AMacA3Mode.bAlone
THEN
// 使用高度检测
IF PG.b_A3_Mode_High_Use
THEN
// 高度检测NG,报警
IF NOT IOVar.Sensor_A3_High
THEN
GVL.b_Alarm_A3_HightNG S= TRUE;
END_IF
// 检测高度在设定检测时间内合格
IF IOVar.Sensor_A3_High AND
TonDelay[1].Q
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,40,50);
END_IF
END_IF
// 不使用高度检测
IF NOT PG.b_A3_Mode_High_Use
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,40,50);
END_IF
END_IF
//单模块单独运行开启
IF Mode.AMacA3Mode.bAlone
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,40,50);
END_IF
END_IF
50:// 升降气缸缩回
IOVar.Cyl_A3_Rise.In.CylPLCa R= TRUE;
IF NOT IOVar.Cyl_A3_Rise.In.CylPLCa AND
IOVar.Cyl_A3_Rise.In.CylHome
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=SEL(bAMacA3ModeAuto,50,60);
END_IF
60:// 是否单机运行?
// 是单机运行
IF Mode.AMacA3Mode.bAlone
THEN
IOVar.Cyl_A3_Fixed.In.CylPLCa R= TRUE;
IF NOT IOVar.Cyl_A3_Fixed.In.CylPLCa AND
IOVar.Cyl_A3_Fixed.In.CylHome
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=0;
END_IF
END_IF
// 非单机运行,通知主线放治具完成
IF NOT Mode.AMacA3Mode.bAlone
THEN
Mode.AMacA3Mode.bModeTellAutoMacDone S= TRUE;
IF Mode.AMacA3Mode.bModeTellAutoMacDone AND
NOT Mode.AMacA3Mode.bAutoMacTellModeStart
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=70;
END_IF
END_IF
70:// 信号处理
Mode.AMacA3Mode.bModeTellAutoMacDone R= TRUE;
IF NOT Mode.AMacA3Mode.bModeTellAutoMacDone
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=0;
END_IF
10000:// 通知主线此岗位没有开启运行,左右穴没有盆架
Mode.AMacA3Mode.bModeTellAutoMacDone S= TRUE;
IF Mode.AMacA3Mode.bModeTellAutoMacDone AND
NOT Mode.AMacA3Mode.bAutoMacTellModeStart
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=10010;
END_IF
10010:// 信号处理
Mode.AMacA3Mode.bModeTellAutoMacDone R= TRUE;
IF NOT Mode.AMacA3Mode.bModeTellAutoMacDone
THEN
Mode.AMacA3Mode.iAutoRunning[0]:=0;
END_IF
END_CASE