Код:
FUNCTION_BLOCK buff2int
VAR_INPUT
	Pt_of_buff: POINTER TO ARRAY [1..255] OF BYTE;//
	Pt_of_int: POINTER TO ARRAY [1..125] OF INT;//
END_VAR
VAR_INPUT
	x_START: BOOL;// Старт пересборки буфера
END_VAR
VAR	
	i: byte;// шаг FOR/ номер ячейки буфера байт
	m: BYTE;// Номер ячейки выходного массива
	dut_var: W2ab;// объединение, массив 2 байта + инт
END_VAR


IF x_START THEN i := 0; END_IF
			FOR i := 1 TO 20 DO 	///20 условно, нужно смотреть или 3 или 7 ячейку для определения размера пакета
		        m:=i/2;   // номер ячейки конечного массива 
   	IF 	i.0 THEN			//смотрим бит. тру значит число нечетное	
// присваиваем значение из нечетной ячейки массива в [0] подъячейку объединения
	MEM.MemMove(ADR(Pt_of_buff^[i]), ADR(dut_var.ab_digit[0]), SIZEOF(Pt_of_buff^[i]) );
					ELSE 						
//присваиваем значение из четной ячейки массива в [1] подъячейку объединения
MEM.MemMove(ADR(Pt_of_buff^[i]), ADR(dut_var.ab_digit[1]), SIZEOF(Pt_of_buff^[i]) );
//по идее - ИНТ число уже сформировано, его можно записать в массив инт
MEM.MemMove(ADR(dut_var), ADR(Pt_of_int^[m]), SIZEOF(dut_var) );

				END_IF END_FOR
получилось как-то так...