[font=Arial][size=2]
FUNCTION_BLOCK FB200
VAR_INPUT
HW_OFFSET: INT;
HEIGHT_OFFSET: INT;
END_VAR
VAR
FIRST_BEAM: BYTE;
LAST_BEAM: BYTE;
STATUS: BYTE;
BEAM_BYTES: ARRAY [1..12] OF BYTE;
BEAM_BITS AT BEAM_BYTES: ARRAY [1..96] OF BOOL;
SWAPPED_BITS: ARRAY [1..96] OF BOOL;
HEIGHT: DINT;
OFFSET: DINT;
i: INT;
RESULT_0_255: DINT;
FIRST_BYTE: INT;
LAST_BYTE: INT;
END_VAR
VAR_OUTPUT
BOT: BYTE;
ACT_HEIGHT: INT;
END_VAR
BEGIN
FIRST_BEAM:= PIB[HW_OFFSET];
LAST_BEAM:= PIB[HW_OFFSET + 1];
STATUS:= PIB[HW_OFFSET + 2];
FOR i := 1 TO 12 DO
BEAM_BYTES[i]:= PIB[HW_OFFSET + 2 + i];
END_FOR;
HEIGHT:= ((BYTE_TO_DINT(LAST_BEAM)) * 1780) / 90;
ACT_HEIGHT:= (DINT_TO_INT(HEIGHT));
OFFSET:= (INT_TO_DINT(HEIGHT_OFFSET));
RESULT_0_255 := (255 * (HEIGHT - OFFSET)) / (1780 - OFFSET);
BOT:= (DINT_TO_BYTE(RESULT_0_255));
FIRST_BYTE:= (BYTE_TO_INT(FIRST_BEAM) - 1) / 8;
LAST_BYTE:= (BYTE_TO_INT(LAST_BEAM) -1) / 8;
IF BEAM_BITS[1]= TRUE THEN
SWAPPED_BITS[8]:=TRUE;
ELSE
SWAPPED_BITS[8]:=FALSE;
END_IF;
IF BEAM_BITS[2]= TRUE THEN
SWAPPED_BITS[7]:=TRUE;
ELSE
SWAPPED_BITS[7]:=FALSE;
END_IF;
IF BEAM_BITS[3]= TRUE THEN
SWAPPED_BITS[6]:=TRUE;
ELSE
SWAPPED_BITS[6]:=FALSE;
END_IF;
IF BEAM_BITS[4]= TRUE THEN
SWAPPED_BITS[5]:=TRUE;
ELSE
SWAPPED_BITS[5]:=FALSE;
END_IF;
IF BEAM_BITS[5]= TRUE THEN
SWAPPED_BITS[4]:=TRUE;
ELSE
SWAPPED_BITS[4]:=FALSE;
END_IF;
IF BEAM_BITS[6]= TRUE THEN
SWAPPED_BITS[3]:=TRUE;
ELSE
SWAPPED_BITS[3]:=FALSE;
END_IF;
IF BEAM_BITS[7]= TRUE THEN
SWAPPED_BITS[2]:=TRUE;
ELSE
SWAPPED_BITS[2]:=FALSE;
END_IF;
IF BEAM_BITS[8]= TRUE THEN
SWAPPED_BITS[1]:=TRUE;
ELSE
SWAPPED_BITS[1]:=FALSE;
END_IF;
FOR i:= 1 TO 12 DO
IF BEAM_BITS[(i * 8) + 1]= TRUE THEN
SWAPPED_BITS[(i * 8) + 8]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 8]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 2]= TRUE THEN
SWAPPED_BITS[(i * 8) + 7]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 7]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 3]= TRUE THEN
SWAPPED_BITS[(i * 8) + 6]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 6]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 4]= TRUE THEN
SWAPPED_BITS[(i * 8) + 5]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 5]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 5]= TRUE THEN
SWAPPED_BITS[(i * 8) + 4]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 4]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 6]= TRUE THEN
SWAPPED_BITS[(i * 8) + 3]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 3]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 7]= TRUE THEN
SWAPPED_BITS[(i * 8) + 2]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 2]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 8]= TRUE THEN
SWAPPED_BITS[(i * 8) + 1]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 1]:=FALSE;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
[/size][/font][font=Arial][size=2]FUNCTION_BLOCK FB200
VAR_INPUT
HW_OFFSET: INT;
HEIGHT_OFFSET: INT;
END_VAR
VAR
FIRST_BEAM: BYTE;
LAST_BEAM: BYTE;
STATUS: BYTE;
BEAM_BYTES: ARRAY [1..12] OF BYTE;
BEAM_BITS AT BEAM_BYTES: ARRAY [1..96] OF BOOL;
SWAPPED_BITS: ARRAY [1..96] OF BOOL;
HEIGHT: DINT;
OFFSET: DINT;
i: INT;
RESULT_0_255: DINT;
FIRST_BYTE: INT;
LAST_BYTE: INT;
END_VAR
VAR_OUTPUT
BOT: BYTE;
ACT_HEIGHT: INT;
END_VAR
BEGIN
FIRST_BEAM:= PIB[HW_OFFSET];
LAST_BEAM:= PIB[HW_OFFSET + 1];
STATUS:= PIB[HW_OFFSET + 2];
FOR i := 1 TO 12 DO
BEAM_BYTES[i]:= PIB[HW_OFFSET + 2 + i];
END_FOR;
HEIGHT:= ((BYTE_TO_DINT(LAST_BEAM)) * 1780) / 90;
ACT_HEIGHT:= (DINT_TO_INT(HEIGHT));
OFFSET:= (INT_TO_DINT(HEIGHT_OFFSET));
RESULT_0_255 := (255 * (HEIGHT - OFFSET)) / (1780 - OFFSET);
BOT:= (DINT_TO_BYTE(RESULT_0_255));
FIRST_BYTE:= (BYTE_TO_INT(FIRST_BEAM) - 1) / 8;
LAST_BYTE:= (BYTE_TO_INT(LAST_BEAM) -1) / 8;
IF BEAM_BITS[1]= TRUE THEN
SWAPPED_BITS[8]:=TRUE;
ELSE
SWAPPED_BITS[8]:=FALSE;
END_IF;
IF BEAM_BITS[2]= TRUE THEN
SWAPPED_BITS[7]:=TRUE;
ELSE
SWAPPED_BITS[7]:=FALSE;
END_IF;
IF BEAM_BITS[3]= TRUE THEN
SWAPPED_BITS[6]:=TRUE;
ELSE
SWAPPED_BITS[6]:=FALSE;
END_IF;
IF BEAM_BITS[4]= TRUE THEN
SWAPPED_BITS[5]:=TRUE;
ELSE
SWAPPED_BITS[5]:=FALSE;
END_IF;
IF BEAM_BITS[5]= TRUE THEN
SWAPPED_BITS[4]:=TRUE;
ELSE
SWAPPED_BITS[4]:=FALSE;
END_IF;
IF BEAM_BITS[6]= TRUE THEN
SWAPPED_BITS[3]:=TRUE;
ELSE
SWAPPED_BITS[3]:=FALSE;
END_IF;
IF BEAM_BITS[7]= TRUE THEN
SWAPPED_BITS[2]:=TRUE;
ELSE
SWAPPED_BITS[2]:=FALSE;
END_IF;
IF BEAM_BITS[8]= TRUE THEN
SWAPPED_BITS[1]:=TRUE;
ELSE
SWAPPED_BITS[1]:=FALSE;
END_IF;
FOR i:= 1 TO 12 DO
IF BEAM_BITS[(i * 8) + 1]= TRUE THEN
SWAPPED_BITS[(i * 8) + 8]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 8]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 2]= TRUE THEN
SWAPPED_BITS[(i * 8) + 7]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 7]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 3]= TRUE THEN
SWAPPED_BITS[(i * 8) + 6]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 6]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 4]= TRUE THEN
SWAPPED_BITS[(i * 8) + 5]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 5]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 5]= TRUE THEN
SWAPPED_BITS[(i * 8) + 4]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 4]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 6]= TRUE THEN
SWAPPED_BITS[(i * 8) + 3]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 3]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 7]= TRUE THEN
SWAPPED_BITS[(i * 8) + 2]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 2]:=FALSE;
END_IF;
IF BEAM_BITS[(i * 8) + 8]= TRUE THEN
SWAPPED_BITS[(i * 8) + 1]:=TRUE;
ELSE
SWAPPED_BITS[(i * 8) + 1]:=FALSE;
END_IF;
END_FOR;
END_FUNCTION_BLOCK
[/size][/font]