получилось как-то так...Код: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




Ответить с цитированием