FP_SCALE

执行离散值的线性插补

此FP指令根据相邻参考点Pw(xw, yw)Pw+1(xw+1, yw+1)执行线性插补,以此渲染位置x的值y。在此例中,w是最近的参考点,其x值小于输入值s1_x,即此函数将单个参考点串联并根据输入值s1_x渲染输出值d_y

参数

输入

s1_x

输入值

  • 在16位PLC类型上:(INT, DINT, REAL)

  • 在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL, LREAL)

s2_xyData(用户定义的DUT;INT、UINT、WORD (ANY16))

将用户自定义DUT的第一个元素(即xy值的数量)应用到此输入。请参阅以下DUT结构的描述。

输出

d_y

结果

  • 在16位PLC类型上:(INT, DINT, REAL)

  • 在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL, LREAL)

标注

应用示例:

  • 例如使用非线性传感器线性化测量值

  • 相对于外部温度x渲染加热器的流动温度y

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果参考点的数量超出2–256的范围。

  • 如果s2_xyData超出范围。

  • 如果参考点的x值不是升序。

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果参考点的数量超出2–256的范围。

  • 如果s2_xyData超出范围。

  • 如果参考点的x值不是升序。

输出值y的限制:

  • 如果输入值x 小于第一个参考点的x坐标(P1x< x1),输出y 将设置为第一个参考点的y坐标(输出y = y1,图形左上角的水平虚线)。

  • 如果输入值x大于最后一个参考点的x坐标(P8x > x8),输出y 将设置为最后一个参考点的y坐标(输出y = y8,图形右上角的水平虚线)。

xy值对(参考点P1P2...)的DUT:

参考点(P1P2...)通过包含参考点数量和xy值对(数量;x1x2...;y1y2;...)的DUT类型变量而复制到函数。

用户自定义DUT的结构:

  1. 元素:参考点的数量z INT)。参考点(xy值对)的数量可以在2~100之间任意设置。在图中,使用八个参考点(P1~P8)。
  2. 元素:数据类型ARRAY[1..z] OF INT的变量(在16位PLC类型上:INT, DINT, REAL;在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL))或ARRAY[0..z-1] of INT(在16位PLC类型上:INT, DINT, REAL;在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL)),包含x值。此处z代表参考点数量的放置标记(见项目1)。

  3. 元素:数据类型ARRAY[1..z] OF INT的变量(在16位PLC类型上:INT, DINT, REAL;在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL))或ARRAY[0..z-1] of INT(在16位PLC类型上:INT, DINT, REAL;在32位PLC类型上: (INT, DINT, UINT, UDINT, REAL)),包含y 值。此处z代表参考点数量的放置标记(见项目1)。

注释

FP_SCALE支持以下数据类型:

  • 在16位PLC类型上(FP-Sigma、FP-X):INTDINTREAL

  • 在32位PLC类型上(FP7):INT, DINT, REAL, UINT, UDINT

相关主题

相应的F型指令:F282_SCAL, F283_DSCAL, F354_FSCAL

系统指令

指令窗格

内存区

数据类型

示例

DUT

使用数据单元类型(DUT),可以定义由其他数据类型组成的数据单元类型。DUT首先在DUT池中定义,然后像全局变量列表或POU头中的标准数据类型(BOOLINT等)一样进行处理。

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。

VAR
		bStart: BOOL:=FALSE;
		iInput: INT:=50;
		xy_data: xy_data_dut;
		iScaledOutput: INT:=0;
		@'': @'';
	END_VAR

POU本体

当变量bStart设置为TRUE时,执行此函数。

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,4,2,6,4,);
B(B_F,FP_SCALE!,,17,1,25,6,,?DEN?Ds1_x?Ds2_xyData?AENO?Cd_y);
B(B_VARIN,,iInput,15,3,17,5,);
B(B_VAROUT,,iScaledOutput,25,3,27,5,);
B(B_VARIN,,xy_data.iNumberOfValues,15,4,17,6,);
L(1,0,1,6);
L(1,3,4,3);
L(6,3,17,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF (bStart) then
    FP_SCALE(s1_x := iInput, 
             s2_xyData := xy_data.iNumberOfValues, 
             d_y => iScaledOutput);
END_IF;

最后更新日期: 此页面上的反馈松下热线