PROGRAM PRG_Transportband_1
VAR
MOT1RUN AT %QX0.0 : BOOL;
MOT1DIR AT %QX0.1 : BOOL;
BLINKLED AT %QX0.7 : BOOL;
START AT %IX0.0 : BOOL;
SENSORLINKS AT %IX0.1 : BOOL;
SENSORRECHTS AT %IX0.2 : BOOL;
END_VAR
VAR
STATE : INT := 0;
TMR_MOTOR : TON;
TMR_BLINK : TON;
TMR_READY : BOOL := FALSE;
TMR_BLINK_ET : TIME;
TMR_MOTOR_ET : TIME;
END_VAR
(* Programm Transportband *)
(* LED blinken lassen *)
TMR_BLINK(IN:= NOT TMR_BLINK.Q,PT:=T#200ms,Q=>TMR_READY,ET=>TMR_BLINK_ET);
IF TMR_READY THEN
BLINKLED:=NOT BLINKLED;
END_IF;
(* State Machine fuer das Transportband *)
(* Wenn der START Taster und der Kontakt SensorLinks *)
(* betaetigt werden startet das Transportband nach rechts *)
(* wenn die rechte Position erreicht ist stoppt das Band *)
(* und wartet 5 Sekunden *)
(* Dann faehrt es wieder nach links bis SensorLinks betÃĪtigt wird *)
CASE STATE OF
(* Startbedingung *)
0: IF (START AND SENSORLINKS) THEN
STATE:=10;
END_IF;
(* Rechte Position erreicht *)
10: IF SENSORRECHTS THEN
STATE:=20;
END_IF;
(* 5 Sekunden warten dann nach links *)
20:TMR_MOTOR(IN:= NOT TMR_MOTOR.Q,PT:=T#5S,ET=>TMR_MOTOR_ET);
IF TMR_MOTOR.Q THEN
STATE:=30;
END_IF;
(* Motor wieder nach links *)
30: IF SENSORLINKS THEN
STATE:=0;
END_IF;
END_CASE;
(* Schalten der Motor Leitungen *)
CASE STATE OF
0:MOT1RUN:=FALSE;
10:MOT1RUN:=TRUE; MOT1DIR:=TRUE;
20:MOT1RUN:=FALSE;
30:MOT1RUN:=TRUE; MOT1DIR:=FALSE;
END_CASE;
END_PROGRAM
CONFIGURATION Config0
RESOURCE Res0 ON PLC
TASK TaskMain(INTERVAL := T#10ms,PRIORITY := 0);
PROGRAM instance0 WITH TaskMain : PRG_Transportband_1;
END_RESOURCE
END_CONFIGURATION