Dear All:
我想通过在OB1中调用FB5的背景数据块DB5、DB6,分别把DB2中夹有UDT3数据传到DB5、DB6,即:pot[0]的内容传给DB5;pot[1]的内容传给DB6。但是只能实现传给DB5,而不能实现传给DB6.。求助......
TYPE UDT3
STRUCT
data_type :STRUCT
Val_bool : BOOL ;
Val_byte : BYTE ;//1
Val_int : INT ;//2
Val_real : REAL ;//4
END_STRUCT ;
PIC_Struct_press : STRUCT
nY : INT ;
fTXWa : REAL ;
e_i : REAL ;
END_STRUCT ;
END_STRUCT
END_TYPE
DATA_BLOCK DB2
STRUCT
pot : ARRAY[0..1] OF UDT3 ;
END_STRUCT
BEGIN
pot[0].data_type.Val_bool := true ;
pot[0].data_type.Val_byte := b#16#10 ;
pot[0].data_type.Val_int := 50 ;
pot[0].data_type.Val_real := 100.00 ;
pot[1].data_type.Val_bool := false ;
pot[1].data_type.Val_byte := b#16#20 ;
pot[1].data_type.Val_int := 50 ;
pot[1].data_type.Val_real := 200.00 ;
END_DATA_BLOCK
FUNCTION_BLOCK FB5
VAR_INPUT
Any_DB : ANY ;
Anypointer AT Any_DB : STRUCT
SyntaxID : BYTE ;
DataType : BYTE ;
DataCount : WORD ;
DB_Number : WORD ;
BytePointer : DWORD ;
END_STRUCT ;
TmpAnyPointer AT Any_DB : ARRAY[0..9] OF BYTE ;
END_VAR
VAR_OUTPUT
Q_DB : INT ;
Q_Bool : BOOL ;
Q_byte : BYTE ;
Q_int : INT ;
Q_real : REAL ;
Q_division : REAL ;
END_VAR
VAR_TEMP
offset : INT ;
END_VAR
//Anypointer.SyntaxID := 16#10 ;
//Anypointer.DataType := 16#2 ;
//Anypointer.DataCount := 16#04 ;
//Anypointer.DB_Number := 16#06 ;
Anypointer.BytePointer := dw#16#8400_0000 ;
offset := DWORD_TO_INT(SHR(IN:= AnyPointer.BytePointer, N:= 3)) ;
Q_DB := WORD_TO_INT(AnyPointer.DB_Number) ;
Q_bool := WORD_TO_BLOCK_DB(AnyPointer.DB_Number).Dx[offset, 0] ;
Q_byte := WORD_TO_BLOCK_DB(AnyPointer.DB_Number).DB[offset + 1] ;
Q_int := WORD_TO_INT(WORD_TO_BLOCK_DB(AnyPointer.DB_Number).DW[offset + 2]) ;
Q_real := DWORD_TO_REAL(WORD_TO_BLOCK_DB(AnyPointer.DB_Number).DD[offset + 4]) ;
Q_division := Q_real / DINT_TO_REAL(INT_TO_DINT(Q_int)) ;
END_FUNCTION_BLOCK
DATA_BLOCK DB5 FB5
BEGIN
END_DATA_BLOCK
DATA_BLOCK DB6 FB5
BEGIN
END_DATA_BLOCK
Tanks !