Vai al contenuto
PLC Forum


Step 7 Chiarimento Identificatore Variabile


arbez

Messaggi consigliati

Ciao a tutti, vorrei chiedere un chiarimento sulla gestione delle variabili in Step7.

mi è chiaro che posso utilizzare una variabile col suo indirizzo fisico o col suo identificatore es M3.4 / "ciclo_inserito", ma se all'interno di un FB volessi definire dinamicamente delle variabili (es. var1,var2,var3 ecc) senza preoccuparmi di assegnare loro l'indirizzo, tutto questo è possibile con step7?

Chiedo questo perchè dai vari esempi che ho trovato sembra che tutte le variabili vengano definite in aticipo stabilendo il rispettivo indirizzo. Se così fosse, è il programmatore che deve ricordarsi che ha utilizzato ad esempio il timer T2 in un blocco funzione e che non deve riutilizzarlo altrove?

Mi scuso in anticipo se sto chiedendo delle banalità ma provengo da altri ambienti di programmazione e mi sto "incartando" con l'ambiente Siemens.

grazie in aticipo per l'aiuto.

Link al commento
Condividi su altri siti


se è veramente così come si fa a riutilizzare blocchi funzione in altri progetti. Se io realizzo un boocco funzione che contiene dei temporizzatori, se sono obbligato a identificarli es T0,T1,T2 mi ritrovo che all'interno del progetto quei temporizzatori non posso piu utilizzarli ovviamente. Cosa ancora peggiore se voglio riutilizzae il blocco in altri progetti dove quei temporizzatori sono già utilizzati cosa faccio? dovrei cambiare a mano i riferimenti nei blocchi?

Stento a credere che sia veramente così in un progetto con anche solo qualche centinaio di segmenti la vita sarebbe molto complicata.

Link al commento
Condividi su altri siti

Ci sono più soluzioni.

La più semplice, consiste nel passare alla funzione come parametro il timer da utilizzare. Per fare questo ti basta dichiarare nelle variabili di ingresso della tua FB una variabile (una per ogni timer, intendo) di tipo "Timer".

Quando richiami l'FB, colleghi alla funzione il timer da utilizzare.

Altro sistema si basa sull'utilizzo delle funzioni SFB4 "TON" e SFB5 "TOF", che puoi inserire nella tua FB come multiistanza.

Io utilizzo spesso il seguente metodo:

Alla funzione passo in ingresso (in una variabile di tipo INT) il tempo in ms dell'ultima scansione (lo puoi leggere in OB1 nella variabile OB1_PREV_CYCLE).

Utilizzo questo tempo per incrementare una variabile STAT, creando così, con poche righe di codice, un timer molto flessibile e molto leggero.

Link al commento
Condividi su altri siti

grazie batta, sto cercando di entrare nella filosofia siemens, ok capito quello che scrivi riguardo i timer. e a livello piu generico mi sembra di capire che non posso dichiarare una variabile come come es. "pippo" lasciando a step 7 il compito di allocarla dove meglio crede, ogni volta devo deciderne io l'indirizzo, giusto?

Link al commento
Condividi su altri siti

In una funzione FC puoi dichiarare variabili IN, OUT, INOUT, TEMP.

Quando richiami il blocco devi collegare a tutte la variabili IN, OUT e INOUT il relativo parametro.

Le variabili di tipo TEMP fanno parte solo di quel blocco e, una volta abbandonato il blocco, l'area di memoria che occupavano viene considerata libera dal sistema.

Questo significa che, salvo rarissime eccezioni, qualcun altro andrà a scrivere valori in quell'area di memoria.

Non puoi quindi utilizzare le variabili TEMP per memorizzare dati.

Se richiami più volte (come spesso accade) una funzione FC con una variabile PIPPO, questa variabile rimane indipendente per ogni richiamo della funzione.

Non è possibile accede alle variabili di tipo TEMP dall'esterno della funzione.

In una funzione FB, oltre alle variabili IN. OUT, INOUT e TEMP, ci sono anche le variabili STAT.

Per quanto riguarda le variabili TEMP vale quanto già detto per le funzioni FC.

Invece le variabili IN, OUT, INOUT e STAT vengono lette e scritte nel DB di istanza che assocerai alla funzione quando andrai a richiamarla.

Non è obbligatorio collegare i parametri al richiamo della funzione FB.

Tutti i dati che vengono appoggiati al DB di istanza (variabili IN, OUT, INOUT e STAT) possono essere letti e scritti anche esternamente alla funzione, accedendo direttamente al DB di istanza.

Tutte le variabili prenderanno un preciso indirizzo, e questo quasi sempre non è un limite, ma un vantaggio.

Ma non devi occuparti tu di assegnare questo indirizzo. Lo fa in automatico il sistema, seguendo l'ordine di dichiarazione delle variabili. Ordine che puoi modificare semplicemente trascinando col mouse la variabile nella posizione che più ti piace.

Nel programma che scrivi all'interno della funzione, puoi scrivere codice facendo riferimento unicamente ai nomi delle variabili, fregandotene dell'indirizzo che è stato a loro assegnato.

Non è raro però che risulti comodo anche poter accedere ad una variabile facendo riferimento al suo indirizzo anziché al suo nome, magari perché stai lavorando con i puntatori.

Link al commento
Condividi su altri siti

  • 4 months later...

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...