FB4中定义FB2为本地实例,FB4中DB4数据块数据一直不变,但DB2一直在变,是我弄错了?求指教

已锁定

jxlgw

  • 帖子

    13
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2013-07-09

普通 普通 如何晋级?

FB4中定义FB2为本地实例,FB4中DB4数据块数据一直不变,但DB2一直在变,是我弄错了?求指教

954

2

2014-03-14 19:50:10

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两个量在同步变
求指教~~~~~~~~~~~~~~~~~~~~~~
FB4中定义FB2为本地实例,FB4中DB4数据块数据一直不变,但DB2一直在变,是我弄错了?求指教 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。