FB_init,FB_reinit方法

FB_init

FB_init是一种特殊的路径 “方法”,它代替了CoDeSys V2.3中的INI算子,用于功能块或结构的重新初始化。它可以明确地为功能块被声明,但是在任何情况下它都是隐含可用的。

FB_init路径包括功能块或结构的初始代码,如果init路径被明确的声明,隐式初始化代码会被插入到这个路径。程序员可以添加更多的初始代码。

提示!

当执行到用户定义的初始化代码,功能块RESP.结构已经完全通过隐式初始化代码初始化。

在为每个声明的功能块实例和每个结构类型变量下载后,init路径会被调用。注意:如果在线更改的情况下,以前的值将覆盖初始值!

获取继承状态下的调用序列信息请参阅

自动通过FB_init初始化定义功能块实例方法的可能性: “初始化后调用属性”

 

Init路径的界面

METHOD fb_init : BOOL
VAR_INPUT
  bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
  bInCopyCode : BOOL;  // if TRUE, the instance afterwards gets moved into the copy code (online change)
END_VAR

 

返回值没有解释说明。

还要注意可能使用“退出”方法和结果的执行顺序:见 “FB_exit 路径”

用户自定义输入:

附加的功能块输入也可以在init路径中声明。它们必须被分配在一个功能块实例声明中。

 

功能块‘连载设备’初始化方法例子:

METHOD PUBLIC FB_init : bool
VAR_INPUT
    bInitRetains : BOOL; // Initialization of the retain variables
    bInCopyCode : BOOL; // Instance moved into copy code
    nCOMnum : INT; // Input: number of the COM interface to listen at
END_VAR
 

功能块‘连载设备’声明:

    com1: serialdevice(nCOMnum:=1);
    com0: serialdevice(nCOMnum:=0);
 

在结构'DUTxy' 中使用FB_init例子

结构 DUTxy

TYPE DUTxy :
STRUCT
    a: INT := 10;
    b: INT := 11;
    c: INT := 12;
END_STRUCT
END_TYPE
 

调用fb_init 重新初始化

PROGRAM PLC_PRG
VAR
    dutTest: DUTxy;
    xInit: BOOL:=FALSE;
END_VAR

IF xinit THEN    // if xinit is set TRUE, then the reinitialization via fb_init to the values as defined in DUTxy will be done
    dutTest.FB_Init(TRUE,TRUE);
ELSE
    dutTest.a := 1;
    dutTest.b := 2;
    dutTest.c := 3;
END_IF
 
FB_reinit

如果功能块实例声明为“FB_reinit”,这种路径将在实例被复制时被调用(其中一个例子是在功能块声明修改后的在线更改)。方法将导致通过复制代码建立的新的实例模块的重新初始化。可能希望重新初始化,因为原始实例的数据将被复制后将被写入到新的实例,就需要得到原来的初始化值。FB_reinit路径没有输入。关于与FB_init路径的对比 必须明确声明。如果需要实现重新初始化所需的基本功能块,FB_reinit必须显式地调用该POU。

FB_reinit路径没有输入。

在继承状态下的调用序列请参阅: