Polyline 工作原理折线数据要更改折线,请编辑 UserData 结构中的值。这些值随后会进行有效性检查,通过检查的值会传送到 WorkingData 结构。只有 WorkingData 结构中的值用于插值计算。下列情况下将检查和传送值:• 将 Validate 参数设为 TRUE,同时 Reset 参数设为 FALSE。• 在 CPU 的操作状态从 STOP 切换到 RUN 后首次调用 Polyline,同时 Reset 参数设为FALSE。如果已调用 Polyline(例如,在 OB100 中),则后续调用时不会再检查值的有效性。如果 UserData 结构中的折线数据无效,则 WorkingData 结构中先前的折线数据将保持不变,并将输出一条对应的错误消息。如果是首次执行检查,则 WorkingData 结构中无有效值,并将输出一条对应的错误消息。在这种情况下,Output 参数由使用 ErrorMode 变量组态的备用输出值来指定。检查和传送 UserData 结构中的值所需的 CPU 处理时间长于插值计算。在时间敏感型应用中,可首先在启动 OB 100 中执行 Polyline。这样,在进入循环应用程序部分之前即可完成较为耗时的折线数据一次性检查与传送。如果检查过程中发现有一个或多个条件未得到满足,则 UserData 结构中的值将不会传送到WorkingData 结构。对应的错误消息在 ErrorBits (页 415) 参数中输出。UserData 结构中的值预分配并不代表有效组态。将变量更改为有效值后,才能用于插值计算。说明如果您的应用需要的点数超出Zui大值 50,可使用两个或以上的 Polyline 实例。计算输出值如果 Input 参数的输入值低于所用点的第一个 x 值或高于所用点的Zui后一个 x 值,请对OutOfRangeMode 变量进行以下设置来组态 Output 参数的预分配Output 参数的允许值范围为 -3.402823e+38 到 3.402823e+38(REAL 数据类型)。每次执行Polyline 指令时,都将检查 Output 参数中输出值的有效性。如果插值计算生成了一个无效的REAL 值,则输出值将替换成 ErrorMode 变量中的设定值。使能行为 EN/ENO如果满足下列其中一个条件,则使能输出 ENO 将设为 FALSE。• 使能输入 EN 设为 TRUE 且 Output 参数由错误消息为 ErrorBits ≥ 16#0001_0000. 时的替代输出值指定• 使能输入 EN 设为 FALSE。否则,使能输出 ENO 设为 TRUE。当前使用的点NextXIndex 索引输出当前输入值的下一个较高 x 值的索引。可借此确定当前插值计算正在使用的点。WorkingData.Point[NextXIndex-1].x < Input ≤ WorkingData.Point[NextXIndex].x示例:• 如果 Input 参数的值介于 WorkingData.Point[3].x 和 WorkingData.Point[4].x 之间,则NextXIndex 变量的值为 4。• 如果 Input 参数的值小于 WorkingData.Point[1].x,则 NextXIndex 变量的值为 1。• 如果 Input 参数的值大于 WorkingData.Point[WorkingData.NumberOfUsedPoints].x,则NextXIndex 变量取 WorkingData.NumberOfUsedPoints + 1 变量的值。因此,NextXIndex变量的Zui大允许值为 51。Polyline 的输入参数参数 数据类型 默认值 说明Input REAL 0.0 输入值SubstituteOutputREAL 0.0 在下列情况下,SubstituteOutput 用作替代输出值• Reset = TRUE或• 存在影响插值计算结果正确性的错误(错误消息为 ErrorBits ≥16#0001_0000),ErrorMode 的组态值为 1 。Validate BOOL FALSE 如果 Validate 设为 TRUE,则 UserData 中的折线数据将进行有效性检查并传送至 WorkingData。ErrorAck BOOL FALSE 删除错误消息• 边沿 FALSE -> TRUEErrorBits 复位Reset BOOL FALSE 重新启动指令• 边沿 FALSE -> TRUEErrorBits 复位。• 只要 Reset 设为 TRUE,就会在输出中输出替代输出值 SubstituteOutput。• 只要 Reset 设为 FALSE,就会执行插值计算。 Polyline 的输出参数参数 数据类型 默认值 说明Output REAL 0.0 输出值Error BOOL FALSE Error 设为 TRUE 时,至少有一个错误当前处于未决状态。ErrorBits DWORD DW#16#0 ErrorBits 参数 (页 415)显示了处于未决状态的错误消息。ErrorBits 具有保持性,通过 Reset 或 ErrorAck 的上升沿复位。Polyline 的静态变量变量 数据类型 默认值 说明UserData AuxFct_PointTable- 折线数据的输入区域UserData 结构中的折线数据可以编辑。该结构中的更改并不会影响插值计算,直到数据被检查并复制到 WorkingData 结构。UserData.NumberOfUsedPoints INT 0 用于插值计算的点数允许的值范围:2 到 50UserData.Point Array[1..50] ofAuxFct_Point- 用于插值计算的点50 元素的数组,数据类型为 AuxFct_Point ,包含点的值对。UserData.Point[i] AuxFct_Point - 用于插值计算的点“Point”数组中索引为“i”的元素。UserData.Point[i].x REAL 0.0 点的 x 值允许的值范围:Point[i].x < Point[i+1].xUserData.Point[i].y REAL 0.0 点的 y 值变量 数据类型 默认值 说明WorkingData AuxFct_PointTable- 当前有效的折线数据的显示区域WorkingData 结构中的折线数据不可编辑。它用于插值计算。WorkingData.NumberOfUsedPoints INT 0 用于插值计算的点数允许的值范围:2 到 50WorkingData.Point Array[1..50] ofAuxFct_Point- 用于插值计算的点50 元素的数组,数据类型为 AuxFct_Point,包含点的值对。WorkingData.Point[i] AuxFct_Point - 用于插值计算的点“Point”数组中索引为“i”的元素。WorkingData.Point[i].x REAL 0.0 点的 x 值允许的值范围:Point[i].x < Point[i+1].xWorkingData.Point[i].y REAL 0.0 点的 y 值ErrorMode INT 0 选择出现错误后的替代输出值• 0 = Input• 1 = SubstituteOutput• 2 = 上一个有效输出值允许的值范围:0 到 2:OutOfRangeMode INT 0 选择输入值超出定义的 x 值范围时的输出值• 0 = 保持斜率• 1 = 第一个点/Zui后一个点的 y 值允许的值范围:0 到 1NextXIndex INT 2 下一个 x 值的索引用于监视当前插值计算正在使用的断点的索引。需要符合以下条件:WorkingData.Point[NextXIndex-1].x < Input ≤WorkingData.Point[NextXIndex].x请勿手动更改该值。错误消息为 ErrorBits < 16#0001_0000 的错误如果有一个或多个错误消息为 ErrorBits < 16#0001_0000 的错误处于未决状态,则 Polyline 的响应如下:• 即使存在此类错误,输出值也会通过如下方式确定:– 当 Reset = FALSE 时,通过插值计算– 当 Reset = TRUE 时,通过 SubstituteOutput 的输出• 输出参数 Error 已置位。• 使能输出 ENO 不变。不再有任何错误时,会立即删除输出参数 Error。错误原因和对错误的响应:Output 参数限制为 -3.402823e+38 或 +3.402823e+38。解决方案:如果在输出中输出插值(Reset = FALSE 且 ErrorBits < 16#0001_0000),则检查插值计算中使用的以下变量:• Input• WorkingData.Point[i].x• WorkingData.Point[i].y当 ErrorBits ≥ 16#0001_0000 且 Reset = FALSE 时,替代输出值限制为其输出。在这种情况下,根据ErrorMode 变量的设定值检查以下参数:• Input• SubstituteOutputReset = TRUE 时,检查 SubstituteOutput 参数。检查折线数据时,UserData 结构中有一个或多个变量的值无效(Validate = TRUE 和 Reset = FALSE)。对错误的响应:UserData 结构中的折线数据并不传送至 WorkingData 结构,从而使 UserData 结构中所做的更改不会生效。Polyline FB 继续使用 WorkingData 结构中未更改的有效折线数据进行插值计算。解决方案:当 Validate 参数设为TRUE 时,确保满足以下条件:• 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错误消息为 ErrorBits ≥ 16#0001_0000 的错误如果有一个或多个错误消息为 ErrorBits ≥ 16#0001_0000 的错误处于未决状态,则 Polyline 的响应如下:• 无法按预期确定输出值。将输出替代输出值。• 输出参数 Error 已置位。• 使能输出 ENO 设为 FALSE。一旦不再有任何错误消息为 ErrorBits ≥ 16#0001_0000 的错误,Polyline 的响应如下:• 输出值会通过如下方式确定:– 当 Reset = FALSE 时,通过插值计算– 当 Reset = TRUE 时,通过 SubstituteOutput 的输出• 使能输出 ENO 设为 TRUE。不再有任何错误时,会立即删除输出参数 Error。