Prepared Tools to handlw Fw Sensor via SR and with parametric times

This commit is contained in:
Michael Rest
2013-02-12 20:37:28 +01:00
parent cf4e0d5e23
commit e9d00c55a9
4 changed files with 96 additions and 21 deletions

View File

@@ -13,11 +13,38 @@ PROGRAM _CYCLIC
udSteptime := udSteptime + 100;
END_IF
//Store if Cylinder Fw Sensor was reached
IF gbOuTool1Cyl1Fw AND gbInTool1Cyl1Fw THEN
TON_FwReachedCylinder1.IN := TRUE;
ELSIF NOT gbOuTool1Cyl1Fw THEN
TON_FwReachedCylinder1.IN := FALSE;
END_IF
IF gbOuTool1Cyl2Fw AND gbInTool1Cyl2Fw THEN
TON_FwReachedCylinder2.IN := TRUE;
ELSIF NOT gbOuTool1Cyl2Fw THEN
TON_FwReachedCylinder2.IN := FALSE;
END_IF
IF gbOuTool1Cyl3Fw AND gbInTool1Cyl3Fw THEN
TON_FwReachedCylinder3.IN := TRUE;
ELSIF NOT gbOuTool1Cyl3Fw THEN
TON_FwReachedCylinder3.IN := FALSE;
END_IF
//Delay Cylinder Fw Reaches
TON_FwReachedCylinder1.PT := UDINT_TO_TIME (udDelayCylinder1 * 100);
TON_FwReachedCylinder1 ();
TON_FwReachedCylinder2.PT := UDINT_TO_TIME (udDelayCylinder2 * 100);
TON_FwReachedCylinder2 ();
TON_FwReachedCylinder3.PT := UDINT_TO_TIME (udDelayCylinder3 * 100);
TON_FwReachedCylinder3 ();
MoveConditions.bEnableCylinder1Fw := gbInTool1Cyl3Bw;
MoveConditions.bEnableCylinder1Bw := TRUE;
MoveConditions.bEnableCylinder2Fw := gbInTool1Cyl1Fw AND gbInTool1Cyl3Fw;
MoveConditions.bEnableCylinder2Fw := TON_FwReachedCylinder1.Q AND TON_FwReachedCylinder3.Q;
MoveConditions.bEnableCylinder2Bw := TRUE;
MoveConditions.bEnableCylinder3Fw := gbInTool1Cyl1Fw;
MoveConditions.bEnableCylinder3Fw := TON_FwReachedCylinder1.Q;
MoveConditions.bEnableCylinder3Bw := TRUE;
StatusVCControls.usCylinder1Fw := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableCylinder1Fw), VC_LOCK_BITPOS) +
@@ -35,7 +62,7 @@ PROGRAM _CYCLIC
//Toolstates
lToolInterface.bToolIsHome := gbInTool1Cyl1Bw AND gbInTool1Cyl2Bw AND gbInTool1Cyl3Bw;
lToolInterface.bToolIsMounted := gbInTool1Cyl1Fw AND gbInTool1Cyl2Fw AND gbInTool1Cyl3Fw;
lToolInterface.bToolIsMounted := TON_FwReachedCylinder1.Q AND TON_FwReachedCylinder1.Q AND TON_FwReachedCylinder3.Q;
//Jog Mode
//==========================================================================================
IF (gMachine.enMode = enMACH_JOG) AND bToolIsActive THEN
@@ -102,7 +129,7 @@ PROGRAM _CYCLIC
//---------------------------
enTool1Step_CYL1_FW:
bCylinder1Fw := TRUE;
IF gbInTool1Cyl1Fw AND (udSteptime > 200) THEN
IF TON_FwReachedCylinder1.Q THEN
genStepTool1 := enTool1Step_CYL3_FW;
udSteptime := 0;
END_IF
@@ -111,7 +138,7 @@ PROGRAM _CYCLIC
//---------------------------
enTool1Step_CYL3_FW:
bCylinder3Fw := TRUE;
IF gbInTool1Cyl3Fw AND (udSteptime > 200) THEN
IF TON_FwReachedCylinder3.Q THEN
genStepTool1 := enTool1Step_CYL2_FW;
udSteptime := 0;
END_IF
@@ -120,7 +147,7 @@ PROGRAM _CYCLIC
//---------------------------
enTool1Step_CYL2_FW:
bCylinder2Fw := TRUE;
IF gbInTool1Cyl2Fw AND (udSteptime > 500) THEN
IF TON_FwReachedCylinder2.Q THEN
genStepTool1 := enTool1Step_WAIT_START_HOME;
udSteptime := 0;
END_IF
@@ -157,7 +184,7 @@ PROGRAM _CYCLIC
Cylinder1Check (bInOutputCylinderBw := gbOuTool1Cyl1Bw,
bInOutputCylinderFw := gbOuTool1Cyl1Fw,
bInSensorCylinderBw := gbInTool1Cyl1Bw,
bInSensorCylinderFw := gbInTool1Cyl1Fw);
bInSensorCylinderFw := TON_FwReachedCylinder1.Q);
lToolalarms.Alarm[0] := Cylinder1Check.bOuErrorCylinderBw;
lToolalarms.Alarm[1] := Cylinder1Check.bOuErrorCylinderFw;
lToolalarms.Alarm[2] := Cylinder1Check.bOuErrorBothSensorsHigh;
@@ -165,7 +192,7 @@ PROGRAM _CYCLIC
Cylinder2Check (bInOutputCylinderBw := gbOuTool1Cyl2Bw,
bInOutputCylinderFw := gbOuTool1Cyl2Fw,
bInSensorCylinderBw := gbInTool1Cyl2Bw,
bInSensorCylinderFw := gbInTool1Cyl2Fw);
bInSensorCylinderFw := TON_FwReachedCylinder2.Q);
lToolalarms.Alarm[3] := Cylinder2Check.bOuErrorCylinderBw;
lToolalarms.Alarm[4] := Cylinder2Check.bOuErrorCylinderFw;
lToolalarms.Alarm[5] := Cylinder2Check.bOuErrorBothSensorsHigh;
@@ -173,7 +200,7 @@ PROGRAM _CYCLIC
Cylinder3Check (bInOutputCylinderBw := gbOuTool1Cyl3Bw,
bInOutputCylinderFw := gbOuTool1Cyl3Fw,
bInSensorCylinderBw := gbInTool1Cyl3Bw,
bInSensorCylinderFw := gbInTool1Cyl3Fw);
bInSensorCylinderFw := TON_FwReachedCylinder3.Q);
lToolalarms.Alarm[6] := Cylinder3Check.bOuErrorCylinderBw;
lToolalarms.Alarm[7] := Cylinder3Check.bOuErrorCylinderFw;
lToolalarms.Alarm[8] := Cylinder3Check.bOuErrorBothSensorsHigh;

View File

@@ -1,9 +1,9 @@
VAR
bToolIsActive : BOOL; (*Werkzeug ist aktiv*)
bSafetyOk : BOOL;
bCylinder1Fw : BOOL;
bCylinder2Fw : BOOL;
bCylinder3Fw : BOOL;
bCylinder1Fw : BOOL; (*Befehl Zylinder ausfahren*)
bCylinder2Fw : BOOL; (*Befehl Zylinder ausfahren*)
bCylinder3Fw : BOOL; (*Befehl Zylinder ausfahren*)
END_VAR
VAR CONSTANT
usTOOLID : USINT := 1; (*Werkzeugnummer*)
@@ -11,6 +11,13 @@ END_VAR
VAR
usi : USINT;
udSteptime : UDINT; (*0.1s*)
END_VAR
VAR RETAIN
udDelayCylinder1 : UDINT; (*0.1s*)
udDelayCylinder2 : UDINT; (*0.1s*)
udDelayCylinder3 : UDINT; (*0.1s*)
END_VAR
VAR
StatusVCControls : typStatusToolVCControls;
ManualCommands : typManualCommnands; (*Kommandos Betriebsart Hand*)
MoveConditions : typMoveConditions;
@@ -19,4 +26,7 @@ VAR
Cylinder1Check : FUB_CylinderCheck;
Cylinder2Check : FUB_CylinderCheck;
Cylinder3Check : FUB_CylinderCheck;
TON_FwReachedCylinder1 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
TON_FwReachedCylinder2 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
TON_FwReachedCylinder3 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
END_VAR

View File

@@ -13,9 +13,37 @@ PROGRAM _CYCLIC
udSteptime := udSteptime + 100;
END_IF
//Store if Cylinder Fw Sensor was reached
IF gbOuTool1Cyl1Fw AND gbInTool1Cyl1Fw THEN
TON_FwReachedCylinder1.IN := TRUE;
ELSIF NOT gbOuTool1Cyl1Fw THEN
TON_FwReachedCylinder1.IN := FALSE;
END_IF
IF gbOuTool1Cyl2Fw AND gbInTool1Cyl2Fw THEN
TON_FwReachedCylinder2.IN := TRUE;
ELSIF NOT gbOuTool1Cyl2Fw THEN
TON_FwReachedCylinder2.IN := FALSE;
END_IF
IF gbOuTool1Cyl3Fw AND gbInTool1Cyl3Fw THEN
TON_FwReachedCylinder3.IN := TRUE;
ELSIF NOT gbOuTool1Cyl3Fw THEN
TON_FwReachedCylinder3.IN := FALSE;
END_IF
//Delay Cylinder Fw Reaches
TON_FwReachedCylinder1.PT := UDINT_TO_TIME (udDelayCylinder1 * 100);
TON_FwReachedCylinder1 ();
TON_FwReachedCylinder2.PT := UDINT_TO_TIME (udDelayCylinder2 * 100);
TON_FwReachedCylinder2 ();
TON_FwReachedCylinder3.PT := UDINT_TO_TIME (udDelayCylinder3 * 100);
TON_FwReachedCylinder3 ();
MoveConditions.bEnableCylinder1Fw := TRUE; //gbInTool2Cyl3Bw;
MoveConditions.bEnableCylinder1Bw := TRUE;
MoveConditions.bEnableCylinder2Fw := TRUE; //gbInTool2Cyl1Fw AND gbInTool1Cyl3Fw;
MoveConditions.bEnableCylinder2Fw := TON_FwReachedCylinder2.Q;
MoveConditions.bEnableCylinder2Bw := TRUE;
MoveConditions.bEnableCylinder3Fw := TRUE; //gbInTool2Cyl1Fw;
MoveConditions.bEnableCylinder3Bw := TRUE;
@@ -35,7 +63,7 @@ PROGRAM _CYCLIC
lToolInterface.bToolIsHome := gbInTool1Cyl1Bw AND gbInTool1Cyl2Bw;
lToolInterface.bToolIsMounted := gbInTool1Cyl1Fw AND gbInTool1Cyl2Fw;
lToolInterface.bToolIsMounted := TON_FwReachedCylinder1.Q AND TON_FwReachedCylinder2.Q;
//Jog Mode
//==========================================================================================
@@ -103,7 +131,7 @@ PROGRAM _CYCLIC
//---------------------------
enTool2Step_CYL1_FW:
bCylinder1Fw := TRUE;
IF gbInTool1Cyl1Fw AND (udSteptime > 200) THEN
IF TON_FwReachedCylinder1.Q THEN
udSteptime := 0;
genStepTool2 := enTool2Step_CYL2_FW;
END_IF
@@ -112,7 +140,7 @@ PROGRAM _CYCLIC
//---------------------------
enTool2Step_CYL2_FW:
bCylinder2Fw := TRUE;
IF gbInTool1Cyl2Fw AND (udSteptime > 500) THEN
IF TON_FwReachedCylinder2.Q THEN
udSteptime := 0;
genStepTool2 := enTool2Step_WAIT_START_HOME;
END_IF
@@ -149,7 +177,7 @@ PROGRAM _CYCLIC
Cylinder1Check (bInOutputCylinderBw := gbOuTool1Cyl1Bw,
bInOutputCylinderFw := gbOuTool1Cyl1Fw,
bInSensorCylinderBw := gbInTool1Cyl1Bw,
bInSensorCylinderFw := gbInTool1Cyl1Fw);
bInSensorCylinderFw := TON_FwReachedCylinder1.Q);
lToolalarms.Alarm[20] := Cylinder1Check.bOuErrorCylinderBw;
lToolalarms.Alarm[21] := Cylinder1Check.bOuErrorCylinderFw;
lToolalarms.Alarm[22] := Cylinder1Check.bOuErrorBothSensorsHigh;
@@ -157,7 +185,7 @@ PROGRAM _CYCLIC
Cylinder2Check (bInOutputCylinderBw := gbOuTool1Cyl2Bw,
bInOutputCylinderFw := gbOuTool1Cyl2Fw,
bInSensorCylinderBw := gbInTool1Cyl2Bw,
bInSensorCylinderFw := gbInTool1Cyl2Fw);
bInSensorCylinderFw := TON_FwReachedCylinder2.Q);
lToolalarms.Alarm[23] := Cylinder2Check.bOuErrorCylinderBw;
lToolalarms.Alarm[24] := Cylinder2Check.bOuErrorCylinderFw;
lToolalarms.Alarm[25] := Cylinder2Check.bOuErrorBothSensorsHigh;

View File

@@ -1,9 +1,9 @@
VAR
bToolIsActive : BOOL; (*Werkzeug ist aktiv*)
bSafetyOk : BOOL;
bCylinder1Fw : BOOL;
bCylinder2Fw : BOOL;
bCylinder3Fw : BOOL;
bCylinder1Fw : BOOL; (*Befehl Zylinder ausfahren*)
bCylinder2Fw : BOOL; (*Befehl Zylinder ausfahren*)
bCylinder3Fw : BOOL; (*Befehl Zylinder ausfahren*)
END_VAR
VAR CONSTANT
usTOOLID : USINT := 2; (*Werkzeugnummer*)
@@ -11,6 +11,13 @@ END_VAR
VAR
usi : USINT;
udSteptime : UDINT; (*0.1s*)
END_VAR
VAR RETAIN
udDelayCylinder1 : UDINT; (*0.1s*)
udDelayCylinder2 : UDINT; (*0.1s*)
udDelayCylinder3 : UDINT; (*0.1s*)
END_VAR
VAR
StatusVCControls : typStatusToolVCControls;
ManualCommands : typManualCommnands; (*Kommandos Betriebsart Hand*)
MoveConditions : typMoveConditions;
@@ -19,4 +26,7 @@ VAR
Cylinder1Check : FUB_CylinderCheck;
Cylinder2Check : FUB_CylinderCheck;
Cylinder3Check : FUB_CylinderCheck;
TON_FwReachedCylinder1 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
TON_FwReachedCylinder2 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
TON_FwReachedCylinder3 : TON; (*Sensor Ausgefahren war bet<65>tigt*)
END_VAR