In this video, I am going to show you how to control the general speed override using Condition Handler statements.
Below, there are the three versions of the KAREL program.
In Speed_Ctrl_V2 replace the question mark with the proper greater than or less than signs.
PROGRAM Speed_Ctrl_V1
%COMMENT = 'Speed Ctrl V1.0'
%NOLOCKGROUP
ROUTINE main FROM main
BEGIN
CONDITION[1]:
WHEN NOT DIN[1] AND NOT DIN[2] DO
$MCR.$GENOVERRIDE = 100
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[2]:
WHEN NOT DIN[1] AND DIN[2] DO
$MCR.$GENOVERRIDE = 50
ENABLE CONDITION[1]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[3]:
WHEN DIN[1] AND NOT DIN[2] DO
$MCR.$GENOVERRIDE = 10
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[4]:
WHEN DIN[1] AND DIN[2] DO
$MCR.$GENOVERRIDE = 1
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENDCONDITION
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
REPEAT
main
UNTIL DIN[3]
END Speed_Ctrl_V1
PROGRAM Speed_Ctrl_V2
%COMMENT = 'Speed Ctrl V2.0'
%NOLOCKGROUP
%INCLUDE KLEVKEYS
ROUTINE main FROM main
ROUTINE Speed_Up
BEGIN
IF (($MCR.$GENOVERRIDE ?= 5) AND ($MCR.$GENOVERRIDE ? 100))THEN
$MCR.$GENOVERRIDE = $MCR.$GENOVERRIDE + 5
ELSE
IF $MCR.$GENOVERRIDE ? 5 THEN
$MCR.$GENOVERRIDE = $MCR.$GENOVERRIDE + 1
ENDIF
ENDIF
ENABLE CONDITION[5]
END Speed_Up
ROUTINE Speed_Down
BEGIN
IF (($MCR.$GENOVERRIDE ? 1) AND ($MCR.$GENOVERRIDE ?= 5)) THEN
$MCR.$GENOVERRIDE = $MCR.$GENOVERRIDE - 1
ELSE
IF $MCR.$GENOVERRIDE ? 5 THEN
$MCR.$GENOVERRIDE = $MCR.$GENOVERRIDE - 5
ENDIF
ENDIF
ENABLE CONDITION[6]
END Speed_Down
ROUTINE Speed_Up_Sft
BEGIN
IF (($MCR.$GENOVERRIDE ?= 50) AND ($MCR.$GENOVERRIDE ? 100)) THEN
$MCR.$GENOVERRIDE = 100
ELSE
IF (($MCR.$GENOVERRIDE ?= 5) AND ($MCR.$GENOVERRIDE ? 50)) THEN
$MCR.$GENOVERRIDE = 50
ELSE
IF (($MCR.$GENOVERRIDE ?= 1) AND ($MCR.$GENOVERRIDE ? 5)) THEN
$MCR.$GENOVERRIDE = 5
ENDIF
ENDIF
ENDIF
ENABLE CONDITION[7]
END Speed_Up_Sft
ROUTINE Speed_Down_Sft
BEGIN
IF $MCR.$GENOVERRIDE ?= 5 THEN
$MCR.$GENOVERRIDE = 1
ELSE
IF $MCR.$GENOVERRIDE ?= 50 THEN
$MCR.$GENOVERRIDE = 5
ELSE
IF $MCR.$GENOVERRIDE ?= 100 THEN
$MCR.$GENOVERRIDE = 50
ENDIF
ENDIF
ENDIF
ENABLE CONDITION[8]
END Speed_Down_Sft
BEGIN
CONDITION[1]:
WHEN NOT DIN[1] AND NOT DIN[2] DO
$MCR.$GENOVERRIDE = 100
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[2]:
WHEN NOT DIN[1] AND DIN[2] DO
$MCR.$GENOVERRIDE = 50
ENABLE CONDITION[1]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[3]:
WHEN DIN[1] AND NOT DIN[2] DO
$MCR.$GENOVERRIDE = 10
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[4]
ENDCONDITION
CONDITION[4]:
WHEN DIN[1] AND DIN[2] DO
$MCR.$GENOVERRIDE = 1
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENDCONDITION
CONDITION[5]:
WHEN TPIN[KY_UF_1]+ DO
Speed_Up
ENDCONDITION
CONDITION[6]:
WHEN TPIN[KY_UF_2]+ DO
Speed_Down
ENDCONDITION
CONDITION[7]:
WHEN TPIN[KY_UF_1_S]+ DO
Speed_Up_Sft
ENDCONDITION
CONDITION[8]:
WHEN TPIN[KY_UF_2_S]+ DO
Speed_Down_Sft
ENDCONDITION
ENABLE CONDITION[1]
ENABLE CONDITION[2]
ENABLE CONDITION[3]
ENABLE CONDITION[4]
ENABLE CONDITION[5]
ENABLE CONDITION[6]
ENABLE CONDITION[7]
ENABLE CONDITION[8]
REPEAT
main
UNTIL DIN[3]
END Speed_Ctrl_V2
PROGRAM Speed_Ctrl_V3
%COMMENT = 'Speed Ctrl V3.0'
%NOLOCKGROUP
ROUTINE main FROM main
ROUTINE Speed_Sel
VAR
status : INTEGER
is_real : BOOLEAN
int_val : INTEGER
real_val : REAL
mem_reg : INTEGER
BEGIN
GET_REG(3,is_real,int_val,real_val,status)
$MCR.$GENOVERRIDE = int_val
END Speed_Sel
BEGIN
CONDITION[1]:
WHEN NOT OPOUT[23] DO
Speed_Sel
ENABLE CONDITION[1]
ENDCONDITION
ENABLE CONDITION[1]
REPEAT
main
UNTIL DIN[3]
END Speed_Ctrl_V3
![](https://i.ytimg.com/vi/l3704OG2DnQ/maxresdefault.jpg)