发布于 2014-02-20 11:23:38
7楼
下面的可以的
FUNCTION_BLOCK FB2
VAR_INPUT
in0: POINTER;
p1 AT in0: STRUCT
dbnum: WORD;
offset: DWORD;
END_STRUCT;
p2 AT in0: ARRAY[1..4] OF BYTE;
END_VAR
VAR_TEMP
sum: DINT;
offset: INT;
i: INT;
END_VAR
offset := DWORD_TO_INT(SHR(IN := (p1.offset AND DW#16#FFFFFF), N := 3));
IF p2[3] = b#16#83 THEN
FOR i := 1 TO 5 DO
sum := sum + WORD_TO_DINT(mw[offset]);
offset := offset + 2;
END_FOR;
ELSIF p2[3] = b#16#84 THEN
FOR i := 1 TO 5 DO
sum := sum + WORD_TO_DINT(WORD_TO_BLOCK_DB(p1.dbnum).DW[offset]);
offset := offset + 2;
END_FOR;
END_IF;
END_FUNCTION_BLOCK