F165_HighSpeedCounter_Cam

Controllo Cam per FP0R

Tale istruzione esegue il controllo Cam secondo i parametri nella DUT specificata con un massimo di 31 valori target per il contatore veloce. Un programma di interrupt può essere eseguito ogni volta che il valore corrente corrisponde a uno dei valori target.

Parametri

Ingresso

iHscChannel* (INT)

Canale contatore veloce: 0–5

s_dutDataTable (ANY_DUT)

Indirizzo di partenza dell'area contenente la tabella dati

Esempio: F165_HighSpeedCounter_Cam_8_Values_DUT

Uscita

dutBitOutputs (ANY_DUT)

Indirizzo iniziale (WR) dell'area contenente l'indirizzo word di uscita, p.es. BOOL32_OVERLAPPING_DUT. Scegliere la dimensione (16 o 32 bit) in base al numero impostato con diNumberOfTargetValuesAndOutputRelays.

Note

Creare la propria DUT usando la seguente DUT come modello: F165_HighSpeedCounter_Cam_8_Values_DUT

Nella DUT possono essere specificati i seguenti parametri:

  • Codice di controllo

  • Indirizzo word per uscite

  • Numero di valori target

  • Valore target1

  • ...

  • Valore targetn

  • Maximum target value

y

Valore corrente del contatore veloce

14000

Maximum target value

(1)

Condizione di esecuzione

10000

Valore target4

(2)

Flag di controllo del contatore veloce

8000

Valore target3

(3)

Uscita0-4

4000

Valore target2

2000

Valore target1

  • Quando il valore corrente è compreso nell'area del valore target da n a n+1 (conteggio avanti) o da n+1 a n (conteggio indietro), l'uscita corrispondente n è TRUE.

  • Nell'esempio sopra riportato, il controllo del valore di target massimo è abilitato. Quando il valore corrente raggiunge il valore target massimo, il valore corrente è reimpostato su 0 e il conteggio riparte.

  • Specificate l'indirizzo word delle uscite in una DUT sovrapposta, p.es. BOOL32_OVERLAPPING_DUT, e applicate tale DUT a dutBitOutputs.

  • È possibile specificare un massimo di 31 valori target.

  • I valori target devono essere disposti in ordine crescente. Non è possibile utilizzare un valore due volte.

  • Quando l'istruzione inizia, tutte le uscite sono FALSE eccetto l'uscita 0, che passa a TRUE a condizione che il valore corrente sia inferiore al valore target 1. In caso contrario, l'uscita corrispondente all'area del valore target passa a TRUE. Esempio: Se il valore corrente è compreso tra il valore target 2 = -4000 e il valore target 3 = +4000, l'uscita 2 è TRUE. Nell'esempio seguente, il controllo del valore target massimo è stato disabilitato. Quando il valore corrente raggiunge l'ultimo valore target, il conteggio continua e il valore corrente non viene reimpostato su 0.

y

Valore corrente del contatore veloce

8000

Valore target4

(1)

Condizione di esecuzione

4000

Valore target3

(2)

Flag di controllo del contatore veloce

-4000

Valore target2

(3)

Uscita0-4

-10000

Valore target1

INT0

Programma di interrupt 0

Controllo del valore target massimo

  • L'istruzione può essere eseguita utilizzando il controllo del valore target massimo per resettare il valore corrente a 0 quando è stato raggiunto il valore target massimo. Il controllo del valore target massimo può essere abilitato nel codice di controllo di F165_HighSpeedCounter_Cam_8_Values_DUT. Anziché utilizzare il controllo del valore target massimo, è anche possibile resettare il valore corrente utilizzando un ingresso di reset o un reset software.

  • Per eseguire il controllo del valore target massimo è necessario specificare numeri positivi interi per tutti i valori target.

  • Conteggio avanti e indietro con il controllo del valore target massimo:

y

Valore corrente del contatore veloce

14000

Maximum target value

(1)

Condizione di esecuzione

10000

Valore target4

(2)

Flag di controllo del contatore veloce

8000

Valore target3

(3)

Uscita0-4

4000

Valore target2

2000

Valore target1

Visione d'insieme:

Controllo del valore target massimo:

abilitato

disabilitato (vedere la nota)

Conteggio avanti:

il puntatore della tabella dati si sposta dal valore target 1 all'ultimo valore target.

Quando il valore corrente raggiunge il valore target massimo:

  • il puntatore torna al valore target 1

  • l'uscita 0 passa a TRUE

  • il valore corrente viene impostato su 0

Quando il valore corrente raggiunge l'ultimo valore target:

  • il puntatore torna al valore target 1

  • l'uscita 0 passa a TRUE

  • il valore corrente continua ad incrementare e riparte dal valore minimo del contatore ciclico

Conteggio indietro:

il puntatore della tabella dati si sposta dall'ultimo valore target al valore target 1.

Quando il valore corrente raggiunge il valore -1:

  • il puntatore torna all'ultimo valore target

  • l'uscita corrispondente all'ultimo valore target passa a TRUE

  • il valore corrente viene impostato sul valore target massimo

Quando il valore corrente raggiunge il valore -1:

  • il puntatore torna al valore target n

  • l'uscita corrispondente all'ultimo valore target passa a TRUE

  • il valore corrente continua a decrescere e riparte dal valore massimo del contatore ciclico

NOTA

Ciò vale a condizione che non sia in uso né un ingresso di reset né un reset software.

Operazione di reset hardware

Canale

Ingresso di reset hardware

0

X2

1

2

X5

3

Operazione di interrupt

Il programma di interrupt viene eseguito quando il valore corrente corrisponde al valore target Ogni interrupt inserito nella lista dei Task viene automaticamente abilitato. Ad ogni numero di canale è assegnato uno speciale numero di programma di interrupt.

Canale

0

1

2

3

4

5

Programma di interrupt

0

1

3

4

6

7

Informazione generale di programmazione

  • Selezionate l'ingresso del contatore veloce per il canale desiderato nei registri di sistema.

  • 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'esecuzione delle istruzioni di uscita ad impulsi si interrompe mettendo il bit 3 del registro dati nel quale è memorizzato il codice di controllo per il contatore veloce (sys_wHscOrPulseControlCode) su TRUE. Allora il flag di controllo del contatore veloce passa a FALSE. Per riabilitare l'esecuzione dell'istruzione del contatore veloce, riportare il bit 3 a FALSE.

  • La riscrittura del valore corrente per il canale utilizzato durante l'esecuzione dell'istruzione può causare un funzionamento imprevisto.

  • Assicuratevi che l'intervallo di tempo tra valori target vicini sia maggiore di 1ms.

  • Se l'istruzione viene eseguita nel programma principale, assicuratevi che l'intervallo di tempo minimo tra valori target vicini sia maggiore del tempo di scansione.

  • Se l'istruzione viene eseguita in un programma di interrupt, assicuratevi che l'intervallo di tempo minimo tra valori target vicini sia maggiore del tempo di esecuzione massimo del programma di interrupt.

  • Questa istruzione può essere eseguita simultaneamente su un massimo di due canali.

  • In caso di utilizzo di un ingresso di reset o un reset software, assicuratevi che il valore target 1 sia un numero intero e ³ 1.

  • Quando il controllo del valore target massimo viene utilizzato insieme ad un ingresso di reset o ad un reset software, fate attenzione a non utilizzarli 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.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se il numero di canale o valori della tabella dati sono fuori del campo ammissibile
  • se il contatore veloce non è stato impostato nei registri di sistema
  • se il valore target > valore target massimo.

  • se il valore target = 0.

  • se i valori target non sono disposti in ordine crescente

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se il numero di canale o valori della tabella dati sono fuori del campo ammissibile
  • se il contatore veloce non è stato impostato nei registri di sistema
  • se il valore target > valore target massimo.

  • se il valore target = 0.

  • se i valori target non sono disposti in ordine crescente

Esempio con controllo del valore target massimo

DUT

La DUT F165_HighSpeedCounter_Cam_8_Values_DUT è predefinita nella FP Library e può essere utilizzata come esempio.

Variabili globali

Nella lista variabili globali si definiscono variabili alle quali possono accedere tutti i POU del progetto.

Intestazione del POU

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
		bStartCam: BOOL:=FALSE;
		dut_F165_CAM_Example1: F165_Cam_Example1_4_Values_DUT;
	END_VAR
	VAR_EXTERNAL
		WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
	END_VAR

Corpo del POU

Quando la variabile bStartCam passa a TRUE, la funzione viene eseguita.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example1,12,4,14,6,);
B(B_VAROUT,,WR1_dut_CAM1,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF (sys_bIsFirstScan) then
    sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, 
      s_dutDataTable := dut_F165_CAM_Example1, 
      dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;

Esempio senza controllo del valore target massimo

DUT

La DUT F165_HighSpeedCounter_Cam_8_Values_DUT è predefinita nella FP Library e può essere utilizzata come esempio.

Intestazione del POU

VAR
		bStartCam: BOOL:=FALSE;
		dut_F165_CAM_Example2: F165_Cam_Example2_4_Values_DUT;
	END_VAR
	VAR_EXTERNAL
		WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
	END_VAR

Corpo del POU

Quando la variabile bStartCam è impostata su TRUE, la funzione viene eseguita.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example2,12,4,14,6,);
B(B_VAROUT,,WR0_bits_F165_CAM_Examples,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(7,3,14,3);
L(1,3,5,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF (sys_bIsFirstScan) then
    sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, 
      s_dutDataTable := dut_F165_CAM_Example2, 
      dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;

L'ultima revisione: 2022-06-28Feedback su questa paginaPanasonic hotline