업 카운터
펑션블록 CTU(업 카운트)는 카운팅 절차의 프로그래밍을 지원합니다.
최대 값 32767에 도달할 때까지 카운트 업은 0에서 시작합니다. 카운트 업 CU에서 각 상승 엣지는 현재 값 CV에서 값을 1만큼 증가시킵니다.
입력
카운트 업
CU에서 각 상승 엣지에 대해 값 1이 CV에 추가됩니다. 단, R가 설정된 경우는 제외합니다.
리셋(R)
R에서 상승 엣지는 현재 값 CV를 0과 카운팅 스탑으로 리셋합니다. 출력 Q가 FALSE로 설정됩니다.
R의 다음 하강 엣지가 카운팅을 다시 시작합니다.
프리셋값
CV가 PV와 같거나 그보다 크면, Q가 TRUE로 설정됩니다.
프리셋 값이 없거나 프리셋 값이 0인 경우, 카운팅이 시작한 직후 출력 Q가 TRUE로 설정됩니다.
출력
신호 출력
CV가 PV와 같거나 이보다 큰 경우 TRUE로 설정됩니다.
상승 엣지가 R에서 감지된 경우 FALSE로 설정됩니다.
현재 값
추가 결과 포함
CV가 프리셋 값 PV에 도달하면, 출력 Q가 TRUE로 설정되지만, 최대 한도 32767에 도달할 때까지 카운팅이 계속됩니다.
계산 연산 중에 프로그래밍 에디터에서 변수를 쓰면 값이 변경될 수 있습니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
CTU1: CTU;
bReset: BOOL:=FALSE;
(*sets CV to zero if TRUE*)
iPresetValue: INT:=3;
(*if CV reaches this value,
output Q is set*)
bUpCounting_PV_reached: BOOL:=FALSE;
(*is set, if CV reaches PV*)
iCurrentValue: INT:=0;
(*contains the current value*)
END_VAR
bReset이 설정된 경우(상태 = TRUE), iCurrentValue(CV)가 리셋됩니다. CU에서 상승 엣지가 감지되면 값 1이 iCurrentValue에 추가됩니다. CU에서 상승 엣지가 감지되면, iCurrentValue가 iPresetValue와 같거나 이보다 커질 때까지 이 절차가 반복됩니다. 그러면 bUpCounting_PV_reached가 TRUE로 설정됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,5,2,7,4,);
B(B_FB,CTU!,CTU1,12,1,17,6,,?BCU?BR?BPV?AQ?ACV);
B(B_COIL,,bUpCounting_PV_reached,23,2,25,4,);
B(B_CONTACT,,bReset,5,4,7,6,);
B(B_VAROUT,,iCurrentValue,18,4,20,6,);
B(B_VARIN,,iPresetValue,7,6,9,8,);
L(1,0,1,8);
L(1,3,5,3);
L(7,3,12,3);
L(17,3,23,3);
L(9,4,12,4);
L(9,4,9,5);
L(17,4,17,5);
L(1,5,5,5);
L(7,5,9,5);
L(10,5,12,5);
L(17,5,18,5);
L(10,5,10,7);
L(9,7,10,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CTU1(CU := sys_bPulse1s, R := bReset, PV := iPresetValue,
Q => bUpCounting_PV_reached,
CV => iCurrentValue);