Misurazione periodo impulsi in ingresso
Questa istruzione misura il numero di impulsi di ingresso in un determinato periodo di conteggio ed il periodo degli impulsi.
Ingresso
Canale contatore veloce: 0–5
Periodo di conteggio [ms]:
1–5000 (1ms–5s).
Numero di periodi di conteggio: 1–5
Unità di misurazione del periodo degli impulsi
0: Il periodo degli impulsi non viene misurato
1: Il periodo degli impulsi viene misurato in ms
2: Il periodo degli impulsi viene misurato in ms
3: Il periodo degli impulsi viene misurato in ms e ms
Valore di timeout della misurazione del periodo degli impulsi [ms]:
0: nessun timeout
1: 100ms
2: 200ms
3: 300ms
4: 500ms
Uscita
Numero medio di impulsi per periodo di conteggio (n. di impulsi nel periodo di conteggio/numero di periodi di conteggio)
Periodo degli impulsi m
Periodo degli impulsi [ms]
Per la misurazione degli impulsi di ingresso si devono specificare il numero di canale, il periodo di conteggio (1ms–5s) e il numero di periodi di conteggio (1–5). Tali parametri vengono usati per calcolare il numero medio di impulsi di ingresso per periodo di conteggio.
L'unità per la misurazione del periodo di impulsi ([ms], [ms] o entrambi) viene stabilita dall'utente.
Se la misurazione è in ms, il periodo degli impulsi viene misurato e restituito immediatamente al momento dell'esecuzione di questa istruzione. È possibile misurare un massimo di 174.4ms circa.
Se la misurazione è in ms, il valore del periodo degli impulsi viene aggiornato dopo ogni misurazione. È possibile misurare un massimo di 49.7 giorni circa. È possibile specificare un valore di timeout trascorso il quale il periodo degli impulsi misurato viene impostato su -1 se la misurazione non è stata completata.
Durante i primi periodi di conteggio dopo l'inizio dell'istruzione, il periodo degli impulsi misurato viene impostato su -1 fino a quando viene raggiunto il numero di periodi di conteggio specificato.
Se il periodo degli impulsi è più lungo dell'intervallo misurabile o se la misurazione non è stata completata, il periodo degli impulsi misurato viene impostato su -1.
Selezionate l'ingresso del contatore veloce per il canale desiderato nei registri di sistema.
Mantenete la condizione di esecuzione TRUE per la misurazione degli impulsi con questa istruzione.
Per fermare la misurazione, impostate la condizione di esecuzione su FALSE.
Quando viene eseguita un'istruzione contatore veloce, il flag di controllo del contatore veloce (p.es. sys_bIsHscChannel0ControlActive) per il canale utilizzato passa a TRUE. Finché il flag di controllo è TRUE, non è possibile eseguire nessun'altra istruzione contatore veloce utilizzando lo stesso canale.
L'istruzione può essere eseguita simultaneamente su un massimo di due canali.
Se sia il programma principale sia il programma di interrupt contengono un codice per lo stesso canale, essi non devono poter esser eseguiti contemporaneamente.
Lo stato del flag di controllo del contatore veloce o del flag di controllo dell'uscita ad impulsi può variare durante lo svolgimento di una scansione. For example, if the number of received bytes is read more than once different statuses may exist within one scan.
se il canale contatore veloce è già utilizzato da un'altra istruzione contatore veloce o uscita ad impulsi
se il numero di canali utilizzati è 3 o superiore
se il canale contatore veloce è già utilizzato da un'altra istruzione contatore veloce o uscita ad impulsi
se il numero di canali utilizzati è 3 o superiore
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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;