|
DOMANDA
Come si può effettuare una ricerca di una determinata configurazione di bit in più blocchi dati?
RISPOSTA
In STEP 7, nella libreria "TI-S7 Converting Blocks" è disponibile la funzione "TBL_FIND" (FC86), con la quale si può cercare una configurazione di bit in una tabella (DB). Questa funzione può essere poi impiegata quando i DB in cui si deve cercare corrispondono come struttura ad una tabella.
Il presente articolo descrive come si può scrivere una tale funzione con l'impiego della programmazione a loop, che ricerca una configurazione di bit in una sequenza di DB. Qui la configurazione di bit può essere costituita da tipi dati elementari opp. da strutture. Il risultato è l'indirizzo della configurazione, così come il numero di concordanze.
Descrizione della funzione
La funzione descritta ricerca una determinata configurazione di bit in una sequenza di DB. La sequenza dei DB viene definita dal numero di DB di inizio e dal numero dei DB in cui cercare. Se p. es. per il parametro IN "StartDBNumber" viene scelto il "2" e per "CountDB" un "3", allora ricerca della configurazione di bit viene effettuata nei DB con i numeri "2", "3" e "4".
Tramite un pointer ANY la configurazione viene trasferita alla funzione di confronto tramite il terzo parametro IN "Pattern". La ricerca della configurazione comincia con il primo DB (p. es. "2") ed avviene nei passi di tipo dati specificati tramite il pointer ANY. All'interno della configurazione il confronto avviene poi a byte.
La configurazione può essere formata dai tipi dati seguenti.
- Tipi dati elementari (esclusi BOOL e CHAR)
- tipo dati complesso DATE_AND_TIME
La configurazione può trovarsi nelle seguenti posizioni di memoria:
- struttura temporanea nel blocco chiamante
- campo di merker
- blocco dati
La ricerca avviene in tutti gli DB della sequenza indicata. Essa non viene interrotta dopo la prima concordanza. In questo modo è possibile definire la prima concordanza: questa viene visualizzata sui parametri OUT "DBNumber" e "ByteAddress" ed è possibile definire il numero delle concordanze trovate. Questo viene visualizzato sul parametro OUT "MatchCount".
Se un DB della sequenza indicata non esiste, esso viene ignorato e la ricerca continua con il DB successivo nella sequenza.
Descrizione delle interfacce della funzione FC 1 "FindPattern"
|
Dichiarazione |
Nome |
Tipo |
Descrizione |
|
IN |
StartDBNumber |
INT |
Primo numero del DB nel quale deve essere cercato un valore |
|
IN |
CountDB |
INT |
Numero dei DB nei quale si deve cercare a partire dal primo numero |
|
IN |
Pattern |
ANY |
Pointer ANY sulla struttura della configurazione da cercare |
|
OUT |
DBNumber |
INT |
Numero del DB dove la configurazione compare per la prima volta |
|
OUT |
ByteAddress |
DWORD |
Offset nel DB in cui la configurazione compare per la prima volta |
|
OUT |
MatchCount |
WORD |
Numero delle concordanze |
|
OUT |
Match |
BOOL |
TRUE: esiste min. una concordanza
FALSE: nessuna concordanza |
|
OUT |
Err |
BOOL |
Errore cumulativo, p. es. errore di parametrizzazione (tipo dati errato,area errata, lunghezza DB non valida) |
Avvertenza
- Nel trasferimento di array, strutture opp. pointer UDT come pointer ANY, l'editor genera un pointer ANY sul campo o sulla struttura. Qui l'identificatore di tipo BYTE è indipendente dai tipi dati delle singole variabili di campo o di struttura.
- Il pointer ANY è un puntatore di campo globale
- Poiché in tutti gli DB la ricerca avviene a byte, con un corrispondente numero di DB oppure in funzione della lunghezza dei DB il tempo del ciclo cresce.
- Se il numero delle variabili in un DB non è compatibile con la lunghezza della configurazione da ricercare, allora le "variabili Resto" vengono ignorate. P. es. la configurazione è costituita da 4 variabili INT, un DB è lungo 10 variabili INT. La ricerca comincia all'inizio del DB. Questo significa che nel DB la configurazione viene ricercata due volte (fino a 8 variabili INT). Le due ultime variabili INT vengono ignorate.
- I registri indirizzo non vengono modificati.
Descrizione dell'esempio di programma
Nel esempio di programma ha luogo la ricerca di due configurazioni diverse nei 3 DB (DB10, DB11 e DB12). I DB creati come esempio hanno lunghezza diversa ed i valori in essi contenuti sono dello stesso tipo dati "INT" così come le variabili nella configurazione di bit.
Per la ricerca delle due configurazioni, in OB 1 viene richiamata la funzione "FindPattern" (FC 1) con parametri diversi.
- Nel primo segmento viene effettuata nei DB la ricerca di una configurazione che si trova in DB 1 ed è costituita da tre variabili Integer. Le tre variabili hanno i valori 1, 2 e 3.
- Nel secondo segmento al richiamo della funzione viene trasferito una configurazione che si trova nei dati locali nella variabile temporanea "#Pattern". La configurazione in questo caso è una variabile Integer con il valore "7".
Nella tabella delle variabili si possono osservare i parametri OUT dei due richiami della funzione che si possono pilotare i valori nei tre DB della sequenza.
Il download allegato contiene il progetto STEP7 con il blocco funzionale per la ricerca della configurazione, così come i blocchi dati predisposti e le tabelle delle variabili per il test funzionale.
Find_Pattern.exe
Copiare il file "Find_Pattern.exe" in una directory separata ed avviarlo con un doppio clic. Il progetto STEP7 viene scompattato automaticamente con tutte le subdirectory corrispondenti. Poi si può aprirlo ed elaborarlo con il SIMATIC Manager.
Eseguibilità e ambiente di test L'esempio è impiegabile in tutte le CPU del SIMATIC S7-300, S7-400 e WinAC.
Nella tabella seguente sono elencati i componenti con le quali è stato realizzato quest'articolo ed è stato verificato il funzionamento descritto.
|
Ambiente di test |
Versione |
|
Piattaforma PC |
Pentium III 800MHz, 264 MB |
|
Sistema operativo |
Windows XP |
|
STEP 7 |
V5.2 |
|
CPU S7 |
CPU 315-2DP
(6ES7315-2AF03-0AB0) |
|