触发器局部变量、静态变量、宏和事件变量
触发器定义包括作为触发器应用逻辑(触发器动作中)一部分使用的局部变量和静态变量。这些局部变量和静态变量属于触发器及其动作,不能在触发器外部引用。
一组触发器宏可作为触发器应用逻辑的一部分使用。这些触发器宏可用作触发器动作的源变量。
触发器事件类型还会标示可用于触发器动作的事件变量,包括源变量和目标变量。
局部变量和静态变量
触发器局部变量和静态变量使用触发器窗口中的选项卡进行定义。
当需要一个变量来保存不需要在触发器外部可用的运行时间值时,这些触发器变量可用作触发器应用逻辑的一部分。局部和静态变量使用示例包括:
- 临时计算
- 循环计数器
这些触发器(局部和静态)变量与设备变量之间的重要区别是,触发器变量完全包含在触发器执行中,并且在触发器外部无法访问。设备变量驻留于设备中,并且可由能够访问该设备的任何对象访问,包括不同触发器、设备应用程序代码和设备编程工具。
触发器局部变量和静态变量具有相同的定义和运行时间行为,但也存在以下差异:
- 局部变量具有触发器单个执行实例的生命周期或作用域。这意味着在执行触发器实例时创建该变量,而在该触发器实例结束其执行时销毁该变量。当触发器实例结束时,正在运行的计数器将丢失其值,并在执行触发器的下一个实例时重新初始化为其默认值。
- 静态变量包含触发器处于已启动状态和已加载状况时的时间区间的生命周期或作用域。这意味着触发器已启动,其项目也已启动。静态变量的值在此生命周期内保留,因此正在运行的计数器将在触发器实例结束时保留其值,并且可用于触发器的下一个执行实例。
向触发器添加局部或静态变量
- 使用列表编辑器或画布编辑器,从触发器窗口中选择 Local Variables(局部变量)或 Static Variables(静态变量)选项卡。
此示例将使用 Local Variables(局部变量)选项卡。 - 选择 Add(添加)。
随即显示新变量窗口。 - 对该变量 Name(命名),然后选择 Type(类型)(对于此示例为 INT2)。
- 在 Count(计数)参数中,输入值 1(默认值)以指示标量变量,或输入大于 1 的值以指示数组变量。
- 在 Default Value(默认值)参数中,键入用于初始化变量的值。
- 选择 Add(添加)。
变量将添加到 Local Variables(局部变量)选项卡。
其他变量注意事项
使用局部变量、静态变量或设备变量时的其他注意事项包括:
- 触发器局部变量或静态变量非常适用于不需要在触发器外部访问的临时变量。它们不需要设备驱动程序代码路径的访问开销、网络开销以及读取或写入的设备响应时间。
- 局部变量包含触发器的某个执行实例的作用域,因而变量的值不能保留并在触发器执行实例之间传递。
这确实可使局部变量(专用于触发器的某个执行实例)不受触发器多个并发执行实例的影响。 - 静态变量包含触发器处于已加载状况直至变为未加载状况的作用域。这意味着变量的值将保留,并由触发器所有执行实例共享。如果可以同时执行触发器的多个实例,则基于引用变量的不同执行实例的时间,变量可能具有不确定的值。编辑已启动的触发器时,触发器将在保存时重新加载。这将导致所有静态变量重置为其初始值。
- 触发器执行实例开始时,将会读取一次在触发器的任何动作中引用的设备变量。设备变量在触发器执行其多个动作期间写入内部缓冲区,并且仅在触发器执行实例结束时写入(刷新)至设备。
- 所有设备变量的初始读取和缓冲写入的最终刷新可能不会导致按触发器应用逻辑要求访问所需的设备变量。
有关设备变量访问的更多信息,请参阅需求读取、需求写入和设备提交。