불연속 값의 선형 보간 수행
이 FP 명령은 인접 참조점 Pw(xw, yw) 및 Pw+1(xw+1, yw+1)을 토대로 선형 보간을 수행하여 x 위치에서 y 값을 렌더링합니다. 이 예에서 w는 x 값이 s1_x 입력 변수보다 작은 가장 가까운 참조점입니다. 즉, 펑션은 일련의 개별 참조점을 연결하고 s1_x 입력값을 토대로 d_y 출력값을 렌더링합니다.
입력
입력값
16비트 PLC 기종에서: (INT, DINT, REAL)
32비트 PLC 기종에서: (INT, DINT, UINT, UDINT, REAL, LREAL)
사용자 정의된 DUT의 첫 번째 요소를 적용합니다(즉, 이 입력에 대한 xy 값의 번호). 아래 DUT 구조 설명을 참조해 주십시오.
출력
결과
16비트 PLC 기종에서: (INT, DINT, REAL)
32비트 PLC 기종에서: (INT, DINT, UINT, UDINT, REAL, LREAL)
용도 예:
측정값 선형화(예: 비 선형 센서 사용)
외부 온도 x와 관련된 히터 흐름 온도 y 렌더링
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
참조점의 수가 2~256의 범위를 벗어나는 경우.
s2_xyData가 범위를 벗어나는 경우
참조점 x 값이 오름차순이 아닌 경우
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
참조점의 수가 2~256의 범위를 벗어나는 경우.
s2_xyData가 범위를 벗어나는 경우
참조점 x 값이 오름차순이 아닌 경우
x 입력값이 첫 번째 참조점의 x 좌표보다 작은 경우(P1: x< x1), 출력 y 는 첫 번째 참조점 y 좌표로 설정됩니다(출력 y = y1, 그래프 왼쪽 상단 구석의 가로 점선).
x 입력값이 마지막 참조점의 x 좌표보다 큰 경우(P8: x > x8), 출력 y 는 마지막 참조점 y 좌표로 설정됩니다(출력 y = y8, 그래프 왼쪽 오른쪽 구석의 가로 점선).
xy 값 쌍의 DUT(참조점 P1, P2, ...):
참조점(P1, P2, ...)은 참조점 수와 xy 값 쌍(숫자, x1, x2, ..., y1, y2, ...)이 포함된 DUT 형식 변수를 통해 펑션에 복사됩니다.
요소: 데이터 형식 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 기종에서: x 값이 포함된 (INT, DINT, UINT, UDINT, REAL)). 여기서 z는 참조점 수의 위치 마커를 나타냅니다(엔트리 1 참조).
요소: 데이터 형식 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 기종에서: y 값이 포함된 (INT, DINT, UINT, UDINT, REAL)). 여기서 z는 참조점 수의 위치 마커를 나타냅니다(엔트리 1 참조).
FP_SCALE은 다음 데이터 형식을 지원합니다.
16비트 PLC 기종에서(FP-Sigma, FP-X): INT, DINT, REAL
32비트 PLC 기종에서(FP7): INT, DINT, REAL, UINT, UDINT
해당 F 명령: 2022-09-19F282_SCAL, F283_DSCAL, F354_FSCAL
구조체(DUT)를 사용하여 다른 데이터 형식으로 구성된 구조체를 정의할 수 있습니다. DUT는 먼저 DUT 풀에서 정의된 후 POU 헤더의 전역 변수 목록에서 표준 데이터 형식(BOOL, INT 등)으로 처리됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bStart: BOOL:=FALSE;
iInput: INT:=50;
xy_data: xy_data_dut;
iScaledOutput: INT:=0;
@'': @'';
END_VAR
변수 bStart가 TRUE로 설정되면 펑션이 실행됩니다.
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
IF (bStart) then
FP_SCALE(s1_x := iInput,
s2_xyData := xy_data.iNumberOfValues,
d_y => iScaledOutput);
END_IF;