(* Copy and Scale Inputs *)
tHSV_H := iHSV_H / 360.0;
tHSV_S := iHSV_S / 100.0;
tHSV_V := iHSV_V / 100.0;
(* Check Max/Min Values *)
IF tHSV_H > 1.0 THEN
tHSV_H := 1.0;
END_IF
IF tHSV_H < 0.0 THEN
tHSV_H := 0.0;
END_IF
IF tHSV_S > 1.0 THEN
tHSV_S := 1.0;
END_IF
IF tHSV_S < 0.0 THEN
tHSV_S := 0.0;
END_IF
IF tHSV_V > 1.0 THEN
tHSV_V := 1.0;
END_IF
IF tHSV_V < 0.0 THEN
tHSV_V := 0.0;
END_IF
i:= FLOOR(X:=(tHSV_H * 6));
f := tHSV_H * 6 - i;
p := tHSV_V * (1- tHSV_S);
q := tHSV_V * (1- f * tHSV_S);
t := tHSV_V * (1- (1-f) * tHSV_S);
CASE i OF
0: tRGB_R := (tHSV_V * 255);
tRGB_G := (t * 255);
tRGB_B := (p * 255);
JMP _cpyValues;
1: tRGB_R := (q * 255);
tRGB_G := (tHSV_V * 255);
tRGB_B := (p * 255);
JMP _cpyValues;
2: tRGB_R := (p * 255);
tRGB_G := (tHSV_V * 255);
tRGB_B := (t * 255);
JMP _cpyValues;
3: tRGB_R := (p * 255);
tRGB_G := (q * 255);
tRGB_B := (tHSV_V * 255);
JMP _cpyValues;
4: tRGB_R := (t * 255);
tRGB_G := (p * 255);
tRGB_B := (tHSV_V * 255);
JMP _cpyValues;
5: tRGB_R := (tHSV_V * 255);
tRGB_G := (p * 255);
tRGB_B := (q * 255);
JMP _cpyValues;
END_CASE
(* Copy calculated Values to the Outside *)
_cpyValues :
oRGB_R := REAL_TO_INT(tRGB_R);
oRGB_G := REAL_TO_INT(tRGB_G);
oRGB_B := REAL_TO_INT(tRGB_B);
oRGB := LREAL_TO_DINT( (EXPT(256,2)*tRGB_R) + (EXPT(256,1)*tRGB_G) + (EXPT(256,0)*tRGB_B) );