입력 펄스 측정
이 명령은 특정 계산 기간과 펄스 주기로 입력 펄스 수를 측정합니다.
입력
고속 카운터 채널: 0–5
계산 기간 [ms]:
1–5000 (1ms–5s).
계산 기간 수: 1–5
펄스 주기 측정 단위
0: 펄스 주기 미측정
1: 펄스 주기가 ms로 측정됨
2: 펄스 주기가 ms로 측정됨
3: 펄스 주기가 ms와 ms로 측정됨
펄스 주기 측정의 타임아웃 값 [ms]:
0: 시간 초과 없음
1: 100ms
2: 200ms
3: 300ms
4: 500ms
출력
계산 기간당 펄스 평균수(계산 기간의 펄스 수/계산 기간 수)
펄스 주기m
펄스 주기 [ms]
입력 펄스 측정의 경우, 채널 번호, 계산 기간(1ms~5s) 및 계산 기간 숫자(1~5)를 지정해야 합니다. 이러한 파라미터는 계산 기간당 입력 펄스 평균수를 계산하는데 사용됩니다.
펄스 주기 측정 단위([ms], [ms] 또는 둘 다)를 지정할 수 있습니다.
측정 단위가 ms인 경우, 이 명령 실행 후 바로 펄스 주기가 측정되고 출력됩니다. 최대 약 174.4ms를 측정할 수 있습니다.
측정 단위가 ms인 경우, 펄스 주기 값은 매 측정 후 업데이트됩니다. 최대 약 49.7일을 측정할 수 있습니다. 측정이 완료되지 않은 경우, 측정된 펄스 주기가 -1이 설정된 후에 타임아웃 값을 지정할 수 있습니다.
명령 시작 후 첫 번째 계산 기간 중에 측정된 펄스 주기는 지정한 계산 기간 수에 도달할 때까지 -1로 설정됩니다.
펄스 주기가 측정 가능한 범위 이상이거나 측정이 완료되지 안으면 측정된 펄스 주기는 -1로 설정됩니다.
시스템 레지스터에서 원하는 채널의 고속 카운터 입력을 선택합니다.
이 명령을 사용하여 펄스 측정 실행 조건을 TRUE로 유지합니다.
측정이 중지하려면 실행 조건을 FALSE로 전환합니다.
고속 카운터 명령이 실행되면 사용한 채널의 고속 카운터 제어 플래그(예: sys_bIsHscChannel0ControlActive)는 TRUE로 전환됩니다. 같은 채널을 사용하여 다른 고속 카운터 명령을 실행하면 제어 플래그는 더 이상 TRUE가 아닙니다.
최대 두 채널에서 이 명령을 동시에 실행할 수 있습니다.
주 프로그램과 인터럽트 프로그램 모두에 같은 채널 코드가 포함된 경우, 두 프로그램을 동시에 실행하지 마십시오.
고속 카운터 제어 플래그 또는 펄스 출력 제어 플래그 상태는 스캔이 실행 중인 동안에 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.
고속 카운터 채널이 다른 고속 카운터 또는 펄스 출력 명령에서 이미 사용되고 있는 경우
사용한 채널 수가 3 이상인 경우
고속 카운터 채널이 다른 고속 카운터 또는 펄스 출력 명령에서 이미 사용되고 있는 경우
사용한 채널 수가 3 이상인 경우
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bStartMeasurement: BOOL:=FALSE;
diNumberOfPulses: DINT:=0;
diPulsePeriodTime_μs: DINT:=0;
diPulsePeriodTime_ms: DINT:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F178_HighSpeedCounter_Measure!,Instance,25,1,53,9,,?DEN?Ds1_iHscChannel?Ds2_NumberOfPulses_iPeriodTime_ms?Ds1_NumberOfPulses_iNumberOfPeriods?Ds1_PulsePeriod_iMeasurementMethod?Ds1_PulsePeriod_iTimeoutValueOf1msUnitOutput?AENO?Ad_NumberOfPulses_diAverage?Ad_PulsePeriod_diTime_μs?Ad_PulsePeriod_diTime_ms);
B(B_VARIN,,0,23,3,25,5,);
B(B_VARIN,,10,23,4,25,6,);
B(B_VARIN,,5,23,5,25,7,);
B(B_VARIN,,SYS_F178_HSC_MEASUREMENT_μs_ms,23,6,25,8,);
B(B_VARIN,,0,23,7,25,9,);
B(B_VAROUT,,diNumberOfPulses,53,3,55,5,);
B(B_VAROUT,,diPulsePeriodTime_μs,53,4,55,6,);
B(B_VAROUT,,diPulsePeriodTime_ms,53,5,55,7,);
B(B_CONTACT,,bStartMeasurement,9,2,11,4,);
L(1,3,9,3);
L(11,3,25,3);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (bStartMeasurement) then
F178_HighSpeedCounter_Measure(s1_iHscChannel := 0,
s2_NumberOfPulses_iPeriodTime_ms := 10,
s1_NumberOfPulses_iNumberOfPeriods := 5,
s1_PulsePeriod_iMeasurementMethod := SYS_F178_HSC_MEASUREMENT_μs_ms,
s1_PulsePeriod_iTimeoutValueOf1msUnitOutput := 0,
d_NumberOfPulses_diAverage => diNumberOfPulses,
d_PulsePeriod_diTime_μs => diPulsePeriodTime_μs,
d_PulsePeriod_diTime_ms => diPulsePeriodTime_ms);
END_IF;