시스템 변수 sys_wHscOrPulseControlCode를 사용하여 고속 카운터와 펄스 출력 제어 코드가 저장된 특수 데이터 레지스터에 액세스할 수 있습니다. (시스템 변수 sys_wHscOrPulseControlCode는 특수 데이터 레지스터 DT90052에 해당됩니다.)
고속 카운터 제어 코드로 수행한 작업
명령 실행을 취소하려면 고속 카운터 제어 코드(sys_wHscOrPulseControlCode)를 저장하는 데이터 레지스터의 비트 3을 TRUE로 설정합니다. 그러면 고속 카운터 제어 플래그는 FALSE로 변경됩니다. 고속 카운터 명령 실행을 다시 활성화하려면 비트 3을 FALSE로 초기화합니다.
X0 고속 카운터 입력
제어 코드의 비트 2가 TRUE로 설정되면 시스템 레지스터에서 지정한 리셋 입력을 사용하는 하드웨어 리셋은 불가능합니다. 리셋 입력이 TRUE로 전환되더라도 계산은 계속 진행됩니다. 비트 2가 0으로 초기화될 때까지 하드웨어 리셋은 비활성화됩니다.
계산 입력 제어 연산
X0 고속 카운터 입력
제어 코드의 비트 1을 TRUE로 설정하면 계산이 금지되고 경과 값은 현재 값을 유지합니다. 비트 1을 FALSE로 초기화하면 계산이 계속 됩니다.
X0 고속 카운터 입력
제어 코드의 비트 0을 TRUE로 설정하면 소프트웨어 리셋이 수행되고 경과 값은 0으로 설정됩니다. 비트 0이 FALSE로 초기화될 때까지 경과 값은 값 0을 유지합니다.
제어 코드의 비트 0~15는 그룹 4개에 할당됩니다. 각 그룹의 비트 설정은 16진수로 표현됩니다(예: 00020000 0000 1001 = 16#2009).
0: 계속/1: 취소
0: 유효/1: 무효
0: 허용/1: 금지
0: 아니요/1: 예
예: 16#2009
그룹 |
값 |
설명 |
|
---|---|---|---|
IV |
2 |
채널 번호: 2 |
|
III |
0 |
(고정) |
|
II |
0 |
(고정) |
|
I |
9 |
16진수 9는 이진 1001에 해당됨 |
|
고속 카운터 명령 취소: 취소(비트 3) |
1 |
||
리셋 입력: 활성화(비트 2) |
0 |
||
계산: 허용(비트 1) |
0 |
||
경과 값을 0으로 초기화: 예(비트 0) |
1 |
제어 코드의 비트 0~15는 그룹 4개에 할당됩니다. 각 그룹에는 1채널 설정이 포함되어 있습니다. 각 그룹의 비트 설정은 16진수로 표현됩니다(예: 0000 0000 1001 0000 = 16#90).
0: 계속/1: 취소
0: 유효/1: 무효
0: 허용/1: 금지
0: 아니요/1: 예
그룹 |
IV |
III |
II |
I |
채널 |
3 |
2 |
1 |
0 |
그룹 |
값 |
설명 |
|
---|---|---|---|
IV |
0 |
– |
|
III |
0 |
– |
|
II |
9 |
채널 번호: 1 16진수 9는 이진 1001에 해당됨 |
|
고속 카운터 명령 취소: 취소(비트 3) |
1 |
||
리셋 입력: 활성화(비트 2) |
0 |
||
계산: 허용(비트 1) |
0 |
||
경과 값을 0으로 초기화: 예(비트 0) |
1 |
||
I |
0 |
– |
리셋 입력이 TRUE로 전환되면 경과 값을 0으로 설정해 주십시오. 리셋 입력 설정(비트 2)을 사용하여 시스템 레지스터에 할당된 리셋 입력을 비활성화해 주십시오.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bSoftwareReset: BOOL:=FALSE;
(*Activates the function*)
END_VAR
VAR CONSTANT
HSC_CH0_RESET_ELAPSED_VALUE: WORD:=16#0001;
(*Resets elapsed value of channel 0*)
HSC_CH0_CONTINUE: WORD:=16#0000;
(*Continues counting in channel 0*)
END_VAR
VAR
END_VAR
리셋은 1단계에서 수행되고 2단계에서 계산이 시작된 직후에 0이 입력됩니다. 리셋 단독으로 계산이 시작되지 않습니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,HSC_CH0_RESET_ELAPSED_VALUE,22,2,24,4,);
B(B_CONTACT,,bSoftwareReset,5,1,7,3,R);
B(B_VARIN,,HSC_CH0_CONTINUE,22,6,24,8,);
B(B_F,E_MOVE!,Instance,24,0,30,4,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,30,2,32,4,);
B(B_F,E_MOVE!,Instance,24,4,30,8,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,30,6,32,8,);
L(1,2,5,2);
L(7,2,8,2);
L(8,2,24,2);
L(8,6,24,6);
L(8,2,8,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if DF(bSoftwareReset) then
sys_wHscOrPulseControlCode:=HSC_CH0_RESET_ELAPSED_VALUE;
sys_wHscOrPulseControlCode:=HSC_CH0_CONTINUE;
end_if;
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bSoftwareReset: BOOL:=FALSE;
(*Activates the function*)
END_VAR
VAR CONSTANT
HSC_CH1_RESET_ELAPSED_VALUE: WORD:=16#1001;
(*Resets elapsed value of channel 1*)
HSC_CH1_CONTINUE: WORD:=16#1000;
(*Continues counting in channel 1*)
END_VAR
VAR
END_VAR
리셋은 1단계에서 수행되고 2단계에서 계산이 시작된 직후에 0이 입력됩니다. 리셋 단독으로 계산이 시작되지 않습니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,HSC_CH1_RESET_ELAPSED_VALUE,24,2,26,4,);
B(B_CONTACT,,bSoftwareReset,5,1,7,3,R);
B(B_VARIN,,HSC_CH1_CONTINUE,24,6,26,8,);
B(B_F,E_MOVE!,Instance,26,0,32,4,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,32,2,34,4,);
B(B_F,E_MOVE!,Instance,26,4,32,8,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,32,6,34,8,);
L(1,2,5,2);
L(7,2,8,2);
L(8,2,26,2);
L(1,0,1,8);
L(8,6,26,6);
L(8,2,8,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if DF(bSoftwareReset) then
sys_wHscOrPulseControlCode:=HSC_CH1_RESET_ELAPSED_VALUE;
sys_wHscOrPulseControlCode:=HSC_CH1_CONTINUE;
end_if;