本来打算写点什么的,算了不写了,初版,凑活看吧,终结版我也会发出来,和大家共享吧!
FUNCTION FC2008 : VOID
VAR_INPUT
DB_Graph,DB_Save,Target:INT;
END_VAR
VAR_IN_OUT
//
END_VAR
VAR_OUTPUT
ERR:WORD;
END_VAR
VAR_TEMP
T_CNT,S_CNT,INSTANCE_DB:INT;
DB_LENGTH:WORD;
RET_CODE:INT;
WRITE_PROT:BOOL;
Index,Index_Byte,Index_Bit:INT;
END_VAR
// Statement Section
ERR:=W#16#0000;
T_CNT:=0;
S_CNT:=0;
INSTANCE_DB:=0;
//首先判断Save数据块在不在
DB_LENGTH:=W#16#0000;
RET_CODE:=0;
WRITE_PROT:=0;
RET_CODE:=TEST_DB(DB_NUMBER :=INT_TO_WORD(DB_Save) // IN: WORD
,DB_LENGTH :=DB_LENGTH // OUT: WORD
,WRITE_PROT :=WRITE_PROT // OUT: BOOL
); // INT
IF RET_CODE <> 0 THEN
ERR:=W#16#0001;
RETURN;
END_IF;
//判断Graph数据块在不在
DB_LENGTH:=W#16#0000;
RET_CODE:=0;
WRITE_PROT:=0;
RET_CODE:=TEST_DB(DB_NUMBER :=INT_TO_WORD(DB_Graph) // IN: WORD
,DB_LENGTH :=DB_LENGTH // OUT: WORD
,WRITE_PROT :=WRITE_PROT // OUT: BOOL
); // INT
IF RET_CODE <> 0 THEN
ERR:=W#16#0002;
RETURN;
END_IF;
//求出Graph里面的TS数值
T_CNT:=WORD_TO_INT(BYTE_TO_WORD(WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DB[WORD_TO_INT(DB_LENGTH)-31]));
S_CNT:=WORD_TO_INT(BYTE_TO_WORD(WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DB[WORD_TO_INT(DB_LENGTH)-28]));
INSTANCE_DB:=10+16+16*T_CNT+32+1;
FOR Index:=1 TO S_CNT BY 1 DO
Index_Byte:=0;
Index_Bit:=0;
Index_Byte:=Index / 8;
Index_Bit:=(Index MOD 8)-1;
IF (Index MOD 8) = 0 THEN
Index_Byte:=Index_Byte-1;
Index_Bit:=7;
END_IF;
WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Save)).DX[Target+Index_Byte,Index_Bit]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DX[INSTANCE_DB+32*(Index-1),0];
END_FOR;
RETURN;
END_FUNCTION