F97_DSRC

Ricerca di dati nella tabella a 32 bit

La funzione cerca il valore specificato all'ingresso s1 in un blocco di aree a 32 bit il cui inizio è specificato all'ingresso s2_Start e la cui fine è specificata all'ingresso s3_End.

Parametri

Ingresso

s1 (DWORD, DINT, UDINT, DATE, TOD, DT)

area a 32 bit o costante equivalente per memorizzare il valore cercato

s2_Start (DWORD, DINT, UDINT, DATE, TOD, DT)

area a 32 bit iniziale del blocco

s3_End (DWORD, DINT, UDINT, DATE, TOD, DT)

area a 32 bit finale del blocco

Note

  1.  (1) Valore cercato
  2.  (2) Dati tabella a 32 bit
  • Il numero di elementi di dati corrispondenti a s1 viene memorizzato nel registro dati speciale DT90037 (sys_iNumberOfFoundMatches).

  • La posizione relativa del primo elemento di dati trovato, contando dall'area a 32 bit iniziale s2_Start, viene memorizzata nel registro dati speciale DT90038 (sys_iPositionOfFirstMatch).

  • Gli indirizzi delle variabili agli ingressi s2_Start e s3_End devono presentare la medesima tipologia di indirizzo.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se s2_Start>s3_End

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se s2_Start>s3_End

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
		start: BOOL:=FALSE;
		data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
		number_matches: INT:=0;
		position_1match: INT:=0;
	END_VAR

Corpo del POU

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

Anziché utilizzare una variabile di ingresso in questo esempio, una costante (-44) viene allocata all'ingresso s1. result viene memorizzato nei registri dati speciali DT90037 e DT90038. Le due funzioni E_MOVE copiano i risultati nelle due variabili number_matches e position_1match.

Corpo LD

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_F,F97_DSRC!,Instance,8,0,15,6,,?DEN?Ds1?Ds2_Start?Ds3_End?AENO);
B(B_VARIN,,start,6,1,8,3,);
B(B_VARIN,,-44,6,2,8,4,);
B(B_VARIN,,data_table[0],6,3,8,5,);
B(B_VARIN,,data_table[3],6,4,8,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,number_matches,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90037,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,position_1match,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90038,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

IF start then
    F97_DSRC( s1:= -44 ,
         s2_Start:= data_table[0] ,
         s3_End:= data_table[3] );
    number_matches:=DT90037;
    position1_match:=DT90038;
END_IF;

Corpo IL

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