发布于 2012-01-31 16:54:14
4楼
FUNCTION_BLOCK FB121
VAR_INPUT
Sel_Pointer: ANY;
Num: INT;
END_VAR
VAR_IN_OUT
END_VAR
VAR_OUTPUT
B_Out: BOOL;
END_VAR
VAR_TEMP
Buffer1: anypoint;
Sel_Temp AT buffer1: ANY;
ByteNr: INT;
BitNr: INT;
T_Byte: INT;
T_Bit: INT;
Offset: INT;
i: INT;
END_VAR
VAR
END_VAR
Sel_Temp := Sel_Pointer;
BitNr := WORD_TO_INT(DWORD_TO_WORD(Buffer1.BytePointer AND DW#16#7));
ByteNr := WORD_TO_INT(DWORD_TO_WORD(SHR(In := SHL(In := Buffer1.BytePointer,N := 8),N := 11)));
Offset := WORD_TO_INT(DWORD_TO_WORD(Buffer1.BytePointer AND DW#16#00ff_ffff));
T_Byte := Offset / 8;
T_Bit := Offset-(T_Byte * 8);
FOR i:=0 TO Num-1 BY 1 DO
IF T_Bit > 7 THEN
T_Bit := 0;
T_Byte := T_Byte+1;
END_IF;
B_Out := WORD_TO_BLOCK_DB(Buffer1.DB_Number).Dx[T_Byte,T_Bit];
T_Bit := T_Bit+1;
END_FOR;
END_FUNCTION_BLOCK