发表于:2007-12-30 16:00:00
楼主
在做SCL时遇到了一些麻烦,请大家指教.
想完成这样一个功能:OB33调用一个FB块(如FB1),在FB1里调用了一个SFB块,但是这个SFB块的背景数据块的值作为一个输入参数在FB1里定义,然后在OB33里多次调用FB1时,分配背景数据块给FB1时,同时在FB1输入参数端输入一个背景块名,这样就指定了SFB的背景数据块,STL和LAD语言都能实现,但是SCL语言无法完成,请各位讨论指教。
例如STL的大概语言是:
[color=#0000FF]FUNCTION_BLOCK FB1[/color]
VAR_INPUT
……
[color=#FF0000]DB_num:BLOCK_DB;[/color]
……
END_VAR
VAR_OUTPUT
……
END_VAR
BEGIN
NETWORK
……
CALL "CONT_C[color=#FF0000]",#DB_num[/color](
COM_RST:= L14.O,
MAN_ON:= L14.1,
……
);
[color=#0000FF]END_FUNCTION_BLOCK[/color]
[color=#0000FF]ORGANIZATION_BLOCK "CYC_INT3"[/color]
……
NETWORK
……
CALL FB1,DB100(
……
[color=#FF0000]DB_num:=DB11,[/color] ……);
……
[color=#0000FF]END_ORGANIZATION_BLOCK[/color]
编译之后一切正常,没有错误,功能也实现了。
但我在SCL里做同FB1的功能却遇到了麻烦,编译始终无法通过。
例如:
[color=#0000FF]FUNCTION_BLOCK FB1[/color]
VAR_INPUT
……
[color=#FF0000] DB_num:BLOCK_DB;[/color]
……
END_VAR
VAR_OUTPUT
……
END_VAR
[color=#0000FF]BEGIN[/color]
……
CONT_C.[color=#FF0000]DB_num[/color](
COM_RST:=……,
MAN_ON:=……,
……);
……:=[color=#FF0000]DB_num.LMN;[/color]
……;
[color=#0000FF]END_FUNCTION_BLOCK [/color]以上的SCL编译始终出错,提示name conflict with a local variable,我想问题就在DB_num这个变量SFB41背景数据块的定义上,如何修改才能实现STL那样的功能呢?