3 Тема: Розробка проекту автоматизації у середовищі програмного забезпечення «Factory I/O» - CODESYS.
19 Додаток Б PROGRAM PLC_PRG; VAR State:BYTE:=0; k:INT; //Лічильник кількості коробок END_VAR CASE state OF 0: //Початковий стан GVL.InpConv:=FALSE; GVL.OutConv:=FALSE;
20 Додаток В PROGRAM PLC_PRG VAR BoxState: INT:=0; PaletState:INT:=0; RobotState:INT:=0; GTon:TON; GGrabOn:ton; TimerOn:BOOL:=FALSE; fq: BOOL; END_VAR GTon(In := TimerOn,PT:=T#0.5S); GGrabOn(In:=TimerOn,PT:=T#3S); CASE BoxState OF 0: G.BoxConv:=TRUE; IF G.BoxSensor=TRUE THEN G.BoxConv:=FALSE; BoxState:=1; END_IF 1: G.BoxConv:=FALSE; IF RobotState = 4 THEN BoxState:=0; END_IF; ELSE BoxState:=0; END_CASE CASE RobotState OF 0: // Скинути робота в 0 G.MoveX:=FALSE; G.MoveY:=FALSE; G.Grab:=FALSE; TimerOn:=FALSE;
IF (boxstate =1) AND ((paletState = 3)OR(PaletState=1)) THEN robotstate:=1;
END_IF;
1: //Опустити руку G.MoveY:=TRUE; TimerOn:=TRUE;
21 3://рука вверх
G.MoveY:=FALSE; TimerOn:=TRUE;
IF NOT(G.MovingZ) AND GTon.Q THEN RobotState:=4; TimerOn:=FALSE; END_IF 4://руку витягнути G.MoveX:=TRUE; TimerOn:=TRUE;
IF (g.MovingX= FALSE) AND GTon.Q THEN RobotState:=5; TimerOn:=FALSE; END_IF 5://руку вниз G.MoveY:=TRUE; TimerOn:=TRUE;
IF (g.MovingZ= FALSE) AND GTon.Q THEN RobotState:=6; TimerOn:=FALSE; END_IF 6://захоплючий пристій виключити G.Grab:=FALSE; TimerOn:=TRUE; IF Gton.Q THEN RobotState:=7; TimerOn:=FALSE; END_IF 7://руку вверх G.Grab:=FALSE; g.MoveY:=FALSE; TimerOn:=TRUE;
IF NOT(g.MovingZ) AND Gton.Q THEN RobotState:=7; TimerOn:=FALSE; END_IF 8: //руку втянути g.MoveX:=FALSE; TimerOn:=TRUE;
IF NOT(g.MovingX) AND Gton.Q THEN RobotState:=0;
TimerOn:=FALSE; END_IF;
22
CASE PaletState OF
0://Немає палет для завантаження G.StartConv:=TRUE;
G.SensorConv:=TRUE;
IF G.FirstSensor THEN PaletState:=1; END_IF; 1://Палета на 1 позиції
G.StartConv:=FALSE; G.SensorConv:=FALSE;
IF RobotState=7 THEN PaletState := 2; END_IF; 2://палета рухається на позицію № 2
G.StartConv:=FALSE; G.SensorConv:=TRUE;
IF G.SecondSensor THEN PaletState:=3; END_IF; 3://палета на позиції № 2
G.StartConv:=FALSE; G.SensorConv:=FALSE;
IF RobotState=6 THEN PaletState := 4; END_IF;
4://палета готова та переходить на позицію вивантаження G.SensorConv:=TRUE;
IF NOT(G.SecondSensor) THEN PaletState:=0; END_IF; ELSE PaletState:=0;