SplitRange (S7-1200, S7-1500) 与 CPU 和 FW 的兼容性 (S7-1200, S7-1500) 下表列出了 SplitRange 的各版本及其适用的 CPU: CPU 固件版本 SplitRange S7-1200 版本 V4.2 及更高版本 V1.0 基于 S7-1500 的 CPU 版本 V2.0 及更高版本 V1.0 SplitRange 描述 (S7-1200, S7-1500) 描述 SplitRange 指令将输入值转换为输出值。输入值处于由 Points.x1 和 Points.x2 限制的取值范 围内。输出值处于由 Points.y1 和 Points.y2 限制的取值范围内。 下图显示了 SplitRange 指令示例组态的相关特性:错误原因: 检查折线数据时,UserData 结构中有一个或多个变量的值无效。 对错误的响应: UserData 结构中的折线数据并不传送至 WorkingData 结构,从而使 UserData 结构中的值无 法生效。 FB Polyline 不会在 Output 参数中输出插值,因为 WorkingData 结构中不含有效的折线数据。 在 ErrorMode 变量中组态的替代输出值会在 Output 参数中输出。 解决方案: 检查折线数据时,确保满足以下条件: • 2 ≤ UserData.NumberOfUsedPoints ≤ 50 • UserData.Point[j].x < UserData.Point[j+1].x,索引 j = 1.. (UserData.NumberOfUsedPoints – 1) • -3.402823e+38 ≤ UserData.Point[i].x ≤ 3.402823e+38,索引 i = 1..UserData.NumberOfUsedPoints • -3.402823e+38 ≤ UserData.Point[i].y ≤ 3.402823e+38,索引 i = 1..UserData.NumberOfUsedPoints • UserData.Point[i].x 和 UserData.Point[i].y 为有效的 REAL 值(≠ NaN),索引 i = 1..UserData.NumberOfUsedPoints 其它信息: 在以下情况中,会检查 UserData 结构中的折线数据: • Validate 参数设为 TRUE,同时 Reset 参数设为 FALSE 或 • CPU 操作状态由 STOP 切换为 RUN 后,首次通过参数 Reset = FALSE 调用 Polyline。 请注意,UserData 和 WorkingData 结构中的变量不具有保持性。每当 CPU 的操作状态从 STOP 切换为 RUN 后,这些变量都将通过起始值进行初始化。
当需要控制受多个执行器影响的过程时,请使用 SplitRange。SplitRange 将 PID 控制器的输 出值范围拆分为多个子范围。为每个执行器分配一个子范围。对于每个子范围,用户程序调 用一次块。各个 SplitRange 实例的输入值与 PID 控制器的输出值相连。 下图显示了含有两个 SplitRange 实例和两个执行器的控制回路示例:SplitRange 数据的有效性 Points 结构中的值对定义了 SplitRange 的输入和输出值范围。两个值对位于块 SplitRange 的 静态区域中。 每次调用时,SplitRange 都会检查是否满足以下条件,以便得到用来计算输出值的有效值: • Points.x1 < Points.x2 • Points.x1、Points.y1、Points.x2 和 Points.y2 处于允许的取值范围(-3.402823e+38 到 3.402823e+38)内 • Points.x1、Points.y1、Points.x2 和 Points.y2 是有效 REAL 值(≠ NaN,例如 16#7FFF_FFFF) 如果不满足其中的一个或多个条件,则无法正确计算输出值。相应的错误消息在 ErrorBits 参 数中输出。 x 和 y 值预分配为 0.0,这并不代表有效组态。将变量更改为有效值后,才能将其用于输出 值计算。 使能行为 EN/ENO 如果满足下列其中一个条件,则使能输出 ENO 将设为 FALSE。 • 使能输入 EN 设为 TRUE,且 Output 参数由出现错误消息 ErrorBits ≥ 16#0001_0000 时 的替代输出值指定。 • 使能输入 EN 设为 FALSE。 否则,使能输出 ENO 设为 TRUE。调用 在 OB 或 FC 中,SplitRange 以单背景数据块的形式调用。在 FB 中,SplitRange 能够以单背 景数据块、多背景数据块和参数背景数据块的形式调用。 调用该指令后,不会创建任何工艺对象。没有参数分配接口或调试接口可用。直接使用背景 数据块分配 SplitRange 参数,并使用 CPU 或 HMI 中的用户程序监视表调试 SplitRange。 启动 SplitRange 静态区域中的变量不具有保持性。每当 CPU 的操作状态从 STOP 切换为 RUN 后, 这些变量都将通过起始值进行初始化。 如果于在线模式下更改 Points 结构中的实际值并且这些值将在 CPU 的操作状态从 STOP 切 换到 RUN 后得以保留,则将这些值备份到数据块的起始值。 出现错误时的响应 SplitRange 指令会检测输出值计算过程中可能出现的各种错误。即便存在未决错误,也可在 输出中输出计算结果。如果某个错误影响了输出值计算的正确性,则将在输出中输出一个替 代输出值。 请按照如下方式在 ErrorMode 变量中指定出现某个影响输出值计算正确性的错误时将输出的 替代输出值: ErrorMode Output 0 Input 参数值 1 SubstituteOutput 参数值 2 输出值计算的上一个有效结果 如果不存在有效结果,则为 0.0 以下内容还适用于 ErrorMode 变量的所有值: • 如果替代输出值不是一个有效的 REAL 值,则会将 0.0 作为输出值输出。 • 替代输出值将限制在数据类型 REAL 的取值范围内。只有这样才能在 Output 参数中输出 替代输出值。 • 只有在设置了 Reset = FALSE 参数的情况下 ErrorMode 变量才有效。如果设置了 Reset = TRUE 参数,则 SubstituteOutput 参数值将在 Output 参数中输出。 Error 参数指示是否存在错误处于未决状态。当错误不再处于未决状态时,Error 设为 FALSE。 ErrorBits 参数显示了已发生的错误。ErrorBits 具有保持性,仅通过 Reset 或 ErrorAck 参数的 上升沿来复位。SplitRange 输入参数 (S7-1200, S7-1500) 参数 数据类型 默认值 说明 Input REAL 0.0 输入值 Substitute Output REAL 0.0 在下列情况下,SubstituteOutput 用作替代输出值 • Reset = TRUE 或 • 存在影响输出值计算正确性的错误(错误消息为 ErrorBits ≥ 16#0001_0000),ErrorMode 的组态值为 1。 ErrorAck BOOL FALSE 删除错误消息 • 边沿 FALSE -> TRUE ErrorBits 复位 Reset BOOL FALSE 重新启动指令 • 边沿 FALSE -> TRUE ErrorBits 复位。 • 只要 Reset 设为 TRUE,就会在输出中输出替代输出值 SubstituteOutput。 • 只要 Reset 设为 FALSE,就会计算输出值。 SplitRange 输出参数 (S7-1200, S7-1500) 参数 数据类型 默认值 说明 Output REAL 0.0 输出值 ErrorBits DWORD DW#16#0 ErrorBits 参数(页 5324)显示了处于未决状态的错误消息。ErrorBits 具 有保持性,通过 Reset 或 ErrorAck 的上升沿复位。 Error BOOL FALSE Error 设为 TRUE 时,至少有一个错误当前处于未决状态。 SplitRange 静态变量 (S7-1200, S7-1500) 变量 数据类型 默认值 说明 Points AuxFct_SplitR ange_Points - 点数据 Points.x1 REAL 0.0 点 1 的 x 值 允许的值范围:Points.x1 < Points.x2 Points.y1 REAL 0.0 点 1 的 y 值变量 数据类型 默认值 说明 Points.x2 REAL 0.0 点 2 的 x 值 允许的值范围:Points.x1 < Points.x2 Points.y2 REAL 0.0 点 2 的 y 值 ErrorMode INT 0 选择出现错误后的替代输出值 • 0 = Input • 1 = SubstituteOutput • 2 = 上一个有效输出值 允许的值范围:0 到 2: ErrorBits 参数 (S7-1200, S7-1500) 如果多个错误同时处于待决状态,将通过二进制加法显示 ErrorBits 的值。例如,显示 ErrorBits = 16#0000_0003 表示错误 16#0000_0001 和 16#0000_0002 同时处于待决状态。 对于 SplitRange,在 ErrorBits 参数中输出的错误分为两类: • 错误消息为 ErrorBits < 16#0001_0000 的错误 • 错误消息为 ErrorBits ≥ 16#0001_0000 的错误 错误消息为 ErrorBits < 16#0001_0000 的错误 如果有一个或多个错误消息为 ErrorBits < 16#0001_0000 的错误处于未决状态,则 SplitRange 的响应如下: • 即使存在此类错误,输出值也会通过如下方式确定: – 当 Reset = FALSE 时,通过输出值计算 – 当 Reset = TRUE 时,通过 SubstituteOutput 的输出 • 输出参数 Error 已置位。 • 使能输出 ENO 不变。