FP_DEBOUNCE

Debounce dei dati tramite filtraggio dei bit per un determinato periodo

Questa istruzione FP svolge l’esecuzione del filtro per i bit specificati per assicurare che il segnale sia stabile per un tempo specifico. L’istruzione può essere utile per negare gli effetti del rimbalzo, ad esempio per un interruttore.

Parametri

Ingresso

s1_In (WORD)

Dati di ingresso i cui bit verranno filtrati in base alla maschera di ingresso

n_Bits (WORD, INT, UINT)

Maschera di ingresso che specifica quali bit verranno filtrati

s3_Time (INT)

Specifica il tempo in ms durante il quale il segnale sui bit specificati deve essere stabile

Uscita

d (WORD)

Dati filtrati

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • Se il tempo di esecuzione del filtro specificato da s3_Time è inferiore a 0 o superiore a 30000.

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • Se il tempo di esecuzione del filtro specificato da s3_Time è inferiore a 0 o superiore a 30000.

Esempio

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
		bStart: BOOL:=FALSE;
		wInputData: WORD:=16#A9BC;
		wInputMask: WORD:=16#000C;
			(*2#0000000000001100 i.e. bits 2 and 3 filtered*)
		wOutputData: WORD:=0;
		iFilterTime: INT:=100;
			(*0.1 seconds*)
	END_VAR

Corpo del POU

Se bStart è TRUE, i bit dei dati applicati a s1_In vengono emessi nel seguente modo: I bit filtrati vengono scritti solo su wOutputData una volta trascorso il tempo del filtro. Vedere Diagramma tempi per la spiegazione dettagliata.

  • I bit non impostati nei dati della maschera ingresso applicati a n_Bits vengono emessi direttamente senza condizioni.

  • I bit impostati nei dati della maschera ingresso applicati a n_Bits vengono emessi dopo che il loro segnale è rimasto stabile per il periodo specificato da s3_Time in ms.

Corpo LD

wOutputdata ha il valore 16#A9B0 per 100ms, quando questo periodo è trascorso wOutputData presenta il valore 16#A9BC.

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_VARIN,,wInputData,10,2,12,4,);
B(B_VARIN,,wInputMask,10,3,12,5,);
B(B_VARIN,,iFilterTime,10,4,12,6,);
B(B_CONTACT,,bStart,4,1,6,3,);
B(B_F,FP_DEBOUNCE!,,12,0,20,6,,?DEN?Ds1_In?Dn_Bits?Ds3_Time?AENO?Cd);
B(B_VAROUT,,wOutputData,20,2,22,4,);
L(1,2,4,2);
L(6,2,12,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

If (bStart) then
    FP_DEBOUNCE(s1_In := wInputData, 
                n_Bits := wInputMask, 
                s3_Time := iFilterTime, 
                d => wOutputData);
End_if;

L'ultima revisione: 2019-12-12Feedback su questa paginaPanasonic hotline