불연속 INT 값의 선형 보간
이 명령은 인접 참조점 Pw(xw, yw) 및 Pw+1(xw+1, yw+1)을 토대로 선형 보간을 수행하여 x 위치에서 y 값을 렌더링합니다. 이 예에서 w는 x 값이 x 입력 변수보다 작은 가장 가까운 참조점입니다. 즉, 펑션은 일련의 개별 참조점을 연결하고 x 입력값을 토대로 y 출력값을 렌더링합니다.
입력
펑션 활성화(EN = TRUE인 경우, 펑션은 각 PLC 주기 동안 실행됨)
입력값 x
사용자 정의된 DUT의 첫 번째 요소를 적용합니다(즉, 이 입력에 대한 xy 값의 번호). 아래 DUT 구조 설명을 참조해 주십시오.
출력
출력값 y
ENO는 펑션이 실행되자마자 TRUE로 설정됩니다. 펑션블럭이 EN 펑션과 중복 표시되는 경우에 유용합니다.
F 명령을 사용하는 대신 해당 FP7 명령을 사용하는 것이 좋습니다.FP_SCALE 불연속 값의 선형 보간 수행
이 펑션을 다음과 같은 경우에 사용할 수 있습니다.
측정값 선형화(예: 비 선형 센서 사용)
외부 온도 x와 관련된 히터 흐름 온도 y 렌더링
등
참조점 수가 2 ... 100 사이가 아니거나 x 값이 오름차순(x1 < x2 < x3 < ...)이 아닌 경우.
참조점 수가 2 ... 100 사이가 아니거나 x 값이 오름차순(x1 < x2 < x3 < ...)이 아닌 경우.
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 형식 변수를 통해 펑션에 복사됩니다.
요소: x 값(ARRAY[1..z] OF INT 또는 ARRAY[0..z-1] of INT)
요소: y 값(ARRAY[1..z] OF INT 또는 ARRAY[0..z-1] of INT)
중요 정보:
x 값
x 값을 오름차순(x1 < x2 < x3 < ...)으로 입력해야 합니다. x 값이 같으면(예: x2 = x3 = x4) 참조점 P2(x2, y2)와 P3(x3, y3)는 무시됩니다.
계산 시 오버플로우를 방지하려면 인접 참조점이 다음 조건을 충족해야 합니다.
|ya - yb| < 32767 |x - xb| < 32767 |(ya - yb)*(x - xb)| < 32767 |xa - xb| < 32767 |
이 펑션은 정수만 처리할 수 있습니다. y 값 계산 시 소수점 다음의 숫자는 배제됩니다. 예를 들어, 위치 y, x = 511,13인 경우, 펑션은 511 값을 반환합니다.
DUT 풀에서 참조점 수와 xy 값 쌍이 선언됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*avtivates the function*)
input_value: INT:=0;
(*input_value x*)
measured_value: Interpolation_8 (X_values := [-5,5,15,20,30,42,45,50],Y_values := [5,-5,10,2,2(5),0,2]);
(*number of reference
points*)
output_value: INT:=0;
(*output_value y*)
@'': @'';
END_VAR
여기서 입력 변수 measured_value가 선언되었고, 위에서 정의한 DUT 형식과 일치합니다. x 값 및 y 값 할당은 POU 헤더에서 수행되었습니다. 하지만 변수에 값을 할당하여 본문의 x 값과 y 값을 변경할 수 있습니다(예: x의 Measuredvalues.X_Values[1]).
변수 start가 TRUE로 설정되면 펑션이 실행됩니다. x 위치에서의 입력값의 경우, 출력값 y는 measured_value 변수에 저장된 인접 참조점 선형 보간을 통해 계산됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F282_SCAL!,Instance,15,0,22,5,,?DEN?Dx?Dxy_data?AENO?Cy);
B(B_VARIN,,input_value,13,2,15,4,);
B(B_VARIN,,measured_value.referencepoints,13,3,15,5,);
B(B_VAROUT,,output_value,22,2,24,4,);
B(B_CONTACT,,start,6,1,8,3,);
L(8,2,15,2);
L(1,2,6,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F282_SCAL(input_value, measured_value.referencepoints, output_value);
END_IF;