켜짐 지연이 있는 타이머
펑션블럭 TON을 사용하면 켜짐 지연을 프로그램할 수 있습니다.
입력
타이머 ON
IN에서 상승 엣지가 감지될 때마다 내부 타이머 시작
켜짐 지연(PT = 사전 설정 시간)
16비트 값: 0~327.27s
32비트 값: 0~21,474,836.47s(FP3, FPC, FP5, FP10/10S에 32비트를 사용할 수 없습니다.)
각 해상도 10ms
출력
신호 출력
PT = ET인 경우 TRUE로 설정
경과 시간
경과 시간의 현재 값을 나타냄
계산 연산 중에 프로그래밍 에디터에서 변수를 쓰면 값이 변경될 수 있습니다.
Q는 PT에서 정의한 시간으로 지연 설정됩니다. 지연되지 않고 초기화됩니다.
지연 기간 PT 또는 짧은 기간(t3 - t2 < PT)에 대해 입력 IN만 설정되면 Q는 설정되지 않습니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
copy_name: TON;
start: BOOL:=FALSE;
set_value: TIME:=T#0s;
signal_output: BOOL:=FALSE;
current_value: TIME:=T#0s;
END_VAR
start가 설정되면(상태 = TRUE) 입력 신호는 기간 set_value만큼 지연되어 signal_output에 전송됩니다.
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,,start,3,2,5,4,);
B(B_VARIN,,set_value,7,3,9,5,);
B(B_VAROUT,,current_value,14,3,16,5,);
B(B_COIL,,signal_output,21,2,23,4,);
B(B_FB,TON!,copy_name,9,1,14,5,,?BIN?BPT?AQ?AET);
L(1,3,3,3);
L(1,0,1,6);
L(5,3,9,3);
L(14,3,21,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
copy_name( IN:= start ,
PT:= set_value ,
Q=> signal_output ,
ET=> current_value );
명령 목록에서 펑션블럭을 호출하려면 다음을 입력합니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
TOF1: TOF;
tPT: TIME:=T#10s;
tET: TIME:=T#0s;
bIN: BOOL:=FALSE;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
bIN의 하강 엣지 후 타이머는 카운트를 시작하고 Q는 TRUE로 설정됩니다. 타이머 값이 경과되기 전에 bEmergencyStop이 TRUE로 설정되면 카운팅이 정지하고 출력 Q가 즉시 초기화됩니다. 이 예에서 타이머는 사전 설정 시간 PT(10초)로 초기화됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,tPT,14,2,16,4,);
B(B_VAROUT,,TOF1.ET,22,2,24,4,);
B(B_CONTACT,,bIN,11,1,13,3,N);
B(B_CONTACT,,bEmergencyStop,6,1,8,3,);
L(1,2,6,2);
L(13,2,16,2);
L(8,2,11,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_FB,TOF!,TOF1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,6,2,8,4,);
B(B_COIL,,bQ,34,2,36,4,);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(21,3,27,3);
L(29,3,34,3);
L(8,3,16,3);
L(1,3,6,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND NOT bIN) then
TOF1.ET:=tPT;
end_if;
TOF1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TOF1.Q;