F283_DSCAL

Interpolazione lineare di valori DINT discreti

La funzione restituisce il valore y alla posizione x eseguendo un’interpolazione lineare sulla base dei punti di riferimento circostanti Pw(xw, yw) e Pw+1(xw+1, yw+1). In questo esempio, w è il punto di riferimento più vicino, x il cui valore è più piccolo rispetto al valore di ingresso x, vale a dire che la funzione connette i singoli punti di riferimento in serie e restituisce il valore di uscita y sulla base del valore di ingresso x.

Parametri

Ingresso

EN (BOOL)

Attivazione della funzione (quando EN = TRUE, la funzione viene eseguita ad ogni ciclo del PLC)

x (DINT)

Valore di ingresso x

xy_data (DUT definita dall’utente)

Applicare il primo elemento della DUT definita dall’utente, ovvero il numero di valori xy, a questo ingresso. Vedere di seguito la descrizione della struttura della DUT.

Uscita

ENO (BOOL)

ENO viene impostato su TRUE non appena la funzione viene eseguita. Utile in caso di concatenamento di Function Block con funzioni EN.

y (DINT)

Valore di uscita y

Note

Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente: FP_SCALE Eseguire l’interpolazione lineare di valori discreti

La funzione può essere utilizzata per:

  • linearizzazione di valori misurati, p.es. con sensori non lineari

  • restituzione della temperatura di flusso di un radiatore y in relazione alla temperatura esterna x

  • ecc.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)

se il numero di punti di riferimento non è compreso tra 2 e 100, o i valori x non sono in ordine crescente (x1 < x2 < x3 < ...).

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)

se il numero di punti di riferimento non è compreso tra 2 e 100, o i valori x non sono in ordine crescente (x1 < x2 < x3 < ...).

Limitazioni del valore di uscita y:

Se il valore di ingresso x è inferiore rispetto alla coordinata x del primo punto di riferimento (P1: x < x1), l’uscita y è impostata sulla coordinata y del primo punto di riferimento (uscita y = y1, linea tratteggiata orizzontale nell’angolo superiore sinistro del grafico).

Se il valore di ingresso x è superiore rispetto alla coordinata x dell'ultimo punto di riferimento (P8: x > x8), l’uscita y viene impostata sulla coordinata y dell'ultimo punto di riferimento (uscita y= y8, linea tratteggiata orizzontale nell'angolo superiore destro del grafico).

DUT per coppie di valore xy (punti di riferimento P1, P2, ...):

I punti di riferimento (P1, P2, ...) vengono copiati sulla funzione tramite variabile di tipo DUT che contiene il numero di punti di riferimento e le xy coppie di valori (numero; x1, x2, ...; y1, y2; ...).

Struttura della DUT definita dall’utente:

  1. Elemento: numero di punti di riferimento z (INT). Il numero di punti di riferimento (coppie di valori xy) può essere impostato in un punto qualsiasi compreso tra 2 e 100. Nel grafico vengono utilizzati otto punti di riferimento (P1P8).
  2. Elemento: valori x (ARRAY[1..z] OF DINT o ARRAY[0..z-1] of DINT)

  3. Elemento: valori y (ARRAY[1..z] OF DINT o ARRAY[0..z-1] of DINT)

NOTA

I valori x devono essere immessi in ordine crescente (x1 x2 x3 ...). Se i valori x sono identici (p.es. x2 = x3 = x4) i punti di riferimento P2 (x2,y2) e P3 (x3, y3) vengono ignorati.

Overflow della funzione:

Per evitare un overflow nel calcolo, i punti di riferimento circostanti devono soddisfare le seguenti condizioni:

|ya - yb| < 2147483647

|x - xb| < 2147483647

|(ya - yb)*(x - xb)| < 2147483647

|xa - xb| < 2147483647

Precisione del calcolo:

Questa funzione può elaborare solo numeri interi. I numeri che seguono il punto decimale vengono eliminati al momento di calcolare il valore y. Per esempio, se alla posizione x, y = 511,13, la funzione restituisce il valore 511.

Esempio

DUT

Nel pool DUT vengono dichiarati il numero di punti di riferimento e le coppie di valori xy.

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
		start: BOOL:=FALSE;
			(*avtivates the function*)
		input_value: DINT:=0;
			(*input_value x*)
		measured_value: Interpolation_8 (X_values := [-5,5,15,20,30,42,45,50],Y_values := [5,-5,10,2,2(5),0,2]);
			(*number of reference
points*)
		output_value: DINT:=0;
			(*output_value y*)
		@'': @'';
	END_VAR

Qui è stata dichiarata la variabile di ingresso measured_value corrispondente al tipo di DUT precedentemente definita. L'allocazione dei valori x e dei valori y è stata eseguita nell'intestazione del POU. In ogni caso è possibile modificare i valori x e i valori y nel corpo allocando un valore alla variabile, p.es. Measuredvalues.Y_Values[3] per x.

Corpo del POU

Quando la variabile start è impostata su TRUE, la funzione viene eseguita. Per input_value alla posizione x, il valore di uscita y viene calcolato tramite interpolazione lineare tra i punti di riferimento circostanti memorizzati nella variabile measured_value.

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_VARIN,,input_value,13,2,15,4,);
B(B_VARIN,,measured_value.referencepoints,13,3,15,5,);
B(B_VAROUT,,output_value,22,2,24,4,);
B(B_CONTACT,,start,6,1,8,3,);
B(B_F,F283_DSCAL!,Instance,15,0,22,5,,?DEN?Dx?Dxy_data?AENO?Cy);
L(8,2,15,2);
L(1,2,6,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF start then
    F283_DSCAL(input_value, measured_value.referencepoints, output_value);
END_IF;

Corpo IL

L'ultima revisione: 2021-07-05Feedback su questa paginaPanasonic hotline