增强版需求读取
Enhanced Demand Read(增强版需求读取)动作在触发器执行时即刻读取一组设备变量,从而绕过触发器执行开始时读取的初始触发器缓冲区。当触发器启动执行时,触发器动作引用的所有变量将读取到内部缓冲区中。触发器的任何动作引用变量时,将在该内部缓冲区读取或写入变量的值。在触发器完成其执行时,内部缓冲区将写入设备。
为绕过此内部缓冲,Enhanced Demand Read(增强版需求读取)动作会强制将设备变量通过设备管理器和设备驱动程序读取至设备。
示例
{ "TestStringVar1": {"type":"STRING", "count":1, "length": 10}, "TestCountVar": {"type":"INT4", "count":5}, "TestTemp": {"type":"FLOAT8", "count":1} }
增强版需求读取动作是高级功能包的一部分。有关获取和安装软件包的更多信息,请参见软件包。
参数描述
参数 | 描述 |
---|---|
Rules in JSON(JSON 中的规则) | 要读取的设备变量的描述。如示例所示,各变量指定方式如下:
|
输入选项卡
Input(输入)选项卡包含设备名称参数以及 JSON 变量描述中标识的每个变量的输入映射变量。
参数 | 描述 |
---|---|
Device Name(设备名称) | 要读取其值的变量所在设备的名称。 |
Input map variables(输入映射变量) |
JSON 变量描述中标识的映射变量。 JSON 变量描述中的每个变量都将在 Input(输入)选项卡中添加为映射变量行。 在 Value(值)列中,指定设备变量名称。名称可以是常量(直接在参数中输入),也可以在变量中动态地指定名称。 在上方的示例输入选项卡中,变量名称已指定为常量。 |
输出选项卡
Output(输出)选项卡包含 JSON 变量描述中标识的每个变量的输出变量。
示例
{ "TestStringVar1": {"type":"STRING", "count":1, "length": 10}, "TestCountVar": {"type":"INT4", "count":5}, "TestTemp": {"type":"FLOAT8", "count":1} }
参数 | 描述 |
---|---|
Output variables(输出变量) | JSON 变量描述中的每个变量都将在 Output(输出)选项卡中添加为一行。 在 Value(值)列中,指定将放置输入变量读取值的变量。输出变量可以是触发器变量(局部或静态)或设备变量。 在上方的示例输出选项卡中,变量读入至触发器局部变量。 |
增强版需求读取注意事项
通常会在设备变量为动作中的源变量时进行“读取”。例如,Set(设置)动作具有源变量和目标变量。
当触发器启动执行时,触发器动作引用的所有变量将读取到内部缓冲区中。触发器的任何动作引用变量时,将在该内部缓冲区读取或写入变量的值。在触发器完成其执行时,内部缓冲区将写入设备。此过程会最大化触发器执行的性能。
如果需要在触发器执行的某个时刻从设备直接读取设备变量,而不是从先前读取的内部触发器缓冲区直接读取设备变量,将使用 Enhanced Demand Read(增强版需求读取)动作。这些情况需要考虑触发器和设备中的总体应用逻辑,以了解应用程序所有部分的动态交互。Enhanced Demand Read(增强版需求读取)动作就处理时间而言确实会占用额外资源(例如与 Set(设置)动作相比),因为触发器引擎和设备驱动程序必须向下与物理设备通信并获得响应,包括通过网络与设备通信。
为每个变量指定的数据类型必须与设备变量的数据类型匹配。如果不匹配,该变量将无法成功读取。
如果指定的设备存在问题(未定义或未启动),动作将失败。如果指定的变量存在个别问题,动作将成功。存在个别问题的变量(变量未定义、数据类型不匹配、数据溢出写入输出变量、数据强制转换问题写入输出变量)将不会更新相应的输出变量。没有问题的变量将更新相应的输出变量。