缺省情况下,FB_Init
方法可隐式使用。它被 EcoStruxure Machine Expert 用来对功能块或结构执行初始化。
为了影响初始化,您可以延长给定缺省初始化代码,从而显式声明 FB_Init
方法。这样,您就可以执行返回值求值。
FB_Reinit 方法必须显式声明。
如果 FB_Reinit 方法可用,则在复制了相应功能块的实例(在对功能块声明进行修改之后的在线修改期间)之后,调用此方法。它对新实例模块执行重新初始化。不执行返回值求值。如要实现基本功能块的重新初始化,可为该功能块显式调用 FB_Reinit。这样,您就可以执行返回值求值。
在将应用程序下载到缺省状态下的控制器时,变量的内存位置被设置为所需的初始状态。功能块的数据区被设置为所需的值。您可以通过在应用程序的程序代码中为功能块显式实现 FB_Init,来影响这一过程。
方法参数 bInCopyCode 设置为 FALSE 且 bInitRetains 设置为 TRUE 时,说明正在执行首次下载。
在执行了命令时,可以使用方法 FB_Exit、FB_Init 和 FB_Reinit 来影响功能块的初始化。
在线修改期间,离线模式下进行的应用程序修改会被下载到控制器。功能块的实例按照如下方式更新为新实例:
如果您仅对功能块的实现部分而未对声明部分进行修改,则不会替换数据区。方法 FB_Init、FB_Reinit 和 FB_Exit 不被调用。
如果您对功能块的声明部分进行了修改,那么在执行命令时,会执行 FB_Reinit 文段中所述的复制过程。对话框中列出自上次下载后修改过的对象。在选择了选项 的情况下,单击此对话框中的 按钮,以此打开此对话框。
FB_Init 和 FB_Reinit 方法参数 bInCopyCode 设置为 TRUE 且 bInitRetains 设置为 FALSE 时,说明正在执行在线修改。
执行
命令可能更改地址内容。小心 | |
---|---|
在线修改期间,相继执行以下调用:
步骤 |
操作 |
注释 |
---|---|---|
1 |
FB_Exit |
在启动复制过程之前,调用 FB_Exit 来执行清理过程。 它为下一个复制过程准备数据,并影响新实例的状态。 应用程序的其他部分被告知内存中所执行的位置修改。 请注意,在线修改期间,POINTER 或 REFERENCE 类型的变量的值保持不变,并且在过程结束后,可能不再引用所需的内存位置。在线修改期间,会调整 INTERFACE 类型的变量。新实例可能能够采用外部资源,如套接字、文件或其他句柄,当系统资源不受在线修改复制过程影响时,这些外部资源在在线修改期间通常不需要单独处理。如果需要,也必须在 Init 或 Reinit 实现中处理。 |
2 |
FB_Init |
FB_Init 可用于在在线修改过程中执行特定操作。 其中包括,比如,适当地对新内存位置处的变量执行初始化,或者将与特定变量的新位置有关的信息提供到应用程序的其他部分。 |
3 |
复制操作 copy |
现有值保持不变。为此,这些值从旧实例复制到新实例。 |
4 |
FB_Reinit |
复制操作结束后,调用 FB_Reinit 方法。它将功能块实例的变量设置为定义值。 比如,您可以适当地对新内存位置处的变量执行初始化,或者将与特定变量的新位置有关的信息提供到应用程序的其他部分。 每当要将功能块复位至原始状态时,都应以与在线修改独立开的方式实现 FB_Reinit 方法,因为该方法可以随时被应用程序调用。 |
将应用程序下载到已经在运行某一应用程序的控制器时,原有应用程序将被替换。您可以使用比如 FB_Exit 方法,为外部资源(如套接字或文件句柄)分配定义状态。
方法参数 bInCopyCode 设置为 FALSE 且 bInitRetains 设置为 FALSE 时,说明正在执行下载更新的应用程序。
在执行应用程序任务的首个循环之前,应先处理初始赋值。
示例:
T1 : TON := (PT:=t#500ms);
这些赋值在调用了 FB_Init 之后执行。如要检验这些赋值的影响,可将 {attribute call_after_init} pragma 附加到功能块以及功能块的方法(比如,调用的 MyInit)。将此属性插入到功能块的声明部分上方以及相应方法的声明部分上方。另将此 pragma 附加到对其他正使用 {attribute call_after_init} pragma 的功能块进行扩展的功能块。建议为相应的方法指定相同的名称、相同的签名以及相同的属性。为此,应调用 SUPER^.MyInit
。选择方法名称(FB_Init、FB_Reinit 和 FB_Exit 除外)。在处理了初始赋值之后并且在启动应用程序的任务之前,调用此方法。
SUPER^.FB_Init
。
FB_Init
方法的接口
METHOD FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL; // TRUE: the retain variables are initialized (reset warm /reset cold)
bInCopyCode : BOOL; // TRUE the instance will be copied to the copy-code afterward (online change)
END_VAR
不使用返回值。
在 FB_Init 方法中,您可以声明其他功能块输入。将输入分配到功能块实例的声明中。
示例:功能块 serialdevice
的方法 FB_Init:
METHOD PUBLIC FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL; // Initialization of the retain variables
bInCopyCode : BOOL; // Instance is copied to copy-code
iCOMnum : INT; // additional input: number of the COM interface that is to be observed
END_VAR
功能块 serialdevice
的实例化:
com1: serialdevice (iCOMnum:=1);
com0: serialdevice (iCOMnum:=0);