FB4中定义FB2为本地实例,FB4中DB4数据块数据一直不变,但DB2一直在变,是我弄错了?求指教
(*******************************FB1************************************************)
FUNCTION_BLOCK FB1
VAR_INPUT
in1 : INT;
END_VAR
VAR_OUTPUT
out1 : INT;
END_VAR
BEGIN
out1 := in1+2;
END_FUNCTION_BLOCK
(*******************************FB2************************************************)
FUNCTION_BLOCK FB2
VAR_INPUT
PIW_IN: INT;
HI_LIM_IN: REAL :=100.0;
LO_LIM_IN: REAL :=0.0;
BIPOLAR_IN: BOOL :=FALSE;
END_VAR
VAR_OUTPUT
SCALED_VAL: REAL;
SCALED_FILTED: REAL;
ERR: BOOL;
END_VAR
VAR_TEMP
RET_VAL_105: WORD;
LOOP_COUNT: INT;
MAX_DATA: REAL;
MIN_DATA: REAL;
TOTAL: REAL;
TOTAL_FILTERD: REAL;
END_VAR
VAR
DATA_STORE: ARRAY[0..9] OF REAL;
END_VAR
BEGIN
RET_VAL_105:=SCALE(IN :=PIW_IN // IN: INT
,HI_LIM :=HI_LIM_IN // IN: REAL
,LO_LIM :=LO_LIM_IN // IN: REAL
,BIPOLAR :=BIPOLAR_IN // IN: BOOL
,OUT :=SCALED_VAL // OUT: REAL
); // WORD
IF RET_VAL_105 <> 0 THEN ERR:=TRUE;
ELSE ERR:=FALSE;
END_IF;
MAX_DATA:=DATA_STORE[0];
MIN_DATA:=DATA_STORE[0];
TOTAL:=0.0;
TOTAL_FILTERD:=0.0;
FOR LOOP_COUNT:=0 TO 8 BY 1 DO
DATA_STORE[LOOP_COUNT]:=DATA_STORE[LOOP_COUNT+1];
END_FOR;
DATA_STORE[9]:=SCALED_VAL;
FOR LOOP_COUNT:=0 TO 9 BY 1 DO
IF MAX_DATA < DATA_STORE[LOOP_COUNT] THEN MAX_DATA:=DATA_STORE[LOOP_COUNT];
END_IF;
IF MIN_DATA > DATA_STORE[LOOP_COUNT] THEN MIN_DATA:=DATA_STORE[LOOP_COUNT];
END_IF;
TOTAL:=TOTAL+DATA_STORE[LOOP_COUNT];
END_FOR;
TOTAL_FILTERD:=TOTAL - MIN_DATA - MAX_DATA;
SCALED_FILTED:=TOTAL_FILTERD/8.0;
END_FUNCTION_BLOCK
(*******************************FB4************************************************)
FUNCTION_BLOCK testfb
VAR_INPUT
in:INT;
END_VAR
VAR_IN_OUT
END_VAR
VAR_OUTPUT
out:INT;
END_VAR
VAR_TEMP
temp:INT;
END_VAR
VAR
//fb1_instance:FB1;
fb2_instance:FBTEST2;
END_VAR
BEGIN
out:=in+2;
IF(fb2_instance.SCALED_VAL<=0) THEN
temp:=out+1;//temp是我用来测试有没有执行if语句的中间代码, 结果执行了
IF(fb2_instance.SCALED_VAL>99.8) THEN
//fb1_instance.out1:=0;
out:=0;
END_IF;
END_IF;
temp:=out;
temp:=in-1;
END_FUNCTION_BLOCK
(*******************************OB35************************************************)
CALL "FBTEST1" , DB1
in1 :=DB4.DBW2
out1:=DB1.DBW2
NOP 0
L DB1.DBW 2
L 100
+I
T DB1.DBW 2
T DB1.DBW 0
NOP 0
CALL "FBTEST2" , DB2
PIW_IN :=DB1.DBW2
HI_LIM_IN :=1.000000e+002
LO_LIM_IN :=0.000000e+000
BIPOLAR_IN :=FALSE
SCALED_VAL :=MD4
SCALED_FILTED:=MD8
ERR :=M10.0
NOP 0
CALL "testfb" , DB4
in :=DB1.DBW0
out:=DB4.DBW2
NOP 0
其中符号定义如下:
FBTEST1 FB 1
FBTEST2 FB 2
FBTEST3 FB 3
SCALE FC 105 Scaling Values
testfb FB 4 tset call fb、fc or something else
testfc FC 1 just test for something
求指教~~~~~~~~~~~~~~~~~~~~~~上传不了图片???
问题主要是IF(fb2_instance.SCALED_VAL>99.8) 这句的fb2_instance.SCALED_VAL得不到DB2中的DB2.SCALED_VAL值。仿真时监视DB4和DB2中的数据时,DB2所有数据都在变,而DB4静态量都没有一直为初始值,只有IN和OUT两个量在同步变
求指教~~~~~~~~~~~~~~~~~~~~~~