您现在的位置是:首页 > PLC技术 > PLC技术

调用SCL块中作为局部实例的功能块

来源:艾特贸易2017-06-05

简介其他功能块可以作为局部实例进行声明,并且在功能块中调用。然后,被调用的功能块在调用功能块的实例数据块中存储它们的局部数据。 FUNCTION_BLOCK FB290 ... VAR Delimiter :FB291; END_VAR .

    其他功能块可以作为局部实例进行声明,并且在功能块中调用。然后,被调用的功能块在调用功能块的实例数据块中存储它们的局部数据。

   FUNCTION_BLOCK    FB290

   ...

   VAR

   Delimiter  :FB291;

   END_VAR

   ...

   BEGIN

   ...

   Delimiter(IN  :=InputValue);

   Result  :=Delirniter.OUT;

   ...

   END_FUNCTION_BLOCK

    用户在静态局部数据中声明局部实例,像数据类型那样规定名称(例如Delimiter)且规定功能块(FB 291或其符号名称)。当编译时,被调用的功能块必须存在,且既可以在Block容器中成为已编译的块,也可以是被调用之前已经编译过的(无错误的)程序源。

    当用户调用系统功能块SFB作为局部实例时,选择相同的过程。

    作为局部实例的调用位于变量名称声明下面,紧跟在圆括号中的参数表的后面,功能块参数的初始化是任意的。因为复杂数据类型的输入/输出参数是作为指针存储的,它们在功能块第一次被调用时,就应该输入一个有意义的数值来赋值。如果块参数没有初始化,它将保持上次的设置数值,即使没有参数初始化,圆括号也必须要写。

    用户可以使用不同的名称对同一个功能块创建几个局部实例。

    一个局部实例的所有参数,在局部实例名称和参数名称的声明下面,可以作为结构变量的组成部分来寻址。在举例中,限制数值设定为常量,它们的初始化要先于调用局部实例:

   Delimiter.MAX  :=Maximum;

   Delimiter.MIN  :=Minimun;

    在块调用时,输出参数不能初始化(同样用于局部实例)。如果需要,它们的数值可直接从局部实例的组成部分中读取:

   Result  :=Delimiter.OUT;

    用户也可以从调用功能块的“外部”存取局部实例的参数,存取就像在数据块(DB290)和局部实例(Delimiter)以及参数名称的声明下面存取全局数据地址一样:

   DB290.Delimiter.MAX  :=Maximum;

   DB290.Delimiter.MIN  :=Minimum;

   Result  :=DB290.Delimiter.OUT;